5. 逆向的基本思路

正向工程(Forward Engineering)
抽象的逻辑设计 => 具体的物理实现
设计概念和算法 => 编写源代码 => 编译成二进制机器码
将想法和设计理念变成具体实现的过程

逆向工程(Reverse Engineering)
具体的物理实现 => 抽象的逻辑设计
反编译机器码 => 汇编代码(类似的高级语言代码) => 理解其算法和设计概念
从二进制码中提取设计概念和算法

程序的编译和反编译

高级语言(C/C++/Oc/Java/Python/C#) -> 中间语言(如:汇编等) -> 目标代码(exe/lib/dll/sys/dylib等二进制文件)

          编译链接   
高级语言   ------->    机器码   
          <------     机器码  
         反汇编/反编译 
        编译链接
高级语言  ===>     机器码  
          <===
        反汇编/反编译

逆向的思路

  • 逆向必须是有目的的、有针对性的(明确你要做的事情)
  • 先熟悉你要逆向的目标程序,从正向的思路去猜测他可能的实现方法(使用的框架、调用的系统API等)
  • 定位关键代码
    - 通过监控UI事件的响应定位关键代码
    - 通过监控底层API的调用定位关键代码(如网络访问接口、文件读写接口等)
    - 通过观察数据的变化来定位关键代码和地址

逆向是一个试错的过程,需要不停的猜测、查找和进行验证,既考验耐心也考验动手能力

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,269评论 25 708
  • 简介 本篇文章是个人对IDA逆向工程的研究,相关内容:逆向工程的简介、IDA基本使用和工作原理、反编译可执行文件部...
    朴下柔阅读 1,239评论 0 3
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,367评论 2 35
  • 七月与安生,就像张爱玲笔下的红玫瑰与白玫瑰,七月-白玫瑰,安生-红玫瑰,你中有我,我中有你。 红玫瑰象征着艳丽奔放...
    曼陀罗之谜阅读 314评论 1 4
  • 喧闹的永远是晦暗的人心,寂静的只会是淡淡情愫
    沉1997阅读 150评论 0 0