前几天,我的android手机升级了几个软件,这两天手机突然莫名其妙的弹广告,并且根本不知道是哪个应用程序弹出来的。一般地弹广告也是运行某个app,就算是后台弹出,也有地方标志着是这个app弹的广告。而这次这个app也太狠了,自己想赚钱也就算了,还不让用户知道是谁。就想到一定得把它揪出来。 (之前以为是appchina应用汇,就卸载了,结果还弹……然后就是怀疑之前更新的豌豆荚,水果忍者……,不能老用排除法试了) 我能想到的解决方案就是看android运行的系统log日志了。
一种方法是连接电脑,用adb调试工具查看log,另一种方法是直接在android手机看log日志记录:alogcat。
等手机再弹出广告时,打开alogcat,为了方便查找,清除下刚刚产生的log,然后去通知栏那里点点那个广告,再返回alogcat先暂停记录log,然后慢慢看。TMD,是一个叫com.halfbriakin.utils..之类的activity再放广告,然后关键字*fruitninjaseasons*,居然是水果忍者。
再想水果忍者的开发者应该不会无耻到这个地步吧?用这样的方式弹广告。就想弄个究竟。查了下,我这个水果忍者是从豌豆荚下的,说的开发商是halfbriakin,而切水果这样的火,他应该不敢这么做吧,查了下,切水果的官网是halfbrick.com。得看看halfbrick跟halfbriakin的关系。是否halfbriakin山寨了了halfbrick,在其之上包装了一层。看样子好像是的,纯属个人猜测。
继续探个究竟。看源代码,希望试图从中找出其与广告相关的代码跟halfbriakin的关系。从官网下载的com.halfbrick.fruitninjafree进行对比。
android的apk文件反编译用到的工具:
- android代码反编译工具:dex2jar;
- java源代码查看工具:jd-gui;
- android资源文件查看工具,(那些xml文件,打包成apk时被编码过一次,直接看有乱码看不清楚) apktool或者AXMLPrinter2.
下面看看过程:
- 反编译得到源代码,直接将apk文件后缀改成rar,用winrar解压即可得到classes.dex,然后通过dex2jar工具就能得到java的源代码。
- 然后用jd-gui查看编译后的源代码。看样子好像确实是山寨的,不过可能因为二者版本不一致导致的?我想可能不大。下图左边为网上能下载到的开发商是halfbriakin发布的软件,在什么豌豆荚啊应用汇啊等等能下到,其介绍敢说哦什么Android官方无广告版本正式发布,只能说在放P了。下图右是我到google play下的,官网的免费版本。能看出来开发商是halfbriakin这个版本多了个上面那个包。
- 怀疑类似一些请求广告的url写在资源xml文件中,因此得解码资源文件。android的xml资源文件解码有两种方法
- 用AXMLPrinter2.如下图命令后,打开t.xml文件可以看到AdnroidManifest的内容。
结果找了下,好像什么请求广告的url之类没写在string.xml等文件里面。还是看源代码吧。
查了下,’山寨’版本(暂且这么叫吧)的切水果,除了官方版本的广告外(google ads,意大利的游戏广告企业beintoo,移动广告服务商admob和moblix),还有多余的那个包domob(国内的手机广告服务商多盟),找了下没有找到相关的绑定的ID(也不深究了)。感到奇怪的是,水果忍者发布出来的源码里面出现了好多这种废弃的代码,不知道是程序员懒还是怎么着。自我感觉发布的时候还是把废弃代码给删掉吧,能减轻体重呢。
另外看“山寨”的源码也有这种废弃的代码:
现在就不知道是到底是出自原来的程序员之手呢还是说山寨的过程中,copy了这些代码。
不管怎么说,如果这个开发商halfbriakin是来自官网也好,不是也罢,这个广告也弹得太恶心了。
来源:投稿,作者:中南大学软件学院08级学生:唐磊 ,作者blog