[反彙編練習] 160個CrackMe之023

[反彙編練習] 160個CrackMe之023.

本系列文章的目的是從一個沒有任何經驗的新手的角度(其實就是我自己),一步步嘗試將160個CrackMe全部破解,如果可以,通過任何方式寫出一個類似於註冊機的東西。

其中,文章中按照如下邏輯編排(解決如下問題):

1、使用什麼環境和工具

2、程序分析

3、思路分析和破解流程

4、註冊機的探索

----------------------------------

提醒各位看客: 如果文章中的邏輯看不明白,那你一定是沒有親手操刀!OD中的跳轉提示很強大,只要你跟蹤了,不用怎麼看代碼就理解了!

----------------------------------

1、工具和環境:

WinXP SP3 + 52Pojie六週年紀念版OD + PEID + 彙編金手指。

160個CrackMe的打包文件。

下載地址: http://pan.baidu.com/s/1xUWOY 密碼: jbnq

注:

1、Win7系統對於模塊和程序開啓了隨機初始地址的功能,會給分析帶來很大的負擔,所以不建議使用Win7進行分析。

2、以上工具都是在52PoJie論壇下的原版程序,NOD32不報毒,個人承諾絕對不會進行任何和木馬病毒相關內容。

wps_clip_image-880

2、程序分析:

想要破解一個程序,必須先了解這個程序。所以,在破解過程中,對最初程序的分析很重要,他可以幫助我們理解作者的目的和意圖,特別是對於註冊碼的處理細節,從而方便我們反向跟蹤和推導。

和上一節一樣,打開CHM,選擇第23個Chafe.1.EXE,保存下來。運行程序,程序界面如下:

1

 

注:它是沒有信息框提示錯誤的,彈出的信息框是About按鈕。

 

3、思路分析和破解流程

PEID:  MASM32 / TASM32

步驟:

1、打開OD,將exe拖到OD窗口中,等程序暫停後,直接點擊運行按鈕(F9),不用理會。

2、在exe中輸入Name: bbdxf  Key:123123。

3、在OD中反彙編窗口,右鍵->中文搜索引擎->智能搜索。

2

我們很容易發現了正確文本提示內容:YES!You found your serial!

右鍵->Follow。大概地瀏覽下代碼:

00401294  |.  E8 BA010000   call 00401453                            ;  Case 113 (WM_TIMER) of switch 0040123F
00401299  |.  0FBE05 663140>movsx eax,byte ptr ds:[0x403166]         ;  // 4
004012A0  |.  3A05 67314000 cmp al,byte ptr ds:[0x403167]
004012A6  |.  75 06         jnz short 004012AE
004012A8  |.  33C0          xor eax,eax
004012AA  |.  C9            leave
004012AB  |.  C2 1000       retn 0x10                                ;  // 返回到User32模塊
004012AE  |>  A2 67314000   mov byte ptr ds:[0x403167],al
004012B3  |.  83F8 10       cmp eax,0x10
004012B6  |.  74 16         je short 004012CE                        ;  // 關鍵跳轉
004012B8  |.  68 65304000   push 00403065                            ; /Your serial is not valid.
004012BD  |.  FF35 7C314000 push dword ptr ds:[0x40317C]             ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012C3  |.  E8 66020000   call <jmp.&USER32.SetWindowTextA>        ; \SetWindowTextA
004012C8  |.  33C0          xor eax,eax
004012CA  |.  C9            leave
004012CB  |.  C2 1000       retn 0x10
004012CE  |>  68 7F304000   push 0040307F                            ; /YES! You found your serial!!
004012D3  |.  FF35 7C314000 push dword ptr ds:[0x40317C]             ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012D9  |.  E8 50020000   call <jmp.&USER32.SetWindowTextA>        ; \SetWindowTextA
004012DE  |.  33C0          xor eax,eax
004012E0  |.  C9            leave
004012E1  |.  C2 1000       retn 0x10

是不是很容易就發現了關鍵跳轉!!( PS: 純彙編寫的代碼真少,隨便上下翻一下,代碼就看完了! )

選中 je short 004012CE,按下空格鍵,修改爲強制跳轉 jmp 004012CE ,然後回到exe程序,隨意輸入Name和Key,哈哈,成功了!

