-
lena tutorials - 01. && 02.IT/리버싱 2020. 7. 31. 18:41
올리디버거보다는 x64dbg가 편해서 x64dbg를 사용하였다.
01. Olly + assembler + patching a basic reverseme
02. Keyfiling the reverseme + assembler
해당문제는 1번 2번이 같은 문제이다.
실행 화면
제목 : Key File ReverseMe
내용 : Evaluation period out of date. Puchase new license.
Key 파일로 새로 인증하라는 구문이 있다.
strings 값
You really did it! Congratz !!! 가 뜨게 해야된다.
해당 주소는 40120C
순서도를 그리면
GetModuleHandleA
LoadIconA
LoadCursorA
CreateFileA ( Keyfile.dat )
MessageBoxA
ExitProcess
순서대로 들어간다.
createFileA() 함수를 검색해보았고 함수를 열거나 만드는 함수이다.
그래서 Keyfile.dat 을 만들었다.
데이터파일의 값과 비교하여 key를 본다.
invalid값으로 향하는 구문이 총 3개있는것을 알수있다.
해당구문으로 가는 비교구문또한 3개가 된다.
-
test eax,eax
-
cmp [402173], 10
-
cmp al, 0 과 cmp al,47
-
test eax, eax
EAX는 파일의 유무값이다.
ReadFile() API를 찾아보면 hFile 변수 값이라는 것을 알수있다.
파일안의 입력값을 읽는다.
입력값을 $data data 로 주었다. 그랬더니 해결되었다.
-
cmp [402173], 10
여기서 좀 해맸다.
맨처음에는 오버플로우로 인줄알고
402173 에 대한 값을 10으로 만들면 되는 줄 알았다.
그렇지만 최대 갯수로 46? 정도 까지 읽혔다..
한참을 보던중 ReadFile함수에서 402173 을 push 하는것을 발견하고
ReadFile() 함수를 docs로 찾아보았다.
lpNumberOfBytesRead 값인갓을 확인하고 A * 10 을 입력했으나
[402173] = 0A 가 되는것을보고 바로 A * 16으로 바꾸었더니 해결되었다.
-
cmp al, 0 과 cmp al,47
0 은 띄어쓰기나 파일 끝부분의 경우에 사용되는것같다고생각했다.
A * 16 을 KeyFile.dat 에 입력하였으니 이부분은 바로 넘어갔다.
cmp al,47
47 의 아스키는 'G' 이므로 G * 16 을 입력했다.
해결!
-