17. OD-带有多态、变形的程序进行打补丁去掉nag(分析xor加密解密、自身修改代码的程序)
?
?
win32程序?
此程序打開會彈出一個neg,確定后彈出主對話框
查找字符串,下斷點,發現程序并沒有進斷點,這些匯編是坑爹的,故意搞混我們
此程序非主流,一般我們寫的程序均為push ebp
往上看代碼,發現這些字符均不是代碼,好像進入數據段一樣,因為這是OD幫你自動分析了
我們取消OD的自動分析
代碼恢復正常
自己在異或代碼,也就是自己改代碼,變形?
最常用的加密手段?
7 xor 2 = 5
2 xor 5 = 7
第一個call進行xor解密
第二個call進入繼續解讀
這里還有一個xor解密
循環地址為00403000 -> 00403120
觀察發現MessageBox中的參數地址就是這個循環里的過程地址
可見原本是亂碼的字符串參數進行xor解密后得到正確的字符串
那么我們如果打補丁
如果將MessageBox給nop掉,異或的數據將會出錯,直接運行程序出錯
開始分析
進入第一個call
1.? 解密401000到401218, xor 0x5A,下圖
進入第二個call
2. 修改自身代碼,從401011到401025,這樣就把對話框的代碼修改出現了,下圖
3. 對nag窗口加密的標題和文本進行xor解密,就是把對話框窗口的參數解密出來。
4. 接下來再次修改自身代碼,401011到401027進行覆蓋,將neg窗口代碼修改為主窗口代碼
5. 對nag窗口的標題和文本加密,用完就加密
程序結束。
?
開始打補丁
第一種方法,將MessageBox的第一給參數修改為1,使其找不到父窗口
但是因為有xor加密解密過程,所以我們要找使到哪里修改了0040101D的代碼
因為代碼使xor 0x5A解密得到的新代碼,那么我們直接將0x6A改為0x016A這樣不行(注意大小端)
所以我們要用1 xor 0x5A = 0x5B
所以我們應該改成這樣
nag窗口成功去掉了。
?
第二種方法,將對話框代碼忽略,直接跳轉到0040106A處,這樣就刪除了nag代碼
所以我們要將00401011地址處的值改為 EB 57
我們找到修改此地址的代碼處
進行反異或運算
EB xor 0x5A = B1
57 xor 0x5A = 0D
修改時注意大小端
我們要再內存數據種修改,不能再代碼段種修改,否則程序運行崩潰
成功。
總結
以上是生活随笔為你收集整理的17. OD-带有多态、变形的程序进行打补丁去掉nag(分析xor加密解密、自身修改代码的程序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux C 应用消息队列在两个进程间
- 下一篇: 0.IDA的反汇编算法方式