以下是我正在撤消的应用程序代码块
请原谅我,我对倒车世界不熟悉,但我发现这里发生了一些事情,我认为我必须将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
有人能解释一下那里发生了什么吗?
如何使用Interactive Delphi重构器将je
更改为jmp
?
答案 0 :(得分:0)
有人能解释一下那里发生了什么吗?
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 .....
如何使用Interactive Delphi重构器将je改为jmp?
这个特定的改变在这里没有意义,因为它会调用异常。当对象为零时调用je
。这是错误情况。您将更改程序以始终崩溃并显示错误。
但是,如果你绝对必须这样做,只需将操作码从$ 74更改为$ EB(对于字节偏移量跳转)或从$ 0F84更改为$ 90E9(对于长跳跃)。
我使用十六进制编辑器。
除非您确切知道自己在做什么,否则这些变化都不会有令人满意的结果。
从哪里开始
获得Delphi编码方面的专业知识并查看大量CPU输出
按 Ctrl + Alt + C 查看Delphi生成的代码。
然而,掌握这将需要几个月到几年的时间。
关于倒车
如果你想进行倒车IDA pro是一个更好的工具
它有一个免费版本,你可以开始。