首页
论坛
课程
招聘
[原创]AD Blocker Trial 破解小记
2012-2-28 20:55 17126

[原创]AD Blocker Trial 破解小记

2012-2-28 20:55
17126
【文章标题】: 【原创】AD Blocker Trial 破解小记
【文章作者】: 漏网之鱼
【作者邮箱】: lwzy-crack@163.com
【作者主页】: http://lwzy-crack.blog.163.com
【作者 QQ】: 530747686
【软件名称】: AD Blocker Trial
【下载地址】: 自己搜索下载
【操作平台】: Windows 7
【软件介绍】: 一款Android平台的广告拦截软件。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【软件介绍】
  软件简介:英文名字叫 "AD Blocker Trial",中文名有点长——"广告拦截器及净触发器的审判" 。
  该软件无需手机用户获得root权限,因为该软件拦截广告原理不是修改hosts文件 127.0.0.1 来
  实现的,并且可以单独设置拦截哪一款软件的广告非常人性化值得试用。
   
  使用方法:启动软件后 找到你想要拦截广告的软件名称单击,选择“Block” 就可以了  
  取消拦截:找到你不想要拦截广告的软件名称单击 选择“Unblock”就可以了  简单吧!
   
  注:有些应用程序如果你第一次没有阻止的话下次再阻止就不行了,因为第一次已经下载好了,
  解决方法就清理下缓存。
   
  “AD Blocker Trial ”优点无需用户获取root 可以自己选择拦截某款软件的广告 值得下载!
  但是它是共享软件,需要注册,软件有时间限制。过期后,软件不能正常使用,并且弹出'NAG'如图所示:

  因为国行手机Root以后就不给保修了,所以我至今没有Root,从"安卓市场"里面下载的很多程序都带有广告,很烦人,而且还浪费流量
  于是我就找到了这个软件,用了3天以后不能用了,提示过期,看来只好自己动手"PJ"它了。
  --------------------------------------------------------------------------------
