烈火 发表于 2015-1-22 22:52:35

老黄历 v3.66 另类去校验方法一则

本帖最后由 烈火 于 2015-1-22 22:54 编辑

今天有个孩纸弱弱的问我:不联网的情况下,能否把老黄历3.66在启动时显示的“网络不可用, 请保持您的网络畅通”这种烦人的提示去掉。我当时一看,这不是吃饱没事干蛋疼的吗?!心下,对这种小CASE的修改(当然我也改不了啥太大的CASE)非常的那啥!若在平时就直接拒绝了,转念一想,虽然不是大神,在新手的眼里,也是光辉灿烂,这样做有点残忍,毕竟我的一些小小成就也是因为看了大神们的教程学来的,反正今天无事,分分钟折腾的事儿。。。

反编译APK粗来,用 NOTEPAD++ 先搜索整个 res\ 目录 ASCII 字符串“网络不可用”,在\res\values-zh-rCN\strings.xml 找到如下一行
<string name="alc_lbs_status_net_err">网络不可用, 请保持您的网络畅通</string>

继续在 smali\ 整个目录搜索字符串“alc_lbs_status_net_err”,全部结果如下:
Search "alc_lbs_status_net_err" (9 hits in 8 files)
H:\老黄历_3.6.6_build366\res\values\strings.xml (1 hit)
Line 84:   <string name="alc_lbs_status_net_err">網路不可用, 請保持您的網路暢通</string>
H:\老黄历_3.6.6_build366\res\values\public.xml (1 hit)
Line 2415:   <public type="string" name="alc_lbs_status_net_err" id="0x7f0e004f" />
H:\老黄历_3.6.6_build366\res\values-zh-rCN\strings.xml (1 hit)
Line 67:   <string name="alc_lbs_status_net_err">网络不可用, 请保持您的网络畅通</string>
H:\老黄历_3.6.6_build366\res\values-en\strings.xml (1 hit)
Line 28:   <string name="alc_lbs_status_net_err">The network is not available.</string>
H:\老黄历_3.6.6_build366\smali\oms\mmc\almanac\R$string.smali (1 hit)
Line 164: .field public static final alc_lbs_status_net_err:I = 0x7f0e004f
H:\老黄历_3.6.6_build366\smali\oms\mmc\app\almanac\R$string.smali (1 hit)
Line 162: .field public static final alc_lbs_status_net_err:I = 0x7f0e004f
H:\老黄历_3.6.6_build366\smali\oms\mmc\app\almanac\ui\b\a.smali (2 hits)
Line 243:   sget v1, Loms/mmc/app/almanac/R$string;->alc_lbs_status_net_err:I
Line 261:   sget v1, Loms/mmc/app/almanac/R$string;->alc_lbs_status_net_err:I
H:\老黄历_3.6.6_build366\smali\oms\mmc\fortunetelling\gmpay\almanac_vip\R$string.smali (1 hit)
Line 164: .field public static final alc_lbs_status_net_err:I = 0x7f0e004f
忽略其它,单看这段
H:\老黄历_3.6.6_build366\smali\oms\mmc\app\almanac\ui\b\a.smali (2 hits)
Line 243:   sget v1, Loms/mmc/app/almanac/R$string;->alc_lbs_status_net_err:I
Line 261:   sget v1, Loms/mmc/app/almanac/R$string;->alc_lbs_status_net_err:I


双击打开,直达243行,如图:



一共两处,大家看到第一处,即 251 行行首的#号了吗,对,这是我加的,我们先注释掉这一行,本次修改就应该搞定收工了!

反编译下看吧,关掉手机 WiFi,安装重新编译好的 APK,然后运行,喜滋滋等待结果……

结果,刚运行到启动导航页显示完毕,进入主界面前,程序就闪退(FC)了。我擦…… 我忘了逆向的规矩:修改前,先什么也不改,重新编译一下,看看是否正确运行或 FC……

