【问题标题】:How to use int3( VEH or SEH )如何使用 int3(VEH 或 SEH)
【发布时间】:2012-04-26 03:44:56
【问题描述】:

知道我想用jmp 替换function prologue 以跳转到我的分配区域(VirtualAllocateEx)。但是function prologue 只有 3 个字节,jmp 有 5 个字节。 像这样:

55                 `push ebp`  

8B EC              `mov ebp, esp`

833D C4354200 02   `cmp dword ptr ds:[4235C4],2`

E9 AD00000000  `jmp` 00140000 // replace above three instructions

如果我想用jmp覆盖函数序言,必须覆盖函数序言之后的第三条指令。

所以知道我想用 int3 代替函数序言来跳转到我的分配区域或任何地址,我该怎么做?

我尝试使用 VEH 或 SEH 来实现,但我不知道如何制作。

【问题讨论】:

    标签: windows assembly x86 seh


    【解决方案1】:

    你需要将原始代码(你引用的那个)写在另一个内存位置(只是分配一些东西)。

    在为其他操作码(您的自定义新代码)节省一些空间的同时编写它。 它不必完全适合你被允许用 NOP 填充未使用的字节(如果我没记错的话,是 0x90)。

    现在,从原始代码跳转到此代码。

    几年前我在做游戏教练的时候一直在做这件事。效果很好。

    注意事项:您重写的代码最后应该跳回原始位置以继续代码流。

    如果不清楚,请告诉我。

    【讨论】:

    • 我的想法是这个imageshack.us/photo/my-images/190/qwerb.png 并且我尝试使用 jmp 跳转到安全区,但它会覆盖第三条指令。所以我想我想用int3(0xcc)覆盖第一条指令(push ebp),并做同样的事情。
    • 图片没问题,但我不明白你的问题。一般来说,您需要执行以下步骤:分配空间,用代码填充它(可以是“插桩函数”)。然后,在“原始功能”的序言中,您跳到它。你怎么回来?简单,在“仪表化函数”的结尾处返回/跳转到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多