示例:
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)。您会看到一个对话框,其中将显示操作码的字节。您只需使用
nop
(0x90
)重播伪造的字节即可。