【问题标题】:How to change x86 opcode from compiled code如何从已编译的代码中更改 x86 操作码
【发布时间】:2015-11-12 11:08:44
【问题描述】:

下面是我正在反转的应用程序的代码块。
请原谅我是新手,但我发现这里发生了一些事情,我想我必须将je 更改为jmp,但我不确定它是否正确。

_unit34::TApplication.Run

     Push ebp  
     ebp,esp  
     ecx  
     Push ebx  
     Push esi  
     Push edi  
     Mov  dword ptr [ebp-4],eax  
     Mov. Eax,dword ptr [ebp-4]  
     Mov  byte ptr [eax+0AD],1  
     XOR  edx,edx  
     Push  ebp  
     Push. 4E2B09  
     Push  dword ptr fs:[edx]  
     Mov   dword ptr fs:[edx],esp  
     Mov   Eax,4D6574; DoneApplication  
     Call    AddExitProc
     Mov  eax, dword ptr [ebp-4]
     Mov  eax, dword ptr [ebp+44]
     Test  eax,eax
     Je    004E2AF1

有人能解释一下那里发生了什么吗?
以及如何使用交互式 Delphi 重构器将 je 更改为 jmp

【问题讨论】:

  • 首先,你的反汇编坏了。我不知道这是因为你的反汇编程序,还是因为你在这里输入了它而不是复制粘贴。其次,所有 x86 指令都在Intel's manuals 中进行了描述。您可以通过查看手册中的各种说明来了解代码的作用。
  • 您为什么要这样做?您建议避免进入消息循环?当然,如果你想把 JMP 改成 JE,那么就这么做吧。并且不要费心阅读FMainForm 并针对nil 进行测试。但你为什么要这样做?至于“交互式德尔福重构器”,那是什么?估计是个工具。你读过它的文档吗?
  • 快速谷歌搜索显示“交互式 Delphi Reconstructor”是某种反编译器。在我看来,这一切听起来都很可疑。
  • ISTM 认为TApplication.Run 的代码(在本例中为 FMX 版本)不能太保密,实际上不需要逆向工具。

标签: delphi x86 reverse-engineering


【解决方案1】:

有人能解释一下那里发生了什么吗?

 Push ebp  
 mov ebp,esp  

设置堆栈帧。

 ??? ecx  
 Push ebx  
 Push esi  
 Push edi

保存非易失性寄存器

 Mov  dword ptr [ebp-4],eax

保存自指针

 Mov. Eax,dword ptr [ebp-4]  

不幸的堆栈垃圾:-(

 Mov  byte ptr [eax+0AD],1

Self.SomeBoolean:= true

 XOR  edx,edx  
 Push  ebp  
 Push. 4E2B09  
 Push  dword ptr fs:[edx]  
 Mov   dword ptr fs:[edx],esp

try

 Mov   Eax,4D6574; DoneApplication  
 Call    AddExitProc
 Mov  eax, dword ptr [ebp-4]

为应用程序设置退出过程

 Mov  eax, dword ptr [ebp+44]

SomeObject:= somevar

 Test  eax,eax
 Je    004E2AF1

If (Assigned(SomeObject)) then .....

如何使用交互式 Delphi 重构器将 je 更改为 jmp?

该特定更改在这里应该没有意义,因为它会引发异常。 je 在对象为 nil 时被调用。这是错误情况。您将程序更改为始终因错误而崩溃。

但是,如果您绝对必须这样做,只需将操作码从 $74 更改为 $EB(用于字节偏移跳转)或从 $0F84 更改为 $90E9(用于长跳转)。
我会使用十六进制编辑器。

除非您确切地知道自己在做什么,否则这些更改都不会产生令人满意的结果。

从哪里开始
获得 Delphi 编码方面的专业知识并查看大量 CPU 输出。
Ctrl + Alt + C 查看 Delphi 生成的代码。
然而,这需要几个月到几年的时间才能掌握。

关于倒车
如果您想反转 IDA pro 是一个更好的工具。
它有一个免费版本,您可以开始使用。

【讨论】:

  • 那个分析不太对。这是 TApplication.Run。无条件跳转就好了。这只是退出了主消息循环。然后应用程序终止。
  • 因此您认为更改将导致使用 nil ref 执行正常代码。但情况恰恰相反。正常代码总是被跳过,即使有一个分配的参考。
  • 好吧,伙计们,我又回来了,我一直在研究相同的程序,我发现 CFF Explorer 的十六进制编辑器易于使用,但只有一个问题,我需要专业人士的帮助。我遇到了这个(Function.Number:12..Number of components.F or This.function:1..Component.name:_27..number.of.actions:0..actionID:0..Param1: Please. activate.the.software.first!..) 在 ASCII 选项卡中。有人见过这个吗?
  • @alexio,这不是一个warez 网站。所以不要指望破解建议。
猜你喜欢
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多