외로운 Nova의 작업실

creackme 시리즈 - 5(crackme13.exe) 본문

Computer App Penetesting/Reversing

creackme 시리즈 - 5(crackme13.exe)

Nova_ 2023. 2. 14. 23:18

- 문제인식

 

Crackme 13.exe
0.01MB

 

 

먼저 실행해보겠습니다.

1234를 넣고 check 버튼을 눌러보겠습니다. 뭐.. 아무일도 안일어나 나는 것 같습니다. about 버튼을 눌러보겠습니다.

알맞는 키를 찾으라고 나오네요 키를 찾는 문제입니다.

 

- 문제풀이 설계

strcmp 함수 call하는 부분이나 메시지를 내보내는 함수부분에 bp를 걸고 알맞는 키를 알아보겠습니다.

 

- 리버싱

 먼저 콜 함수들을 보겠습니다.

messageBoxA로 축하한다는 메시지를 내보내는 부분이 있습니다. 이 부분으로 덤프해보겠습니다.

먼저 위에 첫번째 분기문 부분에 bp를 걸고 살펴보겠습니다.

CPU Disasm
Address   Hex dump          Command                                              Comments
00401052  |.  6A 00         PUSH 0                                               ; /IsSigned = FALSE
00401054  |.  6A 00         PUSH 0                                               ; |pSuccess = NULL
00401056  |.  68 B90B0000   PUSH 0BB9                                            ; |ItemID = 3001.
0040105B  |.  FF75 08       PUSH DWORD PTR SS:[ARG.1]                            ; |hDialog => [ARG.1]
0040105E  |.  E8 31010000   CALL <JMP.&USER32.GetDlgItemInt>                     ; \USER32.GetDlgItemInt
00401063  |.  BE 00304000   MOV ESI,OFFSET 00403000                              ; ASCII "Oqiqb4EhM/4jISMjlzQf6kpGQwLrG+GEIY4bPc0JL/jWBfNLejmbme3garIrG4ngbXtWQY3Y2VdbvRxleHU9aGxFRLXkh5BDGVbm5gAAhGeBMBl65XKmZ9sbNn4xxi3cbD7M02MpwZ3BpN4lG3xyFPsofbhXbMu8Z/1rlqfdul/KLaGmkllOYRj9Mhnumqw1f464dK948rgz5JxpeSQHN45GlMNjb717x6IeCCMa6gN+Y"...
00401068      833E 00       CMP DWORD PTR DS:[ESI],0
0040106B  |.  75 04         JNE SHORT 00401071
0040106D  |.  EB 0E         JMP SHORT 0040107D
0040106F  |.  EB 0C         JMP SHORT 0040107D
00401071  |>  8B1E          MOV EBX,DWORD PTR DS:[ESI]
00401073  |.  E8 97000000   CALL 0040110F
00401078  |.  83C6 04       ADD ESI,4
0040107B  |.^ EB EB         JMP SHORT 00401068
0040107D  |>  3D BF96287A   CMP EAX,7A2896BF
00401082  |.  75 14         JNE SHORT 00401098
00401084  |.  6A 40         PUSH 40                                              ; /Type = MB_OK|MB_ICONASTERISK|MB_DEFBUTTON1|MB_APPLMODAL
00401086  |.  68 30354000   PUSH OFFSET 00403530                                 ; |Caption = "In the Bin"
0040108B  |.  68 3B354000   PUSH OFFSET 0040353B                                 ; |Text = "Congratulation, you found the right key"
00401090  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                            ; |hOwner
00401093  |.  E8 02010000   CALL <JMP.&USER32.MessageBoxA>                       ; \USER32.MessageBoxA

보게되면 EAX와 7A2896BF와 비교하고 같지않다면 멀리 보내버리고 있습니다. EAX가 어디서 오는지 알아보기 위해 위쪽으로 분석해보면 call getDlgItemInt 함수가 EAX값을 주는 것으로 확인할 수 있습니다. GetDlgItemInt 함수를 알아보겠습니다.

https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getdlgitemint

 

GetDlgItemInt 함수(winuser.h) - Win32 apps

대화 상자에서 지정된 컨트롤의 텍스트를 정수 값으로 변환합니다.

learn.microsoft.com

 

대화상자에서 텍스트를 정수값으로 변환한다고 합니다. 즉, 1234를 입력했을때 1234를 정수값으로 변환하는 것을 알 수 있습니다. 1234를 아스키코드가 아닌 정수값으로 받아들인다는 이야기입니다.

1234가 HEX값 4D2이기때문에 실제 1234를 넣고 돌렸을떄 EAX에 4D2값이 있는 것을 확인할 수 있습니다.

그렇다면 7A2896BF는 10진수로 몇일까요?

2,049,480,383 인것으로 확인할 수 있습니다. 이를 한번 넣어봅시다.

정확한 값이라고 나옵니다.

 

- 크랙

CMP EAX,7A2896BF 부분을 CMP EAX, EAX로 변경해줍니다.

저장후 실행해보겠습니다.

크랙이 완료되었습니다.

Crackme 13(cracked).exe
0.01MB

'Computer App Penetesting > Reversing' 카테고리의 다른 글

creackme 시리즈 - 4(crackme12.exe)  (0) 2023.02.14
creackme 시리즈 - 3(crackme11.exe)  (0) 2023.02.14
RP 2006년 버전 크랙  (0) 2023.02.05
creackme 시리즈 - 2(crackme10.exe)  (4) 2023.01.26
C++와 어셈블리어  (0) 2023.01.23
Comments