Android应用破解之SSHDroid 去广告


2012-01-08更新
更新日期:
2012年1月5日
当前版本:
1.9.4
所需的 Android 版本:
2.0 及更高版本

前面一篇文章说到了SSHDroid这个软件,这个小应用有两个版本一个免费版,一个pro版。区别就是有无广告。

昨天装了Adfree android这个应用之后,SSHDroid就不干活了,说ad被block了,然后就只能选择“退出”或者“购买付费版”。
这个,多少让我有些不爽啊。 :mad:

有了想暴破它的想法了~~于是操刀把它菊花暴了,爽了一把。

在linux下面那个adb硬是没有运行起来,运行以后没有任何输出,不知何故。先在win下把这app搞定吧。
用到的暴菊工具:

adb.rar (从网上下载的,里面有adb及其依赖的库,我懒得装android sdk了。。。)
Auto-sign(WIN7系统).rar 用于给app签名的,随便在网上搜索到的
apktool1.4.1.tar.bz2 在google项目:http://code.google.com/p/android-apktool/
apktool-install-windows-r04-brut1.tar.bz2
EmEditor (我机子上一直装着呢)

先说下adfree android这个软件屏蔽广告的原理,其实这个软件就是修改andorid /system/etc/hosts 这个文件,把ad相关域名的ip指向127.0.0.1来达到屏蔽广告的目的。

爪机注意开启调试。

从机器里把程序拖出来(不知道app文件名就先用ls找一下):

1
adb pull /data/app/berserker.android.apps.sshdroid-1.apk

然后用apktool对其进行解压缩和反汇编

1
apktool d berserker.android.apps.sshdroid-1.apk reversing


进入到reversing目录,里面有露出来的菊花(反汇编出来的东东):

1
cd reversing

下面是正式暴菊了。
zhiwei.li给出了三种方案来搞定ad:
1. 对com.google.ads打补丁. 这将是一个比较通用的方法,对那些使用到com.google.ads的所有应用都有效.
2. 对 app 打补丁. 找到此app调用com.google.ads的地方
3. 对资源文件进行补丁,让广告资源不可见.

我这里采用的是2和3相结合的方法,算是比较彻底。
进入smali目录,用emeditor随便打开一个.smali文件,在此目录及其子目录搜索 /etc/hosts
共找到两个:
共找到四处要修改的地方(109行那个,637行那个,62行那个,609行那个),如图:

smali\berserker\android\a\a.smali(59)
smali\berserker\android\a\f.smali(227)

打开反汇编的文件一看,前一个是定义的检测hosts的类。很快可以发现:

1
const-string v3, "admob"

这个程序是投放的admob广告。

1
2
3
4
5
6
7
8
9
10
11
 const-string v3, "admob"

    invoke-virtual {v2, v3}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v2

    if-eqz v2, :cond_0

    sget-object v1, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;

    sput-object v1, Lberserker/android/a/a;->b:Ljava/lang/Boolean;

从以上代码可以看出,它是检测hosts中是否有admob字符串,然后根据返回的结果要决定跳转还是不跳转.

这里可以修改常量,也可以修改if-eqz为if-nez .我是采用的修改常量,因为这样修改的话,不管有没有修改hosts文件的情况都不会有问题的。比较通用。
这里的修改是基于阅读反汇编代码的,并不是胡乱修改。

637行那个那个直接删除script标签即可。
其它三个都是修改相量为一个不可能在hosts广告屏蔽域名中存在的字符,如anotexistsdomainame 等,原则就是要够长,不会出现在你的广告屏蔽列表中。

对于android的JVM 指令集,可看查看这里,非常详细:

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

http://loda.hala01.com/dalvik-opcodes/

http://thinkinmylife.iteye.com/blog/443900

其它文件看了下,没什么要修改的地方。

然后就是修改资源文件了。
到res/layout目录下面,一看到banner.xml和hosts_alert_dialog.xml这两个文件的名字你就大概知道它是干什么的了。
把其高度修改为0即可。
如:

1
android:layout_height="0.0dip"

完了之后开始收工:
对apk重新打包

1
apktool b reversing cracked_berserker.android.apps.sshdroid-1.apk

对它签名,以便能在大多数android设备上安装, 如果你已经安装了SDK,那么可以使用debug key的证书

1
jarsigner -keystrore ~/.android/debug.keystore cracked_berserker.android.apps.sshdroid-1.apk androiddebugkey

然后输入 android 作为口令(password)

我这里图方便,直接用auto-sign啦,把破解后的文件托动到Sign.bat上即可生成cracked_berserker.android.apps.sshdroid-1.apk.apk
好了。

卸载原版软件,也可以在手机上操作,用命令:

1
adb uninstall berserker.android.apps.sshdroid


然后再安装

1
adb install berserker.android.apps.sshdroid.apk

如图:(先看下文件还在不在里面,确认不在里了,再安装)

参考资料:
Android应用破解教程1:去除Advanced Task Manager 广告
Android 的 ApkTool 反编译 apk xml 和去广告
Android Apk解密工程初探(4)– Bao力破解与简单逆变换
安卓应用去广告办法

更多
3 Responses Post a comment
  1. phoetry

    用chrome才发现无灯大师这儿改了鼠标样式~
    奇怪就opera不支持, opera直接计算了后面的default.

  2. Demon

    这个大湿真N。WP折腾还来安卓。会的真多哦。

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS