用反汇编器打开PE文件后,我知道必须修补哪些说明。而且,如果我必须添加一些数据,则可以手动调整PE文件结构,以便正确解析并执行它。

示例,
EB 1C替换E9 1C FD

现在,这个问题。我必须修改多个位置,并且手动调整值使我丧命。我可以使用python的code.google.com/p/pefile做到这一点,我认为这将有助于调整?还是我可以使用其他模块?我可以找到一些示例代码吗?

评论

编辑人员进行了两项更改,我认为这是错误的。一个将pefile更改为PEfile,另一个将空间添加为PE文件。我指的是code.google.com/p/pefile因此,它应该全部很小,只有一个词。

LordPE能够根据您的更改来重建PE:woodmann.com/collaborative/tools/index.php/LordPE

#1 楼

这不是那么容易,或者很容易出错。如果要在2个字节的位置插入3个字节,则最好执行trampoline:跳至其他位置,执行所需操作,然后跳回到下一条指令。通过使用蹦床,您还可以保存寄存器。

一个小示例可能是这样的:

jmp SomePlace  <---destroy old bytes and insert an unconditional jump  
NextInst:      <----|_________________________  
 ..                                           |    
SomePlace:                                    |   
"dancing with wolves"                         |  
jmp NextInst <------- this will jump back to->|  


如果想用两个字节替换两个字节,那么几乎所有的十六进制编辑器都具有某种形式的搜索和替换功能。

或者您可以在自己喜欢的实用程序中编写一个简单的脚本。 />一个简单的windbg示例脚本,用于将所有push XXXX68 XXXXXX字节替换为EB FE。本示例是一个原型,您需要根据所获得的模式进行调整:更改意外数据,请谨慎使用。)

找到后,它使用找到的地址用search替换两个字节pattern 68??。给定范围内找到的所有字节。除此之外,它还在修改之前和修改之后打印出程序集:

.foreach /pS4 /ps 9 ( place { # 68?? 401000 l?0x20} ) {u place L1;ew place feeb;u place L1 } 


上述脚本的示例输出:

# 68??  pattern search command in windbg 
401000 l?0x20  start search from 0x401000 end at 401020 
u place l1 disassemble one instruction when pattern found
ew place feeb  write word 0xfeeb at found address  
dis assemble again
loop with foreach where ps and pS are skip before and skip after bytes 


评论


我知道替换相等数量的字节的部分,但是Trampoline可能正是我当时想要的。

–辛加罗
2013年9月14日在8:53

iczelion有一个名为icnipion的旧实用程序,称为代码片段创建器,我记得它在添加masm代码片段时很有用,并且能够修补该exe(不要记得它是否支持多个补丁,或者不尝试一下,看看它是否可以解决您的问题,在伍德曼工具库中可用

– blabb
13 Sep 15'3:41