1. 程式人生 > >OllyDbg 使用筆記 (七)

OllyDbg 使用筆記 (七)

由於 出現 pop 提示 右鍵 code 系列 每一個 超過

OllyDbg 使用筆記 (七)


參考

書:《加密與解密》

視頻:小甲魚 解密系列 視頻


演示樣例程序下載:http://pan.baidu.com/s/1gvwlS



暴力破解


觀察這個程序。能夠從程序標題的<unregistered 個跟 About 中的 <Unregistered Version>入手


用OD打開程序。右鍵-->查找-->全部參考文本字串


圖片1

技術分享



在打開的界面中。將滾動欄移到追上面(由於是從光標處開始搜索的),右鍵查找文本,先搜索<unregistered


圖片2

技術分享



雙擊找到的文本到代碼處。


005CC81B   .  E8 9C5FEDFF   call    004A27BC
005CC820   .  A1 8CEB6000   mov     eax, dword ptr [60EB8C]
005CC825   .  8038 00       cmp     byte ptr [eax], 0
005CC828   .  0F85 07010000 jnz     005CC935
005CC82E   .  A1 DCF16000   mov     eax, dword ptr [60F1DC]
005CC833   .  8038 00       cmp     byte ptr [eax], 0
005CC836   .  0F85 F9000000 jnz     005CC935
005CC83C   .  68 70CB5C00   push    005CCB70                         ;  ASCII "PC Surgeon <unregistered - "
005CC841   .  D905 3CCA5C00 fld     dword ptr [5CCA3C]
005CC847   .  A1 8CEC6000   mov     eax, dword ptr [60EC8C]
005CC84C   .  DC20          fsub    qword ptr [eax]
005CC84E   .  83C4 F4       add     esp, -0C
005CC851   .  DB3C24        fstp    tbyte ptr [esp]
005CC854   .  9B            wait


細致查看。前面的跳轉,能夠發現 jnz 005CC935 非常關鍵。在前面一個jnz 005CC935處下斷點,又一次執行程序,發現第這兩個jnz 005CC935 未跳轉。


把第一個cmp byte ptr [eax], 0 改成 cmp byte ptr [eax], 1 使跳轉實現。


依照相同的方法,搜索<Unregistered Version>,跟改跳轉實現。就可以破解程序。




其它方法


再來看看這段代碼:


005CC811   .  E8 12B9E6FF                   call    <jmp.&shell32.ShellExecuteA>     ; \ShellExecuteA
005CC816   >  B8 58CB5C00                   mov     eax, 005CCB58                    ;  ASCII "Show: splash"
005CC81B   .  E8 9C5FEDFF                   call    004A27BC
005CC820   .  A1 8CEB6000                   mov     eax, dword ptr [60EB8C]
005CC825   .  8038 00                       cmp     byte ptr [eax], 0
005CC828   .  0F85 07010000                 jnz     005CC935
005CC82E   .  A1 DCF16000                   mov     eax, dword ptr [60F1DC]
005CC833      8038 00                       cmp     byte ptr [eax], 0
005CC836      0F85 F9000000                 jnz     005CC935
005CC83C   .  68 70CB5C00                   push    005CCB70                         ;  ASCII "PC Surgeon <unregistered - "
005CC841   .  D905 3CCA5C00                 fld     dword ptr [5CCA3C]
005CC847   .  A1 8CEC6000                   mov     eax, dword ptr [60EC8C]
005CC84C   .  DC20                          fsub    qword ptr [eax]
005CC84E   .  83C4 F4                       add     esp, -0C
005CC851   .  DB3C24                        fstp    tbyte ptr [esp]
005CC854   .  9B                            wait



這裏有兩個jnz 005CC935 。推斷分別推斷[[60EB8C]] 跟 [[60F1DC]] 是否為0。 從 fld dword ptr [5CCA3C] 能夠發現[5CCA3C]中是15.0 即試用天數。

細致分析能夠發現第一個jnz為推斷是否正常,第二個為推斷是否超過15天使用期。

所以[[60EB8C]]的值很關鍵。

要找出改[[60EB8C]]的值的地方。


選中mov eax, dword ptr [60EB8C] , 右鍵-->查找參考-->地址常量。就可以列出全部使用了這個地址的命令的位置。


圖片3

技術分享




在此窗體右鍵-->在每一個命令上設置斷點。又一次執行程序。


圖片4

技術分享




按F9,來到此處:


005C2BF6   .  8B15 8CEB6000                 mov     edx, dword ptr [60EB8C]          ;  pcsurgeo.00610C4A
005C2BFC   .  8802                          mov     byte ptr [edx], al
005C2BFE   .  A1 8CEB6000                   mov     eax, dword ptr [60EB8C]
005C2C03   .  8038 00                       cmp     byte ptr [eax], 0
005C2C06   .  75 0D                         jnz     short 005C2C15
005C2C08   .  E8 6307EEFF                   call    004A3370
005C2C0D   .  A1 8CEC6000                   mov     eax, dword ptr [60EC8C]
005C2C12   .  DD18                          fstp    qword ptr [eax]
005C2C14   .  9B                            wait


看到 mov byte ptr [edx], al 正是給[[60EB8C]] 賦值的地方,把它改成 mov byte ptr [edx], 1。就可以破解。

(在保存過程中會出現 重定位提示窗體,由於mov byte ptr [edx], al改成mov byte ptr [edx], 1後代碼變多了。要重定位才可能正常執行。這裏能夠先不用管它。)





OllyDbg 使用筆記 (七)