Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

code engn basic 17 본문

Reversing

code engn basic 17

kaka09 2017. 8. 2. 21:47

[사진]1-1



이번에는 연속 우려먹는 문제에서 탈출하였다. 키값이 주어지고 주어진 키값에 맞는 name값을 찾으라는 문제이다. 점점 마지막에 가까워지니 난이도 조절을 하는 것일까??  아무튼 이번에도 PEID로 먼저 확인절차를 가해보았다.




[사진]1-2


확인결과 패킹은 씌워져 있지 않았다. 고로 올리 디버거로 바로 확인해보았다.




[사진]1-3




올리 디버거로 실행결과 정상적으로 프로그램이 불러와졌다. 이전 과정과 똑같이 성공메세지 부분을 찾아보자 




[사진]1-4


이번 문제는 이전 문제들과 달리 실패 메세지가 존재하지 않은것 같다. Good boy, well done등 메세지가 보이는걸로 봐서 성공 했을경우만 성공 메세지가 출력하는것 같다. 그래서 성공 메세지 영역으로 들어가 어셈코드를 분석해 보았다.





[사진]1-5


분기문을 살펴보면 00404c3c 함수를 거쳐 나오면서 zero 플래그가 1이 아니면 실패로 간주하는 코드인것 같다. 일단은 직접 동적 디버깅을 시도해보면서 00404C3C 함수로 진입한 다음에 루틴 과정을 살펴보자




[사진]1-6


NAME을 입력하면서 길이가 3글자 이상만 입력이 가능하다고 한다.. 하지만 분명 문제에서는 답이 한 글자라고 했는데..?? 그래서 길이를 체크하는 어셈코드를 확인해 보았다.




[사진]1-7


해당 영역에서 길이를 체크하는것을 알 수 있다. 따라서 다음 단계를 진행하기 위해 CMP EAX, 3 ->EAX, 1 로 바꿔서 진행해야 한다.

바꾼 다음 00404C3C 함수영역으로 진입해보자




[사진]1-8


EAX와 EDX가 서로 같은지 비교하는 구문이 존재한다.  00404C3C 함수는 값이 서로 같은지 체크만 할 뿐 실제 키값 생성은 이전함수에서 처리하는것을 알 수 있다. 따라서 실제 키값을 생성하는 함수를 찾아 보았다.




[사진]1-9


0045B850 함수를 거치고 나니 NAME 1에 대한 키값이 생성되는것을 확인 할 수 있었다. 키값이 생성되는 알고리즘을 보려면 0045B850함수에 진입해야 한다.



[사진]1-10


함수에 진입하면 키를 생성하기위한 여러 어셈코드가 보이는데 [사진]1-10은  [사진]1-9에서 "63E2"를 만들어내는 알고리즘이다.  NAME 1의 아스키 코드인 31에서 더하고 곱하고 더하고 곱하고를 연산 과정을 반복하면 최종적으로 63E2 라는 키값을 만들어 낸다. 나머지 키값들도  다소 차이가 있지만 위 과정처럼 해서 만들어진다.  내부 함수를 뜯어봐서 키값으로 추정 되는 4개의 값을 도출해내었다.

 

EDX=63E2EBF0

EDX=02336B74

81C577AC 082F7A95144E148611717010 from 008045b4a0

EDI=089C5112

EBX=222D8440


도출된 키값들은 각각 해당 레지스터에 저장되고 순서는 기술되어 있는대로 값이 도출되어 레지스터에 저장된다. "81C577AC~"의 값은 008045b4a0 함수에서 가져오는것 같은데 정확히 어떤 원리로 해당 값이 도출되었는지는 나중에 분석을 해봐야겠다.  그에 반해 나머지 값들은 [사진]1-10 과 비슷하게 어떠한 연산과정을 통해 도출된 값들이다.



재밌는점은 여기서 0을 제외한(앞자리가 0이면 제외하는지 아닌지는 모름) 4글자씩만 뽑아서 서로 잇는 다는점이다.(3번째 자리 제외 3번째 자리는 8글자를 가져옴).

서로 값을 이어보면 63E2-2336-81C577AC-89C5-222D 라는 키값이 도출된다.  [사진]1-9에 나온 값하고 비교해보자 일치하는 값이 있다. 


고로 어느 특정값을 입력하게 된다면

BEDAXXXX

2F56XXXX

BC4F4368XXXXXXXXXXXXXXXXXXXXX

8A71XXXX

870BXXXX

값을 차례대로 생성한다고 할 수 있다. 정답은 1글자이고 영숫자중 하나이니 Bruteforce를 통해 알아내었다. [a~zA-Z][0-9]



[사진]1-11


F에서 서로 키값이 같은것을 알 수 있다.














'Reversing' 카테고리의 다른 글

Reversing.kr Easy_CrackMe Write Up  (0) 2017.11.01
code engn basic 18  (0) 2017.08.03
code engn basic 16  (0) 2017.08.02
code engn basic 15  (0) 2017.08.02
code engn basic 14  (0) 2017.08.02