OllyDbg 使用筆記 (十八)

OllyDbg 使用筆記 (十八)


參考

書:《加密與解密》

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


示例程序下載地址:http://pan.baidu.com/s/1pJjZowj


這次這個程序跟原來的程序不一樣,它會對自身的代碼進行加密解密。


程序運行前有一個nag窗口,破解目標去除這個nag窗口。

圖片1


OD加載這個程序,搜索nag窗口的文字。可以找到:

圖片2


但是在此處下斷點後,重新運行程序,發現程序沒有在下斷點的地方停下來。分析可以知道,這個程序有些狡詐,我們搜到的那個貌似產生nag窗口的代碼可能是用來騙我們的。真正的代碼可能被加密了,我們直接搜索搜不到。


重新加載程序,可以發現程序的代碼有些跟平常不太一樣的地方:


圖片3



圖片4



這是因爲OD分析錯誤了。可以右鍵-->分析-->從模塊中刪除分析。就可以看到正確的指令

圖片5



去除分析後我們可以看到下面代碼:

圖片6



F8單步調試程序,F7進入call 0040130F

我們可以看到下面代碼:

圖片7



可以發現,0040130F這個函數是一個對程序自生代碼進行修改的函數,即對函數自己代碼進行解密的函數,

它解密的位置在00401000到00401218=<jmp.&USER32.BeginPaint>,解密方式是 xor byte ptr[eax],5A。


可以發現call 0040130F正是用來解密call 00401011的代碼。


F8運行程序,可以發現call 00401011會產生nag窗口和程序主窗口。


程序運行程序,F7進入call 00401011,窗口代碼。


可以發現00401011函數中,先是對自己函數的代碼進行(edi爲00401011),進行解密。

圖片8



call edi就產生nag窗口的代碼。


程序運行程序,進入call edi。


圖片9



可以發現call edi 代碼,中有一段是產生窗口的代碼,但窗口的標題跟內容都是亂碼。再看看代碼,這段代碼前是一段對對00403000到00403128進行解密的代碼,正好產生窗口的標題跟內容都在解密的範圍內。然程序運行到00401011,即可發現窗口標題跟內容所指向的區域變成的nag窗口的信息。F8運行,可以發現這正是產生nag窗口的地方。接着運行程序,我們可以發發現是對程序主窗口產生代碼的解密,跟對前面解密後的代碼在加密。


破解思路,想讓messagebox不出現可以把MessageBox中的hWnd參數改成一個不可能的值,例如1。

即把push 0 改成 push 1


產生nag窗口函數的push 0 在0040101D ,這個地方的代碼被加密的,程序解密的地方在00401035

它mov word ptr [0040101D], 6A (6A 即6A 00 即 push 0),要把它改成mov word ptr [0040101D], 6A01即把401039由00改成01

但是mov word ptr [0040101D], 6A在 00401035 ,這個地方又被call 0040130F加密,加密的方法是xor  xxx, 5A,所以要把401039由5A改成5B(xor中3個數是可以知道其中2個推出另外一個,例如01 xor 5A = 5B ,5B xor 01 = 5A)即可完成破解。















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