3

 

4、註冊機的探索

就如同About裏面說的,這個程序真正想破解要找到註冊碼而不是爆破!我們嘗試一下:

首先,根據文本提示  Case 113 (WM_TIMER) of switch 0040123F,我們知道他是通過定時器觸發檢測,我們在這裏下斷,F8單步跟蹤:

call 00401453內容:

00401453  /$  55            push ebp                                 ;  // OnTimer的響應函數
00401454  |.  8BEC          mov ebp,esp
00401456  |.  83C4 FC       add esp,-0x4
00401459  |.  8925 A0314000 mov dword ptr ds:[0x4031A0],esp
0040145F  |.  8D25 52314000 lea esp,dword ptr ds:[0x403152]          ;  // 函數表頭
00401465  |.  0FBE05 663140>movsx eax,byte ptr ds:[0x403166]
0040146C  |.  03E0          add esp,eax
0040146E  \.  C3            retn

dd 0x403152

00403152  0040146F  Chafe_1.0040146F
00403156  00401063  Chafe_1.00401063
0040315A  00401361  Chafe_1.00401361
0040315E  0040149C  Chafe_1.0040149C
00403162  004014BA  Chafe_1.004014BA

call ret 返回到這裏:

00401361   .  8D3D 8C314000 lea edi,dword ptr ds:[0x40318C]          ;  bbdxf
00401367   .  0FBE05 683140>movsx eax,byte ptr ds:[0x403168]         ;  \n
0040136E   .  03F8          add edi,eax
00401370   .  FE05 68314000 inc byte ptr ds:[0x403168]
00401376   .  A1 88314000   mov eax,dword ptr ds:[0x403188]
0040137B   .  8B25 A0314000 mov esp,dword ptr ds:[0x4031A0]
00401381   .  40            inc eax
00401382   .  FF05 88314000 inc dword ptr ds:[0x403188]
00401388   .  3307          xor eax,dword ptr ds:[edi]
0040138A   .  A3 88314000   mov dword ptr ds:[0x403188],eax
0040138F   .  803D 68314000>cmp byte ptr ds:[0x403168],0x10
00401396   .  75 07         jnz short 0040139F
00401398   .  8005 66314000>add byte ptr ds:[0x403166],0x4
0040139F   >  C9            leave
004013A0   .  C3            retn

接着返回到這裏:

00401299  |.  0FBE05 663140>movsx eax,byte ptr ds:[0x403166]         ;  // 4
004012A0  |.  3A05 67314000 cmp al,byte ptr ds:[0x403167]
004012A6  |.  75 06         jnz short 004012AE
004012A8  |.  33C0          xor eax,eax
004012AA  |.  C9            leave
004012AB  |.  C2 1000       retn 0x10                                ;  // 返回到User32模塊
004012AE  |>  A2 67314000   mov byte ptr ds:[0x403167],al
004012B3  |.  83F8 10       cmp eax,0x10
004012B6  |.  74 16         je short 004012CE                        ;  // 關鍵跳轉
004012B8  |.  68 65304000   push 00403065                            ; /Your serial is not valid.
004012BD  |.  FF35 7C314000 push dword ptr ds:[0x40317C]             ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012C3  |.  E8 66020000   call <jmp.&USER32.SetWindowTextA>        ; \SetWindowTextA
004012C8  |.  33C0          xor eax,eax
004012CA  |.  C9            leave
004012CB  |.  C2 1000       retn 0x10
004012CE  |>  68 7F304000   push 0040307F                            ; /YES! You found your serial!!
004012D3  |.  FF35 7C314000 push dword ptr ds:[0x40317C]             ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012D9  |.  E8 50020000   call <jmp.&USER32.SetWindowTextA>        ; \SetWindowTextA
004012DE  |.  33C0          xor eax,eax
004012E0  |.  C9            leave
004012E1  |.  C2 1000       retn 0x10

這裏面大量地使用了【0x403188】一類的全局變量,但是他們的意思和內容都不是很明確,雖然流程很明確,但是還是不是很明白是什麼意思。所以,暫時就沒有算法了!

BY  笨笨D幸福

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章