运行发现不接受输入,直接弹出了一串回显
guess the flag: �<�9�c0/(���,� �~2,-
静态分析发现巨量mov,无法创建函数
并且具有dispatch函数来分发memcpy, srand, rand等库函数
以及通过异常处理来调用函数

这些特征都指向了mov混淆movfuscator

通过ltrace可以看到它进行了一次memcpy,然后就是很多rand,最后直接输出
那么问题就是这些rand和memcpy来的数据发生了什么关系呢~

ltrace过于笼统,于是我们使用qira来进一步分析

180902 逆向-网鼎(4-dalao)

可以看到,左侧timeline显示了所有调用rand的指令
静态调试是看不到他们的,因为mov混淆是通过一个extern的变量来间接调用的,因此交叉引用找不到
普通的动态调试可以通过在plt段的rand上下断来回溯调用,但过于多的调用次数显然会使得动态调试浪费大量时间
而这就是trace–qira的优势了

此处将rand的返回值存入0x8052060中,然后就覆盖了rax
而附近的指令都再没有引用过0x8052060,于是直接查看这块内存的断点命中情况
180902 逆向-网鼎(4-dalao)
timeline由于断点命中过多毫无防备的炸了
此时只能依靠jk和shift+j, shift+k来移动timeline
可以发现会通过随机数算出一个字节
180902 逆向-网鼎(4-dalao)
这个具体怎么算的由于太过混淆,就不去深究了
180902 逆向-网鼎(4-dalao)
从IDA看的更明显,很多全局变量在反复赋值干扰

通过对0x805206c的交叉引用可以拿到0x18个字节,恰好跟guess the flag后面的内容,也就是strcpy的参数长度相同
180902 逆向-网鼎(4-dalao)

异或一下,发现正好能得到flag{0xdeadbeefdeadc0de}

另外,这个题目虽然是movfuscator混淆,但是开源的反混淆demovfuscator效果并不好,不如说没什么用……

这个题目我觉得……没啥意思(:з」∠)现成的混淆,几乎没有出题人自己的东西

只有参考的WP挺有意思,学到了qira这个工具
以及感谢蓝鲸塔主的指导,这个视频得到了不少帮助=-=

相关文章:

  • 2022-01-18
  • 2021-05-27
  • 2021-08-03
  • 2021-12-03
  • 2021-10-28
  • 2021-07-26
猜你喜欢
  • 2021-06-18
  • 2021-04-28
  • 2022-12-23
  • 2021-10-08
  • 2021-09-07
  • 2021-08-16
  • 2021-12-04
相关资源
相似解决方案