【Android 原創】日常破解--從XCTF的app3題目簡單了解安卓備份文件以及sqliteCipher加密資料庫

2021-02-14 吾愛破解論壇

作者論壇帳號:windy_ll

一、題目來源

    題目來源:XCTF app3題目  

二、解題過程

    1、下載好題目,下載完後發現是.ab後綴名的文件,如下圖所示:  

  

    2、什麼是.ab文件?.ab後綴名的文件是Android系統的備份文件格式,它分為加密和未加密兩種類型,.ab文件的前24個字節是類似文件頭的東西,如果是加密的,在前24個字節中會有AES-256的標誌,如果未加密,則在前24個字節中會有none的標誌,如下圖所示:  

  

    3、怎麼獲取.ab文件中的數據?在github上有個開源項目Android backup extractor可以將.ab文件轉換為.tar文件,然後用解壓軟體打開即可!!!項目地址:https://github.com/nelenkov/android-backup-extractor  

  

    4、使用ade.jar將1.ab文件轉為tar文件解壓發現有一個apk文件和兩個sqlite資料庫文件,將apk安裝到夜神中,發現沒什麼有用的東西,去查看資料庫,直接使用sqlitebrowser打開,提示需要密碼,看來資料庫多半被加密了,如下圖所示:  

  

  

  

  

  

    5、直接使用Androidkiller和JEB將該APK反編譯,發現了存在asset目錄和libs目錄,並且這兩個目錄下存放了和sqlitecipher相關的文件,可以推斷資料庫被sqlitecipher加密了,再搜索一下在夜神裡點擊登陸後彈出的信息Wait ....,發現該信息在AnotherActivity.java文件中,轉為java後,發現沒什麼有用的信息。。。  

  

  

    6、於是打開MainActivity.java文件,果然發現了一個函數a(),代碼如下:  

private void a() {
    SQLiteDatabase.loadLibs(((Context)this));
    this.b = new a(((Context)this), "Demo.db", null, 1);
    ContentValues v0 = new ContentValues();
    v0.put("name", "Stranger");
    v0.put("password", Integer.valueOf(123456));
    com.example.yaphetshan.tencentwelcome.a.a v1 = new com.example.yaphetshan.tencentwelcome.a.a();
    String v2 = v1.a(v0.getAsString("name"), v0.getAsString("password"));
    this.a = this.b.getWritableDatabase(v1.a(v2 + v1.b(v2, v0.getAsString("password"))).substring(0, 7));
    this.a.insert("TencentMicrMsg", null, v0);
}

第一行SQLiteDatabase.loadLibs(((Context)this));將所需要的sqlitecipher庫文件加載進來。

第二行實例化一個sqlitehelper類。

第三、四、五行實例化了一個ContentValues類並將鍵值對name:Stranger、password:123456放入其中。

第六行實例化了一個com.example.yaphetshan.tencentwelcome.a.a類。

第七行獲取了v2變量的值。

第八行調用了getWritableDatabase函數,傳進去的字符串參數即是資料庫解密的密鑰。

    7、現在目標已經很明確了,就是獲取資料庫解密密鑰(猜一下flag就藏在加密的sqlite資料庫中),而該密鑰由com.example.yaphetshan.tencentwelcome.a.a裡面的方法生成,而這個類又調用了b.java裡面的方法,如圖所示:  

  

  

  

    8、a、b類裡面生成密鑰的算法涉及到了sha-1、md5等算法,沒必要去重新寫一編,搞清楚密鑰生成邏輯然後把b類裡面的兩個函數複製出來調用即可生成密鑰,簡單分析一下密鑰生成邏輯:首先得到變量v2,v2調用了a類中的a(String,String)方法獲取,該方法返回第一個參數前四個字符加第二個參數的前四個字符,而調用該方法傳進去的參數為(Stranger,123456),所以v2 = Stra1234,密鑰為v1.a(String).sunstring()(調用v1.a()方法然後將返回值截取前7位作為密鑰),關鍵就在傳進去的這個字符串,可以看到這個字符串是v2 + v1.b(v2,'123456'),而v1.b(String,String)這個函數將調用了b類的a(String)函數,傳進去的參數是變量v2,獲取到返回值後,我們就可以得到這個字符串,然後調用v1.a(String)函數得到密鑰,這個函數將傳進去的字符串加上yaphetshan字符串作為參數調用b類的b方法,其返回值取前7位即是密鑰,寫了一個java獲取密鑰的代碼,運行結果如下(ps:代碼粘貼在文末中):  

  

  

    9、獲取到密鑰後,使用sqlitebrowser打開加密資料庫,發現了一串Base64的字符串,解碼得到了flag  

  

三、總結

    剛下載下來題目發現一看後綴名就慌了,重來沒見過的文件了,百度了n久,終於弄懂了android備份文件和ssqlitecipher這兩個東西。
    給大家分享一下有關這兩個東西的知識點我覺得寫的比較好的博客!!!

