Reverse L07
'Wargame > CodeEngn (Basic)' 카테고리의 다른 글
Reverse L09 (0) | 2012.11.18 |
---|---|
Reverse L08 (0) | 2012.11.18 |
Reverse L06 (0) | 2012.11.17 |
Reverse L05 (0) | 2012.11.17 |
Reverse L04 (0) | 2012.11.16 |
Reverse L07
어떻게 변하는지 찾으면 됩니다.
문제 파일을 받고 실행해봅니다.
아무렇게나 입력하고 check를 눌러봅니다.
틀렸다고 뜨고 종료됩니다.
OllyDbg로 열어봅니다.
String을 통해 비교구문을 찾아갑니다.
lstrcmpiA 이후 JE를 통해 분기합니다.
위쪽으로 따라가 봅니다.
많은 함수가 보입니다.
하나씩 따라가 보겠습니다.
GetDlgItemTextA를 통해 BABB04F7.00402324에 입력했던 serial을 저장합니다.
GetVolumeInformationA를 통해 hard disk의 volume 값을 읽어옵니다.
GetVolumeInformationA 함수의 원형입니다.
lpRootPathName으로 넘어간 path의 root path의 volume 값을 읽어들이고
lpVolumeNameBuffer가 가리키는 주소에 저장합니다.
위의 프로그램에선 lpRootPathName이 null 이므로
프로그램이 위치한 path의 root path를 넘기게 됩니다.
제가 실행한 환경의 root path는 C:\ 입니다.
C:\의 volume 값을 설정하지 않은 상태이므로 null을 return합니다.
이전 함수에서 넘겨받은 volume 값과 "4562-ABEX"를 연결합니다.
연결한 string은 BABB04F7.0040225c에 저장합니다.
연결한 string의 offset 0x0에서 0x4까지의 값을 1씩 2번 증가시킵니다.
"L2C-5781"과 BABB04F7.00402000 주소의 string을 연결합니다.
BABB04F7.00402000에는 null로 가득 차 있습니다.
연결한 string을 BABB04F7.00402000에 저장합니다.
BABB04F7.0040225c의 string과 BABB04F7.00402000의 string을 연결합니다.
연결한 string은 BABB04F7.00402000에 저장합니다.
위에서 연산 완료한 BABB04F7.00402000의 string과 입력했던 serial을 비교한 후 분기합니다.
연산 결과 생성된 string을 입력해봅니다.
완성된 string은 "L2C-57816784-ABEX" 입니다.
Serial이 맞다고 메시지가 뜹니다.
Reverse L09 (0) | 2012.11.18 |
---|---|
Reverse L08 (0) | 2012.11.18 |
Reverse L06 (0) | 2012.11.17 |
Reverse L05 (0) | 2012.11.17 |
Reverse L04 (0) | 2012.11.16 |