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