前言
当开发一个应用的时候,首先要明确需求、设计稿、交互稿。然后程序员根据需求、设计稿、交互稿,编写出产品想要的应用。
在逆向中恰恰相反。拿到目标应用后,去分析他的页面组成结构、代码层级、程序的执行流程,来了解他的内部原理。
所以,逆向工程就是从现有的产品推导技术实现需求的过程。
举例
手机上有很多应用,在我们打开应用的时候,可以看到不同的页面和不同的功能。如果我们想要去了解这些功能。
比如:网易云音乐的声音识别功能(如下图),这个时候,就需要用到逆向工程。
Snip20170627_1.png.png
在逆向工程中,有三个步骤进行分析
- 工具分析:
- 软件页面组成结构:对应用的页面结构、网络请求、文件操作等各个方面入手,来寻找线索,分析出我们想要的东西。
- 我们还可以进一步通过某个按钮,去获取到它的响应事件函数,那么这个时候,我们就需要用到静态分析。
- 静态分析:
- 什么是静态分析:通过某个按钮,去获取到按钮的响应事件函数
- 程序功能具体实现:
- 通过静态分析,我们可以针对某个响应事件函数去分析它内部功能实现:
- 调用了哪些函数,执行流程是怎么样的
- 应用代码框架构成:对不同函数的分析,就可以得到应用代码框架构成。
- 结果:
- 通过静态分析,我们只能得到,应用程序里面有哪些函数、函数里面又实现了哪些代码。
- 动态分析:
- 什么是动态分析:
- 如果我们想去分析程序运行时候的代码及其流程、以及参数的传递。这就是动态分析
- 执行流程参数传递:
- 通过动态分析,可以对目标程序进行debug、然后打印出它的参数以及一步步调试它的执行流程等等.
- 通过动态分析,可以对目标程序进行debug、然后打印出它的参数以及一步步调试它的执行流程等等.
- 什么是动态分析:
总结:
- 通过上面的分析之后,对程序的界面,代码的构成,程序的具体流程 有了全面的了解。这个时候,就能根据目标程序的功能来实现自己app的一些功能和增强它的一些功能。这就是逆向工程的魅力所在。
逆向工程应用平台与层次
平台
window 平台
- 动态调试: OllyDbg、Windbg、
- 静态分析:IDA Pro…
安卓平台
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
逆向工程的相关工具:
监控工具:
- 记录目标程序行为的工具,包括界面变化、文件读取、网络传输等
- Reveal、 snoop-it、introspy
反汇编工具
- 通过分析二进制文件,生成汇编代码,进而转换成高级语言
- 用来查看执行逻辑和执行流程
- Hopper,IDA
调试跟踪工具
- 通过设置断点,查看当前程序运行状态
- gdb 、 IIdb
逆向工程学习路线:
Snip20170627_9.png
网友评论