纯个人笔记,无任何技术含量可言,大佬勿喷(保命)

有段时间一直在碰coco2dx的免广,关于那一堆玩梗的游戏,期间碰到一个游戏,奈何它是unity引擎的,就放置到一旁了,不会改,这游戏让我一直耿耿于怀,这游戏拿ida分析不下4次了,但每次修改都是无功而返。然而这几天在尝试改unity的免广时我发现好像一种模板可以无脑的去尝试跳过广告(不一定成功)就想着能不能套用,结果阴差阳错就成了,就离谱

好的,废话不多说,开始写笔记[吐舌]

免责申明[滑稽]:
接下来的操作纯属个人误打误撞弄出来的,不存在任何教学意义,因为我连原理都不知道是什么,且个人知识储备有限,在记笔记时有错误还望看官们多多包涵,顺便有空的话可以给小的指出错误[玫瑰]

《免广告获得奖励》

无非两种:

(1)游戏内置有可跳过广告直接获得奖励的特权,给这个特权的方法(参数)赋值,从而骗游戏认为你是特权玩家,达到免广告获得奖励

(2)传参数,我不太了解这个,因为这玩意要看伪代码部分,我看不懂C++,所以我不懂,也不敢多做解释[心碎][心碎]

开始今天的笔记

受害者原包链接:

https://www.123pan.com/s/IrQiVv-7tDA3.html

(原包没有签名,且有签名验证,记得去签后在签名安装)

il2cpp打包,老规矩,dump后直接上dnspy和ida

看广告嘛,无非这些关键词:

reward
show
ads
play
video
以及它们五个乱七八糟的组合,如:ShowRewardVideo

上dnspy过滤搜索

【血羽教程】【记一笔】关于unity免广的一次无脑操作 第5张插图

AdManager类,好好好,很公式,我喜欢

看左边框框

setAdFree
setCheat
(set函数我不会改,略过[滑稽])
ShowRewardAd(咱们要的)
ShowFullAd(应该是控制强制广告的,也不一定)
ShowVideoAdSuccess
IsCheat(作弊模式)
bool IsNoAd(字段,有可能是方式1的关键)

问题来了:
ShowRewardAd到底是不是我们要找关键呢,所谓关键就是播放广告及给予奖励的这一操作有没有经过这里,如果经过(这个方法被使用)了,那这个方法就是关键的一环。

如何判断是不是关键:

(按照经验来AdManager类里的就是控制广告的函数,大部分是这样的)

(1):最快最准确也是最简单粗暴的,直接RET这个方法,打包回去测试,如果广告没有弹出,那它十有八九就是关键的一环了[吐舌]

(2)看方法参数和上ida看方法的引用(被引用)

如这个方法的参数就有(看右边框框)int类型的 _adId用来接受广告id的,还有一个Action onAdSuccess应该是广告播放完成的参数

看ida的引用

【血羽教程】【记一笔】关于unity免广的一次无脑操作 第6张插图

像showanwer(展示答案) showtip(展示提示)之类的这些在游戏中都需要用到广告解锁,那这方法包是我们需要的关键呀

怎么改:

1.不用ida分析

(1)将ShowRewardAd直接 b指令 到 ShowVideoAdSuccess

(2)将IsCheat赋值1

(3)hook IsNoAd字段 让它返回1

不出意外的话,这三种方法都没用[呵呵]

应该是我改的不对

2.用ida分析

在这边感谢 筷子大佬 的hook指导,还教我用ida的图形视图(之前一直用列表列表视图,代码逻辑看到昏头,用了图形视图后一目了然)也感谢 北风大佬 之前答疑的免广问题(虽然不是很懂[滑稽])

一整个视图太大了,只能缩小成这样了,先这样分析

【血羽教程】【记一笔】关于unity免广的一次无脑操作 第7张插图

箭头标注的是ShowRewardAd方法的开始

红色框的似乎是给予奖励的函数体(我认为)

绿色框的(也包括红色框的部分)是模板

之所以说是模板,是因为他的代码逻辑特别像方式(1)特权法,而且之前碰了一个游戏也像这种

而黑框则是“特权的判断”

放大视图,从黑框开始

【血羽教程】【记一笔】关于unity免广的一次无脑操作 第8张插图

放大看,模板像方式(1)但黑框内却没有关于特权方法的判断引用

那现在把模板当做方式(1)那样来修改

注:在黑框上面还有一个判断是直接跳到红框里的,我认为这样是不会发放奖励的(没验证过)所以那个判断直接nop掉

至于黑框这边,我们把它比做是“特权”而且知道红框是奖励了,那么正向跳转(w8的值为0)就会跳到“播放广告”那里了,之所以说是像是因为“播放广告”后并没有跳转到红框的代码,所以我们不能要其正向跳转,有两种方式,一种是将w8赋为不等于0的值,二是直接选择nop掉这个判断,我选择第二种方式

修改后整个函数代码逻辑

【血羽教程】【记一笔】关于unity免广的一次无脑操作 第9张插图

修改部分

【血羽教程】【记一笔】关于unity免广的一次无脑操作 第10张插图

修改原理:

直接跳转到“发放奖励”一般是不成功的,因为如果真是“发放奖励”函数体的话应该会接受“广告播放完成”之类的参数从而进一步给用户发放奖励,而我们选择nop掉,代码还是会继续走下去,在走的过程中应该会带上这个参数(都是我的个人理解及观点,正确性有待考察)

到这里整个修改过程就结束了,剩下的就剩打包安装测试了,亲测完美运行,且功能能用

ok,菜鸟笔记结束

个人实在太菜,专业术语之类可能表达不对,笔记内容也质量低下,大佬们看个笑即可[哈哈]

自己也是在学uinty免广过程中胡乱摸索出来的,觉得挺好玩的就发出来记录了[吐舌][玫瑰]