關於程序自校驗的一些分析

當我們脫完殼後發現,程序提示被非法修改,我們知道它是有自校驗的。在平時工作中,我們脫完殼修復完畢而且如果有附加數據加上附加數據之後,如果還是沒法將程序跑起來,那麼我們在保證沒有找錯OEP的前提下,就需要考慮程序設置了自校驗。對於程序存在的自校驗,我們可以打開我們脫殼後的程序和未脫殼的程序進行對比,先將未脫殼的程序操作找到真正的OEP,然後開始同步F8對比,看它們的跳轉是怎麼進行的。

下面是一個程序的自校驗分析:

對於這次的自校驗,我們通過觀看教學,知道需要在CreateFileA下斷點,然後進行運行對比分析。那麼我們在自己做的時候,並沒有使用這個函數而是單步比對,然後發現他們前期步驟都一樣,只是在經過一些運算之後,ESI 和 EDI的值不太一樣,而且再運行幾行以後,發現寄存器中的值大多都不一樣了,但是,要注意的是,即使我們發現寄存器的值不一樣,但是我們的運行代碼和跳轉與否是一致的,那麼,我們發現在經過一個call之後,程序就會跑飛,那麼,在這個call中肯定暗藏玄機,我們就需要進到這個call中去看一下,進去以後,我們發現,他是有一段代碼,裏面有着運行正常和非法修改的提示,然後我們單步跟,發現在一個call之後,出現了一個test eax,eax  ,然後程序會在後面的一個跳轉發生變化,根據我們的查看可以發現,這裏eax需要爲1,那麼,我們對這個call可以直接非法修改掉,比如說直接改爲mov eax,1,經過保存,我們發現可以正常執行

MD5自校驗  :
將程序的一部分代碼或者全部代碼進行MD5計算,得出MD5的值,然後再在程序中進行比對,達到保護效果。
大小自校驗 :
這個應該是應用於程序加殼之後的自校驗,因爲現在的殼一般是壓縮和加密兩個功能兼備,這就導致加密殼破解掉以後程序的大小也會發生相應的變化,那麼通過比對自身的文件大小,就可以判斷程序是否被破解。

那麼,我們可以將未脫殼程序的空字節代碼進行一點點的修改,然後再次運行程序,發現無法運行,那麼,它就是程序的MD5自校驗了。

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