跳中招

逆向工程 部件 调试 混淆 反调试
2021-06-20 07:43:10

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

例子:

 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

2个回答

是的,这确实可以在整个装配清单中始终如一地使用,从而使手动分析或调整变得痛苦。

反汇编器通常分为两类:

  1. 线性扫描反汇编- 线性扫描反汇编更容易出现这种类型的反汇编,因为在整个汇编代码中,从上到下对指令进行线性分析,这使得跳过单个字节搞砸了剩余的反汇编过程。
  2. 递归反汇编- 递归反汇编如果在管理此类有意的技巧以及无意的复杂组装组合方面通常更好(尽管并非免疫)。一般来说,递归反汇编器被认为会产生更好的结果,但更难实现。

如果这是您在给定示例中经常遇到的问题,您可能需要考虑不同的反汇编引擎,也许是一个强调反汇编的引擎,例如 IDA,而不是像 x64dbg 这样的面向调试的工具。

字节只是字节,因此只有您解释它们的方式才能使它们成为现实 - 所以是的,您可能会隐藏函数调用或字符串就是这样。

你将如何在 x32dbg 中处理它。单击要修复的操作码,然后右键单击并选择 Binary -> Edit(或按CTRL+E)。您将看到一个对话框,其中将显示操作码的字节。您可以简单地使用nop( 0x90)重放虚假字节