我正在反转一个使用中间技巧中的跳转“隐藏”某些指令的程序。这个技巧是跳转到一条指令的中间,而实际地址实际上包含另一个操作码。

示例:

 CS:0100 E421           IN     AL,21
 CS:0102 B0FF           MOV    AL,FF
 CS:0104 EB02           JMP    0108
 CS:0106 C606E62100     MOV    Byte Ptr [21E6],00
 CS:010B CD20           INT    20


所以我有与此相关的一些问题:这个技巧可以隐藏进口吗?隐藏对函数或字符串的x引用?有什么办法可以解决? (而不是逐步执行代码)
编辑:我正在使用x32dbg

#1 楼

是的,在整个装配清单中确实可以始终采用这种方法,从而使手工分析或调整变得很痛苦。

反汇编程序通常分为两类:



线性扫动拆卸-线性扫动拆卸更容易发生这种反拆卸,因为在整个组装代码中,从上到下对指令进行了线性分析,从而跳过了一个字节,从而使剩余的拆卸过程更加复杂。 。

递归分解-递归分解通常可以更好地(尽管不是免疫)来处理这种有意的技巧以及无意的复杂组装组合。一般而言,递归反汇编程序被认为可以产生更好的结果,但更难实现。.

如果给定示例经常遇到这种情况,则可能需要考虑使用其他反汇编引擎,也许是强调反汇编的工具(例如IDA),而不是像x64dbg这样的面向调试的工具。

#2 楼

字节只是字节,因此,仅是您如何解释它们才能使它们成为事实-因此,是的,您可能会隐藏函数调用或这样的字符串。

如何在x32dbg中处理它。单击要修复的操作码,然后右键单击并选择Binary-> Edit(或按CTRL + E)。您会看到一个对话框,其中将显示操作码的字节。您只需使用nop0x90)重播伪造的字节即可。