- 博客(29)
- 收藏
- 关注
原创 32位ssdthook
先获取_KPCR->_KPRCB->_KTHREAD->ServiceTable。然后需要关闭写保护->修改函数->开启写保护。替换的函数注意堆栈平衡。
2024-04-29 22:19:24
84
原创 三环重写OpenProcess
调用过程重点为 KernelBase->ntdll,kernelbase中做了数据的处理,函数名字为NtOpenProcess,ntdll中则选择服务号进入0环,我们可以逆向NtOpenProcess分析具体用了什么参数。
2024-04-27 19:54:04
238
原创 PAE分页模式下实现高2g内存全可被用户权限访问
无论是PDEPTE还是PTE还是PDE在虚拟地址内都有一张线性的表里面存的PTEPDE都是PTE所以说,我们只需要改1024*1024个PTE的属性就行了,属性要改US位和G位才可以实现用户权限访问。
2024-04-23 00:43:57
108
原创 Inline hook
函数地址是一个跳转点,所以就非常适合我们写hook,hook回去的函数就不写了,那也太无聊了,怎么hook来怎么写回去就行了。这里的实验用到了vs的编译特性。
2024-04-15 12:45:41
102
原创 IATHOOK
没什么好研究的,课上讲的问题原因是,IAT是管理虚拟4gb内函数的地址,messagebox就在其中,调用了就会无限循环递归,造成线程卡死。
2024-04-15 07:50:03
116
原创 滴水 加载进程,内存写入
第一个跳转这个,没写好,如果你的导入表dll依赖其他dll,那么你就需要递归,但我怎么也写不出来,那个递归莫名其妙的有个死循环,一直重复包含。后面贴了IAT修复函数,里面有写一个坑,修复IAT的时候注意对着INT修改成IAT,因为后面那个程序的IAT是已经被修过的了,没有储存数据。
2024-04-15 05:43:45
204
原创 滴水加密壳,类似傀儡进程
还有就是滴水给出的细节没给全,因为我的试验是,两个软件如果文件对齐,内存对齐是一样的就能运行,否则不行。我试了两组例子,一组1000 10000,一组1000 200,一样就能够运行,不一样就不行。该踩的坑有,ASLR基址,大意就是不能修改imagebase不然后系统一检测到就报c0000005,所以大多数软件都不需要修复重定位表,大部分imagebase都是0x400000。我猜测是因为上下文里还有需要修改的东西。总之是一项过时的技术,体验思路就行,没必要抓着这些细枝末节刨根问底。
2024-04-13 20:36:15
176
3
原创 多线程测试
因为我不想写gui所以用的控制台写的,不过可能写的有问题,因为后面的线程顺序不会改变,永远是线程1->2->3->4,也可能是我的cpu执行太快了,因为之前上课测试的两条线程不用临界体10000次全局变量数据会有误差,而我试了一下我的开了20条线程跑不用临界体也不会有误差。
2024-04-12 11:39:41
195
原创 资源表解析+下载图标
下载图标则是在上面解析的基础上做一个判断ID?=3,是的话就是全部从fileBuffer转化成文件,转化名字可能要用点字符串处理函数。我选择使用两个for循环遍历出所有的具体项,说复杂也不算。改名字就没去做了,反复造轮子而已。资源类型->编号->具体项。
2024-04-11 02:15:11
114
1
原创 导入表注入
感觉实现一个判断是否为字符串太复杂了,所以因地制宜不如直接判断这个数字是否在合理的范围内,这个范围不可能为字符串指针,正常情况也不能有比这个更大的序号。与其他人的导入表注入没什么区别,但是多加了一个判断是否为序号寻找,还是名字寻找。
2024-04-05 22:08:44
136
1
原创 打印绑定导出表
没什么难度,不过我找测试的dll太太费劲了,一般用这个提升启动速度的都是老东西了,我翻了半天才翻出来1998的老宝贝才翻出来带有ref的绑定导出表。不过值得一提的是ref表里有一个保留位,我觉得那是一个跟绑定导入表对齐,方便计算所以故意留的保留位,如果要解析小表只用绑定导入表的指针+1就行了。
2024-04-05 18:03:13
149
1
原创 合并节并且遇到逆天情况 + 打印目录表
SizeOfRawData会影响内存写入到文件里ImageBuffer To FileBuffer,毕竟他在文件中大小为0,那么我们就只需要在前面做一个判断是否为0,为0就不写。如果说合并的第一个节的PointerToRawData和SizeOfRawData 都为0该怎么办,没想到我随便用vs生成的测试软件能测试的这么极端…解决方法放在代码里了。大概就是PointerOfRawData会影响pe headers的覆盖,所以说合并第一节时需要做一个循环判断。算是多踩几个雷,对pe结构理解更深了吧。
2024-04-03 04:25:59
156
1
原创 shellcode写入的随机基址处理
昨天写完shellcode任意节写入时,我想测试文件对齐与内存对齐不一样的文件能不能成功(因为我实在找不到一个可以提供我测试的软件,很多软件没有用user32这个dll,其他的我也还没学),于是自己写了一个仅调用了messagebox的函数,结果没有成功,我以为是我的imagebuffer没有处理好,结果拖进od计算才发现,我的e8后面的地址算错了,e9却对了,需要看到这个字节掌控了很多权限,但是网络上看的视频却没有把这个属性标红。最后关掉,shellcode就能工作了。
2024-04-02 15:56:19
148
1
原创 FileBuffer->ImageBuffer->FileBuffer PE结构
以前要是没去浪费时间干其他事情,可能在这个领域也能有所建树了吧,虽然每次安慰自己多了很多人生阅历,但谁不想有个happy ending呢?上一次写博客都是4年前了,现在重新学习又是感慨万千。
2024-04-01 17:01:48
214
原创 根据特征码找到未导出的内核函数 PspTerminateProcess
使用的是一个UINT32数组来存放shellcode没有考虑全局变量的问题#include <ntifs.h>typedef NTSTATUS(*pFunTerminateProcess)(IN PEPROCESS Process, IN NTSTATUS ExitStatus);typedef struct _LDR_DATA_TABLE_ENTRY { LIST_ENTRY InLoadOrderLinks; LIST_ENTRY InMemoryOrderLinks; LIS
2020-09-13 17:25:23
955
原创 内存写入 隐藏模块注入
思路:1.获取自身SizeOfImage ImageBase2.远程申请注入进程SizeOfImage大小的内存 内存位置随机 获得内存位置:ProcessAddr3.申请一段SizeOfImage大小缓冲区,写入自身程序 内存位置:ImageBase4.修复Image重定位表(参数为:ProcessAddr)5.写入缓冲区ProcessAddr,SizeOfImage6.远程线程申请入口点为DWORD WINAPI(LPVOID lparameter)7.入口点修复导入表,因为
2020-09-11 13:54:48
1637
原创 保护模式测试
工具:VC 6 WinDbg第一题//注意点:下面采用的都是PAE分页(2-9-9-12)公式:PDE = ((dwAddr>>21)<<3) & 0x3FF8 + 0xC0600000 ; //2 + 9PTE = ((dwAddr>>12)<<3) & 0x7FFFF8 + 0xC0000000;// 2 + 9 + 9第一题难点在于计算PDE PTE#include "stdafx.h"#include <Wind
2020-09-11 13:13:24
590
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人