首页
社区
课程
招聘
[原创] 2024西湖论剑 Qrohttre 一道windows调试实现同步题
发表于: 2024-1-31 23:14 15958

[原创] 2024西湖论剑 Qrohttre 一道windows调试实现同步题

2024-1-31 23:14
15958

字符串搜输出内容,有个假的校验,下断点断不下来

断scanf跟踪,返回到40DFDE,动态静态代码不一致,smc

解密代码

1706600266817

加密段是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字节为读写的地址)


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (3)
雪    币: 3335
活跃值: (5455)
能力值: ( LV6,RANK:92 )
在线值:
发帖
回帖
粉丝
2
群友前来帮顶
2024-1-31 23:22
0
雪    币: 3573
活跃值: (31026)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-2-1 09:27
1
雪    币: 1567
活跃值: (907)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
tql
2024-2-1 23:07
0
游客
登录 | 注册 方可回帖
返回
//