网友UID(5845952017)对「scz's puzzles 9」的解答

admin 2023年7月14日03:20:45评论24 views字数 1742阅读5分48秒阅读模式
作者: 0x指纹/UID(5845952017)
创建: 2023-07-07 09:54
更新: 2023-07-12 22:27
https://scz.617.cn/windows/202307070954.txt
https://weibo.com/5845952017/N9ziU1jjJ

参看

《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变得更好用。

原文始发于微信公众号(青衣十三楼飞花堂):网友UID(5845952017)对「scz's puzzles 9」的解答

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月14日03:20:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网友UID(5845952017)对「scz's puzzles 9」的解答https://cn-sec.com/archives/1873345.html

发表评论

匿名网友 填写信息