吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.pyclye.live

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 2894|回復: 34
上一主題 下一主題

[Android 原創] 日常破解--從XCTF的app3題目簡單了解安卓備份文件以及sqliteCipher加密數據庫

  [復制鏈接]
跳轉到指定樓層
樓主
windy_ll 發表于 2019-12-30 12:43 回帖獎勵

一、題目來源

    題目來源:XCTF app3題目  


二、解題過程

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

16.jpg  

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

12.jpg  

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

13.PNG  

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

14.PNG  

15.PNG  

8.PNG  

9.PNG  

16.PNG  

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

4.jpg  

10.PNG  

    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里面的方法,如圖所示:  

11.PNG  

2.PNG  

3.PNG  

    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:代碼粘貼在文末中):  

7.jpg  

5.PNG  

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

1.jpg  


三、總結

    剛下載下來題目發現一看后綴名就慌了,重來沒見過的文件了,百度了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;
    }
}

免費評分

參與人數 17吾愛幣 +16 熱心值 +12 收起 理由
nmgcflxd721526 + 1 我很贊同!
hebiao0307 + 1 + 1 我很贊同!
samofan + 1 + 1 [email protected]!
Nachtmusik + 1 用心討論,共獲提升!
gaosld + 1 + 1 用心討論,共獲提升!
獨行風云 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
lemon__star + 1 + 1 我很贊同!
yixi + 1 + 1 [email protected]!
smile5 + 1 熱心回復!
陳世界 + 1 + 1 我很贊同!
當時明月在 + 1 + 1 熱心回復!
fakegreenhand + 1 我很贊同!
dkrt + 1 我很贊同!
hu1314 + 1 + 1 [email protected]!
nevinhappy + 1 用心討論,共獲提升!
xiangxiong + 1 + 1 熱心回復!
笙若 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| windy_ll 發表于 2019-12-31 17:04 <
處女-大龍貓 發表于 2019-12-31 16:50
感覺逆向真的好難,怎么才能快速上手呢?

努力學習吧,從基礎一點點開始學,可能開始會很枯燥,積累夠了自然就簡單了
推薦
zxc112 發表于 2020-1-11 19:13
windy_ll 發表于 2020-1-4 15:50
現在sqlitebrowser最新版支持查看加密的數據庫(需要密鑰)

這太棒了
密鑰怎么個弄法?
這個沒玩過,不知道怎么玩
Windy知道不?
沙發
cptw 發表于 2019-12-30 13:10
3#
xiangxiong 發表于 2019-12-30 13:21
熱心回復
4#
楓吟葉 發表于 2019-12-30 13:50
沉迷學習,無法自拔
5#
daymissed 發表于 2019-12-30 14:05
認真學習,看看自己的水平。
6#
hu1314 發表于 2019-12-30 14:19
熱心回復
7#
StevenK 發表于 2019-12-30 16:23
很詳細的分析
8#
guo8122881 發表于 2019-12-30 16:30
詳細,思路也很好,膜拜大佬
9#
aahljy 發表于 2019-12-30 19:04
謝謝分享,認真學習中!
10#
處女-大龍貓 發表于 2019-12-31 16:50
感覺逆向真的好難,怎么才能快速上手呢?
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2020-1-13 13:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
腾讯二分彩骗局