四、附件

    題目以及所用到的工具:百度網盤連結https://pan.baidu.com/s/1Wam_Hjg8rNlpqywVqqASpQ,密碼0y89  

    獲取密鑰java代碼如下:  

import java.security.MessageDigest;
import java.util.*;

public class b {
    public b() {
        super();
    }

    public static void main(String[] args)
    {
        String varV2 = "Stra1234";
        String varV1B = a(varV2);
        String varKey = varV2 + varV1B + "yaphetshan";
        System.out.print("KEY = ");
        System.out.print(b(varKey).substring(0,7));
    }

    public static final String a(String arg9) {
        String v0_2;
        int v0 = 0;
        char[] v2 = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] v1 = arg9.getBytes();
            MessageDigest v3 = MessageDigest.getInstance("MD5");
            v3.update(v1);
            byte[] v3_1 = v3.digest();
            int v4 = v3_1.length;
            char[] v5 = new char[v4 * 2];
            int v1_1 = 0;
            while(v0 < v4) {
                int v6 = v3_1[v0];
                int v7 = v1_1 + 1;
                v5[v1_1] = v2[v6 >>> 4 & 15];
                v1_1 = v7 + 1;
                v5[v7] = v2[v6 & 15];
                ++v0;
            }

            v0_2 = new String(v5);
        }
        catch(Exception v0_1) {
            v0_2 = null;
        }

        return v0_2;
    }

    public static final String b(String arg9) {
        String v0_2;
        int v0 = 0;
        char[] v2 = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] v1 = arg9.getBytes();
            MessageDigest v3 = MessageDigest.getInstance("SHA-1");
            v3.update(v1);
            byte[] v3_1 = v3.digest();
            int v4 = v3_1.length;
            char[] v5 = new char[v4 * 2];
            int v1_1 = 0;
            while(v0 < v4) {
                int v6 = v3_1[v0];
                int v7 = v1_1 + 1;
                v5[v1_1] = v2[v6 >>> 4 & 15];
                v1_1 = v7 + 1;
                v5[v7] = v2[v6 & 15];
                ++v0;
            }

            v0_2 = new String(v5);
        }
        catch(Exception v0_1) {
            v0_2 = null;
        }

        return v0_2;
    }
}


--官方論壇

www.52pojie.cn

--推薦給朋友

公眾微信號:吾愛破解論壇

或搜微信號:pojie_52

