-
-
[原创] 2024西湖论剑 Qrohttre 一道windows调试实现同步题
-
发表于:
2024-1-31 23:14
15960
-
[原创] 2024西湖论剑 Qrohttre 一道windows调试实现同步题
字符串搜输出内容,有个假的校验,下断点断不下来
断scanf跟踪,返回到40DFDE,动态静态代码不一致,smc
解密代码
加密段是0x40DE77~0x40e2bb
主进程以调试模式创建子进程,子进程执行相同的程序
主进程 等待调试事件
子进程创建,发生调试事件控制权回到主进程
主进程 在子进程入口点设置0xCC断点
主进程 获取用户输入
主进程 恢复子进程运行,继续等待调试事件
子进程运行至入口点,0xCC断点控制权回到主进程
f_OnException_406FA0 函数负责分发异常调试事件(处理了断点、单步、访问越权三种不同的异常调试事件)
0xCC触发的断点异常,分发给f_OnBreakPoint_4070A0函数处理
该函数将用户输入数据同步到子进程,并设置TF位触发单步异常
主进程 恢复子进程运行,继续等待调试事件
子进程执行代码,由于TF位被设置,触发单步异常控制权回到主进程
分发给f_OnSingleStep_407530函数处理
该函数会一直设置TF位,故相当于主进程 以单步的方式 调试子进程
该函数中还包括一个反调试,导致主进程无法被继续调试
f_OnSingleStep_407530是主进程步进调试子进程的代码
当检测到子进程运行到第二段SMC时,解码起始16字节的代码
完成起始16字节代码解密后,子进程每执行一条指令之前,主进程就解密一次后续代码,并往子进程上一条指令填充垃圾数据
按图片所示,patch掉第二个写回垃圾指令的WriteProcessMemory,然后在图中位置设置断点。执行到断点时(把下面那条Write也执行了)用ark找到子进程pid,用CE dump子进程40B991-40DDB4的解密后的代码。(此处解密不完全,5.1有补充)
加密段是40B991-40DDB4,复制一份程序改名为QrohttreSub.exe
,方便分析子进程,ida里把CE dump出来的解密后代码patch到QrohttreSub.exe中
patch完后,ida识别出QrohttreSub.exe的main函数位于0040B8F0
通过单步陷阱处理函数(f_OnSingleStep_407530)解密的代码,从40B991开始的指令,操作数是不正确的,还未完全解密
子进程执行错误操作数的读写指令,触发访问权限异常,控制权再次回到主进程,分发给f_OnAccessViolation_406710
该函数会读取指令读写的地址(该函数默认指令第2~5字节为读写的地址)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!