飄云閣(PYG官方)

 找回密碼
 快速注冊

QQ登錄

只需一步,快速開始

查看: 544|回復: 7
打印 上一主題 下一主題

[Android] Android 某多加密數據庫研究分析

[復制鏈接]
  • TA的每日心情
    開心
    2020-4-8 10:46
  • 簽到天數: 5 天

    [LV.2]偶爾看看I

    跳轉到指定樓層
    樓主
    發表于 2020-4-4 21:24:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    本帖最后由 cracklee 于 2020-4-4 21:25 編輯

    買了飄大大的iOS逆向書哈哈哈 真香,內容很新很詳細,Android 某多APP 加密數據庫分析 大佬可以直接跳過,很水的分析。


    #0x00 某多數據庫

    在某多數據庫中其中的t_mall_conversation表中的message字段數據內容被加密了。
    提取相應關鍵字
    t_mall_conversation
    message


    #0x01 逆向分析
    查殼
    先用Android APK查殼工具,對某多APK進行查殼。如果有被加固需要進行下一步的脫殼操作,如下圖:某多APK并未被加固。



    反編譯、關鍵字定位根據關鍵字t_mall_conversation定位到處理該表與message加密字段的類。



    在該類下繼續找到getMessage 與 setMessage方法,其中getMessage為獲取Pdd數據庫t_mall_conversation表中Message的字段(所以解密函數也在該方法中),而setMessage為相反的設置Message字段的內容(加密函數在該方法中)。



    [Java] 純文本查看 復制代碼
    a.b(message) //解密函數
    a.a(str)     //加密函數



    反編譯、加密算法解析采用AES加密算法,向量為{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},密鑰為用戶UID的MD5加密取前16位,UID的值在data/data/com.xunmeng.pinduoduo/files/pinUserFile文件中。
    [Java] 純文本查看 復制代碼
    IV = new byte {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    
    uid = 5564948642776;
    MD5(uid) = 479EE2A088591D9856CCDC451C1B4515;
    KEY = 479EE2A088591D98;


    AES加密算法



    UID值




    POC 編寫、破解過程驗證
    [Python] 純文本查看 復制代碼
    import android.util.Base64;
    import java.security.Key;
    import javax.crypto.Cipher;
    
    
    //解密函數
     public  String PddMsgDecrypt(String msg) {
            if (TextUtils.isEmpty(msg)) {
                return msg;
            }
            //MD5加密(uid)
            String md5Text = MD5Utils.digest("5564948642776");
            if (TextUtils.isEmpty(md5Text)) {
                return msg;
            }
    
            //IV
            byte[] iv = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
            //KEY 取MD5前16位
            byte[] key = md5Text.substring(0,16).getBytes();
    
            //AES解密
            try{
                SecretKeySpec v1 = new SecretKeySpec(key, "AES");
                IvParameterSpec v0_2 = new IvParameterSpec(iv);
                Cipher v2 = Cipher.getInstance("AES/CBC/PKCS5Padding");
                v2.init(2, ((Key)v1), ((AlgorithmParameterSpec)v0_2));
                return new String(v2.doFinal(Base64.decode(msg, 2)));
            }
            catch(Throwable unstd) {
                Log.v("Lee", "Fail to decrypt data with aes key through java");
                return msg;
            }
         
    //POC 破解過程驗證
    [mw_shl_code=python,true]import android.util.Base64;
    import java.security.Key;
    import javax.crypto.Cipher;
    
    
    //解密函數
     public  String PddMsgDecrypt(String msg) {
            if (TextUtils.isEmpty(msg)) {
                return msg;
            }
            //MD5加密(uid)
            String md5Text = MD5Utils.digest("5564948642776");
            if (TextUtils.isEmpty(md5Text)) {
                return msg;
            }
    
            //IV
            byte[] iv = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
            //KEY 取MD5前16位
            byte[] key = md5Text.substring(0,16).getBytes();
    
            //AES解密
            try{
                SecretKeySpec v1 = new SecretKeySpec(key, "AES");
                IvParameterSpec v0_2 = new IvParameterSpec(iv);
                Cipher v2 = Cipher.getInstance("AES/CBC/PKCS5Padding");
                v2.init(2, ((Key)v1), ((AlgorithmParameterSpec)v0_2));
                return new String(v2.doFinal(Base64.decode(msg, 2)));
            }
            catch(Throwable unstd) {
                Log.v("Lee", "Fail to decrypt data with aes key through java");
                return msg;
            }
         
    //POC 破解過程驗證
    PddMsgDecrypt("fKt3i73/hNjTPjEL/AIFhMLxuEd1XX0p9sfQ7++CPjgnTDnRzG+1dsiZ6S4f5/HlfCw4XL3/Oisudg2I+i2maQzjaoRGxa0iCtCWrKLwbZU5zkt4J0JCKtV3CZC5JQeVvfn++p8EjsHluhwidX7zg8hqA3wueZYUmwfHdyzMUultYeNOLYDfcmYXHhaFet0NUNvUKaBvwDZm2ah6Drpo9W1UK9GN6rntX58idkPULZnzZErIGHCnPIpJ5cVb8sIAo6iLOMSPPTmGyePfx35veXKVFm38u7o8jkWKOCFC6puHncyFu53f/wBNa0LmQINq5Qf62mgZFbXY+lcT9g+vqVhaW7oA2OsJh7bp+1Xrwv0OdZE1B04bFnpP14Z/1INz3MeMMutA48DoCDyJ2jqQTzFv94WiCnLTtFdoGpIy5bAFMg4zRwzyRYo5Z2kD2+EeyF/lXS+r3QBOACJrw3LEx1kLglyfSqJbdJU9CbQGNmCciZ5ec/glTHRvtefNIe2KHYYMPupxbwHbWHSSQCDyL5IgnfAbTc0jMk82KKlk2LyrlJxeTo4s5yk4njnAhLesGoaGfevnnpx12Unk3FpcQ+rrNC+zMjsjXM5wL5ly8o21x/KLAlGsOfM4YSJaH9f4QS3xU1x8jKZMDYr3LnBcNOU+5dRp3gUdEUFJgDN5wUhsjw5UyPDGZmETHG+pJOt8z9kOOJeuldOEfAAx7sJEor8dM6qJwGLI43LnapnwWYXeAkMfH7pR8coD6IrZgJW9sjt6EoFJa7NU1JTykSP3T7okQyEvk8fVdcHF+Hf6BawhXC2Xy6bWmymQKFXJhhzUeJeQEzZi9FU+TqyeTc7AYCYzrsHsjBHnJxC+P4hdexJXYDCue3qxsrz4zC3R+ZE50QpPUTjdrY3bmUmhk+RxgnUp+TpsUhVbb2p/m4017SWGJV+XPPdnG21uGoxcmNHwGN78jWmkI8kg/09+vBiqV4X8U8tXaD2dHKtJf5ZOr7nyADsqekX6EVrCXcKVlecGHvs0zJgScxb9fTS6bEfa2TW+4aZPVD/Zd9gK7+LD/kP0Lupx+9gQPTO4ElCVJ/hoYD2sBhc7Mmu9iLNKuTHOZ8pidvIoyEMj/4/CyZRUoS2eifc+L39xyEnB/P9+2k+a/xTS3gvkfYAD+OIUbok4uU0K1Rko1SLPoNdcxDOmbbcAl8oDOWH7Qd/qTfj4PQ3weIEgV6/p5ZZkPQi8UJi2Z21UO5M4aOyJVugwcDHvEAyJiVaOAPHd7I4CNj5B0LETEhc4NlOqoN2GvF9ztqdkk03Neb1YCZGT+Lgv8mzumyOccOM/K2wQfS7s9iNU4uGskFGYxUXOBhHLaRARhHny/EFiSbvZOtkqKEA9uRupHDjRzW+1ubRJfF++EubkwpvSQVhJfLZa4AWUS3PFUHP1cnwfwUUEKzaFXSLu6F+sPBb796KxK+Ulr7W8lBRsdmHZL60b7Zz582HAZnx+JFUcjiJKlqy2JqcEEyJAQ4S5B2M1WvFWCkQfaBrGrcd32WIGcEhL7ee5AhNLD+f8hfYwQXm2JLwWA9zg87Lt6MgQvumyjzKfH4NP9UTHuthcI3eM+AKHZoHXNeKVBEmvSApHUs5zQ44xwIfXby/m9pMBrRc/Wl+wHc80SGngLfK3JSmbD9KcTVxPez6qzjBUOlL2dZix5BY4pLZKCQhplMV9FljpTkweBxB8ya75vigSDveW6pcPtnxH4a23kuV3TP/6ba4k8cf40kWPXlx3RmZObp6c71Q69kSAnmtPi0O5bguSvBY/cnYHxyLj6Os**EVYIECqOVPoioPeJ/0nAPMO2cs2cbsMRFqeWsYGUeFsu4tkeU21r8/G/FyR9CjCN7VX9ny0u37y1iVa6eh3TouzyP1CY7iZBo2NtR87cCqckAV9QphlK/FkZ5+IqkWohMHLyds+ezigvmHNaz4MQQ+QU7SIaHX/+juOxGcO8Gj83lb/n99FCx5Oyi58NfCRaocxsfFDQqoCOjrWs/ig+WTm6E=");
    
    



    驗證成功、成功解密
    [XML] 純文本查看 復制代碼
    {"auto_click":1,"content":"親,歡迎來到,今后您在多遇到的任何問題都可以咨詢我哦~快快開啟“多實惠,多樂趣”的購物之旅吧!","from":{"mall_id":"606","role":"mall_cs","uid":"606"},"is_aut":0,"is_rich_text":1,"mallName":"多官方客服","msg_id":"1579261690080","rich_text":{"content":[{"text":"親,歡迎來到多,今后您在多遇到的任何問題都可以咨詢我哦~快快開啟“多實惠,多樂趣”的購物之旅吧!","type":"text"},{"click_action":{"name":"send_message","params":{"content":"如何搜索商品"}},"hide":0,"text":"如何搜索商品","type":"menu_item"},{"click_action":{"name":"send_message","params":{"content":"怎么在多下單"}},"hide":0,"text":"怎么在多下單","type":"menu_item"},{"click_action":{"name":"send_message","params":{"content":"下單后如何支付"}},"hide":0,"text":"下單后如何支付","type":"menu_item"},{"click_action":{"name":"send_message","params":{"content":"哪里可以看到我的訂單"}},"hide":0,"text":"哪里可以看到我的訂單","type":"menu_item"},{"click_action":{"name":"send_message","params":{"content":"有哪些活動"}},"hide":0,"text":"多有哪些活動","type":"menu_item"}],"template":"text_with_menu_items","version":1},"status":"unread","template_name":"parrot_rich_text_with_menu_item","to":{"role":"user","uid":"5564948642776"},"ts":"1579261690","type":0,"unread_count":1,"user_has_read":true}
    






    評分

    參與人數 1威望 +10 飄云幣 +20 收起 理由
    Rooking + 10 + 20 分享精神,是最值得尊敬的!

    查看全部評分

    分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
    收藏收藏3 轉播轉播 分享分享 分享淘帖 頂 踩 掃碼贊助微信 微信分享
  • TA的每日心情
    奮斗
    15 小時前
  • 簽到天數: 43 天

    [LV.5]常住居民I

    沙發
    發表于 2020-4-5 08:38:28 | 只看該作者
    學習了,感謝大佬分享過程
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    3 天前
  • 簽到天數: 670 天

    [LV.9]以壇為家II

    藤椅
    發表于 2020-4-6 18:14:42 | 只看該作者
    感謝表哥分享!~支持一下!~
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    14 小時前
  • 簽到天數: 132 天

    [LV.7]常住居民III

    板凳
    發表于 2020-4-8 06:42:02 | 只看該作者
    感謝樓主分享,干貨很多
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    5 天前
  • 簽到天數: 92 天

    [LV.6]常住居民II

    報紙
    發表于 2020-4-19 13:03:49 | 只看該作者
    跟著學習了,謝謝樓主的分享
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    7#
    發表于 2020-4-29 14:16:45 | 只看該作者

    學習了,感謝大佬分享過程
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    奮斗
    3 天前
  • 簽到天數: 2 天

    [LV.1]初來乍到

    8#
    發表于 3 天前 | 只看該作者
    很好啊,牛皮
    回復 支持 反對

    使用道具 舉報

    您需要登錄后才可以回帖 登錄 | 快速注冊

    本版積分規則

    關閉

    站長推薦上一條 /1 下一條

    小黑屋|手機版|Archiver|飄云閣安全論壇 ( 粵ICP備15107817號-2 )|掃碼贊助

    Powered by Discuz! X3.3© 2001-2017 Comsenz Inc.

      
    快速回復 返回頂部 返回列表
    捕鱼达人3最早的版本