开发的时候:
1.明确需求、设计稿、交互稿
2.根据需求、设计稿、交互稿编写出我们想要的应用逆向开发:
拿到目标应用去分析界面组成结构、代码逻辑、程序的执行流程来了解内部的原理。(从现有产品推导技术实现细节的过程)。
在我们打开应用的时候可以看到不同的界面和不同的功能,如果我们想要了解某个功能。比如过网易云音乐的声音识别功能,那么我们就要用到逆向工程。在逆向工程中,首先我们要通过工具分析,对应用的界面结构、网络请求、文件操作等各个方面入手,来寻找线索分析出我们想要的东西。这样我们就会得到软件界面的组成结构,可以进一步通过某个按钮去获取响应事件函数。这个时候,我们就要用到静态分析,通过静态分析我们可以针对某个响应事件函数,去分析它程序内部功能具体实现,调用了哪些函数,执行流程是怎么样的。那么,我们通过对不同函数的分析可以得到应用代码的框架构成。
通过静态分析,我们只能得到应用里有哪些函数,函数里面又执行哪些代码。但是,我们想要分析程序运行的时候的代码执行流程以及参数的传递,那么这个时候我们就要用到动态分析。通过动态分析,我们可以对目标程序进行debug,打印出它的参数,以及一步步调试他的执行流程等等。
(从现有产品推导技术实现细节的过程)
那么,通过上面的分析之后,我们对程序的界面、程序的具体流程有了一定的了解,那么这个时候,我们就可以根据目标程序的功能来实现我们自己的一些功能和增强它的一些功能,这就是逆向工程的魅力所在。
逆向工程用用平台与层次
windows
OllyDbg与Windbg进行动态调试、 IDA进行静态分析
安卓
通过ApkTool \ dex2jar 对apk文件反编译成dex文件、资源文件对dex文件转成jar文件,让后进一步得到jave伪代码这样就可以分析出安卓文件的实现原理和实现逻辑。
iOS
通过class-dump得到,目标程序的所有类和类里面的方法。通过Reveal可以得到目标程序的界面层次和界面的构成,我们还可以通过其它工具来动态调试、跟踪目标程序,得到我们想要的结果。
层次:
内核驱动层、硬件层
分析可以得到底层的具体实现和实现原理。
设备框架层
framework里面的具体代码逻辑,或者说我们想要了解我们调用了某个api函数后,底层实现了哪些操作。
应用层
我们可以对别人的应用进行分析,(界面组成结构、某个功能、拦截它的数据等)
iOS逆向工程的作用
iOS逆向工程需要的基础
相关工具
通过Reveal可以得到界面结构、界面层次以及界面构成。打印界面结构,通过界面结构,我们可以得到某个控件的对象进而得倒control对象,让后对control进行跟踪调试分析得到具体的执行函数。
通过snoop-it,得到一个类里面的所有方法,然后手动去调用它的方法,还可以得到它的文件操作、keychine操作、网络操作以及一些加密函数操作等等这样就可以根据不同层次对应用进行分析。
通过Hopper,可以把二进制的代码翻译成汇编代码,通过汇编代码进行分析,可以知道函数内部调用了哪些函数,以及这些函数的名称是什么。
通过IDA进行分析,同样这两款工具可以转成成高级语言的伪代码,通过伪代码为们可以很清楚的知道一个函数的内部调用可哪些函数以及它的参数是什么。
调试跟踪
使用lldb附加到手机上的应用,让程序去断下来,在我们想要设置断点的地方设置一个断点,让程序继续运行。当程序运行到我们的断点的时候,就会自动断下来,这个时候我们就可以打印程序的参数,以及在某个跳转的地方,判断程序的执行方向,执行流程和执行逻辑等。
除了调试工具,还有其它工具,对程序的运行进行动态的跟踪,打印内部函数的调用方法以及参数。
网友评论