4.10 玄奧八字
作者:飛龍
聲明:本人極度厭惡玄學(xué)好港,選取此軟件是為了研究逆向技術(shù)杜顺,并不代表本人贊成其內(nèi)容饺饭。
這次要破解的軟件是這個:http://www.xazhouyi.com/android/soft/bazi.html
首先分析其行為物喷,打開軟件:
按照以往的經(jīng)驗惯悠,程序有個字段用于維護注冊狀態(tài)右蕊,我們可以通過字符串快速定位到它。我們將其載入 AK:
搜索“軟件未注冊”吮螺,在string.xml
中找到:
<string name="Id_StartInfo">"注意事項
1:軟件未注冊只能使用1999年的饶囚,注冊后可使用所有功能。
2:注冊方法請看軟件菜單“幫助->軟件幫助”鸠补。
3:注冊時需提供軟件系列號萝风,軟件系列號--點擊菜單“幫助->注冊”可看到。
...
</string>
然后在public.xml
中找到紫岩,字符串的 ID 是0x7f060003
规惰。之后搜索這個數(shù)字。
我們在main
泉蝌,也就是入口的MyInit
函數(shù)中找到了這個數(shù)值:
: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 # 關(guān)鍵跳
# 成功分支
.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
是三個關(guān)鍵判斷勋陪。下面的if-eqz
是關(guān)鍵跳贪磺。成功各分支將m_regFlag
設(shè)為 1,說明它是保存注冊狀態(tài)的字段诅愚。
我們可以將這三個if-eqz
都給注釋掉寒锚,但是我們可以采取另一種方式,在最后一個if
的下面添加:goto_100
標(biāo)簽,然后在第一個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
重新打包泳赋、安裝軟件后,打開軟件喇喉,我們發(fā)現(xiàn)不再彈出注冊提示了祖今。訪問菜單->更多->注冊之后,在注冊界面中我們可以看到“已注冊”拣技。