반응형

abex crack me #5 문제 풀이

crackme5.exe
0.01MB

 

 

우선 실행파일의 구조를 파악해보면, 시작 주소는 00401000이고, Delphi 언어로 생성된 프로그램인 것을 확인할 수 있다.

이 실행파일을 실행시켜 보면 serial을 입력하라는 메시지 박스가 출력됩니다.

이 상태에서 Check 버튼을 누르면 Error 팝업이 출력됩니다. 

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

아래 구문을 하나씩 따라가 보니, DialogBoxParamA 함수에 의해 메시지 박스가 출력되고, check 버튼을 누르고, Error 팝업에서 확인 버튼을 눌렀을 때, ExitProcess 함수를 호출하는 것을 볼 수 있었습니다. 

 

이번 문제에서는 모든 intermodular call과 referenced text string을 찾아 보았지만 도움이 될만한 부분은 없었습니다. 

 

 

한참 고심하던참에 스크롤을 내려보니 아래와 같은 코드들이 보였습니다. 

004010FC 주소에서 EAX와 0을 비교하여 그 다음 코드에서 분기되는 것을 확인하였습니다. 

그래서 004010F7 주소에서 lstrcmpiA 함수가 비교하는 구문으로 추정되어, 해당 주소에 breakpoint를 걸어놓고, 

다시 실행해보았습니다.

breakpoint까지 오니 lstrcmpiA의 전달인자에 String1과 String2가 들어가는데, 

String1에 시리얼 번호가 있었습니다. 

 

위에 시리얼 번호를 아래 메시지 박스의 입력란에 입력하고, check 버튼을 누르니, 아래와 같이 Well Done! 팝업이 출력되는 것을 확인할 수 있었습니다.

반응형

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

simples crack me #6 문제 풀이  (0) 2020.08.26
abex crack me #4 문제 풀이  (0) 2020.08.25
abex crack me #3 문제 풀이  (0) 2020.08.25
abex crack me #2 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17
반응형

abex crack me #4 문제 풀이

crackme4.exe
0.02MB

 

 

우선 crack me 4번째 실행파일의 구조를 살펴보겠습니다. 

시작주소는 00401220이고, Visual Basic 언어를 이용해서 만들어진 프로그램입니다. 

그리고 파일을 실행시켜 보겠습니다. 

Serial을 구하는 문제로 보입니다. 

일단 임의로 'abcdefg'를 입력해 보겠습니다.

입력해도 Registered 버튼이 활성화가 되지 않습니다. 

좀 어려운 문제가 될 듯 한데, 실행파일을 ollydbg로 리버싱 해보도록 하겠습니다. 

Registered 버튼이 비활성화 되어 있어서, 아래 명령어 이후로 진행되지 않습니다. 

Serial에 입력란에 키를 입력할 때마다 문자열을 비교하는 이벤트가 발생할 것으로 추정됩니다. 

그래서  Search for > All intermodular Calls로 모든 함수를 보도록 하겠습니다. 

아래 함수들 중에 비교하는 함수는 딱 보입니다. __vbaStrCmp 함수입니다. 

여기에 Breakpoint를 걸어두고 Serial 입력란에 문구를 써보겠습니다.

Serial에 입력하자마다 아래 걸어둔 breakpoint에 이벤트가 발생하였습니다. 

코드를 보면 EAX, ECX가 전달인자로 들어가 __vbaStrCmp 함수에서 비교하는 것으로 보입니다. 

EAX는 Serial에 입력하는 값으로 보이고, ECX가 비교하는 문자열로 보입니다. 

"2201800"을 Serial에 입력해 보겠습니다. 

"2201800"을 입력해보면 Registered 버튼이 활성화되고, 버튼을 누르면 "Well done!" 메시지 박스가 출력되는 것을 볼 수 있습니다.

반응형

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

