2020-10-20android apk反编译插入广告

术语:

1.游戏apk(app):需要插入广告的游戏app,以下统称游戏app或游戏apk。

2.广告apk(app):接入了广告sdk的app,以下统称为广告app或广告apk。

本专栏文章以接入4399广告sdk为例。

本专栏文章适合有一定的android开发经验的developer阅读

需要配置的选项:

1.包名

2.appName

3.appIcon

4是否有闪屏广告

5广告id

步骤:

1.反编译游戏app待用。(付费文章可展开)

2.新建android工程(付费文章可展开)。接入4399广告sdk,编译生成sdk。

3.反编译广告sdk待用。

4.合并public.xml文件(可单独写一个public.xml的介绍)

publc.xml是aapt在打包资源时用来固定资源id的,如果资源在public.xml中有对应的id了,那么打包资源时就用已经有的id。

在开发中我们通常使用 Resources.getXXX(resid) 来获取某个资源,传入的是 ID 这个 ID 定义在 R.XXX 类里面,R 类是编译器自动生成的。

而 apktool 在重新打包 apk 的时候会对资源重新编译 (编译成 resources.arsc 你有zip打开 apk 看得到

编译资源的时候自然需要对所有资源ID进行重新编排(这是一个随机过程)试想假设原包里面 drawable/a.png id=0x7f020003 那么重新编排资源ID后就可能是 0x7f020004 又假设原包 0x7f020004 对应图片 b.png,那你重新打包后的 apk 当显示 a.png 的时候就会替换成 b.png,这还好不会出错,倘若生成的一个 id 原包不存在,那会导致程序崩溃的!

所以 public.xml 的作用就是把对象资源 ID 写死!

以游戏apk为基准文件,将广告sdk的public.xml合并。

合并原则:

在一个public.xml文件中,同类型比如attr对应的PackageId+TypeId是不能变的,否则回编译失败。因此要添加数据时,数据的PackageId+TypeId需要纠正为matrixPublic的值。

其次资源值,不能和已有的资源值重复,正常情况下public.xml中的值是aapt生成的有序的,这里可以扫描matrixPublic中attr类型值的最大值,然后加一作为新加的iconSrc的id值

4.1 将游戏app的public.xml资源id分类并保存,

4.2将sdkapp的public.xml文件资源id分类

4.3 找出游戏app的public.xml分类后的id中的最大值

4.5 将sdkapp的public.xml同类型的资源id值在4.3找出的最大值上+1,知道所有的sdkapp的public.xml中的同类型资源id处理完毕。

4.6 将4.5处理完的资源id合并到游戏app的public.xml的同类型资源下。

5.修改包名下的R文件

根据合并后的public.xml文件以此修改不同的资源及对应的id值

6.合并其他文件

注意多dex的情况,将不紧急的smail包放到第二个或更后面的dex

7.分析插入广告代码点

8.插入广告代码

9.重新打包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值