手工把一个PE文件装载起来了

来源:互联网 发布:java 加密方式 编辑:程序博客网 时间:2024/05/01 05:16

前面分析了LoadLibrary函数,今天根据前面分析的原理,居然手工把PE文件装载成功了。当然为了减少工作量,我还是利用了巧妙的方法。其实只要充分理解了虚拟地址,基地址,还有那些乱起八糟的PE表。回想起来也不是难的不可战胜。最后的结果是看不到执行模块的的一段内存区域开始执行代码咯Tongue out。。如果再把一些PE文件标示去除掉,甚至使用完就release掉,再狠点代码加密启动SEH机制动态解密代码,甚至再强悍点,把代码放在共享区间(windows默认为每个程序都映射了一个共享区间,这个区间地址我忘记了,只有翻翻代码了)---简直不是人干的。

CreatePrcoess就是在内核创建一个PEB,,剩下的工作可以自己做嘛。。但是太复杂了,按照许木木的话来说----没有意义。。。该利用windows现成的就利用啊,只是不是常规利用而已。

       并且有些PE文件资料有些地方介绍的也不完全正确。或者理解上有少许偏差。前人栽树后人开花啊,觉得这些人真的太强悍了。

目前还有些扫尾工作,现在手工加载的PE文件只用到了ntdll.dll,kernel32.dll,user32.dll,,由于这3个dll几乎是最先加载的Dll,所以基本都能加载的制定的地址,这样输入表不用重新定位就能工作了。但是如果还用到了其他DLL,输入表就需要再处理了。。为了简单起见,我决定还是在手工加载PE文件的时候的一个执行函数完成这个工作。想起来,这样最理想和方便。。完成了这部分工作后,需要验证下.res资源段是否是放在了正确的位置上。

一步一步来吧。。

忽然觉得自己的这个工作就像在做一个壳。。。

通过分析PE文件的加载,有了一些新的思路和想法,Crying(我现在都讨厌自己有新想法了,有了新的想法就想去实现和验证,就又要做工作,哎!好奇害死猫啊)

现在的保护系统---ring0保护系统,无一列外的都保护了OpenProcess,WriteProcess,ReadProcess,keattachprocess,kestackattachprocess甚至OpenThread。

对于OpenProcess我们可以在CreateProcess点,这个时候ring0还没加载,这个时候抢先OpenProcess拿到权限。那不就直接绕过了后面的OpenProcess的防护了吗?这种方法对于像CE这种有代码的东东就很管用了。另一个办法听说据说是通过csrss.exe来拿到权限,具体方法不知道。我猜想ring0再凶悍,也不敢对csrss.exe的OpenProcess不放行吧。纯属猜想,据说听说道听途说,从csrss.exe中DuplicateHandle出来,就把门打开了。

对于WriteProcess,ReadProcess这2个函数只要是Debuger需要这几个函数来读写Debugee的数据。OK,,ring0保护不让我读写了,怎么办??曾经我试图自己想

在ring0中实现这2个函数,---其实目前流行的做法就是你勾了我也勾,,我绕过你的检查就完蛋。确实很简单。不幸的是,有些坏蛋还要先检查这2个内核函数的完整性,就只能自己勾,你勾了我就耍赖不干了。然后呢,我们可以自己添加一个系统服务来绕过这个检查,让debuger调用这2个函数的地方改道调用新的系统服务器,确实是好方法,唯一的难度就是PEDIY自己的专用OD.然而事情没这么简单WriteProcess,ReadProcess这两个函数都要调用keattachprocess,kestackattachprocess来切换到指定的进程,ring0保护者就在这里筑起了一道防线,不允许别人切换进来。骨灰级的做解决办法就是自己实现keattachprocess,kestackattachprocess这2个函数,暴汗!!!windows中找到自己的页面和内存是如此的复杂,在undocument windows 2000 inside 中对于这个内存的计算,页表,页目录,有详细的说明,我这种笨蛋看到这里---满篇汉字没一个字不认识但就是掌握不了。  使我想弄明白的是,windows是一个多任务系统,保护系统程序本身也会被切换出上下文,当被切换回来的时候,是不是也要keattachprocess呢??需要验证啊??如果是,是否可以假装是自己被切换呢??满头雾水,一脸茫然啊 。还有就是ring0如果不停的对peb中的debugport清0,,怎么办呢??似乎很难啊??你如果停止它这个清0的内核线程,肯定很容易被发现啊。。在内核下硬件断点,ring0保护 程序可以先清除了硬件断点,怎么办呢?如何才能命中关键点呢??有一个人提出过可以内核欺骗,把这个peb内存位置置为切换在已经置换的状态,然后在页面置换的中断中处理,如果是保护本身访问这个peb.debugport,OK,,我就告诉你这个debugport确实为0.。。否则该是啥就是啥。。这个技术太高深了,实在是实现不了。。。好在这个保护检查到了debugport非0后使用的是很normal的进程结束技术办法,有人通过钩挂相关的结束函数,不允许程序退出简单的解决了这个问题。。

最后一直有个问题没弄明白,有的保护可以直接越过蓝屏重启机器,应该是一个cpu的中断服务,类似我们手工按下了计算机的reset按键。。改天上图书馆找本老的dos书查一下这个中断号

0 0
原创粉丝点击