首页
社区
课程
招聘
[求助]ring3 inline hook的跳转地址和保存字节数
发表于: 2010-12-9 12:27 4782

[求助]ring3 inline hook的跳转地址和保存字节数

2010-12-9 12:27
4782
有几个问题,达人回答下啊。。。新手很困惑.....

//代码
    while (g_iSize < 5)
    {
        g_iSize += GetOpCodeSize((void *)((DWORD)addr1 + g_iSize));
    }
    memcpy(g_szOirCode, addr1, g_iSize);
    char *pAddr = (char *)addr1;
    DWORD dwOldProtect, dwTemp;
    VirtualProtect( (LPVOID)addr1, 5,PAGE_EXECUTE_READWRITE, &dwOldProtect );//去掉代码区内存保护
    pAddr[0] = 0xe9;
    *(DWORD *)((char *)addr1+1) = (DWORD)addr2 - (DWORD)addr1 - 5;
    VirtualProtect( (LPVOID)addr1, 5,dwOldProtect, &dwTemp); //恢复内存保护


问题1: 保存目标函数的几个字节?为什么有的是5字节 有的不是5字节

按照我的理解,可能有些函数并不是下面的代码开头,所以有可能不是5字节,是么?
push ebp
mov  ebp,esp
push ebx
push edi
push esi


问题2: 写入的跳转指令 为什么有的是 jmp,xxxxxxxx有的是 mov reg32,xxxxxxxx,jmp reg32
我翻了些资料,是长短跳转的问题,有没有比较通用的跳转方式呢,或者说怎么确定是长跳还是短跳
最上面的代码中的直接硬编码0xe9这样跳转和hookfun-原来fun-5是否具有通用性?

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
1.根据不同的目标地址而定,有部分5个以年的替换,多的字节NOP掉
2.有些跳转地址需要计算或搜索得出,所以用间接跳转方式。
2010-12-9 17:49
0
雪    币: 386
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
反汇编引擎先解析一下前面几个指令的长度,如果不是5个,就得保存得长一些,不然指令就被破坏了
2010-12-12 10:25
0
游客
登录 | 注册 方可回帖
返回
//