逆向笔记 - 初识逆向工程

2017-06-27  本文已影响0人  文瑶906

前言

当开发一个应用的时候,首先要明确需求、设计稿、交互稿。然后程序员根据需求、设计稿、交互稿,编写出产品想要的应用。
在逆向中恰恰相反。拿到目标应用后,去分析他的页面组成结构、代码层级、程序的执行流程,来了解他的内部原理。
所以,逆向工程就是从现有的产品推导技术实现需求的过程。

举例

手机上有很多应用,在我们打开应用的时候,可以看到不同的页面和不同的功能。如果我们想要去了解这些功能。

比如:网易云音乐的声音识别功能(如下图),这个时候,就需要用到逆向工程。


Snip20170627_1.png.png

在逆向工程中,有三个步骤进行分析

  1. 工具分析:
    1. 软件页面组成结构:对应用的页面结构、网络请求、文件操作等各个方面入手,来寻找线索,分析出我们想要的东西。
    2. 我们还可以进一步通过某个按钮,去获取到它的响应事件函数,那么这个时候,我们就需要用到静态分析。
  2. 静态分析:
    1. 什么是静态分析:通过某个按钮,去获取到按钮的响应事件函数
    2. 程序功能具体实现:
      • 通过静态分析,我们可以针对某个响应事件函数去分析它内部功能实现:
      • 调用了哪些函数,执行流程是怎么样的
    3. 应用代码框架构成:对不同函数的分析,就可以得到应用代码框架构成。
    4. 结果:
      • 通过静态分析,我们只能得到,应用程序里面有哪些函数、函数里面又实现了哪些代码。
  3. 动态分析:
    1. 什么是动态分析:
      • 如果我们想去分析程序运行时候的代码及其流程、以及参数的传递。这就是动态分析
    2. 执行流程参数传递:
      • 通过动态分析,可以对目标程序进行debug、然后打印出它的参数以及一步步调试它的执行流程等等.
Snip20170627_2.png.png.png

总结:

  1. 通过上面的分析之后,对程序的界面,代码的构成,程序的具体流程 有了全面的了解。这个时候,就能根据目标程序的功能来实现自己app的一些功能和增强它的一些功能。这就是逆向工程的魅力所在。

逆向工程应用平台与层次

平台

window 平台

安卓平台

ApkTool、dex2jar:对APk文件反编译成dex文件,资源文件等等,然后对dex文件转成java文件,进一步得到java伪代码。这样就能分析出一个安卓应用实现原理和实现逻辑
jd-gui 、 IDA Pro...

iOS 平台

class-dump: 得到目标程序的所有类和类里面的方法
Reveal:得到目标程序的界面层次、界面构成
Cycript、theos…

层次

硬件层、内核驱动层: 通过这两个层次进行分析,我们可以得到底层的具体实现和实现的原理

设备框架层: 通过此层次的逆向分析,可得到一个framewrok里面的具体代码逻辑或者说,我们想了解我们调用了某个api函数后,底层实现了哪些操作。那么这个时候,我们就可以通过“设备框架层”的逆向分析来得到我们想要的结果。

应用层:可以对其他应用进行分析,分析页面组成结构,分析某个功能,拦截数据等等。


Snip20170627_3.png.png
Snip20170627_4.png

逆向工程的相关工具:

监控工具:

反汇编工具

调试跟踪工具

Snip20170627_8.png


逆向工程学习路线:


Snip20170627_9.png
上一篇 下一篇

猜你喜欢

热点阅读