0x00 背景
最近看到一个小游戏,但是它使用了supersonicads的sdk,广告极其多,非常烦,所以我就逆向了一下它,顺便分析了一下supersonicads的工作原理。
0x01 supersonic广告sdk分析
首先贴一下该sdk的用法:Rewarded Video Integration for Android。简单地总结一下,就是在需要显示广告的时候调用mMediationAgent.showRewardedVideo(placementName);,然后在回调函数onRewardedVideoAdRewarded实现自己想要给予用户的奖励。在我这次逆向的游戏中,如果你没有star无法进行游戏了,该游戏就会调用showRewardedVideo给你播放一部视频广告,然后播完广告后给你回复一颗star,你才能继续游戏。
很自然地,我想到先分析showRewardedVideo这个函数,于是我下载了supersonic的sdk,然后在
这个网站http://www.javadecompilers.com/result上反编译了一下。我分析了很久源码,发现showRewardedVideo这个函数最终会调用到com.supersonicads.sdk.controller.SupersonicWebView的showRewardedVideo,该函数定义如下:
其中injectJavascript会生成一段javascript,并用webview来load它。这段javascript会调用游戏加载时已经下载好的一段javascript中的showRewardedVideo函数。这段js函数由mobileController.html这个html加载,名字为http://supersonicads-a.akamaihd.net/mobileSDKController/versions/2.0.10/sdk_controller.min.gz.js。该js使用了一个叫做PubSubJS的库,使用该库注册一个showRewardedVideo接口,然后由刚刚的webview来调用这个接口。当webview播放完动画后,会调用t.callSDKFunction("adCredited",e,"adCreditedSuccess","adCreditedFailed")这段js来触发java的native方法adCredited。该函数是被导出成javascript的接口的:
接下来该函数调用mOnRewardedVideoListener.onRVAdCredited,这里com.supersonic.adapters.supersonicads.SupersonicAdsAdapter实现了OnRewardedVideoListener这个接口,并实现了onRVAdCredited方法,如下: