看流星社区

 找回密码
 注册账号
查看: 2474|回复: 1

注入后功能函数写哪里,请教

[复制链接]

该用户从未签到

发表于 2011-3-23 07:54:20 | 显示全部楼层 |阅读模式
首先用一个对话框的按键,用HOOK注入DLL,并在DLL里弹出辅助界面(也是一对话框),用指针来读取内存,设置一个TIMER,并显示在对话框的编辑框里. 有些问题要请教一下,
1. 为什么钩子函数中只有用特定的消息调用LoadLibrary(DLL)才能用使这个DLL与游戏相关,不用LoadLibrary(DLL),无法读取游戏的内存,读到的是可能是有按键的对话框的内存.
2. 不知道把功能函数写在哪里,是写在DLL的对话框类里,还是写在DLL全局变量里,通过什么方式来调用这些功能函数.比如设定血小于100就加血,这个加血的动作写在哪里,是写在对话框的ONTIME里,还是在在钩子函数里取到特定消息后设置一个TIMER,在TIMER参数里写一个PROC,进行判断, 然后加血.
3.在DLL里的对话框用NEW内存再CREATE时候,关闭外面启动对话框,游戏就出错,直接创建非模态对话框关闭时就没有问题.
4.无论用SendMessage还是PostMessage,都无法实现加血功能,用那个Keybd_event只能在游戏为当前窗口时才能用,也试过设置活动窗口,设置SetWindowPos,SetForegroundWindow,还是无法实现后台加血.

请大侠给个思路,DLL里功能函数写在哪,是不是一定要经过消息钩子获得特定的消息调用这些功能函数才能使这些函数起作用???

该用户从未签到

发表于 2011-3-23 07:54:36 | 显示全部楼层
楼主可以参考一下 DIY神迹辅助 的那篇文章
1.安装全局钩子的情况下DLL已经注入进程了,还用的了LoadLibrary吗,读内存至于读到对话框的内存,你的DLL不是已经注入到进程了吗,那应该就是游戏目标进程的内存地址了啊

建议使用钩子试试扫雷就知道读到那里的内存地址了

2.至于实现自动补血,应该是用TIMER检测血值后执行相应的CALL,现在好多游戏已经屏蔽按键模拟,所以很多辅助都是通过CALL来实现吧

3.这个关于退出游戏报错的情况,你可以参照 DIY神迹辅助 里机的代码,应该是没有退出程序的时候没删除窗体造成的

先声明我也只是菜鸟,所以上面的很多纯个人看法,可能有很多不对的地方的,不要问我CALL那个要怎么找,嘿嘿,因为我也不会找CALL,只会使用简单的读写内存,不会用OD调试

该用户从未签到

 楼主| 发表于 2011-3-23 07:55:51 | 显示全部楼层
谢谢,今天我试验过那个DIY神迹的代码了,人家写得很简单,直接声明了一个DLG的全局变量,
然后在DLG类里写了一些功能,然后用消息钩子弹出对话框,只是看不出来对话框的是哪个进程的,
我在窗口类类型定义了子窗口,就可以看到对话框在任务栏是游戏的图标了,还要汇编,找CALL...做个辅助还真是不容易啊

该用户从未签到

发表于 2011-3-23 07:56:08 | 显示全部楼层
在设置的时候SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc,pinstance,threadid);

给threadid传入一个窗口线程ID,这样就会对指定的进程才有效就不会按HOME后的窗口都会注入了


在加上这段
BOOL CTestHookApiApp::InitInstance()  
{
    // TODO: Add your specialized code here and/or call the base class
    char m_Path[255];   
    GetModuleFileName(NULL,m_Path,255);
    CString m_Path1=m_Path;
    AfxMessageBox("DLL被加载!"+m_Path1);
    return CWinApp::InitInstance();
}


这样弹出的对话框就是知道是那个进程了啊
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 13:27

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表