相關焦點

  • 一個 2 年 Android 開發者的 18 條忠告
    如果在開發app的時候遇到一個問題,而這個問題已經被別人很好的解決了,為什麼不使用它呢?你可以節省大量時間啊。把更多的精力花在app的業務邏輯上吧。如果你想在app中發起一個網絡調用,是不需要自己去造一個Retrofit(注3)來的。福利:Android Arsenal(注4)網站維護了一個幾乎包含所有Android library的資料庫,可以去看看。
  • Android Backup 文件解析
    第一題首先是android backup 的問題,這個可以手動提取backup的文件,也可以使用abe.jar提取(需要改一下文件格式),使用前者的推薦看一下* [這篇博文](http://bobao.360.cn/learning/detail/169.html)。
  • 手機怎麼備份?蘋果安卓手機最佳備份方法
    蘋果手機怎麼備份?手機佔據我們日常生活的時間越來越長,裡面的資料也越來越重要。隨著年關將近,各種應酬越來越多,小偷也開始年終衝刺業績,大家的手機面臨著被偷,摔壞,進水等各種風險,於是手機資料的備份也就越發的重要起來。下面小編總結了一些簡單靠譜的備份方法給大家作為參考!
  • Android安全幾道入門題目
    應用市場對app的審核相對 iOS來說也比較寬泛,為很多漏洞提供了可乘之機。市場上一些主流的app雖然多少都做了一些安全防範,但由於大部分app不涉及資金安全,所以對安全的重視程度不夠。本文通過幾個題目可以讓你基本了解android中簡單的但比較經典的漏洞、以及簡單的android註冊機開發的思路。閱讀本文,你可能需要了解android逆向的基本知識和常用工具、非常簡單的java語言、smali的語法知識。本文適合android入門初學者,最基本的東西。大佬請無視!
  • 解密WhatsApp備份的新方法
    在Android環境中運行WhatsApp   在安卓智慧型手機上,WhatsApp會將聊天資料庫保存在沙箱中。ADB備份中不包含該資料庫,並且只有在設備具有root權限時才能訪問該資料庫。
  • 備份好幫手 五款Win Server備份App體驗
    ,能夠在日常工作中給IT管理員很大的幫助,具體軟體如下:  一、Windows NT備份歸檔現在已直接置入備份功能。軟體可幫助企業確定哪些內容可存儲,哪些內容可刪除,以及何時將舊數據移至二級存儲系統,同時還能快速的發現和恢復舊數據。
  • 如何破解RAR壓縮包文件加密密碼實戰?
    一、背景介紹在我們日常使用計算機辦公或者是在網際網路下載的一些資源的時候往往會遇到一些不知道加密的而且你不知道壓縮包密碼的文件
  • 教學軟體|好用的安卓版解壓軟體ZArchiver,WINRAR
    所以覺得這個東西就是一個集合了壓縮解壓功能的強大文件管理。喜歡的朋友歡迎下載!支持rar,zip,7z等等,不像androidzip一樣解壓7z錯誤,還支持帶密碼的rar壓縮文件,支持中文文件名,(這是安卓上唯一的),支持rar,zip,7z的解壓,還支持帶密碼的解壓縮文件,還支持分卷解壓,速度和成功率絕對強於其他解壓縮軟體。
  • 幽靈勒索病毒再度來襲,加密上百種常用文件
    歷史版本加密文件後綴有「.da_vinci_code」、「.magic_software_syndicate」、「.no_more_ransom」、「.dexter」。而本次發現的病毒版本為v4.0.0.1,加密文件後會添加「. crypted000007」後綴。
  • SQL Server 2014新特性:原生備份加密
    首先來談一下使用透明數據加密,如果僅僅是為了對備份加密,使用TDE有點過於大材小用,因為使用TDE會導致資料庫本身和日誌被加密,對CPU帶來額外開銷。此外,使用TDE加密過的資料庫如果使用備份壓縮,壓縮比率會非常低。如果使用SQL Server 2014的原生備份加密,則無需對整個資料庫進行加密,備份僅僅在被寫入磁碟之前被加密。
  • 破解第一個Android程序
    --破解Android程序的方法通常是:使用ApkTool反編譯APK文件,生成smali格式的反彙編代碼;通過閱讀smali文件的代碼來理解程序的運行機制,找到突破口,並對代碼進行修改;使用ApkTool重新編譯生成APK文件並對其進行籤名;運行測試——如此循環,直至程序被破解。
  • 【權威發布】吾愛破解論壇2020年優秀、精華TOP榜(上)
    1longgodjustnews 5.2.3破解版後門https://www.52pojie.cn/thread-1084019-1-1.html2hjm666Emotet 銀行木馬簡析https://www.52pojie.cn/thread-1084379-1-1.html3luoyesiqiu最近拿到一個ROMhttps://www.52pojie.cn/thread-1085335
  • 破解遊戲安卓版大全 安卓手機破解遊戲app
    破解遊戲安卓版大全 安卓手機破解遊戲app 來源:www.18183.com作者:wer時間:2020-12-09 破解遊戲安卓版大全,安卓手機破解遊戲app.有了手遊盒子破解版
  • 廖雪峰的Python系列教程(81)——訪問資料庫之使用SQLite
    使用SQLiteSQLite是一種嵌入式資料庫,它的資料庫就是一個文件。
  • 安卓無限內購破解遊戲大全 十大安卓破解遊戲app
    安卓無限內購破解遊戲大全 十大安卓破解遊戲app 來源:www.18183.com作者:wer時間:2020-11-18 安卓無限內購破解遊戲大全,十大安卓破解遊戲app.在這裡你可以每天都能看到最新破解遊戲資源下載
  • 十大安卓內購破解遊戲網站 安卓手遊破解網站app
    十大安卓內購破解遊戲網站 安卓手遊破解網站app 來源:www.18183.com作者:wer時間:2020-11-27 十大安卓內購破解遊戲網站,安卓手遊破解網站app.每一款破解版遊戲軟體應用功能都非常強大
  • 安卓破解手遊平臺大全 安卓破解版手遊app排名
    安卓破解手遊平臺大全 安卓破解版手遊app排名 來源:www.18183.com作者:wer時間:2020-11-25 安卓破解手遊平臺大全,安卓破解版手遊app排名.對於遊戲玩家來說是必備的
  • 【原創】FastStone Capture 軟體註冊算法破解及註冊機編寫
    = base64.b64encode(first_cipher.encode('latin1'))plain_text = first_cipher_base64 # IDEA 加密的部分是blowfish得到的base64結果two_cipher = str()IDEA_zero_byte = b'\x00\x00\x00\x00\x00\x00\x00\x00'
  • Android應用測試速查表
    安卓APP被打包成APK文件,也被稱為Android Package Kit或Android Application Package。作為滲透測試人員的任務就是確認應用程式在面對已知攻擊向量時,現有的防護機制是否有效。安卓的移動應用通常是通過例如Google Play的平臺進行分發。自從應用完全安裝在客戶端上以後,它就需要承受來自客戶端的任何種類攻擊。1.1.3.