【详细过程】
  准备工作:安装好Java运行环境,没有的朋友去这里下载 http://www.java.com/zh_CN/
  用到的工具:ApkTool_GUI_1.3.5内测.exe(众多Android程序的GUI版本), Notepad++ (非常强大的文本编辑工具,推荐使用  下载地址:http://notepad-plus-plus.org/ )
   
  1、反编译apk:

反编译后生成了ADBlocker_trial 文件夹,浏览目录发现 ADBlocker_trial\smali\net\xdevelop\util 里面 有一个可疑 文件 RegUtil.smali ,*.smali是什么文件?你问我啊!去看这篇文件,有详细介绍:http://bbs.pediy.com/showthread.php?t=135323

RegUtil.smali 内部结构如下:


通过这几个方法的名称,我们大致可以猜测出每个方法的用途:
check ,检查是否注册成功,
getProdCode  ,生成本手机(getLocalPhone)的机器码
用 Notepad++打开ADBlocker_trial\smali\net\xdevelop\adblocker_t目录下的所有文件,搜索过期提示 "This trial version has expired, if you like it and want to continue using it, please buy it."

来到这个文件 ADBlocker.smali的 这里  
.method protected onResume()V
    .locals 2

    .prologue
    .line 141
    invoke-super {p0}, Landroid/app/Activity;->onResume()V

    .line 142
    const-string v0, "ap"

    const-string v1, "onResume"

    invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    .line 143
    new-instance v0, Lnet/xdevelop/adblocker_t/ADBlocker$2;

    invoke-direct {v0, p0}, Lnet/xdevelop/adblocker_t/ADBlocker$2;-><init>(Lnet/xdevelop/adblocker_t/ADBlocker;)V

    .line 149
    invoke-virtual {v0}, Lnet/xdevelop/adblocker_t/ADBlocker$2;->start()V

    # 这里判断是否过期
    .line 151  
    invoke-static {p0}, Lnet/xdevelop/adblocker_t/ProtectorPreferences;->isExpired(Landroid/content/Context;)Z

    move-result v0

    if-eqz v0, :cond_0

    .line 152
    const-string v0, "Expired!"

    const-string v1, "This trial version has expired, if you like it and want to continue using it, please buy it."

    invoke-direct {p0, v0, v1}, Lnet/xdevelop/adblocker_t/ADBlocker;->showDialog(Ljava/lang/String;Ljava/lang/CharSequence;)V

    .line 155
    :cond_0
    return-void
.end method
--------------------------------------------------------------------
通过阅读这个文件,我们发现一个非常可疑的 方法 :.method private final reg(Landroid/content/Context;Ljava/lang/String;)V
仔细阅读后发现:
.method private final reg(Landroid/content/Context;Ljava/lang/String;)V
    .locals 3
    .parameter "context"
    .parameter "key"

    .prologue
    .line 477
    # 调用 check 函数 判断是否注册
    invoke-static {p1, p2}, Lnet/xdevelop/util/RegUtil;->check(Landroid/content/Context;Ljava/lang/String;)Z

    move-result v1
    # 如果没有注册成功,就跳到  cond_0
    if-eqz v1, :cond_0

    .line 478
    invoke-static {p0}, Lnet/xdevelop/adblocker_t/ProtectorPreferences;->getPref(Landroid/content/Context;)Lnet/xdevelop/adblocker_t/ProtectorPrefModel;

    move-result-object v0

    .line 479
    .local v0, m:Lnet/xdevelop/adblocker_t/ProtectorPrefModel;
    const/4 v1, 0x1

    iput-boolean v1, v0, Lnet/xdevelop/adblocker_t/ProtectorPrefModel;->donated:Z

    .line 480
    invoke-static {p0, v0}, Lnet/xdevelop/adblocker_t/ProtectorPreferences;->savePref(Landroid/content/Context;Lnet/xdevelop/adblocker_t/ProtectorPrefModel;)V

    .line 481
    const v1, 0x7f070011

    invoke-virtual {p0, v1}, Lnet/xdevelop/adblocker_t/ADBlocker;->getText(I)Ljava/lang/CharSequence;

    move-result-object v1

    invoke-interface {v1}, Ljava/lang/CharSequence;->toString()Ljava/lang/String;

    move-result-object v1
   
    const v2, 0x7f070013
    # 注册成功
    invoke-virtual {p0, v2}, Lnet/xdevelop/adblocker_t/ADBlocker;->getText(I)Ljava/lang/CharSequence;

    move-result-object v2

    invoke-interface {v2}, Ljava/lang/CharSequence;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-direct {p0, v1, v2}, Lnet/xdevelop/adblocker_t/ADBlocker;->showMsg(Ljava/lang/String;Ljava/lang/String;)V

    .line 486
    .end local v0           #m:Lnet/xdevelop/adblocker_t/ProtectorPrefModel;
    :goto_0
    return-void

    .line 484
    :cond_0
    const v1, 0x7f070012

    invoke-virtual {p0, v1}, Lnet/xdevelop/adblocker_t/ADBlocker;->getText(I)Ljava/lang/CharSequence;

    move-result-object v1

    invoke-interface {v1}, Ljava/lang/CharSequence;->toString()Ljava/lang/String;

    move-result-object v1

    const v2, 0x7f070014
    # 注册失败
    invoke-virtual {p0, v2}, Lnet/xdevelop/adblocker_t/ADBlocker;->getText(I)Ljava/lang/CharSequence;

    move-result-object v2

    invoke-interface {v2}, Ljava/lang/CharSequence;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-direct {p0, v1, v2}, Lnet/xdevelop/adblocker_t/ADBlocker;->showMsg(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_0
.end method
------------------------------------------------------------------------------------
.field public static final upgrade_failed:I = 0x7f070014

.field public static final upgrade_success:I = 0x7f070013
------------------------------------------------------------------------------------

破解方法: if-eqz v1, :cond_0  这一句话 删掉,保存,用ApkTool_GUI_1.3.5内测.exe  打包,OK,搞定,
效果如图:


未破解的apk 文件, ADBlocker_trial.rar

破解好的apk文件: ADBlocker_trial(已签名).rar
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2012年02月28日 19:55:59

第五届安全开发者峰会(SDC 2021)议题征集正式开启!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (11)
雪    币: 74
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
meckun 活跃值 2012-2-28 21:48
2
0
又一精华 ,但是可否把破解的也发上来。
雪    币: 208
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mojingtai 活跃值 2012-2-29 10:32
3
0
谢谢,现在这个多
雪    币: 314
活跃值: 活跃值 (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
heihu 活跃值 2012-3-23 17:14
4
0
用apktoolGui反编译后重新编译后为什么会安装包会变小了?
雪    币: 318
活跃值: 活跃值 (183)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 活跃值 4 2012-3-23 18:23
5
0
通常来说只能变大,除非你去掉里面没有用的jar包,会使重新编译的体检变小,一般广告的jar包都很大。
雪    币: 314
活跃值: 活跃值 (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
heihu 活跃值 2012-3-23 19:39
6
0
我以为我改了什么东西,我就再次反编译apk,不做任何动作,直接马上重建刚刚反编译的apk,但是的确是文件变小了,不知道是啥问题

而且这样不动什么之后重新编译后软件安装后大概三四秒之后就自动退出了
雪    币: 442
活跃值: 活跃值 (23)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 活跃值 6 2012-3-29 08:42
7
0
有没有分析下它屏蔽广告的原理?我对这个很感兴趣~
雪    币: 318
活跃值: 活跃值 (183)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 活跃值 4 2012-3-30 18:05
8
0
原理就是阻止广告的流程正常执行。
很多广告都是使用第三方sdk,只要在广告代码初始化的时候让其返回错误,这样后面自然不会再继续执行了。
雪    币: 6
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qqykx 活跃值 2012-3-31 22:37
9
0
android版楼主很活跃啊
雪    币: 205
活跃值: 活跃值 (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhengcai 活跃值 2012-11-23 16:57
10
0
LZ你查看smali 工具叫什么 怎么函数可以折叠
雪    币: 540
活跃值: 活跃值 (17)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
小试锋芒 活跃值 2 2012-11-23 17:16
11
0
土匪兄,我在这个软件的描述中看到它阻止广告的原理是切断程序的上网权限啊
雪    币: 226
活跃值: 活跃值 (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
Colbert仔 活跃值 2014-5-20 16:06
12
0
学习了,不错!
游客
登录 | 注册 方可回帖
返回