用钩子进行内存修改读取原理与实现
思维决定一切!!!其实是补丁流程制作。
本篇文章是接着《带V核盾例子的山寨》文章的后续编写,不过这次不是在调试器下!
本篇文章涉及的例子和源码软件都不会放到帖子中,自己动手比什么都好!
易语言为例,一开始都会先调用GetVersion系统函数,如果程序加壳了,以VMP为例,调用该函数后真正程序的代码已经被解码到进程空间,而后才开始执行作者的代码。
为此,我们可以对这个函数安装钩子然后让我们的函数去修改程序的内存数据.
如何安装钩子?
本文用jmp hook的方式,其他不做介绍,具体百度。
jmp hook,即对被勾地址进行5字节大小的内存修改。
修改后的汇编码即: jmp 钩子处理函数
jmp指令的字节码为0xE9
那么五字节数据:0xE9 xxxxxxxx
后面跟的是钩子处理函数的地址,但是这个地址并不能直接填写你想要跳转的地址,需要一个公式转换。然后才能拼装这五字节数据!
至于为何,感兴趣的朋友可以百度硬编码相关的文章查阅。这里直接给出公式:(钩子处理函数地址-被勾地址)-5
下面看图,图里会有注释,有疑问请回复!
安装钩子函数:
这里是钩子处理函数:
到此,GetVersion的钩子已经安装完了。
说了这么多还是没说关于逆向的,好了现在开始了!
安装完GetVersion函数的钩子,当触发钩子处理函数后进行对关键地址的修改或者安装钩子。
所以我们对回调函数里加入我们想要的功能即可。这里以拿到核盾DLL句柄为例!
用set_hook函数对之前文章中我们寻找的jmp eax处的地址进行钩子的安装。
钩子安装函数:
**** Hidden Message ***** 真不错,赞一个!我倒是认为可以做一个专业继续下去{:5_121:} Shark恒 发表于 2018-2-28 07:42
真不错,赞一个!我倒是认为可以做一个专业继续下去
。。。拉倒吧,大佬别笑话了。都是些基础的东西,专业都谈不上 {:5_188:}板凳。前来膜拜。 强,前排摸楼主的奖杯 要开心 发表于 2018-2-28 08:43
。。。拉倒吧,大佬别笑话了。都是些基础的东西,专业都谈不上
大家都在赞你,怎么可能笑话你,楼上李沉舟童鞋也一直前来顶贴~ Shark恒 发表于 2018-2-28 11:01
大家都在赞你,怎么可能笑话你,楼上李沉舟童鞋也一直前来顶贴~
看着做吧,想换别的网络验证玩玩。但是没钱。没法拓展其他的 李沉舟 发表于 2018-2-28 08:44
板凳。前来膜拜。
大佬有空做个关于vmp的专题啊 顶下·大神谢谢您分享 楼主你这也太强了,看得我蒙圈了{:6_224:}