逆向 - 应用重签名

方式1:Codesign重签名

在iOS中,Xcode为我们提供了签名工具,即codesign,通过一些命令即可完成重签名,如下所示

  • $security find-identity -v -p codesigning: 列出钥匙串里可签名的证书

  • $Codesign –fs “证书串” 文件名 :强制替换签名

  • $Chmod +x 可执行文件 : 给文件添加权限

  • $security cms -D -i ../embedded.mobileprovision :查看描述文件

  • $codesign -fs “证书串” --no-strict --entitlements=权限文件.plist APP包

  • $Zip –ry输出文件 输入文件 将输入文件压缩为输出文件

如何获取越狱手机的ipa包

  • 1、建立链接:sh usbConnect.sh

  • 2、连接手机:sh usbX.sh

  • 3、查看进程:ps -A

  • 4、筛选进程,找到微信进程:ps -A | grep WeChat

  • 5、拷贝:scp -r -P 12345 root@localhost:路径 ./

  • 6、查看拷贝的app包:cd WeChat.app

  • 7、查看可执行文件:otool -l WeChat | grep crypt (此时的cryptid 是 1,表示加密过的)

  • 8、查看app的权限:codesign -vv -d WeChat.app (有签名权限)

准备工作

注:所需的资料可在这里获取链接,密码:b66a
也可以通过iTunes 下载包

  • 1、准备一个微信的越狱包,这里准备的是通过MyZip解压 微信-7.0.8.ipa

    • 其中的WeChat.app包含两个东西:app + app签名信息

      image
  • 2、查看app包的签名信息(CMD+G): codesign -vv -d WeChat.app

    image
  • 3、查看钥匙串的证书:security find-identity -v -p codesigning

  • 4、查看可执行文件详细信息:otool -l WeChat > ~/Desktop/123.txt。其中有cryptid加密id(0表示没有使用加密算法)

codesign重签名步骤

给应用重签名的步骤如下:

  • 1、删除插件和带有插件的.app包(例如Watch、plugins)

  • 2、对Frameworks里面的库进行重签名

  • 3、给可执行文件 +x(可执行)权限

  • 4、新建一个空工程

  • 5、添加描述文件(4中的空工程通过真机编译得到,且要运行,因为需要将描述文件安装到手机)

  • 6、替换.app包中BundleID(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)

  • 7、通过授权文件(Entilements)重签.app包、

    • 1)查看描述文件:$security cms -D -i embedded.mobileprovision

    • 2)将描述文件中Entilements 拷贝出来,生成plist文件。(文件名称entitlements.plist

    • 3)用权限文件签名APP包: $ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app

  • 8、最后通过Xcode安装

  • 注:mach-o最重要的两块:代码块 + 数据块,其中加密主要是加密代码

codesign重签名演示
  • 前提:

    • 需要签名:wechat可执行文件(即Mach-O文件) + Frameworks

    • 需要删除:Plugins(免费普通账户无法签名,可以删除) + Watch(也无法签名,删除)

  • 1、查看Frameworks,也是有签名信息的:codesign -vv -d andromeda.framework

    image
  • 2、重签名Frameworks:codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" andromeda.framework

➜  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" andromeda.framework
andromeda.framework: replacing existing signature
➜  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" mars.framework 
mars.framework: replacing existing signature
➜  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" marsbridgenetwork.framework 
marsbridgenetwork.framework: replacing existing signature
➜  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" matrixreport.framework 
matrixreport.framework: replacing existing signature
➜  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" OpenSSL.framework 
OpenSSL.framework: replacing existing signature
➜  Frameworks codesign -fs "Apple Development: 916770982@qq.com (565XXC9ZYA)" ProtobufLite.framework 
ProtobufLite.framework: replacing existing signature

然后执行退出 cd ..

  • 3、查看可执行文件:ls -l WeChat
ls -l WeChat
-rwxr-xr-x@ 1 xxx  staff  126048560 10 16  2019 WeChat
  • 注:重签名必须要有可执行权限,即 - x

  • 4、新建一个工程,运行 ,进入得到的包中,获取Apple Development: 916770982@qq.com (565XXC9ZYA)对应的描述文件 ,例如 xxx xxx(Personal Team) 获取可执行文件中的描述文件,拷贝至WeChat包

  • 5、描述文件和BundleID有关系,需要修改WeChat的BundleID com.tencent.xinxxx.com.test

  • 6、查看描述文件的权限:security cms -D -i embedded.mobileprovision

    image

    查看Entitlements(权限),是一个plist文件

    image

    将其拷贝至一个plist文件(名称为entitlements,需要新建)(路径:propertyList - open sourceCode - 拷贝 <dict></dict>)

    image

    将其拷贝至payload文件夹中

  • 7、签名app(即mach-o签名):codesign -fs "Apple Development: xxxxxxxxx@qq.com (565XXC9ZYA)" --no-strict --entitlements=Entitlements.plist WeChat.app

  • 8、查看WeChat签名:codesign -vv -d WeChat.app, 此时签名信息已经替换

➜  Payload codesign -vv -d WeChat.app
Executable=/Users/jiangshicheng/Desktop/逻辑进阶IOS/逆向/010--应用重签名原理/资料/微信-7.0.8/Payload/WeChat.app/WeChat
Identifier=com.jsc.weChatDemo
Format=app bundle with Mach-O thin (arm64)
CodeDirectory v=20400 size=972598 flags=0x0(none) hashes=30383+7 location=embedded
Signature size=4819
Authority=Apple Development: 916770982@qq.com (565XXC9ZYA)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Jun 2, 2021 at 2:36:45 PM
Info.plist entries=68
TeamIdentifier=99EJLR3Y3N
Sealed Resources version=2 rules=10 files=1470
Internal requirements count=1 size=184
  • 9、安装

    image
  • 10、调试:Debug - Attach to process - WeChat

Codesign重签名缺点:过程太繁琐

方式2:Xcode重签名

下面我们通过Xcode来进行重签名,步骤如下:

  • 1、删除Plugins、Watch

  • 2、重签名Frameworks

  • 3、创建并运行一个空工程

  • 4、修改Info.plist中的BundleID改为 空工程的BundleID

  • 5、利用修改后的app包,替换空工程的app包

  • 6、直接运行

与CodeSign重签名相比:少了其中的3(执行文件权限)、5(添加描述文件)、7(通过授权文件重签.app包)

xcode重签名演示

  • 1、将product中的WeChat替换成 需要我们之前重签名的WeChat

    image
  • 2、CMD+R再次运行

方式3:Shell脚本

shell重签名演示

准备工作
首先跑一遍空项目获得签名信息

  • 项目中配置shell:Build Phase -> + Run Script,会在编译时执行
    • ./ 表示工程目录
    • SRCROOT (环境变量)-- 根目录

shell重签名演示

  • 1、根目录下创建shell文件: touch 123.sh

  • 2、添加执行权限: chmod +x 123.sh

  • 3、Run Script 中直接执行 123.sh :./123.sh

其中123.sh中的重签名脚本如下所示,主要有以下几步:

  • 1、解压IPATemp

  • 2、将解压出来的.app拷贝进入工程下

  • 3、删除extensionWatchAPP,因为个人证书没法签名Extention

  • 4、更新info.plist文件 CFBundleIdentifier

  • 5、给Mach-O文件上执行权限

  • 6、重签名第三方 FrameWorks

  • 7、替换签名

# ${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" "目标文件路径"
# PlistBuddy工具修改info.plist文件中的BundleID为工程的BundleID
/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

#签名 
#--force --sign 替换签名
# EXPANDED_CODE_SIGN_IDENTITY 当前工程的证书
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容