iOS攻防 - (九)将iOS应用注入dylib和hook后,重新签名并打包

版权声明:本文为博主Victor 原创文章,未经博主Victor允许不得转载。This article is written by Blogger Victor, it coule be tranferred to under your name only gotten Victor's Permission. https://blog.csdn.net/u013538542/article/details/72784165

iOS攻防 - (九)将iOS应用hook和注入dylib后,重新签名并打包

1.下载微信,并解密WeChat.ipa

我的本篇博客已经讲过,此处不再赘述 ;http://blog.csdn.net/u013538542/article/details/72697647




2.查看解密后的微信的基本信息

通过cd命令到解密后微信的目录,名称com.tencent.xin-iOS7.0-(Clutch-2.0.4)是利用Clutch解密后生成的ipa,并解压压缩包的目录

$ cd com.tencent.xin-iOS7.0-(Clutch-2.0.4)/Payload/WeChat.app/

$ file WeChat

得到微信编译使用的架构:

WeChat: Mach-O universal binary with 2 architectures: [arm_v7: Mach-O executable arm_v7] [arm64]
WeChat (for architecture armv7): Mach-O executable arm_v7
WeChat (for architecture arm64): Mach-O 64-bit executable arm64

然后查看微信是否解密成功,利用otool工具,安装过xcode就表明已经安装过otool

$ otool -l WeChat | grep crypt

得到如下信息,cryptid 等于1表示加密,0表示解密

cryptoff 16384
cryptsize 52756480
cryptid 0
cryptoff 16384
cryptsize 56770560
cryptid 0




3.安装iOSOpenDev

这里有英文版本解决方案:https://gist.github.com/ashish1405/8744a1cf9d3d78af3a75559042f7eb54
以下是对此篇英文文章进行说明和实践

3.1 先安装MacPorts,选择你的MacBook相应的版本安装
3.2 重启启动终端,输入如下,也就是更新MacPorts

sudo port -v selfupdate

3.3 安装DPKG,安装过程中有一个提示,输入Y即可

sudo port -f install dpkg

3.4 安装两个工具, theos和ldid
看这个博客 http://blog.csdn.net/u013538542/article/details/72811142

3.6 去浏览器打开以下地址,下载必须要用的openssl和Specifications

https://github.com/535064094/iosOpenDevInstallTools/archive/master.zip

解压后,把Specifications目录下的,

3.6.1 iPhone.Simulator开头的四个文件拷贝到/Applications/Xcode/Content/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications 如果Specifications目录不存在,则创建一个

3.6.2 将iPhoneOS开头的四个文件拷贝到/Applications/Xcode/Content/Developer/Platforms/IphoneOS.platform/Developer/Library/Xcode/Specifications 如果Specifications目录不存在,则创建一个

这里写图片描述




4.创建hook工程项目

4.1 创建一个Xcode工程,选择iOSOpenDev模板里的CaptainHook Tweak,给项目命名为hook
这里写图片描述



4.2 替换hook.mm文件的内容如下:

attribute((constructor)) static void entry() {
NSLog(@”hello, world!”);
}

这里写图片描述



4.3 Edit Scheme = Debug, 然后编译项目command + B,在项目的目录LatestBuild下找到hook.dylib, 并把hook.dylib拷贝到WeChat.app/目录下



4.4 下载yololib , 编译后,把yololib可执行文件拷贝到com.tencent.xin-iOS7.0-\(Clutch-2.0.4\) 同级目录,并执行如下命令,其实意思就是向WeChat可执行文件里注入hook.dylib库

./yololib com.tencent.xin-iOS7.0-(Clutch-2.0.4)/Payload/WeChat.app/WeChat hook.dylib

会输出如下所示

VictorZhang@VictorZhang:~/Desktop/apps/WeChat$ ./yololib com.tencent.xin-iOS7.0-\(Clutch-2.0.4\)/Payload/WeChat.app/WeChat hook.dylib 
2017-05-28 13:13:22.001 yololib[1079:122842] dylib path @executable_path/hook.dylib
2017-05-28 13:13:22.002 yololib[1079:122842] dylib path @executable_path/hook.dylib
Reading binary: com.tencent.xin-iOS7.0-(Clutch-2.0.4)/Payload/WeChat.app/WeChat

