微信作为一款大部分人重度使用的app,自然而然会有特别多的人对它有研究兴趣,我也不例外。好在今天终于成功了。实现了自动抢红包、虚拟定位、消息防撤回、修改运动步数。对我来说,抢红包是一个非常实用的功能,防撤回对付一些很烦的人也非常有用。
那么我们开始吧。
1.准备工作
首先我们需要准备如下工具:
(1)砸了壳的原版微信安装包(ipa格式)
(2)iOS重签名工具
(3)开发者账号,是否付费无所谓
砸壳app的ipa安装包很好找到,你有闲心可以去我前面的章节寻找怎么砸壳,如果没有你去装一个pp助手电脑版下载一个越狱应用就行。
PP助手越狱应用下完以后放到你的Mac上。
使用iOS重签名工具是因为,我们修改了微信以后,它不再带有苹果的授权证书,自然无法安装和运行。所以我们需要签上我们自己的开发者证书。
iOS重签名工具
开发者账号自然是为了能有开发者证书,所以才准备的。
2.代码编写
我们需要用cycript对微信各功能的UI元素进行动态分析,分析出哪一个功能用了哪些class,再配合class-dump打出来的头文件进行验证,最后利用ida pro的静态分析它的具体实现内容,利用hook技术写出dylib。这个过程非常繁琐,这里我直接丢出已经生成好的dylib。
dylib
dylib又叫动态注入库,它可以使用工具直接注入到微信app的二进制文件中。
其实,ipa安装包本质是一种苹果设立的压缩包格式,完全可以解压。
解压以后,长下面那个样子
ipa解压
起到重要作用的就是Payload文件夹中的文件。
Payload
Payload文件中的这个文件,本质也是一个压缩包
二进制压缩包
图中那个红色标注的名为WeChat才是实际运行在iOS平台上面的app程序主体。
而我们则是需要将dylib注入到里面去。
3.开始注入
我们利用自动注入脚本进行注入。
首先我们打开iTerm进入到脚本目录
脚本目录
脚本代码如下:
# !/bin/bash
# 使用 ./autoInsertDylib.sh ipa文件路径 dylib文件路径 eg: ./autoInsertDylib.sh wechat.ipa robot.dylib
shell_path="$(dirname "$0")"
SOURCEIPA="$1"
DYLIB="$2"
LIBSUBSTRATE="${shell_path}/libsubstrate.dylib"
temp_dir="${shell_path}/tweak-temp-tk"
ipa_bundle_path="${temp_dir}/${SOURCEIPA##*/}"
libsubstrate_path="${temp_dir}/${LIBSUBSTRATE##*/}"
dylib_path="${temp_dir}/${DYLIB##*/}"
framework_path="${app_bundle_path}/${framework_name}.framework"
rm -rf ${shell_path}/../Products/*
mkdir ${shell_path}/../Products/
if [ ! -d ${temp_dir} ]; then
# echo "创建 ${temp_dir}"
mkdir ${temp_dir}
fi
cp "$SOURCEIPA" "$DYLIB" "$LIBSUBSTRATE" ${temp_dir}
# cd "$shell_path"
echo "开始注入dylib >>> \n\n\n"
# echo "正将" ${SOURCEIPA##*/} ${DYLIB##*/} ${LIBSUBSTRATE##*/} "拷贝至/tweak-temp-tk"
otool -L ${dylib_path} > ${temp_dir}/depend.log
grep "/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate" ${temp_dir}/depend.log >${temp_dir}/grep_result.log
if [ $? -eq 0 ]; then
# echo "发现有 ${DYLIB##*/} 依赖于 CydiaSubstrate, 正将其替换为 libsubstrate"
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib ${dylib_path}
# else
# echo "没有发现依赖于CydiaSubstrate"
fi
# echo "解压" ${SOURCEIPA##*/}
unzip -qo "$ipa_bundle_path" -d ${shell_path}/extracted
APPLICATION=$(ls "${shell_path}/extracted/Payload/")
app_path="${shell_path}/extracted/Payload/${APPLICATION}"
# cp -R ${app_path} ./
# rm -rf ~/Desktop/temp/extracted/Payload/$APPLICATION/*Watch*
cp "${shell_path}/popup_close_btn.png" ${app_path}
cp ${dylib_path} ${libsubstrate_path} ${app_path}
# echo "删除" ${APPLICATION##*/} "中 watch 相关文件"
rm -rf ${app_path}/*watch* ${app_path}/*Watch*
# echo "注入" ${DYLIB##*/} "到" $APPLICATION
${shell_path}/insert_dylib @executable_path/${DYLIB##*/} ${app_path}/${APPLICATION%.*} > ${temp_dir}/insert_dylib.log
echo "注入成功 !!!"
rm -rf ${app_path}/${APPLICATION%.*}
mv ${app_path}/${APPLICATION%.*}_patched ${app_path}/${APPLICATION%.*}
cp -R ${app_path} ${shell_path}/../Products/${APPLICATION}
# echo "删除临时文件 >>>"
rm -rf ${shell_path}/extracted ${temp_dir}
# echo "打开 tweak-temp-tk 文件夹"
open ${shell_path}/../Products/
# open /Applications/iOS\ App\ Signer.app
autoInsertDylib.sh
好在已经写好了,我们直接使用即可
格式如下:
./autoInsertDylib.sh ipa文件路径 dylib文件路径
我这里命令为
./Others/autoInsertDylib.sh ./wejalibreak.ipa ./robot.dylib
读者根据自己的情况自行调节
注入完后以后,Products文件夹会自动打开,里面就是生成好的Payload文件夹中的二进制文件压缩包。
二进制文件压缩包
4.重新签名并打包
这里我们需要先用Xcode新建一个项目,设置一下下面三个地方
新建项目并设置
设置完以后,我们用数据线将iPhone和Mac连接,并真机调试这个项目,目的是为了将我们这个项目的证书导入到我们的iPhone中,方便安装我们修改好的微信。
调试完成以后,我们就可以进行重签名。
重签名设置
这里设置必须和上面那个新建项目保持一致。设置ok以后,我们点击start会提示选择输出ipa安装包的位置,我们任意选择一个就行了。
生成以后的新安装包,我们就可以安装到我们的手机了。
我们打开Xcode,点击Window即可看到如下选项
真机和模拟器管理
我们点击+号即可安装我们重新生成的微信安装包
安装ipa
这时,你的iPhone上面会有两个微信。
截图
新出现的微信可以和原来的共存,你可以进去以后,点设置会多出一个Plugin选项。
Plugin
Plugin
到此,我们逆向微信完成。
看看效果
防撤回
运动步数修改
虚拟定位
抢红包功能也没问题,就不截gif了。
教程所涉及的重签名工具,脚本,以及dylib动态注入库,请到如下链接下载。而砸壳的原版app,请自行下载pp助手电脑版下载即可。
网友评论