OllyDbg 使用筆記 (十一)
參考
書:《加密與解密》
視頻:小甲魚 解密系列 視頻
示例程序下載地址:http://pan.baidu.com/s/1mgxCtsc
此程序可以從註冊時未輸入last name 產生的 提示信息入手。
圖片1
查找所有參考文本字串,搜索“Enter a Last”,可以看到:
圖片2
觀察前後的字符串,可以發現這堆字符串的最底下,ASCII "Registration Key accepted!" 與ASCII "Registration Key Failed!" 很關鍵
點擊ASCII "Registration Key accepted!" 查看代碼。
004A5829 . 64:8910 mov dword ptr fs:[eax], edx
004A582C . 68 41584A00 push 004A5841
004A5831 > 8B45 CC mov eax, dword ptr [ebp-34]
004A5834 . E8 5BE8F5FF call 00404094
004A5839 . C3 retn
004A583A .^ E9 E9EFF5FF jmp 00404828
004A583F .^ EB F0 jmp short 004A5831
004A5841 . C645 F3 01 mov byte ptr [ebp-D], 1
004A5845 . 807D 08 00 cmp byte ptr [ebp+8], 0
004A5849 . 75 0A jnz short 004A5855
004A584B . B8 A85A4A00 mov eax, 004A5AA8 ; ASCII "Registration Key accepted!"
004A5850 . E8 A339F9FF call 004391F8
004A5855 > A1 F4535A00 mov eax, dword ptr [5A53F4]
004A585A . C600 00 mov byte ptr [eax], 0
004A585D . EB 17 jmp short 004A5876
004A585F > 807D 08 00 cmp byte ptr [ebp+8], 0
004A5863 . 75 11 jnz short 004A5876
004A5865 . 6A 30 push 30 ; /BeepType = MB_ICONEXCLAMATION
004A5867 . E8 C829F6FF call <jmp.&user32.MessageBeep> ; \MessageBeep
004A586C . B8 CC5A4A00 mov eax, 004A5ACC ; ASCII "Registration Key Failed!"
我們可以發現這段代碼很有dephi特點,用push 跟 retn結合 來實現jmp,例如上面代碼中的004A582C跟004A5839。
我們先在004A5829下斷點,重新運行程序,嘗試註冊程序。但是可以發現,程序並沒有斷下來,彈出error窗口。
圖片3
我們可以看看下斷點處上面的代碼。
我們可以在004A5120處下斷點,重新運行程序,嘗試註冊程序。可以發現程序斷在了004A5120,按F8單步運行
運行到004A5461 call 0040A070時會彈出error窗口:
爲了繼續往下運行在此處下斷點,從新運行程序,運行到004A5461 ,把call 0040A070改成nop繼續運行。
改變後面的跳轉實不實現,使得程序能運行到此處,就可完成註冊。
004A584B . B8 A85A4A00 mov eax, 004A5AA8 ; ASCII "Registration Key accepted!"