⑴ iOS逆向 -- 应用重签名学习 (实战总结)
在iOS开发中,我们通常会面对应用签名与逆向开发的问题。一旦希望学习其他应用并进行调试,就需要对这些应用进行重签名。
深入理解iOS的签名机制,包括RSA加密、对称加密以及Hash算法,是进行逆向开发的基础。其中,RSA是一种非对称加密方式,适用于私钥与公钥的匹配解密过程。对称加密则采用同一密钥进行数据加密与解密,其优点是加密速度快,但密钥管理不当会导致安全隐患。Hash算法则用于生成固定长度的指纹,用于数据验证。
苹果在App Store中对应用进行了严格的签名验证。一个应用从App Store下载到安装到手机上,会经历多个步骤。在App上架完成前,验证过程就已经完成。下载到手机后的验证则更加严格,以确保应用的安全性。
在实际开发中,我们可能需要对已安装的应用进行调试,这时就需要使用到应用的重签名技术。通过替换应用的描述文件,并使用自己的证书进行二次签名,可以让iOS系统认为这是自己的工程安装的应用,从而实现对其他应用的分析与调试。
在进行应用重签时,首先需要确保使用的应用已脱壳,否则可能无法成功签名。使用otool命令可以查看应用是否已脱壳。接着,对应用的框架和库文件进行重签名,并查看描述文件信息。在工程中添加描述文件,替换BundleID,并通过授权文件重签.app包。通过这些步骤,可以成功实现应用的重签名。
总结应用重签名的实践知识,主要包括以下几个步骤:删除插件和带有插件的.app包、对Frameworks里面的库进行重签名、给可执行文件添加可执行权限(一般情况下不需要)、添加描述文件、替换BundleID、通过授权文件重签.app包。通过遵循这些步骤,可以实现对其他应用的逆向开发和调试。
⑵ APK重新签名或者更换APK签名版本
在某些特殊情况下,需要对已经生成的apk进行重新签名,或者对已经生成的apk更换签名版本(v1/v2/v3/v4)。如何实现呢? 可以通过命令行对已生成的apk进行处理。
apksigner.jar通常包含在android SDK中可。路径一般是在Android SDK/build-tools/ {SDK版本} /lib/apksigner.jar
不同的SDK版本中均有一个,取最新版本的就好了。
使用压缩软件打开apk,删除包内 /META-INF/ 文件夹及文件夹内所有文件,并重新压缩文件。
准备好签名证书及相关密码和需要刚处理过得apk文件
示例:
执行命令
接着输入证书保护密码及别名密码。
可以从此命令的输出中看出当前生成的apk签名情况。
可以通过如下命令行参数进行控制
--v1-signing-enabled true
--v2-signing-enabled true
--v3-signing-enabled false
使用的签名版本还跟apk编译时使用的最低SDK版本有关, 即min-sdk-version的值。如果设置的值大于等于26,即使添加--v1-signing-enabled true 也无法通过上述步骤签V1版本的签名--仅有V2签名(Android Studio也是)。
可以对最后生成的apk通过执行如下命令尝试:
⑶ 如何重签名APK文件
方法一:需要删除apk包中的签名文件,META-INF(更改apk格式为压缩包形式,删除META-INF文件夹,改回.apk格式);
将证书(debug.keystore)复制到与需要重新签名的apk文件相同的目录下(如:复制到D:Sign);
进入cmd模式,进入D:Sign目录;
运行下面的命令jarsigner -verbose -keystore debug.keystore -storepass android -signedjar PhoneBook_signed.apk -digestalg SHA1 -sigalg MD5withRSA PhoneBook.apk androiddebugkey/*解释:-jarsigner是Java的签名工具-verbose参数表示:显示出签名详细信息-keystore表示使用当前目录中的debug.keystore签名证书文件-storepass android表示Keystore密码:“android”-signedjar PhoneBook_signed.apk表示签名后生成的APK名称PhoneBook.apk表示未签名的APK Android软件-digestalg SHA1 -sigalg MD5withRSA:这就是必须加上的参数,如果你是jdk 1.6也不受影响-androiddebugkey表示Key别名
大功告成,看看文件夹吧;
方法二:使用工具re-sign.jar。打开re-sign.jar。删除签名文件,META-INF后,拖动apk到re-sign.jar处,并点击保存;
⑷ iOS 包签名及重签名
签名相关的命令:
•$security find-identity -v -p codesigning -- 列出钥匙串里可签名的证书
•$security cms -D -i embedded.mobileprovision -- 查看描述文件
•$codesign–fs “证书串” 文件名 -- 强制替换签名
重签步骤:
1.删除插件和带有插件的.app包(比如Watch)
2.对Frameworks里面的库进行重签名
3.给可执行文件 +x(可执行)权限
4.替换描述文件
5.替换BundleID
6.通过授权文件(Entilements)重签.app包
实际操作:
获取破壳的ipa包
获取第三方ipa包
查看ipa包是否已经破壳 》 非上架的都没加壳,无需关注
解压ipa包,进入playload文件夹,找到MachO文件
在终端使用命令otool -l DingTalk | grep crypt,0是已脱壳,大于0是未脱壳(一
般为1)
终端查看本地有效证书
$security find-identity -v -p codesigning
删除无法签名的插件文件
删除Plugins文件夹和Watch文件夹
对.app文件夹内的Frameworks文件夹中的每一个framework强制重签名
命令:$ codesign -fs "iPhone Developer: xxx " xxx.framework
找到framework文件夹下所有.framework,分别使用上面的命令对其签名。
建议通过脚本命令执行:
将要签名的描述文件该成 embedded.mobileprovision 替换 来的 embedded.mobileprovision
创建entitlements.plist文件
查看描述文件内容,使用命令security cms -D -I embedded.mobileprovision,找到Entitlements节点,接着创建entitlements.plist文件,内容拷贝过去,最后把entitlements.plist文件拷贝到playload文件夹内(与xx.app同级)。
!]( https://upload-images.jianshu.io/upload_images/1502585-e1694c8e1e77a197.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
修改xx.app包里面的info.plist中的bundleId为上面项目的bundleId
对xx.app开始签名
使用的命令: zip –ry 输出文件 输入文件 命令。也可以手动压缩。
将上述操作 通过shell命令 写个脚本文件。然后一键操作。
shell脚本语言命令
地址: https://github.com/InjoyDeng/ResignTool
蒲公英平台重签名
本文章主要介绍iOS 版本发布的两个相关功能。
一 : iOS 开发出的版本发布安装 用两种方式 :
软件环境
Mac: v10.12.6 (16G29)
ruby: v2.3.4
rvm: v1.29.3
sigh: v2.71.1
Xcode: v9.2
使用sigh脚本
使用之前先安装一下脚本环境
应用场景:
主要解决因重复打包导致测试同学回归测试的包和上传App Store的包不一致的问题。以及 合作方之间 证书不一致,需要重新签名问题。
App开发测试流程
对回归测试通过的ipa包进行重新签名,然后上传 App Store
输入的 Signing Identity 如果和 .mobileprovision文件 不一致,那么终端上仍会提示resign成功,但是,安装时会报错!
codesign -vv -d xxx.app
本文主要讲述sigh命令的安装和使用。
首先确保你安装了Xcode的命令行工具。
然后通过gem安装sigh,gem的安装请自行谷歌。
在终端执行
依次执行下列步骤:
关于更多sigh用法请访问 sigh使用
签名成功的应用就可以顺利在我们的设备中安装了并使用了,用这个方法可以进行非越狱平台安装在正版基础移植的越狱应用。
工具: https://github.com/InjoyDeng/ResignTool
借鉴: https://www.jianshu.com/p/d68924e1af25
https://www.jianshu.com/p/d68924e1af25
https://www.cnblogs.com/guohai-stronger/p/11781249.html
iOS APP签名机制详解