好吧按规矩什么也不改,重新编译,安装,运行,果然,带了自校验了——运行就自动退出。

放个大招,ddms 看看 logcat!(这部分是咋回事需要你另外寻找大神的教程)再次运行程序,FC 退出后,果然在一堆繁杂的信息中,找看到了熟悉的语句:

uncaughtException
一般遇上自校验,人们往往会想到去搜索 /pm/sign....,当然这确实是一种重要的方法…… 不过因为我看到了 未捕获异常 这个词,那么我就先搜索一下看看它是怎么处理异常退出的。

搜索整个 smali目录,在 smali\oms\mmc\app\b\b.smali 中找到它。如下:

# virtual methods
.method public uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V
    .locals 1

    invoke-direct {p0, p2}, Loms/mmc/app/b/b;->a(Ljava/lang/Throwable;)Z
    move-result v0
    if-nez v0, :cond_0
    iget-object v0, p0, Loms/mmc/app/b/b;->b:Ljava/lang/Thread$UncaughtExceptionHandler;
    if-eqz v0, :cond_0
    iget-object v0, p0, Loms/mmc/app/b/b;->b:Ljava/lang/Thread$UncaughtExceptionHandler;
    invoke-interface {v0, p1, p2}, Ljava/lang/Thread$UncaughtExceptionHandler;->uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V
    :goto_0
    return-void
    :cond_0
    sget-boolean v0, Loms/mmc/c/e;->a:Z
    if-eqz v0, :cond_1
    iget-object v0, p0, Loms/mmc/app/b/b;->b:Ljava/lang/Thread$UncaughtExceptionHandler;
    invoke-interface {v0, p1, p2}, Ljava/lang/Thread$UncaughtExceptionHandler;->uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V
    goto :goto_0
    :cond_1
    iget-object v0, p0, Loms/mmc/app/b/b;->c:Landroid/content/Context;
    invoke-static {v0}, Lcom/umeng/analytics/b;->d(Landroid/content/Context;)V
    invoke-static {}, Landroid/os/Process;->myPid()I
    move-result v0
    invoke-static {v0}, Landroid/os/Process;->killProcess(I)V
    goto :goto_0
.end method

嗯,没错,看到 killProcess了。跳楼自杀一般都用它。那就把整个方法删空看看是否还 FC 吧!万一不成,再去找 /pm/sign... 也不迟。

修改后的方法如下:

# virtual methods
.method public uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V
    .locals 0
    return-void
.end method

编译好 APK 后,卸载之前的安装,关闭 WiFi,安装修改后的APK,运行,不闪退,不提示“网络不可用, 请保持您的网络畅通”。

现在,可任意修改而不再闪退了。本文结束。

fammer 发表于 2015-1-22 22:58:45

好牛逼!大神求带!

hdfg159 发表于 2015-1-22 23:56:00

你这说法,我无语了

单翅的天使ylj 发表于 2015-1-23 00:01:07

支持烈火大神了学习了

烈火 发表于 2015-1-23 01:45:44

hdfg159 发表于 2015-1-22 23:56
你这说法,我无语了

我写这么多,你无语?

身殘志堅 发表于 2015-1-23 11:16:45

烈火 发表于 2015-1-23 01:45
我写这么多,你无语?

一看就是复制粘贴的。

身殘志堅 发表于 2015-1-23 11:17:29

谢谢烈火大哥码了这么多字!

哆啦B梦 发表于 2015-1-23 20:44:20

签名自校验真的很烦人,谢谢分享

海鸥 发表于 2015-1-23 22:11:36

放个大招,ddms 看看 logcat!(这部分是咋回事需要你另外寻找大神的教程)
烈火哥哥,我对这个比较感兴趣,推荐一下教程好么?

Sarkozy 发表于 2015-1-23 23:45:36

楼主屌炸了,思路灰常清晰
页: [1] 2
查看完整版本: 老黄历 v3.66 另类去校验方法一则