首页
社区
课程
招聘
Ring3 Inline Hook 问题
发表于: 2010-3-2 16:52 3672

Ring3 Inline Hook 问题

2010-3-2 16:52
3672
这是从网上随便抄来的一份ring3 Inline hook 代码

Vs2008 下 正常编译。

运行后 debug 模式下 总是 在 ret = jmp_back(); 位置 中断,不知道为什么?

debug 模式下 去掉 增量编译后 运行 在 jmp_back() 里 出现 Illegal Instruction 异常。

尝试保存原函数的6字节7字节8字节 还是一样。实在搞不明白了,大家帮帮我。

#include <stdio.h>
#include <windows.h>

// 保存原始的5个字节代码,注意一定要保证完整
BYTE orig_code[5] = {0x90, 0x90, 0x90, 0x90, 0x90};
// JMP 0xXXXXXXXX
BYTE hook_code[5] = { 0xe9, 0, 0, 0, 0 };
BYTE jmp_orig_code[5] = { 0xe9, 0, 0, 0, 0};

int func();
int fake_func();
void hook_func();
int jmp_back();


int main(int argc, char **argv)
{
    int ret;
    hook_func();
    ret = func();
    return ret;
}

int func()
{
    printf("I'm func(),I'm called!\r\n");
    return 0;
}

void hook_func()
{
    DWORD dwOldProtect;
    if(!VirtualProtect(func, 5, PAGE_EXECUTE_READWRITE, &dwOldProtect))
    {
        printf("VirtualProtect error!\r\n");
        return;
    }
    if(!VirtualProtect(jmp_back, 12, PAGE_EXECUTE_READWRITE, &dwOldProtect))
    {
        printf("VirtualProtect error!\r\n");
        return;
    }

    // 保存原始操作码
    memcpy(orig_code, (BYTE *)func, 5);
    // 计算fack_func地址
    *((ULONG*)(hook_code+1) ) = (ULONG)fake_func - (ULONG)func - 5;
    // 修改原始入口
    memcpy((BYTE *)func, hook_code, 5);
    // 计算跳回地址
    *( (ULONG*)(jmp_orig_code+1) ) = (ULONG)func - (ULONG)jmp_back -5;
    // 填充jmp_back
    memcpy((BYTE *)jmp_back, orig_code, 5);    
    memcpy((BYTE *)jmp_back+5, jmp_orig_code, 5);
}

__declspec(naked) int jmp_back()
{
    __asm
    {
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
        _emit 0x90
    }
}

int fake_func()
{
    int ret;
    printf("I'm fake_func(),I'm called!\r\n");
    ret = jmp_back();
    return ret;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
╮(╯▽╰)╭  搞半天 原来 还是 代码 截断问题。

留个存底 希望 对其他 新手 有所帮助吧。
2010-3-2 17:01
0
游客
登录 | 注册 方可回帖
返回
//