鱼C论坛

 找回密码
 立即注册

憔悴心只为你

https://fishc.com.cn/?107996

修改现有花指令的原理及方法

已有 879 次阅读2012-4-15 10:43

花指令的原理是堆栈平衡,不管花指令代码是什么样的,要达到目的都是加花后,堆栈与未加之前一样。

例如: 

push ebp

mov ebp,esp

add esp -0c

add esp 0c

mov eax,原入口

push eax

retn

在上面的代码中,push ebp是将寄存器ebp压入堆栈,mov ebp,esp是将寄存器esp的值送给寄存器ebp。“add esp,-0c”和“add esp,0c”这两句代码执行后的效果就是什么也没做,达到堆栈平衡。

最后三句代码的功能是实现跳转到入口点。其中,“mov eax,原入口”指令将入口点送入寄存器eax;“push eax”将寄存器eax压入堆栈;retn从堆栈取得返回地址并跳到该地址执行。

可以用5种方法对上面代码进行修改:

1、替换法

   替换法就是简单地替换代码中的数值,同样是本着堆栈平衡原理进行的。

    push ebp

mov ebp,esp

add esp -3

add esp 3

mov eax,原入口

push eax

retn

2、移位法

   所谓移位法,就是简单地将花指令中的堆栈平衡代码调整位置。

    push ebp

mov ebp,esp

add esp 3

add esp -3

mov eax,原入口

push eax

retn

3、添加法

   所谓添加法,是指在现有的花指令代码中添加几句堆栈平衡的代码,从而生成新的花指令代码。

    push ebp

mov ebp,esp

push edx

pop edx

add esp -0c

add esp 0c

mov eax,原入口

push eax

retn

4、去除法

   去除法是指在现有的花指令代码中,删除几句完整的堆栈平衡代码

    push ebp

mov ebp,esp

push edx

pop edx

mov eax,原入口

push eax

retn

5、跳转法

   所谓跳转法,是在花指令中加入一些跳转指令,跳转到另外的花指令代码处,执行后再返回原来的花指令代码中

    004035DA   55               PUSH EBP

004035DB   8BEC             MOV EBP,ESP

004035DD   EB 08            JMP SHORT 004035E7

004035DF   B8 A2124000      MOV EAX,004012A2

004035E4   50               PUSH EAX

004035E5   90               NOP

004035E6   90               NOP

004035E7   83C4 F4          ADD ESP,-0C

004035EA   83C4 0C          ADD ESP,0C

004035ED  ^EB F0            JMP SHORT 004035DF


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部