馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
近日使用某連線聽歌 軟體,有不少兒童故事不錯,但連線聽經常出現時斷時續情形,而軟體要求積分大於1500才可整頁下載。要滿足積分條件需要手動安裝其推薦的數十個應用,簡直是坑爹。故決定破解之。 假定要破解apk的名字為mytest.apk,則破解步驟如下: 步驟 1:得到resource及smali檔案1)得到apktool工具2)DOS命令視窗下進入到apktool.bat所在的資料夾裡
1.D:android oolapktoolapktool d C:mytest.apk C:out
命令行解釋:apktool d 要反編譯的檔案 輸出資料夾 特別注意:你要反編譯的檔案一定要放在C盤的根目錄裡, 3)開啟 C:out資料夾 就可以得到各種資源了步驟
2:得到java檔案
方法a:- 把apk檔案改名為.zip,然後解壓縮出其中的class.dex檔案
- 安裝把dex檔案反編譯為jar檔案的工具dex2jar。http://code.google.com/p/dex2jar/downloads/list
- 把class.dex拷貝到dex2jar.bat所在目錄。
- 生成jar檔案classes.dex.dex2jar.jar[java]dex2jar.bat classes.dex
- 安裝把jar反編譯為java的工具。(JD-GUI)
- 執行JD-GUI工具,開啟上面的jar檔案
- File -> Save All Sources將生成Java源代碼檔案到c:out
方法b(TBV)- 從out目錄下取得dexdump。
- adb shell dexdump -d -f -h /data/dalvik-cache/data@app@mytest.apk@classes.dex > twitpic.text
步驟3:破解源代碼
1)查找位置由於此軟體要求積分大於1500才可下載,故開啟java檔案,查找1500發現有三個檔案有定義,PlayActivity$12.java,Cfg.java,ScoreDialog$5.java。 PlayActivity$12.java
- final class PlayActivity$12 implements Runnable
- {
- public void run()
- {
- ...
- int i = 1500;
- int j;
- Cfg.IS_WITHAD = j;
- if (j != 0)
- {
- if (this.val$arg1 >= i) //似乎為顯示廣告門限控制值
- break label91;
- boolean bool2 = Cfg.HIDDEN_GUANGGAO;
- label35: boolean bool3; //???
- Cfg.HIDDEN_GUANGGAO = bool3;
- Cfg.SaveBool("hiddenguanggao", bool3);
- }
複製代碼
ScoreDialog$5.java
- final class ScoreDialog$5 implements Runnable
- {
- public void run()
- {
- Object localObject1 = null;
- int i = 17301659;
- int j = 1500; //Score
- ...
- if (localProgressDialog != null)
- if (this.val$arg1 < j) //可以猜出此為定義的分數之一,如不滿足則彈出對話框
- {
- ScoreDialog localScoreDialog1 = this.this$0;
複製代碼
Cfg.java
- public class Cfg
- {...
- public static final int HIDDEN_GUANGGAO_NEED_SCORE = 1500; //似乎為顯示廣告與否的分數門限值
複製代碼
PlayActivity$12.java
- final class PlayActivity$12
- implements Runnable{
- public void run()
- {
- boolean bool1 = true;
- DialogInterface.OnClickListener localOnClickListener1 = null;
- int i = 1500;
- 但HIDDEN_GUANGGAO_NEED_SCORE並未被其他任何檔案應用,但保險起見任然改動此值。
複製代碼
2)更改smali檔案smali檔案只是將java檔案的後綴改為.smali,故可找到上述三檔案對應的smali檔案 Cfg.smali
- .field public static final HIDDEN_GUANGGAO_NEED_SCORE:I = 0x5DC //此處改為0x0
複製代碼
PlayActivity$12.smali
- .method public run()V
- .locals 6
- .prologue
- const/4 v2, 0x1
- const/4 v4, 0x0
- const/16 v3, 0x5DC //此處改為0x0
複製代碼
ScoreDialog$5.smali
- .method public run()V
- .locals 10
- .prologue
- const/4 v7, 0x0
- const v5, 0x108009b //對應17301659
- const/16 v6, 0x5DC //此處改為0x0
複製代碼
步驟4 將反編譯完的檔案重新打包成apk檔案out.apk
- apktool b c:out out_raw.apk
複製代碼
步驟5:對生成的apk簽名
1)準備工具2)準備簽名檔案[java] 1."C:Program FilesJavajdk1.6.0_24inkeytool" -genkey -alias wendy.keystore -keyalg RSA -validity 20000 -keystore wendy.keystore
注意密碼為6位數,如123456。 3)簽名[plain] 1."C:Program FilesJavajdk1.6.0_24injarsigner" -verbose -keystore wendy.keystore -signedjar out.apk out_raw.apk wendy.keystore
此處需輸入第2步的密碼123456,執行完即可生成簽名後的apk檔案out.apk. 安裝後,發現原有限制被破解了,一切成功。
|