simples crack me #6 문제 풀이  (0) 2020.08.26
abex crack me #5 문제 풀이  (0) 2020.08.26
abex crack me #3 문제 풀이  (0) 2020.08.25
abex crack me #2 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17
반응형

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
반응형

abex crack me #2 문제 풀이

 

abexcm2.exe
0.02MB

 

 

 

 

우선 abexcm2.exe 파일의 구조를 한번 살펴 보겠습니다. 

compiler는 Microsoft Visual Basic이고, linker는 Microsoft Linker를 이용한 프로그램입니다. 

시작 주소는 0x00401238 임을 확인할 수 있습니다.

abexcm2.exe 파일을 ollydbg로 로드하여 리버싱을 해보겠습니다. 

0x00401238 주소부터 명령어가 수행됩니다. 

0040123D 주소를 수행시켜 보면 아래와 같이 팝업이 생성되고, Name, Serial 쓰는 부분이 있습니다. 

Name과 Serial에 각각 abcd, efgh를 입력하고, check 버튼을 눌러 보겠습니다.

그러면 아래와 같이 serial이 잘못 되었다고 메시지 박스가 출력됩니다. 

이 문제는 serial을 맞추는 문제인 듯 합니다. 

 

우선 "Wrong serial!" 문구를 찾아 팝업을 출력시키는 구문을 찾고, 그 구문 위쪽에 분기되는 명령어를 찾아보겠습니다.

 

"Wrong serial!" 문구를 찾기위해 Search For > All referenced text strings를 이용합니다. 

찾은 부분을 더블 클릭하면, 그 주소로 이동됩니다. 

찾은 00403458 주소의 아래 부분을 보면 MSVBVM60.rtcMsgBox를 Call하는데, 

이 부분이 "Wrong serial!" 메시지 박스를 출력하는 부분으로 추정할 수 있습니다. 

이제 이 메시지 박스 출력하게끔 하는 분기하는 명령어를 가진 코드를 찾기 위해 위쪽으로 올라가며 코드를 찾아 보겠습니다.

00403332 주소에 JE 명령어가 있는데, 이 명령어를 기준으로 코드가 분기되는 것을 볼 수 있습니다. 

00403329 주소에 __vbaVarTstEq함수가 문자열을 비교하는 구문으로 볼 수 있고, 이 비교하는 결과값에 따라 코드가 분기되는 것으로 추정할 수 있습니다 

__vbaVarTstEq 함수에 전달인자로는 바로 위쪽에 EDX, EAX 값을 사용하는 것으로 보입니다. 

EDX 값은 [EBP-44] 주소의 값을 넣고, EAX는 [EBP-34] 주소의 값을 넣는 것을 볼 수 있습니다. 

그럼 00403329 주소에 breakpoint를 걸고(F2), 이 EDX, EAX 값을 확인해 보도록 하겠습니다.

 

breakpoint를 걸었다면, ctrl + F2 키로 프로그램을 재시작하고, F9를 눌러 breakpoint까지 오도록 하겠습니다.

 

EAX 값과 EDX값을 확인할 수 있고, EAX와 EDX에 있는 0012F424 주소와 0012F434 주소를 확인해보겠습니다.

0012F424 주소와 0012F434 주소 값을 보면 0012F42C 주소의 값과 0012F43C 주소의 값이 다른 것을 볼 수 있습니다.

스택에서 0012F42C, 0012F43C 주소의 값을 보면 UNICODE로 "C5C6C7C8"과 메시지 박스에서 입력하였던 "efgh"가 있는 것을 볼 수 있습니다.

그러면 이 두 값을 비교하여 분기되는 것을 알 수 있는데, 메시지 박스에 "C5C6C7C8"를 입력해 보도록 하겠습니다.

아래와 같이 입력하고 Check 버튼을 누르면 성공적으로 Congratulations! 팝업이 출력되는 것을 확인할 수 있습니다.

반응형

'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 #3 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17

+ Recent posts