今天又是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
