最近公司业务需要,简单研究了点逆向,做个笔记。
1.砸壳
下载ipa原包
1.可以在PP助手上直接下载;
2.itunes中下载;
由于公司业务需要吗,我通常是在虚拟机上,Safari浏览器中粘贴itms://itunes.apple.com/cn/app/idxxxxxx?mt=8,然后在iTunes中下载该应用。下载后,拖入到原电脑的某个文件夹。(2020.3月份已经不能使用)
3.使用Apple Configurator 2(具体教程不再写了)
需要appid账号,越狱手机,另外手机上购买太多的话,可能会导致卡死。
4.爱思助手
爱思助手-游戏-安装应用-打开文件夹也可以下载原包。但是下载的应该是被爱思重签过的,而且应用有限。
砸壳需要配置环境,由于时间原因,今天就不具体写了,网上很多教程。
1.frida-ios-dump砸壳方式:
1.将下载后的ipa包,用iTools pro安装到越狱手机中;
2.电脑连接越狱手机,打开终端,输入:iproxy 2222 22
如上图,说明已经USB连接成功。
2.重新开一个终端页面,终端按照下面输入
cd frida-ios-dump目录
python ./dump.py app
python ./dump.py -l (打印手机上安装的app)
python ./dump.py 下载的ipa原包 -o 砸壳存放的目录(可直接执行这一步,直接砸壳)
2.bagbak砸壳方式
1.需要安装nodejs环境;
2.bagbak 包名或者ipa名字 -o 输出路径
提取ipa路径~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/
此时在砸壳存放的目录中会有砸壳后的ipa包,砸壳完事。
2.代码注入
代码注入,实际上就是注入Framework或者dyld动态库,使用上面砸壳后的的ipa
1.新建个工程,目录下新建APP文件夹,将上面砸壳后的ipa放进去;
2.用到的重签名脚本(我暂时还没有传github上,网上也很多),暂用‘脚本’代理称呼
在工程TARGETS-Build Phases-➕-New Run Script Phase ,然后将脚本路径拖入进去,编译工程,会发现工程目录下出现个Temp的文件夹。砸壳的包体也能跑起来。
3.创建Framework,File - New - Target - Cocoa Touch Framework,
然后在该目录下创建一个Hook类,Hook.m写入load方法,随便打印点东西,这是就是注入代码的地方。
4.在TARGETS-Build Phases-➕New Copy Script Phase,然后将Destination改为Frameworks,点击加号,将你创建的Framework加入。
在上面的脚本的最后加入:
yololib "APP_BINARY" "Frameworks/LCHookFramework.framework/LCHookFramework"
运行工程,则功能能够跑起来,刚才Hook类的load方法中的NSLog则会打印出来,说明我们代码注入成功。
剩下的就可以在load方法内注入需要的代码。
3.Class-dump获取砸壳ipa的.h文件
class-dump:可以将Moch-O文件中的OC运行时的声明信息导出,即.h文件
1、class-dump环境搭建
下载地址:http://stevenygard.com/projects/class-dump/
备注:
使用class-dump -H报错Error:Cannot find offset for address 0xd80000000101534a in stringAtAddress:猜测可能是因为项目使用了Swift和Oc混编,官网的class-dump不支持dump swift files导致。
解决办法:
使用该下载地址:https://github.com/AloneMonkey/MonkeyDev/blob/master/bin/class-dump
2、打开终端输入 open /usr/local/bin
3、把dmg文件中的class-dump文件复制到 /usr/local/bin
4、更改权限:终端输入 sudo chmod 777 /usr/local/bin/class-dump
可以终端输入class-dump,查看是否安装成功。
步骤:找到ipa的可执行文件.app路径,创建一个存放获取到.h文件的文件夹
终端输入:class-dump -H ipa的可执行文件.app路径 -o 存档文件夹路径
大功告成,将获取到的.h拖入测试工程,就可以愉快地阅读头文件和方法属性了!
若执行class-dump命令报错/usr/local/bin/class-dump: Permission denied
,在终端运行sudo chmod 777 /usr/local/bin/class-dump
命令赋予所有用户可读可写可执行class-dump文件权限(sudo chmod +x class-dump )
原理:
主要是通过方法读取Mach-O 理解的Mach-O文件的结构所有的事情就迎刃而解了。 Mach-O 有3部分Header、Load commands、Raw segment data(各种section),其中section就有解析类表(classname)、解析方法表(methodname)。然后class-dump通过一系列计算(得到我们要的类名,及方法名。Mach-O我还需要再学习,加油!
4.Hopper分析ipa代码
这个今天就不说这个了,可以简单查查Hopper的使用方法。
今天由于时间原因,上面的笔记有点简单粗暴,有些地方没有链接和图片,我自己理解就行,啊哈哈。。。后面补上。