难寻。。 发表于 2018-2-28 20:48

用钩子突破内存保护

继上篇《用钩子实现内存数据读写修改》的文章,如果有爱实践的同学可能会发现这对VMP保护的程序没法进行修改与读写!
其实是因为VMP的内存保护对程序的代码块内存的属性改变成了不可写,所以才会写就会崩溃。

可能有人会说为什么OD可以读写修改,我个人认为是因为OD使用了VirtualProtectEx跨进程对程序内存属性修改。
当然,我们也可以通过外部程序调用这个函数修改内存属性,但是我们不要这样,要在当前进程下修改呢。
调用VirtualProtect或者VirtualProtectEx修改?不行的,VMP在解码后会对ZwProtectVirutalMemory这个内核函数进行hook,不是驱动层,是应用层。ntdll下的函数!
所以当前进程是没法调用这两个函数进行属性的修改的。可能会有人说越过钩子调用呗,我拒绝的,整理参数太麻烦了。
根据分析,vmp的内存保护在程序解码前调用一次VirtualProtect函数对程序代码块进行内存的可读可写可执行修改。
图中可以看到未解码前的调用和内存块数据

解码后调用一次对程序代码块进行内存的可读可执行修改。
图中可以看到已经解码了的代码和内存属性被修改为可读可执行!

这也是用这个函数对vmp进行脱壳的由来。

介绍完毕,我们就上代码:
钩子的代码:
**** Hidden Message *****

可见,被vmp内存保护的代码段已经变成了可读可写可执行!


小新 发表于 2018-3-1 00:02

我就看看不说话

李沉舟 发表于 2018-2-28 21:22

沙发。。哈哈哈哈,我终于比恒叔快了。{:5_119:}

李沉舟 发表于 2018-2-28 21:24

本帖最后由 李沉舟 于 2018-2-28 22:53 编辑

我修正我这段话。
writeprocessmemory写其它进程内存是不用看属性的,只要hprocess。debug权限牛逼就在于open时无视描述符。

难寻。。 发表于 2018-2-28 21:34

李沉舟 发表于 2018-2-28 21:24
od可以改是因为带了debug权限,直接无视属性。

debug为所欲为?那我也在dll里提升到debug权限是否可行啊

难寻。。 发表于 2018-2-28 21:36

李沉舟 发表于 2018-2-28 21:24
od可以改是因为带了debug权限,直接无视属性。

debug为所欲为?那我也在dll里提升到debug权限是否可行啊

李沉舟 发表于 2018-2-28 21:38

本帖最后由 李沉舟 于 2018-2-28 21:40 编辑

要开心 发表于 2018-2-28 21:36
debug为所欲为?那我也在dll里提升到debug权限是否可行啊
不对。不好说,试验看看。

Shark恒 发表于 2018-2-28 21:42

李沉舟 发表于 2018-2-28 21:22
沙发。。哈哈哈哈,我终于比恒叔快了。
我擦,你竟然如此迅速。。。

感谢楼主分享!

3513354434 发表于 2018-2-28 21:55

支持一下!!

结跼~誰續寫 发表于 2018-2-28 22:05

狐白小刺客 发表于 2018-2-28 22:29

{:6_221:}说的好 我使用补丁
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 用钩子突破内存保护