大家好,深入iOS应用破解:从砸壳到重签名技术解析相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于深入iOS应用破解:从砸壳到重签名技术解析和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
在研究逆向工程时,首先要考虑的是重签名。重签名就是用自己的证书对别人的应用程序进行签名进行分发。说白了,重签名就是陷阱别人的应用程序。现在非常流行的微信双开,其实就是重签微信。重新签名时要做的第一件事就是对应用程序进行脱壳。
二、手机越狱与应用砸壳
我们从App Store下载的应用程序已经经过Apple加密和签名,无法重新签名。因此,重签名时首先要做的就是对应用进行脱壳,而脱壳需要你有越狱的手机。
1. 手机越狱
目前主流的越狱平台有PP助手和爱思助手,比较好,提供一键越狱功能。我自己用的是爱思助手。下载电脑版爱思助手,选择【工具箱】-【一键越狱】,就会匹配您当前手机版本的越狱工具。选择要越狱的工具。
图像
我使用的是iPhone SE,系统版本是14.4,按照提示完成越狱就可以了。
需要注意的是,这种越狱方法并不是完美的越狱。重启手机后,手机会回到非越狱状态,需要重新进行越狱流程。但对于我们逆向工程的研究来说已经足够了。
事情还没有结束。越狱完成后,需要安装一个插件:Apple File Conduit"2"。安装这个插件的目的是为了让我们的电脑能够访问设备的根文件目录。安装方法也非常简单。可以参考这篇文章Apple File Conduit"2"的安装,这里不再赘述。我们完成安装后,将爱思助手连接到手机上,就可以看到【文件管理】中多了一个【文件系统(越狱)】栏目。这是越狱状态下的系统根目录。
图片
2. ipa应用砸壳
首先,了解一下什么是应用脱壳:我们提交到App Store发布的应用都是经过Apple加密的。这样就保证了我们手机上安装的App都是经过苹果审核和授权的,当然通过企业级证书或者开发证书生成的App是不需要脱壳的。对于App Store加密的应用程序,我们无法通过Hopper等进行反编译静态分析,也无法进行class-dump。在逆向分析过程中,需要对加密的二进制文件进行解密,然后才能进行静态分析。这个过程是大家都熟知的。敲碎外壳。
粉碎贝壳的方法主要有两种:
静电粉碎外壳
静态脱壳是在掌握并理解shell应用的加密算法和逻辑后,在不运行shell应用的情况下对shell应用进行解密。静态解包方式难度较大,而且加密方发现应用程序被破解后,可能会改用更先进、更复杂的加密技术。动态爆壳
动态脱壳从进程内存空间中运行的可执行程序映像开始,然后转储内存中的内容,实现脱壳。这种方法实现起来比较简单,而且不用担心使用什么加密技术。因此,目前市场上的破壳工具都是基于动态破壳的。动态砸壳的工具有很多:Clutch、dumpdecrypted、CrackerXI App。前两者对系统要求比较严格,而且由于年代久远、年久失修,容易出现砸壳故障。我们直接介绍最方便的第三种方式:使用CrackerXI App破壳。壳。
(1) 在Cydia中下载CrackerXI App
Cydia与越狱前的App Store类似。越狱后,我们所有的软件都是通过Cydia安装的。打开Cydia后,选择右上角【软件源】-【编辑】-点击【添加】,输入http://apt.wxhbts.com/,【添加源】等待添加完成。添加软件源后,搜索CrackerXI App,安装完成后点击【重启跳板】,返回桌面,可以看到桌面上安装了CrackerXI+App。
图
(2) 砸壳
提前在App Store下载好你想要破解的应用,打开CrackerXI+,选择【AppList】然后点击你想要破解的应用,在弹出的框中选择【YES,Full IPA】,然后我们打开如果要破解shell应用程序,完成后会看到一个破解文件地址/var/mobile/Documents/CrackerXI/*****.ipa。这个文件就是我们破解的ipa包。
我相信聪明的你已经知道如何找到形象之路了。进入爱思助手-【文件管理】-【文件系统(越狱)】找到ipa,导出到桌面目录。
图
(3) 验证
完成上述操作后,我们需要验证一下我们拿到的ipa是否被破解了。将.ipa包扩展名改为.zip,解压得到Payload文件夹,右键【显示包内容】-找到可执行文件。
图像终端输入
otool -l 执行文件名| grep cryptimage 可以看到cryptid的值为0,说明破壳成功。
三、重新签名
Apple应用程序一般通过以下方式分发:
最常见的一种是从应用商店下载应用程序。这种交付方式不受设备数量的限制。只要应用程序在App store中启动,就会被Apple签名和加密。第二种方法是申请企业账户,通过企业账户签署我们的应用程序,从而绕过应用商店。烦人的审核机制来达到分发应用的目的。此方法中的分布数量没有限制。第三种方法是通过TestFlight分发测试版本,分为内部测试人员和外部测试人员。通过分配外部测试人员,最多可以分配和安装10,000个用户。第四类开发者可以通过添加设备ID来安装应用程序,最多可以注册100个设备。不同的开发者账号对应着不同的App分发方式。我们申请了开发者账号后,创建了一个应用ID,然后创建了它对应的证书、描述文件等一系列动作,这些动作实际上就决定了它的分发方式。可以这样理解:每个应用程序ID对应一组证书,这组证书决定了你的应用程序的分发方式。重签名是改变当前应用程序的应用程序ID和证书,以达到分发应用程序的目的。实际需求是,如果你启动了App Store应用程序,想通过企业账户分发,但没有源代码,或者想探索应用程序的双开,那么重签名就派上用场了。我们介绍两种重签名的方法:
1.Xcode 重签名
(1) 新建同名的工程文件
注意这里的同名不是和Bundle Identifier同名,而是和解压ipa文件时Payload中的包同名。
还需要注意的是,如果你在重签名的项目中使用AppDelegate来监控App的生命周期,则需要在新版本的Xcode中移除SceneDelegate类,并重新使用AppDelegate来监控App的生命周期。重新配置工程后,在真机上运行,并将描述文件安装到手机中。
图片
(2) 替换编译的App包
在Payload文件夹中找到我们打碎的包,将其替换为我们编译的包。
图片
(3) 对二进制文件中的FrameWork进行重签名
其实在这一步之前,需要删除包中的PlugIns插件和Watch相关组件。这些组件不包含在我们的反向包中,因此被省略。
进入Framework 文件夹并使用CodeSign 签署Framework 的证书。请小心重新签署所有框架。
imagecodesign -fs "复制自己的证书名称" 需要重新签名的FrameWork名称证书名称就是你在真机上测试的证书名称。如果您不知道,可以在钥匙串中查看。
imageiPhone Developer: *** ** (********) 是证书名称
(4) 重签名后运行
image 这样我们就完成了无源代码的应用程序的重签名。
2. 使用脚本文件重签名
使用shell脚本进行重签名的原理与上述签名原理相同,只不过重签名步骤是脚本化的。
(1) 创建空工程(工程名随便),并且进行真机运行
(2) 在工程根目录下创建APP文件夹,在文件中放入我们砸壳后的ipa包
图像
(3) 在工程中添加脚本
在项目中创建一个新的脚本文件构建阶段
在运行脚本中添加图像脚本
# 输入脚本或从工作区拖动脚本文件以插入其路径。
# 输入脚本或从工作区拖动脚本文件以插入其路径。
# ${SRCROOT} 是项目文件所在目录
TEMP_PATH="${SRCROOT}/Temp"
#Resource文件夹,放置第三方APP的地方
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#新建临时文件夹
rm -rf "$TEMP_PATH"
mkdir -p "$TEMP_PATH"
#----------------------------------------------------
# 1. 将IPA 解压到Temp
解压缩-oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 获取解压后的临时APP的路径
TEMP_APP_PATH=$(设置-- "$TEMP_PATH/Payload/"*.app;echo "$1")
# 此处显示并打印TEMP_APP_PATH 变量
回显"TEMP_APP_PATH: $TEMP_APP_PATH"
#----------------------------------------------------
# 2.将解压后的.app复制进去
#BUILT_PRODUCTS_DIR 项目生成的APP包路径
#TARGET_NAME 目标名称
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
回显"TARGET_APP_PATH: $TARGET_APP_PATH"
rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"
#----------------------------------------------------
# 3.为了简化重签名流程,删除了extension和watchAPP。此外,个人免费证书无法签署扩展。
echo "删除应用程序扩展"
rm -rf "$TARGET_APP_PATH/插件"
rm -rf "$TARGET_APP_PATH/Watch"
#----------------------------------------------------
# 4. 更新Info.plist 中的BundleId
# Set "设置:KEY值" "目标文件path.plist"
/usr/libexec/PlistBuddy -c "设置:CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
# 5.赋予可执行文件权限
#添加ipa二进制文件的执行权限,否则xcode会告诉你无法运行
#此操作是查找第三方app包中可执行文件的名称,因为info.plist的"Executable file"键对应的是可执行文件的名称。
#我们grep,然后取出最后一行,然后用cut命令分割,得到我们想要的关键信息。保存到APP_BINARY 变量
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d|cut -f1 -d`
#这给二进制文件添加了可执行权限+X
chmod +x "$TARGET_APP_PATH/$APP_BINARY"
#----------------------------------------------------
# 6. 对第三方应用框架下的现有动态库进行重新签名
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/框架"
如果[-d"$TARGET_APP_FRAMEWORKS_PATH"];
然后
#遍历所有动态库的路径
对于“$TARGET_APP_FRAMEWORKS_PATH/”中的框架*
做
回显"框架: $框架"
符号
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
完毕
fi运行后,重新签名。
四、总结
解压和重新签名应用程序只是逆向工程的开始。稍后我们将继续探索其他逆向工程技术。我重申一下:研究逆向工程的目的是为了更好地保护我们的应用程序,而不是将其用于非法目的。
【深入iOS应用破解:从砸壳到重签名技术解析】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
想了解怎么修改ios应用,这个标题看起来很吸引人!
有13位网友表示赞同!
对iOS开发有点基础的我,想深入学习一下逆向,这篇文章应该很有帮助吧
有14位网友表示赞同!
一直好奇手机软件的内部机制是怎么运作的,看来要认真学习这个词儿“smashing”了。
有9位网友表示赞同!
重签名?这是什么操作?感觉好高端的样子...
有19位网友表示赞同!
我听过逆向工程这个概念,但是没具体了解过实践操作,期待看到这篇文章!
有19位网友表示赞同!
最近在研究一下手机安全问题,也许这篇iOS逆向分析的文章能给我一些启发。
有9位网友表示赞同!
想要突破苹果系统的某些限制,或许可以从这篇文章开始学习吧.
有15位网友表示赞同!
iOS应用开发和逆向好像很有关联性,需要好好研究一下。
有19位网友表示赞同!
看来要掌握逆向工程技术,不仅需要理论基础,还要动手实践才能真正理解。
有16位网友表示赞同!
这个标题给我感觉很专业,应该能学到不少实用技巧
有20位网友表示赞同!
希望这篇文章能详细讲解每个步骤,方便新手学习。
有19位网友表示赞同!
我之前尝试过破解一些应用,但不太成功,也许这篇文章提供一些解决方案?
有11位网友表示赞同!
学习iOS逆向工程可以帮助我们更好理解软件的设计和运作原理,很有意义啊!
有6位网友表示赞同!
感觉iOS系统比安卓系统更难逆向,是不是真的有难度?
有15位网友表示赞同!
我对苹果设备的隐私保护十分关心,也许这篇文章能带给我一些新的视角。
有20位网友表示赞同!
学习这些技术可以让我们更好地理解软件开发过程和代码结构,真是太棒了!
有8位网友表示赞同!
iOS逆向工程听起来很复杂,但希望能通过这篇文章逐步了解它的深度
有5位网友表示赞同!
想成为一名优秀的iOS安全工程师,可能需要掌握相关逆向技术吧?
有15位网友表示赞同!