1.png (247.78 KB, 下载次数: 1)
下载附件
2020-7-15 11:49 上传
最近发现一款软件去除穿山甲的广告后(去广告教程:https://www.52pojie.cn/thread-1213695-1-1.html),出现了上面的提示,这种叫做toast。不过这种情况还是非常少见的。
"
他的通用代码是【
Landroid/widget/Toast;->show()V
】,一般在包名路径下。不过如果删掉这段代码,所有的消息框都会消失,比如再按一次退出、你没有……、需要登录等。所以并不推荐一刀切,现在要准确定位是从哪里弹出来的,而且修改后不能影响正常的提示,要准确定位弹出来源就需要用到DDMS来监控app运行情况了。
注意:
1、在apk配置文件内加入android:debuggable="true",打开调试功能。如果app有反调试,代码内搜索【isDebuggerConnected】想办法改掉。
2、由于必须要在app启动时运行“start method profiling”(这个工具可以从虚拟机层面抓取每个函数及其调用的函数的运行时间,统计运行次数等功能,是分析性能问题的绝佳工具),所以这个分析方法的按钮不能在弹出toast后再点击,这样会捕捉不到。
3、由于2的原因,启动app的瞬间手机立即切换到多任务窗口(不要按主页键),暂停其运行,几秒后系统会自动释放。这样就能抓到函数了。
2.png (33.94 KB, 下载次数: 1)
下载附件
2020-7-15 15:33 上传
回到穿山甲广告的开关,修改后他的代码如下:
.method private a(Lcom/bytedance/sdk/openadsdk/a/b;)Z
.locals 2
const/16 v0, 0x3e8
const-string v1, "\u5e7f\u544a\u8bf7\u6c42\u5f00\u5173\u5df2\u5173\u95ed,\u8bf7\u8054\u7cfb\u7a7f\u5c71\u7532\u7ba1\u7406\u5458"
invoke-interface {p1, v0, v1}, Lcom/bytedance/sdk/openadsdk/a/b;->
onError
(ILjava/lang/String;)V
const/4 p1, 0x1
return p1
.end method
invoke-interface:调用。直观的理解就是v1寄存器的字符串放到onError里面去了,广告异常时就会弹出提示。
所以DDMS内直接输入onError,看看会有什么结果。
1.png (70.44 KB, 下载次数: 0)
下载附件
2020-7-15 15:49 上传
如上图,一目了然,上下关系都非常清楚。$在java里面是分割符,从LOG来看字符串tag是SplashActivity,那么可以确定来源就在SplashActivity$1。所以根据DDMS找一下文件【com/histudio/app/ad/SplashActivity$1.smali】,然后定位到方法
onError(ILjava/lang/String;)V
,直接让他结束掉即可,常用的是return-void。
1.png (123.39 KB, 下载次数: 1)
下载附件
2020-7-15 16:02 上传
[Java] 纯文本查看 复制代码.method public onError(ILjava/lang/String;)V
.locals 1
return-void
.end method
这样一来就没有烦人的错误提示了,同时也不影响正常操作的提示。
除此之外,还能顺藤摸瓜找到toast总开关。上图依次点击access$000——showToast——showToastTip。而这个showToastTip如果直接结束掉了整个app都不会有toast弹框了。如下图:
1.png (34.76 KB, 下载次数: 1)
下载附件
2020-7-15 16:10 上传
2.png (25.17 KB, 下载次数: 1)
下载附件
2020-7-15 16:10 上传
3.png (24.36 KB, 下载次数: 1)
下载附件
2020-7-15 16:10 上传
"
PS:顺便说一句闪耀暖暖真好玩,良心游戏
22.png (154.76 KB, 下载次数: 1)
下载附件
2020-7-15 16:11 上传