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

Reversing.kr Easy_CrackMe Write Up 본문

Reversing

Reversing.kr Easy_CrackMe Write Up

kaka09 2017. 11. 1. 07:54

[사진]1-1




정확한 키(시리얼)을 찾아야 하는 문제임을 알 수있다. Ollydbg를 이용하여 해당 파일을 디스어셈블 후 문자열을 찾아보자


[사진]1-2



문자열을 살펴본 결과 Congratulation 과 Incorrect Password가 존재하는것을 알 수 있는데 이는 분기문을 통해 출력될 메세지를 지정하는 구조라고 할 수있다. 일단 Congaratulation이라는 문자열이 PUSH되는 지점으로 가서 코드를 살펴보자



[사진]1-3


사진을 보면 조건문을 통해 00401135로 분기를 할지 말지를 정하는것을 알 수 있다. 정확한 키값을 역추적하기 위해  코드를 살펴본 결과 다음 4개의 조건문과 반복문, 서브루틴에서 키값을 검증하는것을 알아내었다.


1. 004010B0  |.  807C24 05 61  CMP BYTE PTR SS:[ESP+5],61

2. 004010C3  |.  E8 88000000   CALL Easy_Cra.00401150

3. 004010DA  |> /8A10 /MOV DL,BYTE PTR DS:[EAX] ~~~ 004010FC  |.^\75DC\ JNZ SHORT Easy_Cra.004010DA (반복루틴)

4. 0040110D  |.  807C24 04 45  CMP BYTE PTR SS:[ESP+4],45



우선 1번 조건문은 입력한 key값의 두번째가 "a"임을 묻는 조건문이다. 만약 "a"가 아니면 "incorrect Password"를 출력하는 메세지박스 쪽으로 분기한다. [esp+5] 주소에 내가 입력한 키값이 들어가 있다.


[사진]1-4


[사진]1-4 에서 보여지는 스택은 1번 조건문에 브레이크 포인트가 걸려있는 시점의 스택구조이다. 즉 esp가 0019f58이면 esp+5는 0019f5d가 된다.  따라서 입력값의 2번째 자리가  해당 시점에서는 [esp+5]임을 알 수 있다.



2번에서 사용된 서브루틴은 key값의 3번째 자리가 "5" 인지 4번째 자리가 "y"인지 검증하는 로직이 존재한다.


[사진]1-5


0040116F 주소를 살펴보면 ESI와 EDI 각각 1BYTE씩 비교하는것을 알 수 있다.  여기서 사용자 입력값은 EDI에 저장된다.  문제는 5를 입력해야하지만 몇번째 자리에 입력해야 하는것이다. 따라서 다음 사진을 참고하자


[사진]1-6


0019F95C 영역에 내가 입력한 값이 들어가 있다. [사진]1-5의 조건문에서는 0019F95E에서 1BYTE 부분만 비교한다. 시작지점이 0019F95C라면 0019F95E는 3번째 자리임을 알 수있다(리틀 엔디안 방식). 따라서  3번째 값에는 "5"가 와야한다.



[사진]1-7


다음 조건문은 0019F95F에 있는 값이 "y"인지 비교하는 조건문이다. 위에서 0019F95E가 3번째 자리임을 알았으니 F는 4번째 자리임을 알 수있다. 따라서 4번째 자리에는 "y"가 와야한다. 


[사진]1-8


해당루프는 입력한 키값 "xa5y" 4자리를 제외한 5자리부터 입력의 끝까지 반복을 돌면서 "R3versing" 이라는 문자열과 한글자씩 비교를 하는 루프문이다. 따라서 입력값의 5자리부터 R3versing을 입력해야한다.




[사진]1-9


마지막 조건문은 입력값의 첫번째 자리가 'E"인지 비교한다. 따라서 각각의 루틴을 통해 도출된 키값을 조합하면 다음과 같다.

"Ea5yR3versing" 프로그램을 실행시켜 저 문자열을 입력해보자


[사진]1-10














'Reversing' 카테고리의 다른 글

Reversing.kr Easy_UnpackMe Write up  (0) 2017.11.02
Reversing.kr Easy_Keygen Write Up  (0) 2017.11.01
code engn basic 18  (0) 2017.08.03
code engn basic 17  (0) 2017.08.02
code engn basic 16  (0) 2017.08.02