如何从编译代码更改 x86 操作码

How to change x86 opcode from compiled code

下面是我正在逆向的一个应用程序的代码块。
请原谅我,我是逆转世界的新手,但我发现这里发生了一些事情,我认为我必须将 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

Can someone explain a bit of what's happening there?

 Push ebp  
 mov ebp,esp  

设置堆栈框架。

 ??? ecx  
 Push ebx  
 Push esi  
 Push edi

保存非易失性寄存器

 Mov  dword ptr [ebp-4],eax

保存 Self 指针

 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 .....

And how can I change je to jmp using Interactive Delphi reconstructor?

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

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

None 除非您确切地知道自己在做什么,否则这些更改中的

None 会带来令人满意的结果。

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

关于反转
如果你想进入逆向 IDA pro 是一个更好的工具。
它有一个您可以开始使用的免费软件版本。