• 一个简单LINUX程序的逆向


    开始之前的准备:

    反汇编:IDA

    十六进制编辑器: Hexworkshop

    LINUX环境: KALI LINUX

    调试: EDB (KALI自带的)

      一个简单的动态追码, 大牛们就略过吧…… 

    用16进制打开看看,前面有个明显的ELF标志

    image

    然后运行下看是啥样的……

    image

    额。。。  一个输入密码   然后验证的程序

    下面说下我的做法吧:

    主要是    静态分析(IDA)    和动态调试  (EDB)   

    把这个CM3扔到IDA中静态分析image

    在它调用的函数名称表里可以看到   GETS,MEMCMP等函数。。。。       然后可以自己脑补一下这个程序的运作了。。。。

    用IDA的反编译功能,      在主界面F5一下 就能得到  接近源码的东西

    (算法看起来很复杂的样子)

    image 

    前面还有一大堆赋值语句暂时先不管。。

    然后这里是关键点,拿 2个字符串进行 比较,  正确就出答案   ……  而在IDA分析中  这2个字符串的值都是未定义,  所以可以想到应该是在动态调试中生成的。

    image

    然后进入第2部分  :动态调试阶段  

    用EDB 载入

    image

    一路F8来到关键CALL

    image

    前面的赋值对应于

    image

    继续F8可以看到一堆CALL,   于IDA分析的  PUTS()等函数对应

    image

    密码是经过算法动态生成的, 通过分析源码中有一个CALL (MEMCMP) ,对应的反汇编也会有,所以我们一路跟至程序末尾,找到这个CALL  , 此时内存中也会有相应的密码。

    image

    TEST EAX,EAX  

    JNZ 。。。。

    验证密码是否正确。

    此时栈中也有了对应的密码….

    image

    image

    就搞定了……

    image

  • 相关阅读:
    Adb 命令
    python 属性
    python 计时器
    【网易云课堂工作】什么是本能三元组
    functiontools.partial
    源码
    听总结
    线程和死锁
    加入kendall进入计算
    添加K-CORE值进入运算
  • 原文地址:https://www.cnblogs.com/wu-yan/p/3616518.html
Copyright © 2020-2023  润新知