导读

  • 好了,这篇主要是融汇贯通一下MonkeyDev的实际使用,及越狱环境下theos的使用.另外除了腾讯视频(version 6.9.8)去广告外,还做了爱奇艺(version 10.3.0)快速跳过开屏广告,去前贴广告.

需要技能

  • 1.懂基本的终端指令以及操作.

  • 2.会使用Xcode,有基本ios开发基础.

  • 3.会使用hopper,class-dump…

  • 4.有耐心,重复非常需要有耐心,前面的都是基础入门和各种预备条件,开干的第6点开始看.

工程地址

  • 内部人员,打好的包,私下问我会直接提供,谢谢

  • 外部人员,请自己下载源码编译吧

  • 由于涉及各种版权问题,仅供内部使用,本文作者不提供任何技术支持,及不承担由此做成的法律责任,如有需要可联系作者

越狱环境下 theos

非越狱环境下 monkey

开干

1 IPA砸壳

  • 1.手工砸壳(这里不详说,内容太多了,可能以后再深究)

  • 2.第三方ios app市场,例如pp助手 爱思助手 同步推等等 ,均可以下载已砸壳,这里采用pp助手 (这里采用这种,看图明确,不在说明),这里的图片可能不是匹配腾讯视频的,懒…很懒…非常懒…没有重新做截图.

image

image

2 安装class-dump

  • class-dump安装我不想在说了,安装方法,百度搜索一堆,自行百度吧!!!或者看本blog的其他内容.也是有说明的.

3 安装MonkeyDev

  • 为什么用MonkeyDev? 因为足够简单,安装方法嘛,百度搜索一堆,自行百度吧!!!或者看本blog的其他内容.也是有说明的.

  • 重要!! 重要!! 重要!! 重要!! 必须在真机运行.

[原作者(AloneMonkey) 简书]

(https://www.jianshu.com/p/61c2aca18f0b)

MonkeyDev Github

MonkeyDev 安装方法

5 安装Hopper Disassembler v4

  • 破解版网上找,鄙人使用的是(Hopper Standard Edition (4.0.8)破解版).

  • 这个优点就是可以看到伪指令.参考截图吧

  • 另外,包里面的framework是分析不出来的,这里用了一个笨办法,追debug堆栈

image

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);

}

image

打包(越狱/非越狱)

非越狱生成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>

image

越狱环境下,deb打包

ios越狱机的ssh
安装theos

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.