开始之前的准备:

反汇编:IDA

十六进制编辑器: Hexworkshop

LINUX环境: KALI LINUX

调试: EDB (KALI自带的)

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

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

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

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

下面说下我的做法吧:

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

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

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

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

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

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

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

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

用EDB 载入

一路F8来到关键CALL

前面的赋值对应于

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

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

TEST EAX,EAX

JNZ 。。。。

验证密码是否正确。

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

就搞定了……

一个简单LINUX程序的逆向的更多相关文章

  1. 关于SIGSLOT的一个简单的程序

    废话少说直接看代码即可,这只是一个简单的程序,可以帮我们简单地明白SIGSLOT是怎么回事.至于深入研究自己去百度吧. #include "sigslot.h" using nam ...

  2. C#一个简单下载程序实例(可用于更新)

    运行时的界面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat ...

  3. 关于Hibernate的一个简单小程序

    本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语 ...

  4. scons构建自己的一个简单的程序

    我在我的D盘下,新建一个文件夹,命名为try.在这个文件夹下新建两个文件,一个文件是test.c .里面的程序很简单: #include<stdio.h>#include<stdli ...

  5. Xamarin开发的一个简单画图程序分享

    最近Xamarin比较火,于是稍微看了下,感觉接触过MVC的都应该能很快上手,还挺有意思,于是忍不住写了个简单的画图程序,之前看帖子有人说装不上或者无法部署,估计我比较幸运,编译完了一次就安装成功了, ...

  6. MVC-第一个简单的程序

    来源于:https://www.cnblogs.com/miro/p/4030622.html 从空白开始,建立一个基本框架详细步骤 1,新建项目 NOTE:模板要选Empty,如果直接选MVC会产生 ...

  7. 创建一个简单MyBatis程序

    文章目录 MyBatis基础 MyBatis 简介 创建一个MyBatis程序 1. 创建Java项目 2. 加载MyBatis包 3. 编写POJO类和映射文件 4.创建mybatis-config ...

  8. socketserver模块写的一个简单ftp程序

    一坨需求... 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp server上随意切换目录 (cd) ...

  9. DuiLib学习笔记2——写一个简单的程序

    我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷.我的新建项目名为:duilibTest 在duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门 首先新 ...

随机推荐

  1. Java多线程的join()

    假设在main线程里又起了一个thread1线程,在调用了thread1.start()之后: 如果在main线程里调用了thread1.join(),那么main线程将会block,直到thread ...

  2. Hadoop集群与RAID磁盘阵列

    Hadoop集群规范 硬盘选型 尽管建议采用RAID(Redundant Array of Independent Disk,即磁盘阵列)作为NameNode的存储器以保护元数据,但是若将RAID作为 ...

  3. Promise in AngularJS

    What's promise Angular’s event system provides a lot of power to our Angular apps. One of the most p ...

  4. Windows 已在 DImageProcess.exe 中触发一个断点。

    其原因可能是堆被损坏,这说明 DImageProcess.exe 中或它所加载的任何 DLL 中有 Bug. 原因也可能是用户在 DImageProcess.exe 具有焦点时按下了 F12. 输出窗 ...

  5. 模型类中 Parcelable 接口使用

    package com.exmyth.ui.model; import java.util.ArrayList; import java.util.List; public class Product ...

  6. nginx中时间的管理

    nginx出于性能考虑採用类似lib_event的方式,自己对时间进行了cache,用来降低对gettimeofday()的调用,由于一般来说server对时间的精度要求不是特别的高,只是假设须要比較 ...

  7. java.net.MulticastSocket Example--reference

    In this example we are going to explain how to use MulticastSocket in Java, in order to enable a ser ...

  8. 非对称加密算法RSA--转

    RSA     这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和L ...

  9. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项

    本文首先总结一下Bitmap的相关概念,然后通过一个实际的问题来分析设置BitmapFactory.options的注意事项,以减少不必要的内存占用率,避免发生OOM. 一. Bitmap的使用tri ...

  10. git 取消追踪

    git rm --cached filePath这个操作不会删除这个文件