我正在二进制炸弹实验室工作,我刚刚解除了炸弹的武装,我打算通过调试器解决它,然后开始研究我的动态分析技能,或者调试我真正的问题是如何修补或修改装配gdb中的指令?

#1 楼

介绍了GDB方法后,我将提请注意其他方法,这些方法通常可以通过其他软件来更容易地更改程序。 >将光标移动到要修改的指令,然后在编辑菜单中选择NOP补丁(即,无效指令)或接受x86和ARM指令的“汇编指令”。



它插入适当的操作代码,并进行所有偏移调整,以确保插入不会影响程序的其余部分。然后,您可以按修改后的方式运行程序并进行调试,也可以生成新的可执行文件(ELF,Macho-O,PE / COFF)。

IDA Pro(Linux,Windows,OS X)
通过编辑idagui.cfg(使用特权提升的编辑器)来启用补丁菜单:请注意,默认情况下,IDA仅针对IBM PC自动组装。有关操作码,请参见Intel或ARM手册。然后,IDA可以生成一个新的可执行文件,但通常可能无法正常工作,而您需要诉诸于生成一个.dif。如果您愿意,可以使用
要创建修补程序,我建议使用dup2修补程序。有了新的可执行文件后,请比较旧的和新的原始十六进制中的差异,然后指定需要对修补程序创建者进行的更改。 (要么替换特定偏移量的内容,要么搜索一组字节并替换这些字节。)程序指令不是改变控制流程的唯一方法。相反,您可以使用DLL挂钩;请参阅此处的InfoSec文章。

评论


radare2radar.org/r有办法吗?

–ddddavidee
15-10-28在19:33

@ddddavidee在发布此消息时,我在安装radare2时遇到了数小时的麻烦,因此我从未尝试过。似乎现在更容易安装和使GUI正常工作,所以我将尝试一下。原则上,它当然应该能够做到,这只是您可能没有多少自动化的问题。

–JamalS
15-10-28在20:47

Acutally Hopper的方法似乎更快,更容易,但是我需要完整版本才能保存修改后的文件...所以我正在寻找替代方法...

–ddddavidee
15年10月28日在20:55

#2 楼

您可以使用set命令启用对可执行文件.text节的写入:

set write on


,然后可以再次使用set命令设置实际内存>
set {int}0xdeadc0de = 0×90909090


但是请记住,gdb没有内置的汇编程序,因此您需要提前知道需要修补的字节(通过nasm或其他方法)。根据要尝试的复杂程度,修改所需的寄存器可能会更容易。