三环重写OpenProcess 调用过程重点为 KernelBase->ntdll,kernelbase中做了数据的处理,函数名字为NtOpenProcess,ntdll中则选择服务号进入0环,我们可以逆向NtOpenProcess分析具体用了什么参数。
PAE分页模式下实现高2g内存全可被用户权限访问 无论是PDEPTE还是PTE还是PDE在虚拟地址内都有一张线性的表里面存的PTEPDE都是PTE所以说,我们只需要改1024*1024个PTE的属性就行了,属性要改US位和G位才可以实现用户权限访问。
滴水 加载进程,内存写入 第一个跳转这个,没写好,如果你的导入表dll依赖其他dll,那么你就需要递归,但我怎么也写不出来,那个递归莫名其妙的有个死循环,一直重复包含。后面贴了IAT修复函数,里面有写一个坑,修复IAT的时候注意对着INT修改成IAT,因为后面那个程序的IAT是已经被修过的了,没有储存数据。
滴水加密壳,类似傀儡进程 还有就是滴水给出的细节没给全,因为我的试验是,两个软件如果文件对齐,内存对齐是一样的就能运行,否则不行。我试了两组例子,一组1000 10000,一组1000 200,一样就能够运行,不一样就不行。该踩的坑有,ASLR基址,大意就是不能修改imagebase不然后系统一检测到就报c0000005,所以大多数软件都不需要修复重定位表,大部分imagebase都是0x400000。我猜测是因为上下文里还有需要修改的东西。总之是一项过时的技术,体验思路就行,没必要抓着这些细枝末节刨根问底。
多线程测试 因为我不想写gui所以用的控制台写的,不过可能写的有问题,因为后面的线程顺序不会改变,永远是线程1->2->3->4,也可能是我的cpu执行太快了,因为之前上课测试的两条线程不用临界体10000次全局变量数据会有误差,而我试了一下我的开了20条线程跑不用临界体也不会有误差。
资源表解析+下载图标 下载图标则是在上面解析的基础上做一个判断ID?=3,是的话就是全部从fileBuffer转化成文件,转化名字可能要用点字符串处理函数。我选择使用两个for循环遍历出所有的具体项,说复杂也不算。改名字就没去做了,反复造轮子而已。资源类型->编号->具体项。
导入表注入 感觉实现一个判断是否为字符串太复杂了,所以因地制宜不如直接判断这个数字是否在合理的范围内,这个范围不可能为字符串指针,正常情况也不能有比这个更大的序号。与其他人的导入表注入没什么区别,但是多加了一个判断是否为序号寻找,还是名字寻找。
打印绑定导出表 没什么难度,不过我找测试的dll太太费劲了,一般用这个提升启动速度的都是老东西了,我翻了半天才翻出来1998的老宝贝才翻出来带有ref的绑定导出表。不过值得一提的是ref表里有一个保留位,我觉得那是一个跟绑定导入表对齐,方便计算所以故意留的保留位,如果要解析小表只用绑定导入表的指针+1就行了。