安卓逆向系列教程 4.10 玄奥八字

4.10 玄奥八字

作者:飞龙

声明:本人极度厌恶玄学,选取此软件是为了研究逆向技术,并不代表本人赞成其内容。

这次要破解的软件是这个:http://www.xazhouyi.com/android/soft/bazi.html

首先分析其行为,打开软件:

按照以往的经验,程序有个字段用于维护注册状态,我们可以通过字符串快速定位到它。我们将其载入 AK:

搜索“软件未注册”,在string.xml中找到:

<string name="Id_StartInfo">"注意事项
1:软件未注册只能使用1999年的,注册后可使用所有功能。
2:注册方法请看软件菜单“帮助->软件帮助”。
3:注册时需提供软件系列号,软件系列号--点击菜单“帮助->注册”可看到。
...
</string>

然后在public.xml中找到,字符串的 ID 是0x7f060003。之后搜索这个数字。

我们在main,也就是入口的MyInit函数中找到了这个数值:

:cond_b
# 玄奥八字7.2未注册!
const-string v7, "\u7384\u5965\u516b\u5b577.2\u672a\u6ce8\u518c\uff01"

invoke-virtual {p0, v7}, LMy/XuanAo/BaZiYi/main;->setTitle(Ljava/lang/CharSequence;)V

.line 199
invoke-virtual {p0}, LMy/XuanAo/BaZiYi/main;->getResources()Landroid/content/res/Resources;

move-result-object v7

const v8, 0x7f060003

invoke-virtual {v7, v8}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;

# 刚才的字符串
move-result-object v7

invoke-static {p0, v7, v10}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

move-result-object v7

invoke-virtual {v7}, Landroid/widget/Toast;->show()V

goto :goto_4 # return-void

我们猜想:cond_b是失败分支,我们往上找:

sget-object v7, LMy/XuanAo/BaZiYi/main;->m_chkSoft:LMy/XuanAo/BaZiYi/CSoftReg;

invoke-virtual {v7}, LMy/XuanAo/BaZiYi/CSoftReg;->ChkNumA()Z

move-result v7

if-eqz v7, :cond_b

sget-object v7, LMy/XuanAo/BaZiYi/main;->m_chkSoft:LMy/XuanAo/BaZiYi/CSoftReg;

invoke-virtual {v7}, LMy/XuanAo/BaZiYi/CSoftReg;->ChkNumB()Z

move-result v7

if-eqz v7, :cond_b

sget-object v7, LMy/XuanAo/BaZiYi/main;->m_chkSoft:LMy/XuanAo/BaZiYi/CSoftReg;

invoke-virtual {v7}, LMy/XuanAo/BaZiYi/CSoftReg;->ChkNumC()Z

move-result v7

if-eqz v7, :cond_b # 关键跳

# 成功分支

.line 195
const-string v7, "\u7384\u5965\u516b\u5b577.2"

invoke-virtual {p0, v7}, LMy/XuanAo/BaZiYi/main;->setTitle(Ljava/lang/CharSequence;)V

.line 196
# const/4 v10, 0x1
sput-boolean v10, LMy/XuanAo/BaZiYi/main;->m_regFlag:Z

我们可以得出ChkNumA/B/C是三个关键判断。下面的if-eqz是关键跳。成功各分支将m_regFlag设为 1,说明它是保存注册状态的字段。

我们可以将这三个if-eqz都给注释掉,但是我们可以采取另一种方式,在最后一个if的下面添加:goto_100标签,然后在第一个if上面添加goto :goto_100

.line 193
:cond_1
goto :goto_100
sget-object v7, LMy/XuanAo/BaZiYi/main;->m_chkSoft:LMy/XuanAo/BaZiYi/CSoftReg;

# ...

if-eqz v7, :cond_b
:goto_100

重新打包、安装软件后,打开软件,我们发现不再弹出注册提示了。访问菜单->更多->注册之后,在注册界面中我们可以看到“已注册”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,261评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,958评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,497评论 19 139
  • 一. Java基础部分.................................................
    wy_sure阅读 9,260评论 0 11
  • 这是一个心之所向之人带给我的感悟。独立人格与道德约束之间的矛盾。 依稀记得大学时期与邓论老师辩论什么是自由。我甚...
    最光阴大人阅读 4,871评论 0 1