前言

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

这个壳的反调试部分在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,则会导致它还原失败,所以这里是不能提前下断点的

流程分析

通过hook getItemDialog函数的ret,可以找到按钮按下时哪里读取了,这里对flag进行了检查,然后生成了一个结构放入临界区就结束了。说明这是多线程的程序