手机版
  • 您还未登录,请
  • 发布时间:2024-08-04 10:46:38
    浏览 3924    回复 0
    小明·同学
    会员

    关于unity免广的一次无脑操作

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

    有段时间一直在碰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过滤搜索

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

    看左边框框

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

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

    如何判断是不是关键:

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

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

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

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

    看ida的引用

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

    怎么改:

    1.不用ida分析

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

    (2)将IsCheat赋值1

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

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

    应该是我改的不对

    2.用ida分析

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

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

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

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

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

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

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

    放大视图,从黑框开始

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

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

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

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

    修改后整个函数代码逻辑

    修改部分

    修改原理:

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

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

    ok,菜鸟笔记结束

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

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

    所有评论(0)
    请文明发表评论,恶意辱骂/诽谤,发布广告者封号处理
    反馈意见