首页
社区
课程
招聘
[旧帖] 关于HOOK的问题 0.00雪花
发表于: 2013-5-18 10:20 5142

[旧帖] 关于HOOK的问题 0.00雪花

2013-5-18 10:20
5142
我在同一个地址进行hook 为什么用ce的自动汇编写进去没有问题 用我的程序写进去就会秒速崩掉呢?
以下是CE代码:
alloc(newmem,2048) //2kb should be enough

label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
mov eax,[Daybreak.bin+39A3C4]

exit:
jmp 41b5dd

"Daybreak.bin"+1B5D8:
jmp newmem

//我只是单纯的hook过去啥事也没做 原代码跳回来的 游戏没有崩盘
下面是我的dll的写法
__declspec(naked) __cdecl AutoGo()
{
       
       
        _asm
        {
                mov eax,[0x79A3C4]
                jmp exit1
        }
}//这是hook的代码
//下面是写入hook
void Hook()
{
        AfxMessageBox("start to hook");
        LPVOID MessDayBase=(LPVOID)0x400100;
        LPVOID MessDayBase1=(LPVOID)0x400101;
        DWORD MainID;
        DWORD pd_oldproc;
        HANDLE proHan;
        HWND GameHwnd;
        char ch_gameName[20];
        CString cs_dlln;
        CString cs_gameID;
        char ch_gameID[20];
        DWORD GameID;
        int ini_dlln;
        int ini_calldll;
        int ini_gameID;
        int dlldec;//设置计次数
        char ch_dlln[20];//配置项里的一共注入多少Dlll了
        char ch_calldll[4];//配置项里的游戏是否已经注入CallDll
        char ch_pit[20];
                    LPVOID jump=(LPVOID)0xE9;
                                LPDWORD returnWri;
                                DWORD autogobase;
                                LPVOID MessDayBase_1;
                               
                                //写HOOK
                                //GameHwnd=FindWindow(NULL,"巧克力1");
                                //GameID=GetWindowThreadProcessId(GameHwnd,NULL);
                                //proHan=OpenProcess(PROCESS_ALL_ACCESS,false,GameID);
                                byte a[1]={0xe9};
                                PWORD s=(PWORD)(0x0041b5d8);
                                PWORD s1=(PWORD)(0x0041b5d9);
                                //PWORD s=(PWORD)(0x00400100);
                //PWORD s1=(PWORD)(0x00400101);
                                VirtualProtect(MessDayBase,1,64,&pd_oldproc);
                                memcpy(s,&a,1);
                               
                                autogobase=(DWORD)((DWORD)&AutoGo-(DWORD)MessDayBase1-4);
                                memcpy(s1,&autogobase,4);
                                VirtualProtect(MessDayBase,1,pd_oldproc,&pd_oldproc);
                                AfxMessageBox("1");
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 433
活跃值: (1900)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
可是dll里的代码 在1跳出来的瞬间 就会因为游戏的崩溃而消失了
将hook在别的地址进行的时候 看了下地址 是没有问题的 按理来说就是一样的了 可是ce的就不会崩掉
2013-5-18 10:21
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也不太行,就瞎說一下。
會掛掉通常跟堆疊有關,堆疊跟參數數量有關,這裡要小心處理。。。
像是call...ret動作時...
2013-5-20 15:08
0
雪    币: 69
活跃值: (41)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
何必自己写hook呢,现在都用现成的HookLib了,拿来用就好了.
windows的detours 和 开源的 Mhook,都可以拿来用.
自己看看Mhook的Samples: http://codefromthe70s.org/mhook.aspx
2013-5-21 22:03
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持下楼主  我也不太懂这个  所以帮不到楼主真不好意思   不过我觉得自己写的和用别人的肯定是有区别的 希望楼主继续研究
2013-5-25 22:48
0
雪    币: 16
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
_asm
  {
    mov eax,[0x79A3C4]
    jmp exit1
  }代码不全,不清楚你要跳转到那?最好给出要跳转地方的部分和hook地方的汇编代码,你可以用od调试
memcpy(s,&a,1);  memcpy(s1,&autogobase,4); 没看出跳转到你的hook函数
2013-5-27 22:12
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看看 就是不会 啊  才鸟
2013-5-29 23:25
0
雪    币: 433
活跃值: (1900)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
已经完成了 谢谢大家..
2013-6-10 14:13
0
雪    币: 433
活跃值: (1900)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
原因是保护的地址写错了..
2013-6-10 14:14
0
游客
登录 | 注册 方可回帖
返回
//