发新帖

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

[复制链接]
22060 12
本帖最后由 烈火 于 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,运行,不闪退,不提示“网络不可用, 请保持您的网络畅通”。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

能不能把logcat查看到uncaughtException的方法简单说说呢?我用androidkiller查看logcat,得先运行程序,才能选中进程,查看日志,这一运行就秒退的,没法看  发表于 2015-1-23 08:41
已有3人评分 威望 NB 贡献 荣获致谢 理由
夕下1973 + 1 + 1 神马都是浮云
peterdocter + 1 + 1 赞一个!
听鬼哥说故事 + 2 + 3 + 2 + 1 赞一个!

查看全部评分 总评分: 威望 +2  NB +5  贡献 +3  荣获致谢 +2 

举报 使用道具

回复

精彩评论13

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 来自手机  | 显示全部楼层
楼主屌炸了,思路灰常清晰

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表