在Windows环境下会有,静默安装。通过iOS应用重签名(安装app到手机上),苹果签名机制,防止未授权的应用进行安装
①获取应用ipa
②Codesign重签名
③Xcode自动签名
④Shell脚本自动重签
代码重签第三方应用:加密之后不能进行 一些逆向的分析。越狱应用->一些砸过壳的。(注意这里ipa是已经砸壳后的ipa)
签名工具:codesign
1.查看app的详细信息(bundleID, 编码格式, 权限:是否iPhone证书签名过等), 以查看App是否签名
$codesign -d -vv WeChat.app
Identifier=com.tencent.xin Format=app bundle with Mach-O universal (armv7 arm64) CodeDirectory v=20500 size=1016155 flags=0x0(none) hashes=15872+7 location=embedded Signature size=4390 Authority=Apple iPhone OS Application Signing Authority=Apple iPhone Certification Authority Authority=Apple Root CA Info.plist entries=56 TeamIdentifier=88L2Q4487U Sealed Resources version=2 rules=26 files=1018 Internal requirements count=1 size=96
2.查看本电脑所有证书
$security find-identity -v -p codesigning
1) 698A3D09E281F93B74C937B5490DB428CDE06F04 "iPhone Distribution: Migu Comic Co., Ltd. (7WHFE6ZA29)" (CSSMERR_TP_CERT_REVOKED) 2) 2DED305CF5E5F83C6EA394D6D5B9B46F6A56F19F "iPhone Developer: huan Wang (V875LC2EQ8)" (CSSMERR_TP_CERT_REVOKED)
3.查看App是否加密
1>重定向mach-o(放置代码的二进制文件),并在桌面生成文件保存 (加密可执行文件)
$ otool -l WeChat > ~/Desktop/123.text
2>查看App是否越狱
$otool -l WeChat | grep cryptid
正常App cryptid 架构 1
越狱版: cryptid 架构 0
3>运行的时候是否需要解密:是
加密->加壳
解密->砸壳
砸壳:dump 从内存中拿出来 (越狱手机 )
签名: 密码学 HASH算法 非对称算法 签名机制越狱版:修改,调试,加插件
4.用Codesign对App进行重签名
①(打开越狱版WeChat.app,显示包内容)删除PlugIns、Watch文件夹(无法重签名)
②重签FrameWorks目录下的所有库(对Frameworks重签名)
$codesign -fs "iPhone Developer: huan Wang (V875LC2EQ8)" ConfSDK.framework
ConfSDK.framework: replacing existing signature
③给可执行文件执行权限
$chmod +x WeChat
查看可执行文件: WeChat
$ls -l WeChat
-rwxr-xr-x 1 MengYu staff 141838208 9 28 15:06 WeChat
④拷贝Demo编译的app包的embedded.mobileprovision描述文件到WeChat的app包中
新建一个工程,添加bundleId,之后点击Product下的.app显示包内容,找到embedded.mobileprovision.
拷贝此文件到重签名的文件夹里面
⑤修改bundleId(把xcode中Demo的BundleID赋值到Wechat的info.plist文件的名字中)
⑥获取描述文件中的权限文件字段Entitlements,生成entitlements.plist
查看描述文件:
$security cms -D -i embedded.mobileprovision
搜索并复制:Entitlements 这个key和value
新建一个plist文件,粘贴进去,重命名为entitlements.plist
⑦给整个App重签名
找到entitlements.plist所在文件夹使用以下代码:
$codesign -fs "iPhone Developer: huan Wang (V875LC2EQ8)" --no-strict --entitlements=Entitlements.plist WeChat.app
WeChat.app: replacing existing signature
查看签名是否成功:
$codesign -d -vv WeChat.app
查看Authority是否修改成功:
如果是自己的证书就表明签名成功。
打包ipa并安装App
创建一个Payload文件夹,把 WeChat.app放进去(PlayLoad和plist一个层级,WeChat.app在Payload里面)
打包:
cd ..
$zip -ry WeChat.ipa Payload
编程成功为WeChat.ipa
打开Xcode -> Command+Shift+2-> 点击添加:
对越狱App进行调试
XCode->debug -> Attach to Process -> Likely Targets
通过断点调试, 注入代码,上线App没有描述文件,开发调试才有描述文件。
二、利用Xcode重签名三方应用
①新建同名工程
②修改info.plist
③干掉该干掉的(删掉Watch和Plugins文件夹)
④重签名Frameworks
⑤给可执行文件执行权限
$chmod +x WeChat
新建一个项目,build 一下,将Project.app ShowInFinder
将上个路径的WeChat.app替换
调试:找到第二个Window iConsoleWindow
可以看到按钮点击的事件执行的操作、注入代码(Framework),执行HOOK操作。
三、脚本自动化签名
①创建同名文件
②添加以下脚本代码
XCode->TARGET->Build Phases->点击+号->New Run Script Phase
# ${SRCROOT} 它是工程文件所在的目录 TEMP_PATH="${SRCROOT}/Temp" #资源文件夹,我们提前在工程目录下新建一个APP文件夹,里面放ipa包 ASSETS_PATH="${SRCROOT}/APP" #目标ipa包路径 TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa" #清空Temp文件夹 rm -rf "${SRCROOT}/Temp" mkdir -p "${SRCROOT}/Temp" #---------------------------------------- # 1. 解压IPA到Temp下 unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH" # 拿到解压的临时的APP的路径 TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1") # echo "路径是:$TEMP_APP_PATH" #---------------------------------------- # 2. 将解压出来的.app拷贝进入工程下 # BUILT_PRODUCTS_DIR 工程生成的APP包的路径 # TARGET_NAME target名称 TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app" echo "app路径:$TARGET_APP_PATH" rm -rf "$TARGET_APP_PATH" mkdir -p "$TARGET_APP_PATH" cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH" #---------------------------------------- # 3. 删除extension和WatchAPP.个人证书没法签名Extention rm -rf "$TARGET_APP_PATH/PlugIns" rm -rf "$TARGET_APP_PATH/Watch" #---------------------------------------- # 4. 更新info.plist文件 CFBundleIdentifier # 设置:"Set : KEY Value" "目标文件路径" /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist" #---------------------------------------- # 5. 给MachO文件上执行权限 # 拿到MachO文件的路径 APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d>|cut -f1 -d<` #上可执行权限 chmod +x "$TARGET_APP_PATH/$APP_BINARY" #---------------------------------------- # 6. 重签名第三方 FrameWorks TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks" if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ]; then for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"* do #签名 /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK" done fi
小建议:微信重签名不要登录微信账号, 微信检测如果bundleID不一致会被封号
为防止App重新签名,微信检测不是合法的bundleId就退出 exit