반응형

abex crack me #3 문제 풀이

abexcm3.exe
0.01MB

 

 

우선 실행파일 구조를 살펴보겠습니다. 

시작 주소는 00401000 이고, Delphi 언어를 이용해서 만들어진 실행파일 이라는 것을 알 수 있습니다. 

 

crackme 3번째 실행 파일을 실행시켜 보겠습니다. 

처음에 메시지 박스가 출력합니다. 

keyfile 체크를 위해 확인 버튼을 누르라고 합니다. 

한번 눌러보겠습니다.

누르면 Error 메시지 박스가 출력됩니다. 

그럼 이제 실행 파일을 ollydbg로 리버싱해보도록 하겠습니다.

코드를 보면 간단하다는 것을 알 수 있습니다. 

우선 MessageBoxA 함수를 호출하여 메시지 박스를 출력합니다. 

그리고 0040102A 주소에서 CreateFileA 함수를 호출하여 파일이 있는지 확인합니다. 

 

00401037 주소에서 JE 명령어로 분기가 이루어 지고, 00401049 주소에서도 JNZ 명령어로 분기가 이루어집니다. 

우선 첫번째 분기를 보면 EAX와 -1을 비교하여 동일하면 00401075 주소로 분기됩니다. 

0040102A에 breakpoint를 걸고 CreateFileA 함수를 call 하기 전과 후의 EAX 값을 비교해 봅니다. 

call 하기 전에는 값이 1이고, call 한 이후에는 값이 -1임을 알 수 있습니다. 

abex.l2c 파일의 유무에 따라 return 되는 값이 달라지는 듯 합니다. 

지금은 해당 파일이 없어서 -1로 return되었는데, 실행파일이 있는 위치에 abex.l2c라는 파일을 생성하고, 아래 구문을 다시 실행시켜 비교해 보겠습니다. 

메모장으로 abex.l2c 파일을 생성하고 다시 실행해 보겠습니다.

다시 실행해보면 CreateFileA 함수를 실행한 이후 EAX 값이 B0으로 변경된 것을 볼 수 있고, 

JE 명령어 바로 밑에 코드로 가는 것을 확인할 수 있습니다.

 

그리고 GetFileSize 함수에서 반환된 EAX 값과 12를 비교합니다. 

결과 값에 따라 JNZ 명령어로 분기됩니다. 

현재는 파일의 사이즈가 0이기 때문에 비교한 이후 바로 아래 구문이 아닌 00401060 주소로 이동하게 됩니다. 

그럼 파일의 사이즈를 12로 맞추도록 하겠습니다. 

주의할 점은 12가 원래는 16진수인 0x12이고, 10진수로 하면 18이 됩니다. 

문자 하나당 1바이트라 총 18개의 문자를 입력하고, 다시 실행해 봅니다.

다시 실행해보면 EAX는 0x12로 되어 JNZ 명령어 구문에서 바로 아래 구문으로 이동되어 실행됩니다. 

그리고는 "Well done!" 메시지 박스를 출력하게 됩니다.

반응형

'WarGame > crack me' 카테고리의 다른 글

simples crack me #6 문제 풀이  (0) 2020.08.26
abex crack me #5 문제 풀이  (0) 2020.08.26
abex crack me #4 문제 풀이  (0) 2020.08.25
abex crack me #2 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17

+ Recent posts