今天又是emo的一天

Key

竞赛官网
图片描述
首先有文件,能想到的就是会读,那么直接hook NtCreateFile
图片描述
断点之后到NtReadFile对参数Buffer下访问断点即可
图片描述
会断到这里
图片描述
回溯到找个call的最外层,他这里就是一个copy
然后检查buffer是否包含'-'字符,如果不包含返回-1然后返回0,驱动加载失败
图片描述
单独保存user以及key
图片描述
检查key是否合法并返回
图片描述
使用username计算出key然后与之前的对比是否相同,成功返回1驱动返回成功
他这里其实已经是keygen了
图片描述
keygen
图片描述
去混淆
图片描述
验证一下
图片描述

Shellcode

PsCreateSystemThreadEx函数内PspCreateThread位置断点
图片描述
修改系统函数PopIrpWorkerControl代码段,构造跳板,达到伪造线程入口
图片描述
但是这个线程里面就一个KeDelayExecutionThread
图片描述
图片描述
dump整块shellcode,sub_1180会一直调用,这个函数是没有vm的
堆栈可以看到Process Name 以及Path Name
图片描述
图片描述
图片描述
往上发现大概这样
图片描述
shellcode调用系统函数大致流程为endecrptFunc ^ 0xACACACACACACACAC
得到跳板地址

跳板地址拷贝原系统函数头部字节 计算保存字节数 push返回地址ret
push value
Mov [rsp+4],Value
Ret
于是看了下标签
图片描述
遍历Pool找出所有带有push mov rsp的地址保存下来
图片描述
图片描述
图片描述
图片描述
然后看了下部分调用的API
MmCopyVirtualMemory以及MmCopyMemory都没用调用
结合它一直在判断进程,那么可能是在等待一个进程
回到前面跟了判断的参数下访问断点没多远就能看到进程名GameSec.exe
图片描述
图片描述
创建一个进程名一样的启动后PsGetProcessPeb就会断下
图片描述
之后就是MmCopyVirtualMemory
图片描述
最后一直在读PEB+0xACE
图片描述