2015-08-19 107 views
-4

下面是我正在倒转的应用程序的代码块。
请原谅我我是新来的逆转世界,但我发现这里发生了一些事情,我想我必须将je更改为jmp,但我不确定它是否正确。如何从编译代码更改x86操作码

_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

+3

首先,你的反汇编是打破。我不知道这是因为你的反汇编,还是因为你在这里键入而不是复制粘贴。其次,所有的x86指令都在[Intel的手册]中描述(http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)。您可以通过查看手册中的各种说明来了解代码的功能。 – Michael

+0

你为什么要这么做?你建议避免进入消息循环?当然,如果你想把JMP换成JE,就这样做。并且不要读'FMainForm'并且对'nil'进行测试。但是,你为什么要这样做?至于“交互式德尔菲重建器”,那是什么?推测这是一个工具。你读过它的文档吗? –

+0

快速谷歌搜索揭示“交互式Delphi重构”作为某种反编译器。所有这些听起来对我来说都很可疑。 –

回答

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] 

设置退出PROC的应用

Mov eax, dword ptr [ebp+44] 

SomeObject:= somevar

Test eax,eax 
Je 004E2AF1 

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

我该如何使用交互式德尔菲重建器将je改为jmp?

这个特殊的改变在这里应该没有意义,因为它会调用一个异常。对象为零时调用je。这是错误状态。您将更改程序始终会因错误而崩溃。但是,如果你绝对必须这样做,只需将操作码从$ 74改为$ EB(对于字节偏移跳转)或从$ 0F84改变为$ 90E9(对于长跳跃)即可。
我会使用十六进制编辑器。

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

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

关于倒车
如果你想进入倒车IDA pro是更好的工具。
它有一个免费版,你可以开始。

+0

该分析并不完全正确。这是TApplication.Run。无条件跳转很好。这只是从主消息循环中退出。然后应用程序终止。 –

+0

所以你认为这个改变会导致正常的代码被执行时会引用nil ref。但这是相反的。正常的代码总是被跳过,即使分配了引用。 –

+0

好吧,我回来了,我一直在挖,直到有相同的程序,我发现CFF资源管理器的十六进制编辑器易于使用,但只有一个问题,我需要专业人士的帮助。我遇到了这个(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选项卡中。有人看过这个? –