前言

这个题很有意思
但是第一关就卡了我很久
这里记录一下我是怎么分析的

这个壳的反调试部分在TlsCallback_0函数的第二次call rax中
7FF708E27DB0这个函数,通过7FF708E26280判断是否有调试和7FF708E244A0判断是否有hook,然后获得一个标志位放到flag_a中

image-20250216210356149

在jmp rax中跳转到7FF708E24400执行setThreadInfomation函数的位置,传参是-(flag_a != 1) ^ 0x11
如果标志位为1说明是调试,会直接触发hidefromdebug效果,如果标志为2则会传入错误的setInfomatinon值,最后会传出0xC000003导致显示环境异常.如果标志为5,表明正常不会进行检查.

第二点,这里调试的时候如果对后面SMC解密的代码下了断点0xcc,则会导致它还原失败,所以这里是不能提前下断点的

脱壳

将程序的动态基址关掉,然后来到jmp之后的位置。用xdbg脱壳,IAT表没有还原,所以不能运行,但是这样可以直接看到加密流程了

就是一个TEA