标题: 网友UID(5845952017)对「scz's puzzles 9」的解答 作者: 0x指纹/UID(5845952017) 创建: 2023-07-07 09:54 更新: 2023-07-19 09:07 链接: https://scz.617.cn/windows/202307070954.txt https://weibo.com/5845952017/N9ziU1jjJ https://bbs.kanxue.com/thread-278069.htm 参看 《scz's puzzles》 https://scz.617.cn/misc/202206221800.txt 这是第9题 -------------------------------------------------------------------------- Win10 Calculator是UWP程序,找出UI界面上乘法运算对应的汇编指令所在。要求计 算器必须是UWP,且版本不低于11.2210.0.0。非UWP计算器不考虑,更低版本UWP不考 虑,可以是Win11上的UWP计算器,只要版本不低于11.2210.0.0。 有网友用TTD解题结束。提一个升级版的问题,假设已有run文件,如何在几分钟内定 位四则运算的汇编指令所在。这类问题的答案最终都将演变成生产力工具。 这位网友又回答了升级版问题。 -------------------------------------------------------------------------- 学了下ttd-bindings,踩了些坑,简单实现了一分钟左右定位到加减乘的汇编和除法 的结束现场。除法似乎是间接方式实现的,结束现场由不是输入的数值得到的计算结 果。 实现方式: 先获取到CalcViewModel.dll模块的起始地址和大小,接着设置call、ret回调函数, 回调函数中对触发时的地址进行判断,若属于CalcViewModel.dll模块中的地址,则 从该时间点往后单步ReplayForward,每执行一步就对常用寄存器值进行判断,加减 乘判断输入的两个值,除法判断结果值,若包含相应的值就打印时间点再到windbg里 面验证过滤。 如何缩短定位时间: 1. 遍历"!tt 0"到"!tt 100"的汇编代码时间花费很长,很多部分和计算无关不需要 执行,尝试了挺久,通过设置call、ret回调函数找到第一个属于CalcViewModel.dll 模块中的地址,从这个时间点开始单步ReplayForward执行,到达加减乘的汇编现场 的时间可以接受。 2. 让录制时间尽可能短,如提前打开计算器,先输入好两个数值,然后Attach录制, 快速点击计算操作,出结果后立马停止录制,使用上面的ttd-bindings编程思路,可 在一分钟内定位到加减乘的汇编和除法的结束现场。 踩的坑: 1. ReplayBackward执行极其慢,最初的思路是内存搜索计算结果,查找最早写这个 数据的时间点,然后从这个时间点向前执行,但发现ReplayBackward真是龟速, ReplayForward就很快。不过虽然ReplayForward快,但是架不住run文件的时间长, 还是要尽可能地想办法缩小时间范围。 2. auto ctxt = ttdcursor.GetContextx86_64()执行后,如果不free(ctxt),内存 会一点点被耗尽,仓库代码里面没有free操作,遍历trace文件汇编代码发现内存满 了我才意识到这个问题。。。huhuO7O6说的"太耗内存"可能也是没有主动free ctxt。 3. 尝试通过开多线程分段跑不同段的时间线,以加快定位速度,但是发现线程里面 调用ttd-bindings的函数,程序会直接停止执行,原因不明。 4. 如果callret回调函数中的操作和时间点顺序有关,需要生成run文件的idx文件, 不然callret回调函数中获取的时间点,打印出来会发现从前到后是乱序的,即不是 从start到last。 5. ttdcursor.ReplayForward(&replayrez, last, -1),第三个形参是-1的话,无法 触发call、ret回调函数,这个坑让我十分困惑,不过没多久我在仓库的issues里面 发现yara-ttd的作者atxr提了issue描述了这个问题 https://github.com/commial/ttd-bindings/issues/27 https://github.com/atxr/ttd-bindings/tree/issue-callback 总结: TTD十分好用,ttd-bindings让TTD变得更好用。 作者后来写了一篇更详细的 《TTD调试与ttd-bindings逆向工程实践》- [2023-07-18] https://bbs.kanxue.com/thread-278069.htm