其他
某鹅安全竞赛20年初赛ring0题解
看雪论坛作者ID:危楼高百尺
其实对于vmp壳我还有许多的知识待学习,中间如有些错误或者问题,还请大家多多赐教。
初赛ring0题目:
DriverDemo.sys是一个驱动程序,它内置了一些限制。
1, 不能篡改该文件,尝试使驱动成功加载。
2, 该驱动程序成功加载后,突破它的限制,但不允许patch文件或内存,使它成功打印出(用dbgview可接受)调试信息"hello world!".
1
前期准备
因为我之前也没怎么涉猎过有关vmp的知识,只知道这是个强壳,但是大概瞟了一眼前面的方法似乎也没有很复杂,直接开冲。
还是去手工跳过前面的解密阶段,去找程序的找OEP,然后就可以去分析没被vmp保护的代码。我去试了试,并没成功。
这是DriverDemo.sys的导入表,很明显MmGetSystemRoutineAddress这个函数是多出来的,似乎有些函数调用vmp壳并不会将其隐藏起来,那在这个函数下断岂不是就可以断到解密完的地方,然后把内存dump下来再继续分析。
MmGetSystemRoutineAddress是内核里根据函数名获取函数地址的一个常用函数,可以看到获取到的函数地址保存在fffff8045ca94010处,然后后面紧接着调用了这个地址。
到这里差不多可以确信现在执行的代码差不多是解密后的关键代码。用Windbg把这个驱动现在的内存dump下来,拖到IDA里面看看。
博客《利用IDA的F5来反VMP2.x的Mutation保护》建议,分析混淆后的程序最好把IDA的这个选项勾掉,以免乱创建函数,影响graph和F5,去变异代码那手动创建函数会好很多,我们这里照做。
返回地址是int 3下面的那条指令,而正是这个int 3造成了截断反编译结果的JUMPOUT。所以这里我们把这个int 3改成nop,然后把所有的函数删掉再重新分析。
可以看到反编译的结果就比较正常了,在后面还会有几次这样类似的截断,同样的方式处理就可以,剩下的工作就是把所有的系统函数名字、对应的变量类型都给标上。
2
第一问
反双机调试
效果就是当我们调试这个驱动时,F5后想再断下就断不下了。这里我们只需要重新将kdDebuggerEnabled 置为1(执行ed kdDebuggerEnabled 1),然后跳过运行KdDisableDebugger即可。
检查注册表项
typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG DataLength;
UCHAR Data[1];
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
这个函数主要逻辑就是判断某一个注册表项是否为1,如果不为1就返回0,让驱动退出。这里对于注册表操作的代码可以参照《Windows内核安全》的4.2小节,几乎是一样的。
所以只需要在对应的注册表处添加一个键值为1的注册表项就可以让驱动正常运行。
3
第二问
#include <ntddk.h>
VOID myUnloadDriver(PDRIVER_OBJECT pDriverObject)
{
DbgPrint("unload driver\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING pPath)
{
UNICODE_STRING EventName;
HANDLE hEvent;
PRKEVENT pEvent;
DriverObject->DriverUnload = myUnloadDriver;
RtlInitUnicodeString(&EventName, L"\\BaseNamedObjects\\tp2020");
pEvent = IoCreateNotificationEvent(&EventName, &hEvent);
KeSetEvent(pEvent, 0, 0);
return STATUS_SUCCESS;
}
4
总结
文中的一些附件会上传至文末。还有驱动加vmp壳感觉强度也不是很高?为什么dump下内存来字符串都是明文的,我又去自己给驱动加了vmp壳试了试,似乎dump下来字符串信息都是明文的。
所以vmp加在驱动上和加载exe文件上有啥区别?感觉vmp强度应该是蛮高的才对。这方面的资料也不是很多,还请各位看官多多指教。
看雪ID:危楼高百尺
https://bbs.pediy.com/user-home-926584.htm
*本文由看雪论坛 危楼高百尺 原创,转载请注明来自看雪社区
# 往期推荐
2. angr学习(三)一道自己模仿着出的简单题和angr-ctf符号化输入相关题目
6. 关于一次在pwnable.kr中input题目的经历(python3)
球分享
球点赞
球在看
点击“阅读原文”,了解更多!