[實作講解] 多線程網頁重整器


這篇要講解多線程網頁重整器的破解過程
至於繁化部分由於有點瑣碎就不提了
如果想跟著做的可以下載原版素材



Step #1

首先一樣先反編譯
這邊我是用Killer


反編譯後先打開AndroidManifest.xml
可以看到有廣告和一些比較奇怪的權限
順手刪一下


//讀取手機資訊那個刪了會閃退所以保留
//這邊不知道哪個刪了會出問題的話可以刪一條回編譯一次測試看看

Step #2

刪完之後開始進入破解階段
這次要破解的是3個工作區的限制
原版只要按第4個工作區就會跑出對話窗口
所以我假設它是透過判斷工作區的數量來彈出的
這樣解決方法就很簡單
一個直接讓它繞過去
另一個增加數量

不過不管哪個都要先定位出代碼
所以先搜尋對話窗口裡面的文字
因為內容很長又是簡體所以我就直接搜尋按鈕的字了


搜尋出來之後案上面那個Java按鈕看一下源碼


可以看到這只是一個普通的對話窗口
沒有任何判斷式
這邊我判斷作者是用調用的方式來調用這個對話窗口
往上找他的函式名稱
也就是f()
丟進去搜尋


因為調用函式的話一定要在同樣的路徑下
所以可以確定是結果第一項那串


點進去後可以看到在那串代碼上方有個cond_3
cond就類似C++的switch一樣
算是一種分支
簡單的說就是可以依照給入的東西進行不同的分流
e.g. 輸入1會跑到cond_1, 輸入2會跑到cond_2
夠敏銳的人就可以發現這就是一種判斷式
所以繼續往上找cond_3的判斷條件


這邊先說明一下Smali的基礎代碼
if-eqz vA, :cond_**:如果vA=0就執行cond_**

if-nez vA, :cond_**:如果vA不=0就執行cond_**

if-ltz vA, :cond_**:如果vA<0就執行cond_**

if-gez vA, :cond_**:如果vA>=0就執行cond_**

if-gtz vA, :cond_**:如果vA>0就執行cond_**

if-lez vA, :cond_**:如果vA<=0就執行cond_**

了解了以後
可以知道這段if-eqz v0, :cond_3的代碼就是判斷是否要彈出窗口的判斷式
如果這條判斷式會讓程式跳過下方代碼直接執行cond_3
那只要把它刪除它就可以繼續執行下面的而不是cond_3的代碼了

Step #3

刪除後儲存然後回編譯



結語

這篇主要是要讓大家稍微了解Smali語法的規則
和一些基礎的判斷
基本上靠這篇教的東西大概就可以完成一半以上的軟體破解了
其實沒有大家想像中的困難

其他實作講解:

延伸閱讀
About Sean Chaox
Me

I'm soulless, so I'm recompiling my soul
I'm lifeless, so I'm enriching my life
I'm homeless, so I build this House
I am Sean, welcome to my House

沒有留言:

張貼留言