zoukankan      html  css  js  c++  java
  • 一道movfuscator混淆过的简单逆向

        月赛中出了道经过movfuscator混淆的逆向题目,记录一下过程。跑起来发现需要用户输入长度为20的字符串,我尝试着输入了几次都是直接退出了,没有任何提示。用IDA打开,题目里面几乎全是mov指令。

        并且在题目的开头注册了两个信号的处理,分别是对SIGSEGV和SIGILL的处理。

        题目大小在10KB,根本没法逆,因此算法也不会太难,否则真是没法做了。想起Angr,可以用来做符号执行,但是怀疑Angr不能应付信号以及信号处理,暂且搁置。

        在网上发现一个开源项目,https://github.com/kirschju/demovfuscator 是专门来应该movfuscator的反混淆器,果断安装。拿到反混淆版本的二进制后,发现还是不忍直视,逆起来还是不好逆。好在这个东东可以产生程序的控制流图(只截取了一部分)。

        根据图,可以看到有20个分支,根据题目要求的20个字符的输入,猜测这20个分支分别是对20个字符进行的判断。这下好做了,上调试器,在这20个分支处下断点,只有上一分支正确了,才能走到下一个分支,否则会退出。每个分支处输入的字符无非就是大写字母,小写字母,数字和一些常见的符号,而且一般flag是有意义的,所以试起来还是很快的,很快就能确定flag。如下图:

     

  • 相关阅读:
    寒假自学1.11
    寒假学习1.10
    寒假自学1.09
    寒假自学1.08-python的安装学习
    寒假1.08
    寒假自学1.07
    寒假自学1.06-tensorflow安装过程
    java & | 运算符
    java << >>
    java基础百位数十位数个位数
  • 原文地址:https://www.cnblogs.com/wangaohui/p/5706816.html
Copyright © 2011-2022 走看看