외로운 Nova의 작업실
creackme 시리즈 - 5(crackme13.exe) 본문
- 문제인식
먼저 실행해보겠습니다.
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
대화상자에서 텍스트를 정수값으로 변환한다고 합니다. 즉, 1234를 입력했을때 1234를 정수값으로 변환하는 것을 알 수 있습니다. 1234를 아스키코드가 아닌 정수값으로 받아들인다는 이야기입니다.
1234가 HEX값 4D2이기때문에 실제 1234를 넣고 돌렸을떄 EAX에 4D2값이 있는 것을 확인할 수 있습니다.
그렇다면 7A2896BF는 10진수로 몇일까요?
2,049,480,383 인것으로 확인할 수 있습니다. 이를 한번 넣어봅시다.
정확한 값이라고 나옵니다.
- 크랙
CMP EAX,7A2896BF 부분을 CMP EAX, EAX로 변경해줍니다.
저장후 실행해보겠습니다.
크랙이 완료되었습니다.
'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 |