某APP作弊代码分析

35 sec read

先前网上的一篇文章直指某APP数据作弊骗取投资人及广告商。虽然文章中间也包含了部分的代码,但是为了进一步确认。还是自己反编译后再做确认。我下载该App的历史版本(曝光后最新版本作弊代码已被隐去)并进行反编译。下载的该APP版本为:v5.0.1,反编译工具采用的是:onekey decompile apk。以下为一些代码及分析:

他是如何伪造日活的?

先前文章中描述中的流程:

  • 后台偷偷启动进程,让APP在后台永活(后台启动了5个服务,相互保护)
  • 永活的APP定制执行“普罗米修斯”代码
  • “普罗米修斯”代码逻辑:打开用户看不到的透明界面,即使是用户在关闭屏幕状态,界面也会打开。
  • 执行“普罗米修斯”代码时会让第三方数据公司监控到应用存在活动,记录日活。

普罗米修斯(古希腊语:Προμηθεύς;英语:Prometheus),在希腊神话中,是最具智慧的神明之一,最早的泰坦巨神后代,名字有“先见之明”(Forethought)的意思。泰坦十二神的伊阿佩托斯与海洋女仙克吕墨涅的儿子。普罗米修斯不仅创造了人类,给人类带来了火,还很负责的教会了他们许多知识。

先来看下他的代码

使用onekey decompile apk进行反编译,发现是AndroidManifest.xml是空的,解决方法:

  • 将Apk应用包修改文件名后缀为 zip,用解压缩软件如winrar提取出xml文件
  • 下载xml文件解码工具:http://android4me.googlecode.com/files/AXMLPrinter2.jar
  • 将xml和AXMLPrinter2.jar放在同一目录下,在命令行执行:java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
  • 后台服务注册相关代码就会出现在txt文件里

其中最核心的服务从代码看,仅仅是一个简单的消息推送服务的注册,看不出什么问题

我们再进入fm.qingting.qtradio.NotificationService看下代码到底执行了什么?查看代码发现NotificationService 会在onCreate方法里面调用MessageManager类的restartThread方法。这个也是很正常的行为。

我们再进入MessageManager看下 restartThread()到底执行了什么?

到现在为止还是没有异样,继续深入,查看MessageThread类:

可以看到,在上述的代码中调用了execPrometheus(),普罗米修斯终于出现了,其中execPrometheus()的代码为:

其中调用了:handlePrometheus(),由于要伪造日活,所以判断条件中使用了1天(ONE_DAY)

handlePrometheus()又调用了doPrometheus():

在doPrometheus()中,又启动了一个启动了一个ShieldActivity,这个activity居然什么事都没做,是个无界面的activity,类似透明窗口,并且2s之后销毁结束自己。然而却可以被友盟、Talkingdata等第三方工具捕获并作为活跃数据。ShieldActivity类中的代码:

至此如何伪造日活数据的代码分析完毕,接下来分析他是如何进行刷第三方广告。

他是如何刷APP第三方广告的?

上一篇看了他刷日活的代码,用假数据骗取投资人的,这次再看下他是如何用技术手段骗取第三方广告公司广告费的。上面介绍的是普罗米修斯,接下来就要介绍宙斯了。

宙斯(英语:Zeus,现代希腊语:Δίας,古希腊语:Ζεύς,罗马语:Jupiter)是古希腊神话中第三代众神之王,奥林匹斯十二神之首,统治宇宙的至高无上的主神(在古希腊神话中主神专指宙斯),人们常用“神人之父”,“神人之王”,“天父”,“父宙斯”来称呼他,是希腊神话里众神中最伟大的神。

在研究代码之前,先来看看他的作弊逻辑:

  • 在用户手机上打开webview浏览器,将其设置到最小化(肉眼看不到)
  • 在肉眼看不到的浏览器中打开广告主提供的图片
  • 模拟用户点击广告图片(向广告图片的链向的地址发起请求)
  • 将打开和点击数据发送给第三方数据监测公司

直接看下宙斯代码:(具体宙斯类存放在fm.qingting.utils下),Zeus类里面主要新建了一个WebView对象,好像这并没有什么问题,但是你仔细观察发现,这个神奇的Zeus类,它并没有把webview对象添加到任何可见化界面上,比如常见的Activity/Fragment等。

宙斯类中比较核心的两个方法:

接着我们再来看下哪里在调用setZeusUrl和setZeusPercent进行偷偷的打开链接的行为。在fm.qingting.qtradio的QTRadioActivity类下面,找到了如下代码:

看来中招的是来自Google Adsense的doubleClick。除了Google的doubleclick还有谁中招?通过寻找startZeus(),我们找到了RootNode的类,类中出现了一个叫定时器的方法:

定时器中还调用了ThirdTracker类,此次中招的还有admaster、京东及秒针。

回到刚才提到的定时方法onClockTime(),可以查询到这个定时器的调用者为:ClockManager中的dispatchClockEvent()

那么dispatchClockEvent()方法又是谁在调用呢?

可以看到上面的程序是个死循环程序,所以一直在运行着。

到此主要的作弊代码分析完了,感兴趣想深入研究的可以自己反编译。对于如此有才华的公司及程序员,我只能是膜拜膜拜再膜拜。另外提醒一句:善有善报,恶有恶报,不是不报,时辰未到!

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

C语言学习:size_t

在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。
44 sec read

C语言学习:main()函数的正确写法

C语言虽然是一门古老的语言,但是其标准一直在完善,所以很多以前支持的语法在到当前已经不能在使用了。 C语言的版
41 sec read

Scipy数学函数的Scala实现

最近在推进项目的时候,遇到需要将线下的Python代码转化成线上的集群代码,由于机器代码环境是Scala,所以
4 min read

One Reply to “某APP作弊代码分析”

发表评论

电子邮件地址不会被公开。 必填项已用*标注