如何从编译代码更改 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 是一个更好的工具。
它有一个您可以开始使用的免费软件版本。
下面是我正在逆向的一个应用程序的代码块。
请原谅我,我是逆转世界的新手,但我发现这里发生了一些事情,我认为我必须将 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 是一个更好的工具。
它有一个您可以开始使用的免费软件版本。