IOS逆向开发,腾讯视频(version 6.9.8)去播放广告
导读
- 好了,这篇主要是融汇贯通一下MonkeyDev的实际使用,及越狱环境下theos的使用.另外除了腾讯视频(version 6.9.8)去广告外,还做了爱奇艺(version 10.3.0)快速跳过开屏广告,去前贴广告.
需要技能
-
1.懂基本的终端指令以及操作.
-
2.会使用Xcode,有基本ios开发基础.
-
3.会使用hopper,class-dump…
-
4.有耐心,重复非常需要有耐心,前面的都是基础入门和各种预备条件,开干的第6点开始看.
工程地址
-
内部人员,打好的包,私下问我会直接提供,谢谢
-
外部人员,请自己下载源码编译吧
-
由于涉及各种版权问题,仅供内部使用,本文作者不提供任何技术支持,及不承担由此做成的法律责任,如有需要可联系作者
开干
1 IPA砸壳
-
1.手工砸壳(这里不详说,内容太多了,可能以后再深究)
-
2.第三方ios app市场,例如pp助手 爱思助手 同步推等等 ,均可以下载已砸壳,这里采用pp助手 (这里采用这种,看图明确,不在说明),这里的图片可能不是匹配腾讯视频的,懒…很懒…非常懒…没有重新做截图.
2 安装class-dump
- class-dump安装我不想在说了,安装方法,百度搜索一堆,自行百度吧!!!或者看本blog的其他内容.也是有说明的.
3 安装MonkeyDev
-
为什么用MonkeyDev? 因为足够简单,安装方法嘛,百度搜索一堆,自行百度吧!!!或者看本blog的其他内容.也是有说明的.
-
重要!! 重要!! 重要!! 重要!! 必须在真机运行.
[原作者(AloneMonkey) 简书]
(https://www.jianshu.com/p/61c2aca18f0b)
5 安装Hopper Disassembler v4
-
破解版网上找,鄙人使用的是(Hopper Standard Edition (4.0.8)破解版).
-
这个优点就是可以看到伪指令.参考截图吧
-
另外,包里面的framework是分析不出来的,这里用了一个笨办法,追debug堆栈
6 奇淫技巧
mokeydev 需要特别关注的配置参数
-
mokeydev的用法不细说,只说几个关键点,这几个设置对于项目编译有影响,特别是对于一些校验bundle_id的app
-
恢复符号变mokeydev旧版本,有bug,建议更新到最新版本
都在 buildsettings设置
MONKEYDEV_RESTORE_SYMBOL YES恢复符号表 NO不恢复(默认)
MONKEYDEV_CLASS_DUMP
//YES打包或导出header文件在项目 默认NO
PRODUCT_BUNDLE_IDENTIFIER
//YES不改变打包的bundle_id NO改变bundle_id
MONKEYDEV_DEFAULT_BUNDLEID
//xcode自动签名会用冲突,想使用原来的bundle id进行重签,这里输入一下
引入第三方库
- 我是pod了这些,各个都有对应技巧,使用场景
pod 'ReactiveObjC', '~>3.1.0' #写block神器
pod 'MJExtension', '~> 3.0.10' #数据转换神器
pod 'GCDWebServer', '~> 3.5.2' #不能debug时,我自建(http web server)打log神器
pod 'GCDWebServer/WebUploader', '~> 3.5.2'
pod 'GCDWebServer/WebDAV', '~> 3.5.2' #查看沙盒小帮手
pod 'FLEX', '~> 2.0'
逆向过程
-
1 先用reveal看ui,找出播放器的所在的QLPlayerViewController,
-
2 hopper中,查找对应的类,没有…可恨..
-
3 在找一下详情页QLVideoDetailViewController,看看有没持有返回模型
-
4 找到其中有一个模型,持有了adModel字段的对象,该类型为QLDataKeyAdDetailModelCtl,重写init方法返回nil,发现还是无效
-
5 在单步最终,最后QNBQQPlayerPlugin类中, imageAdsView, videoAdsView赋值时使用了
-
6 无效化,该类imageAdsView, videoAdsView属性的get方法,依然不生效
-
7 追踪QNBQQPlayerPlugin的初始化发现由,TVKMediaPlayerManager中使用.
-
8 runtime遍历一下该类方法,找到prepareAdInfo方法,并使其无效化.
-
9 到这里基本找出最终,可用代码位置了,写了如下代码
//文件dump_wechatDylib.m
CHDeclareClass(TVKMediaPlayerManager)
CHOptimizedMethod0(self, void, TVKMediaPlayerManager, prepareAdInfo){
return;
}
CHConstructor{
CHLoadLateClass(TVKMediaPlayerManager);
CHClassHook0(TVKMediaPlayerManager, prepareAdInfo);
}
打包(越狱/非越狱)
非越狱生成ipa
-
有企业的可以将ipa,企签一下,这里以后会写一篇关于企业证书配置及Jenkins自动化签名的部署的教程
-
没有的话只能用自己开发证书配置一下,然后找个自建并支持https://的空间把info.plist和ipa放上去安装,“itms-services"只能调用https的链接,并且如果bundid不变上传到蒲公英之类的第三方分发平台,会所违规禁止下载.
-
点红框 show in finder,就能看见,双击createIPA.command就能生成在当前目录
//safair打开该链接可安装,链接必须支持https
itms-services://?action=download-manifest&url=https://172.22.6.208:8000/com_aaa_1_0_1_201905041428/com_aaa_1_0_1_201905041428.plist">Install 米斗
//com_aaa_1_0_1_201905041428.plist配置参考,ipa链接可以不支持https
<?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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://172.22.6.208:8000/com_aaa_1_0_1_201905041428/com_aaa_1_0_1_201905041428.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.aaa</string>
<key>bundle-version</key>
<string>201905110910</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>aaa</string>
</dict>
</dict>
</array>
</dict>
</plist>
越狱环境下,deb打包
ios越狱机的ssh
-
安装OpenSSH服务,请参考https://www.jianshu.com/p/5241669baa74
-
记得修改默认密码,按提示操作 命令:passwd
安装theos
-
安装教程不说了,自行百度,或者直接点这里https://www.jianshu.com/p/2203f1a2e5ac
-
Makefile文件要注意配置一下环境,这个是我的makefile
export THEOS=/opt/theos
export THEOS_DEVICE_IP=172.22.4.67
export THEOS_DEVICE_PORT=22
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = demo
demo_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
- Tweak.xm是写logos语法
...懒...非常懒...这里没写,因为我有企业证书签名,所有不写越狱的了
- 其中有三个命令比较重要
make
make package
//生成 packages文件夹下的*.deb包
make install
//安装 deb包到真机
完结
- 这篇确省略了好多环境配置内容,毕竟这篇就只是方法引导而已,干货内容也就十来行代码,重要的是思路.但是涉及到很多技巧性的东西没办法明着说,基本上逆向开发整个流程这里都已近完整了,除了脱壳这一部分.逆向其实更多的是加强自己对项目的安全意识而已,ios其实也不是那么安全.特别是用了企签mdm之类的app.