现在流行的游戏DNF,以前我用消息钩子注入到游戏,可以读到内存,现在更新了,注入时成功,但是不知道为什么,钩子函数不会执行.之所以使用钩子,是因为我得不到它的句柄,OpenProcess函数失败,为什么会失败?我以取得SeDebug权限!它是否对OpenProcess挂了全局API钩子,如果是这样,我再次对OpenProcess挂全局钩子可以先拦截到吗?大家说说自己的看法!
成功读写内存的兄弟们请不要吝啬,大家互相交流一下!

解决方案 »

  1.   

    这类游戏好象有NP守门,没那么容易读到的,首先要把NP绕过或者干掉,否则读内存基本不可能
      

  2.   

    这个软件不是用np的自己写个api函数writememory就可以了至于进程,你连进程都不会抓,后面的你就更不会了
      

  3.   

    我在一个月前用钩子注入的方法读到过,并且可读可写,我想那个时候已有"NP守门",不知它更新了什么?经常听到NP,它是怎样保护游戏的?有没有这方面的书?
      

  4.   

    aspower_ :进程我当然找的到,就算再苯,看任务管理器的PID就可以了,只是OpenProcess(PID)失败!你说的“自己写个api函数writememory”,怎么写?我贴子问的就是这个问题
      

  5.   

    OpenProcess(PID)失败
    为啥失败?
    你如果用任务管理器能够结束dnf进程?
    结束进程同样是要OpenProcess打开句柄的。
    多想想你就知道了。早先e系列可以直接修改内存
    后来不行了
    为什么?关掉setwindowhook了现在如果你要写dnf外挂,一般有两个办法,一是模拟系统dll欺骗dnf程序
    像早先的骑兵什么的都是这类的
    二是自己写驱动去读写dnf的内存
    以前最火的那个 dnf外挂就是用这个办法的。
      

  6.   

    可能是游戏自己做了保护,用下ZwOpenProcess等native api看看
    到网上搜下 获得进程句柄
    方法很多,ring3的,ring0的都有
      

  7.   

    aspower_ :OpenProcess(PID)失败 
    为啥失败? 
    你如果用任务管理器能够结束dnf进程? 
    结束进程同样是要OpenProcess打开句柄的。 
    多想想你就知道了。 ----------------------------------------
    要我说的那么明白吗?
    我说的OpenProcess(PID)失败是OpenProcess(PROCESS_VM_READ,false,PID)失败
    结束进程时不需要PROCESS_VM_READ权限吧。我用TerminateProcess(OpenProcess(PROCESS_TERMINATE,FALSE,),NULL)照样可以结束进程
      

  8.   

    哎这你还不知道,为什么没有权限,不还是openprocess被hook了而且我记得ZwOpenProcess也是被hook住的 调用也是无效的http://forum.eviloctal.com/thread-37786-1-1.html
      

  9.   

    aspower_:说了半天你的结论还是被openprocess被hook,这不是跟我问题里说的一样吗!为什么还要说我“你连进程都不会抓,后面的你就更不会了”
      

  10.   

    为什么openprocess是第一步?
    第一你就知道这个办法
    那么openprocess只是第一步
    过了这个以后还有readmemory writememory等等
    你第一步都过不去还怎么说后面?
    第二 是不是一定要openprocess
    我都说了驱动同样可以完成外挂
    其实外挂这个东西如果有个例子是完全可以学着用的
    有个dnf外挂好像叫葡萄,他就需要你在taskmgr里去点选smss
    然后就可以用了,
    你怎么就不想想他为什么要这么做?
    最后你自己模拟葡萄的办法
    然后再去打开dnf再来想想不过既然你觉得我说你说错了
    我也不打搅你思考了
    你慢慢研究
      

  11.   

    你发的那个网页确实不错,我慢慢看。
    当我发现openprocess作为第一不时不行,我改变了方法,用消息钩子将dll注入到游戏中,并能成功读取内存,现在游戏更新了,SetWindowsHook成功但是钩子函数不会执行,我正在请教你们原因,或者使用其他方法。何必说“我第一步都过不了,后面的你就更不会了”
      

  12.   

    jingzhongrong:我经常用IceSword,但是它一启动,dnf就报非法了。我再搜一下其它软件
      

  13.   

    SetWindowsHook 4月份还是5月份就不能用了你最近还成功过?
      

  14.   

    如果我说是如果,
    如果你能成功,但是钩子函数不能执行
    那么你看看你钩子函数里有那些api可能是其中一个被hook住了,没有办法使用了第二 你说钩子成功了你最好查看下dnf主程序有没有加载你的dll,这样才能真正的说钩子成功了有个软件好像叫taskinfo 好像还是可以看dnf的模块的
      

  15.   

    他有驱动保护,写个程序过了他的驱动。然后就可以操作了,ring3上有检测线程,找出来,做动作前挂死他,做完再恢复
      

  16.   

    aspower_:你说的没错,我前一两月是用SetWindowsHook成功的,后来就不行了,SetWindowsHook的返回值正确,但就是钩子的函数不执行,我在钩子函数的第一行加入了MessageBox,但是始终没有弹出来,我现在找taskinfo,看是否确实注入了
      

  17.   

    taskinfo已经看不到模块信息了.我是用SetWindowsHookEx()来注入的,hook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)msghook,hInst,threadID);//threadID是DNF的第一个线程执行后hook不为0。
    static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
    {
    MessageBox(0,"good","",MB_OK);//没有对话框弹出
    if(nCode < 0)
    {
    CallNextHookEx(hook, nCode, wParam, lParam);
    return 0;
    }
    MyCommand(nCode,wParam,lParam);
    return CallNextHookEx(hook, nCode, wParam, lParam);
    }
      

  18.   

    尝试用UnhookWindowsHookEx卸载上面的hook,返回1
      

  19.   

    你的我看倒了,我以前用SetWindowsHookEx注入后可以用指针读的,但现在不行了。你用什么注入的?
      

  20.   

    关于驱动,NP,ring3,ring0,我不了解,希望你们介绍一下相关的书籍,我准备系统的学一下
      

  21.   

    hook不为0,应该成功了 
    直接指针读写 测试下 
      

  22.   

    不行的,SetWindowsHookEx的代码在我的内存域中,读出来的是我自己的内存。钩子函数的代码才在游戏域中,现在就是钩子函数不会被执行,不知什么原因
      

  23.   

    dnf更新太快,可能不是初学者的好例子
      

  24.   

    SetWindowsHookEx可以成功,但是在系统将dll注入DNF进程的时候,DNF好像做了什么,我机器不好,每到这时就卡一下。
      

  25.   

    应该是在驱动层拦截了 NtOpenProcess之类的,  防止被其它经常打开。
    SSDT的拦截还好破一点,  如果再深入下去, 可能要用驱动去读内存了
      

  26.   


    这点事,貌似用不着"驱动,NP,ring3,ring0"这些吧,写点代码注入到游戏进程,怎么改都可以啊,如果遇到NP 就干掉它,再说
      

  27.   

    其实主要是因为NtOpenProcess + 0x2xx Call ObOpenObjectByPointer
    NtOpenThread  + 0x1xx Call ObOpenObjectByPointer
    KiAttachProcess这些Inline Hook的缘故。脑子不好,你以为你很懂内核?无聊的脑残。还说什么人家Hook了ZwOpenProcess,不懂别出来装。现在谁还挂这个....