好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 windwing1883 于 2015-12-26 12:30 编辑
0X0:教程很简单,主要是分享思路,大牛就表看了,主要是分享给像我这种菜鸟的.
0x1:工作要求最近正在研究Android Xposed框架下的一些功能,有一版Xposed用得好好的突然不能用了,想重装一下,于是网上搜了一下'xposed框架下载'随便找了一个下载下来装上,发现有广告,习惯性的丢进JEB分析了一下就有了如下破解过程(这个帖子是回忆昨天破解,可能逻辑不是很连贯大致流程说一下)
0x2:进入app发现有广告,如图1.
思路①:一般的广告sdk加入过程为:
(1)拷贝jar文件到libs目录下(2)Manifest下加一些权限-Activity-或一些数据(3)在程序入口初始化穿入广告ID之类的过程,如果是Banner广告还要将View加入Layout中以便能在屏幕上显示插屏则不用.
知道了上述流程 就可以将Banner的View 大小设置为0以至于在屏幕上显示不出来(但是强迫症的我是接受不了的)
或将sdk初始化代码在smail中分析删除,或者将广告ID改成你自己的,自己的广告自己肯定不排斥
也可以视情况将 Manifest文件下的网络权限给去除(如果确定App是单机的,完全没有网络交互可以这样做,但是不推荐)
思路②:
一些特殊App会有去广告的功能,如果买一些东西(vip之类的)或者是积分可以去除广告,那就需要分析一下代码了(本文是这种情况)
过程1:
图上面已经看了 是属于banner广告类的 上面有去广告的按钮,首先找了一下广告values目录下的配置文件(values目录:app的资源目录之一主要放一些字符串资源,放入之后可以在R文件中生成资源ID可以在程序中通过 这个ID调用)没有找到所谓的广告ID(这个广告像不像是某些sdk的),于是点了一下去广告按钮准备走一下爆破路线,发现需要积分神马的,简单走了一下他去积分流程,先提示我有0积分,再点去广告就Toast(Toast:就是屏幕里出一个黑条上面显示文字,过一段时间自动消失)显示积分不足,于是JEB的Strings下搜索'积分不足'如图2点进去 Tab一下看源代码(分析Apk的时候非常喜欢先拖进JEB 因为它代码还原性高,可读性强,而且还可以看引用,改一些名字之类的,强烈推荐我就用的吾爱的JEB).
看到代码:
[Java] 纯文本查看 复制代码 if(arg7 == this.c) {
Context v0 = this.getContext();
y v1 = a.a(v0);
if(v1.a("pref_key_coins", 0) < v1.a("pref_key_coinnumremove", 0)) {
a.a(v0, "积分不足.");
a.a(this.getContext(), true, true);
return;
}
a.a(this.getContext(), false, this.m);
return;
}
比较那行大致意思是:读本地配置文件 读取 'pref_key_coins'和'pref_key_coinnumremove' key的value值 没有这个key是返回0.既然看到这里可以直接去
data/data/应用包名/shared_prefs/下的xml里 填上 这个字段 并且给很大值(试了一下这样做失败了,失败原因不做分析因为我有很多方法让广告去除 哈哈,继续往下说)所以改了一下跳转: 之前是 if-ge v2, v1 :A6 如果v2≥ v1就跳到A6(ge 是 Greater Equals)改成小于之后反编译安装点去广告流程,发现没有上一个提示了(截止目前上一部是做成功了)出现了新的提示Toast 是 "积分不足,去广告失败!"继续JEB搜索,追踪到代码处:
[Asm] 纯文本查看 复制代码 .method public static a(Context, Z, DialogInterface$OnDismissListener)V
.registers 7
00000000 const/4 v2, 0
00000002 invoke-static a->a(Context)y, p0
00000008 move-result-object v0
0000000A const-string v1, "pref_key_coinnumremove"
0000000E invoke-virtual y->a(String, I)I, v0, v1, v2
00000014 move-result v0
00000016 invoke-static a->c(Context)I, p0
0000001C move-result v1
0000001E if-lt v1, v0, :A8
:22
00000022 if-eqz p1, :56
:26
00000026 instance-of v0, p0, Activity
0000002A if-eqz v0, :3A
:2E
0000002E move-object v0, p0
00000030 check-cast v0, Activity
00000034 invoke-virtual Activity->finish()V, v0
:3A
0000003A invoke-static a->a(Context, I, DialogInterface$OnDismissListener)V, p0, v2, p2
:40
00000040 new-instance v0, Intent
00000044 const-string v1, "jobernowl_ACTION_REFRESH_POINTS"
00000048 invoke-direct Intent-><init>(String)V, v0, v1
0000004E invoke-virtual Context->sendBroadcast(Intent)V, p0, v0
00000054 return-void
:56
00000056 neg-int v0, v0
00000058 invoke-static a->a(Context, I)V, p0, v0
0000005E invoke-static a->a(Context)y, p0
00000064 move-result-object v0
00000066 const-string v1, "pref_key_last_removed_time"
0000006A invoke-static System->currentTimeMillis()J
00000070 move-result-wide v2
00000072 invoke-static Long->valueOf(J)Long, v2, v3
00000078 move-result-object v2
0000007A invoke-virtual y->a(String, Object)V, v0, v1, v2
00000080 const-string v0, "去广告成功,稍候广告会自动消失!"
00000084 invoke-static a->a(Context, String)V, p0, v0
0000008A invoke-static a->a(Context)y, p0
00000090 move-result-object v0
00000092 const-string v1, "pref_key_remove_banner"
00000096 const/4 v2, 1
00000098 invoke-static Boolean->valueOf(Z)Boolean, v2
0000009E move-result-object v2
000000A0 invoke-virtual y->a(String, Object)V, v0, v1, v2
000000A6 goto :40
:A8
000000A8 if-eqz p1, :C8
:AC
000000AC instance-of v0, p0, Activity
000000B0 if-eqz v0, :C0
:B4
000000B4 move-object v0, p0
000000B6 check-cast v0, Activity
000000BA invoke-virtual Activity->finish()V, v0
:C0
000000C0 invoke-static a->a(Context, I, DialogInterface$OnDismissListener)V, p0, v2, p2
000000C6 goto :40
:C8
000000C8 const-string v0, "积分不足,去广告失败!"
000000CC invoke-static a->a(Context, String)V, p0, v0
000000D2 goto :40
.end method
看到这里应该是去广告的关键部分,因为看到去广告成功字样,分析代码是 if(){xxx return}elise if{xxx return}else{这里是成功}.因为有之前两个条件判断改跳转条件可能比较麻烦,下个做法:直接把每个条件的跳转 都指向去广告成功出的标签比如说这个是 :56 这样使每个条件都跳到成功逻辑里然后反编译运行,去广告,提示去除广告成功字样 至此也算破解完了.
0x3说明:
一,本帖如有违规请管理删帖. 二,如有分析不到之处还请大神给我斧正.
三,本次破解过程纯属个人娱乐不涉及商业用途.
四,如果对你有所帮助请给我加加血 哈哈.
五,用JEB分析代码用AndroidKiller等修改Smail.
六,不设高富帅通道,因为吾爱的所有人都是高富帅,不强制加血.
附示例链接: http://pan.baidu.com/s/1bvqHLO 密码: xjuk 还有成品链接: http://pan.baidu.com/s/1gdXzX2z 密码: ssae
0x4预告:(因为工作原因时间原因,虽然很想破解并在论坛上发点东西,但是毕竟精力有限)下篇有可能是破解书旗下载功能或者是破解一款收费联网软件 敬请期待哈哈
|
免费评分
-
查看全部评分
|