題:
IDA [call $ + 5 / pop reg]清潔
Ilya Matveychikov
2013-05-22 15:24:59 UTC
view on stackexchange narkive permalink

誰能告訴我如何清理包含以下代碼塊的代碼:

  call $ + 5pop regadd reg,08BE96h [...]  

換句話說,我需要將所有此類塊更改為:

  mov reg,offset  

編輯#1

列出所有塊EA:

  ea = ScreenEA(),用於功能中的功能(SegStart(ea),SegEnd(ea)): E = E中的e的list(FuncItems(funcea)):如果idc.GetMnem(e)==“ call”和idc.GetOpnd(e,0)==“ $ + 5”和idc.GetMnem(e + 5 )==“ pop”:打印“%x”%e  
您是否要求完整的idc / idapython腳本?
好吧,如果存在這樣的腳本...
通過IDC(`PatchByte`)修補IDA數據庫內容絕對是可能的。如果沒有其他人答复,我稍後將嘗試提出自己的版本。
二 答案:
DCoder
2013-05-23 00:50:53 UTC
view on stackexchange narkive permalink

這是一個粗略的實現,它掃描此模式的當前集中功能:

  call $ + 5pop <reg>op <reg>,imm32  

並將其更改為

  mov <reg>,<計算出的imm32>nopnop  

適應於掃描不同範圍並支持更多指令的做法留給讀者。

謝謝,但是我發現您的腳本需要更正,因為它破壞了我的代碼。我將在幾天后發布結果。
blabb
2013-08-29 00:12:50 UTC
view on stackexchange narkive permalink

通話$ + 5是 5字節(e8 00000000)pop reg是 1字節 add reg將是 3及更多字節

如果您需要 call $ + 5 成為 mov reg,const

,則首先需要計算返回地址+值常量

在您的情況下為 pop reg + 0xbe96

的地址,然後使用 5字節mov REG,計算值

留下了 4 +個字節,您需要將其刪除,這樣,如果您不對字節進行編號,則執行路徑將保持不變,則剩下的垃圾字節可以更改執行路徑



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...