banner
Silas

REAO

Be a better man
github

微信|データベースの解読

本文章基于 Android 微信 8.0.3

データベースファイルの検索#

まず、uinを検索します。これは/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xmlファイルにあります:

image

WeChat のチャットデータベースの名前は EnMicroMsg.db で、data/data/com.tencent.mm/MicroMsg/ディレクトリの特定のフォルダにあります。ファイル名はmd5_32_low(imel + uin)です:

image

image

WeChat のデータベースのパスワードは IMEI 番号と WeChat の uin を連結し、md5 で暗号化して 32 桁の小文字にし、最初の 7 桁をパスワードとして使用します。
注意:パスワードが正しくない場合、特定の状況では、WeChat が IMEI 番号を取得できない場合、固定値 1234567890ABCDEF がデフォルトで使用されます。

最初は、さまざまな SQLCipher ビューアを使用して Mac プラットフォームで開くことができませんでした。アルゴリズムが変更されたと思いましたが、分析してみると間違っていませんでした。Windows プラットフォームの SQLCipher.exe を使用すると開くことができました。

分析プロセス#

WeChat は wcdb というデータベースを使用しており、WCDB ドキュメントの Android 接続を通じて、データベースを開く方法を知ることができます:

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(
    "path/to/database",     // DBのパス
    passphrase.getBytes(),  // WCDBのパスワードはbyte[]型です
    cipher,                 // 上記で作成した暗号化記述子
    null,                   // CursorFactory
    null                    // DatabaseErrorHandler
    // SQLiteDatabaseHookのパラメータは、cipherでパラメータを指定することで同じ目的を達成できます
);

jadx を使用して分析すると、openOrCreateDatabaseには多くのオーバーロードメソッドが存在し、すべて内部でSQLiteDatabase.openDatabaseメソッドを使用しています。

Frida を使用してこの関数をフックし、呼び出しスタックを追跡してパスワードの生成ルールを見つけます。

呼び出しスタック#

image

呼び出しスタックを上に追跡し、パスワード生成の場所を見つけます。

com.tencent.mm.storagebase.a.b:

this.key = C7959g.getMessageDigest((C8811q.m22244dJ(true) + j).getBytes()).substring(0, 7);
this.kiF = C67989f.m106126E(str, this.key, z);

getMessageDigest メソッドをフックして取得すると:

パラメータ: 1234567890ABCDEF-156*****65 (1234567890ABCDEF + uin)ここでの j は uin であり、異議はありません。続いて C8811q.m22244dJ (true) を分析します。
戻り値:552**********************ac9fbb6

public static String m22244dJ(boolean z) {
        AppMethodBeat.m18334i(155720);
        String str = gXe.get(); 
        if (!Util.isNullOrNil(str)) {
            AppMethodBeat.m18335o(155720);
            return str;
        } else if (z) {
            AppMethodBeat.m18335o(155720);
            return "1234567890ABCDEF";
        } else {
            AppMethodBeat.m18335o(155720);
            return "";
        }
    }

gXe はデバイス情報を取得するクラスであり、分析が複雑になるため、ここで終わりにします。

関連ファイルhttps://pan.baidu.com/s/1WIZ_wdAFn_9tMZNxzC5i5Q 抽出コード:xpnk

参考資料#

1、记一次安卓微信数据库电脑端打开查看的问题
2、Android 逆向分析实例 (三)- 解密微信 EnMicroMsg.db 数据库

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。