2017-05-28 13:13:22.003 yololib[1079:122842] FAT binary!
2017-05-28 13:13:22.003 yololib[1079:122842] Injecting to arch 9
2017-05-28 13:13:22.003 yololib[1079:122842] Patching mach_header..
2017-05-28 13:13:22.003 yololib[1079:122842] Attaching dylib..

2017-05-28 13:13:22.003 yololib[1079:122842] Injecting to arch 0
2017-05-28 13:13:22.003 yololib[1079:122842] 64bit arch wow
2017-05-28 13:13:22.003 yololib[1079:122842] dylib size wow 56
2017-05-28 13:13:22.003 yololib[1079:122842] mach.ncmds 77
2017-05-28 13:13:22.003 yololib[1079:122842] mach.ncmds 78
2017-05-28 13:13:22.003 yololib[1079:122842] Patching mach_header..
2017-05-28 13:13:22.004 yololib[1079:122842] Attaching dylib..

2017-05-28 13:13:22.004 yololib[1079:122842] size 51
2017-05-28 13:13:22.004 yololib[1079:122842] complete!



4.5 拷贝hook.dylib到WeChat.app/目录下

cp hook.dylib WeChat.app/



4.6 创建一个项目,bundle identifier可以取为com.tencent.xin2 ,当然你取什么都可以,然后在https://developer.apple.com 创建它的App ID和Provisioning Profile证书(distribution版),并且打一个release包,把这个包里面包含的 embedded.mobileprovision 文件拷贝到 WeChat.app/



4.7 在 https://developer.apple.com 查找到证书的对应的AppID=com.tencent.xin2的provisioning profile证书,下载下来,通过如下命令可以看到.mobileprovision 的内容

security cms -D -i example.mobileprovision



4.8 通过签名命令可以得到如下Entitlements的配置信息,

codesign -d –entitlements - WeChat.app

并创建一个Entitlements.plist文件,粘贴上面命令输出的内容,文件基本内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
  <key>application-identifier</key>
  <string>BA7DZZ39KJ.com.domain.projectname</string>
  <key>com.apple.developer.team-identifier</key>
  <string>BA7DZZ39KJ</string>
  <key>get-task-allow</key>
  <true/>
  <key>keychain-access-groups</key>
  <array>
      <string>BA7DZZ39KJ.*</string>
  </array>
 </dict>
</plist>


4.9 查看所有可用于签名的证书

security find-identity -v -p codesigning



4.10 对hook.dylib动态库进行签名,并验证,其中B3C14FC452E835C09B70D5C24961EBAFC0A2C4B9是证书的一个字符串,可以从4.9的步骤查看到,验证无报错信息,则表示通过

codesign -f -s B3C14FC452E835C09B70D5C24961EBAFC0A2C4B9 WeChat.app/hook.dylib
codesign –verify WeChat.app/hook.dylib



4.11 先把WeChat.app/_CodeSignature 目录删除掉,然后把WeChat.app里的Info.plist文件里的BundleID改成com.tencent.xin2,接着对WeChat.app进行签名,验证

codesign -f -s B3C14FC452E835C09B70D5C24961EBAFC0A2C4B9 WeChat.app
codesign –verify WeChat.app



4.12 查看WeChat.app可执行文件签名状态的信息,这些信息在出现不明错误时会提供巨大的帮助:

codesign -vv -d WeChat.app

这里写图片描述



4.13 ipa打包

xcrun -sdk iphoneos PackageApplication -v WeChat.app -o $(pwd)/WeChat2.ipa

但是,自从Xcode 8.3.2 后,PackageApplication 就不可用了,先google找找问题吧,解决方案如下:

我把Xcode 8.3.2之前的PackageApplication脚本复制到了/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin目录下,然后使用 chmod 777 PackageApplication 给这个脚本执行权限,最后可以正常打包了,下载地址

我们知道正常打包的流程如下
1.清除缓存

xcodebuild clean

2.编译项目,编译后,当前项目目录会出现 `build/Release-iphoneos/TodaysAppForReSign.app’ 文件

xcodebuild -sdk iphoneos10.3 -target TodaysAppForReSign -configuration Release -arch arm64 -arch armv7 CODE_SIGN_IDENTITY=”iPhone Distribution: victor zhang (BBBBAAAACCCC888899)”

3.生成ipa包

xcrun -sdk iphoneos PackageApplication -v build/Release-iphoneos/TodaysAppForReSign.app -o $(pwd)/TodaysAppForReSign.ipa

在这里,我们只需要使用第三步即可



未完待续。。。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页