VC注入dll后,如何用代码实现inline hook?

最近在研究inlinehook,但是没找到合适的代码例子做参考。现在我在用植物大战僵尸这个小游戏做练习。现在的目标就是,在点击拾取阳光的时候,希望能随意控制拾取到的阳光值... 最近在研究inline hook,但是没找到合适的代码例子做参考。
现在我在用植物大战僵尸这个小游戏做练习。现在的目标就是,在点击拾取阳光的时候,希望能随意控制拾取到的阳光值,比如拾取到的阳光值翻一倍,两倍,这种。
现在我可以在OD下使用inline patch的方式实现这个,其实很简单,在阳光值修改位置写入一个jmp,然后跳到一个00填充的无用位置,写入汇编代码修改阳光值,比如 imul eax,eax,2这样,可以翻一倍。最后jmp回去,就OK了。
现在我想用代码实现这个过程,但是没搞过,不太懂。
详细点的要求就是,构造一个用于hook的结构体,大致是这样:

struct JmpHook
{
DWORD hookAddr //要hook的目标地址,会在此处写入jmp指令
DWORD hookProc //jmp的跳转位置,即hook挂接的处理函数
int[] code //hookAddr后的一段汇编指令,用于卸载inline hook时的恢复现场
}
这个结构体中的第三个数据成员 code,没太想好改怎么弄。我想的是通过这么一个结构来记录hook相关的信息,然后在卸载的时候进行恢复,在hook的时候,会读取hook点后面的指令填充到code中。jmp过去的会是一个函数。
求hook和unhook函数的写法。或者不用这个结构体也行,请给出合理的实现。
如果嫌麻烦,给点提示也可以不过我会追问。只要能帮我搞定这个问题就行了,这个具体的代码谁来写无所谓,给我说下关键点,我自己写也行。
展开
 我来答
吉祥二进制
高粉答主

2014-01-14 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84583

向TA提问 私信TA
展开全部

最常用的DLL注入是借助CreateRemoteThread() 函数,把LoadLibrary()做为线程函数的地址实现注入,网上的大部代码都是这样的。早期有一款安全类的工具,叫mt.exe 它里面有一个mt.exe -su的命令,就是使用的这种方法,我找了一个我原来写的实例。我直接打包了。


另外一种是直接PE注入。这类似于病毒感染的方法,大体上的思维就是在游戏的可执行文件中寻找空段。写入类似于shellcode一段精简代码,这段代码实现你想要的功能,最后你修改pe文件的入口点即可。这样就实现了一种劫持。这个实例代码不知道放哪里去了,但是找到一个分析红客联盟创始人lion写的shellcode的一篇笔记,我一起打包了,应该会对你有所帮助。这方面的资料网上很多的,不是什么新东西了。


如果你要实现的代码很少,完全可以把指令当成一个char类型的数组,直接写入pe的空段就可以了,如果很多,可以新建立一个PE空段,再写入,或者直接将要执行的代码写入到一个DLL中封装。。


 

空雪梦见
2014-01-14 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1210万
展开全部
关键点吗……
1、恢复现场,要存多少字节根据你填入的jmp占用多少字节而定,jmp rel32是5个字节。
2、od找0那一段,程序操作的话你可以用malloc申请的内存来,而不一定是exe里的0
3、VirtualProtect调用可以使代码段可写(否则修改的时候会出现写入异常,程序崩溃)
4、jmp rel32指令的机器代码是 E9 rel32 一共5个字节。如果嫌计算相对地址麻烦你也可以用 jmp mem32,机器指令是FF 25 mem32(没记错的话……也有可能是FF 15)。但是我觉得这样更麻烦
5、jmp rel32指令中,rel32相对的是执行jmp之后的eip。例如
40000: E9 11 22 33 44
40005: ......
那么翻译过来就是
40000: jmp 44372216
6、不确定要hook的代码位置的指令多长的话,你可能需要一个反汇编库来确定,当然更容易(但是不通用)的方式是人工查看……跳转来跳转去记得一定要跳转到机器代码边界上,比如刚才那个
40000: E9 11 22 33 44
你不可以跳转到(40000, 40005)区间的任何一个地址上,但是可以跳转到40000或40005地址上。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式