iOS逆向过程步骤汇总

经过这段时间的实践,总结了一下逆向开发调试的大体步骤,准备分篇幅记录的详细点,避免之后会忘掉。

基础阶段


  1. 远程登录ssh(可以通过ssh进行远程登录,为了提高效率,可以通过usbmux进行端口转发的方式进行链接)
  2. 选择自己感兴趣的APP,使用cycript进行界面嗅探,找出需要修改的UI的名称,以及动态调试一下相关的view,查看相关的view的responder,进而找到控制器controller,完成基本的内容定位
  3. 对于你想研究的APP使用dumpdecrypted.dylib进行脱壳操作,并导出脱壳的APP(DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /filepath)
  4. 使用class-dump 导出脱壳app字节码可执行文件头文件
  5. 根据第二步的嗅探后的相关内容定位到的类,在头文件中找出相关的类的信息
  6. 找出类中可能出现影响你想改动的方法名称,并记录下来
  7. 操作到此,可以通过theos创建tweak项目来hook刚刚感觉可疑的方法
  8. 定位影响功能的方法之后,如果只是屏蔽方法的调用内容,那么直接去除方法的实现即可完成功能实现,如果此时需要修改方法内部的属性,以及需要获取方法传递过来的参数,此时就需要后序步骤的支持了

进阶阶段


  1. 进展到此,就是逆向中我觉得可以算做是进阶阶段了,此时由于需要获取某个方法传递过来的数据,仅仅通过静态分析class-dump出来的头文件,并不能够分析出传递过来的参数内容。所以此时需要进行动态分析了。
  2. 使用IDA或者Hopper来反编译已经脱壳的字节码可执行文件,之后通过全局搜索反编译文件中的方法名称,来定位目标方法对应的入口的地址(不含有ASLR
  3. 通过debugserver来断点对应的APP,通过image list -o -f来找到当前启动的APP的ASLR地址
  4. 通过IDA或者Hopper拿到的感兴趣的方法的入口地址以及上一步拿到的ASLR地址相加获取当前启动的APP在内存中的真实地址,通过breakpoint set -a 0x反编译地址 + 0xALSR地址 来设置断点。
  5. 通过lldb执行程序到断点,此时分析反汇编代码,分析出对应寄存器存储的参数值,并通过lldb动态打印出相关的寄存器存储的信息(注意Arm64中x0~x28(低32位w0~w28)是通用寄存器,x0~x7寄存器用于存放函数参数,x0存放返回值,x29是fp寄存器(栈帧寄存器),x30是lr寄存器(链接寄存器),以及sp寄存器(堆栈寄存器)
  6. 通过获取寄存器中存储的内容来定位参数类型,以此为突破口,来确定参数类型以及参数内容数据,为后序的tweak铺垫
  7. 搞清楚函数的参数内容之后,就可以通过编写tweak相关的代码来实现自己想要的功能了。
  8. 使用theos通过nic.pl 来创建自己的项目,编写相关的逆向代码完成相关的逆向操作。

以上的流程步骤每一个步骤都包含大量的配置以及相关内容的学习,所以准备分步骤来进行逆向的内容记录,以保证相关的内容的详细记录。

附:
自动脱壳网站:http://www.dumpapp.com

你可能感兴趣的:(iOS逆向过程步骤汇总)