zoukankan      html  css  js  c++  java
  • Android 天猫apk聊天数据库解密

    1.使用Android 天猫apk 进行聊天会产生tmallWangXinDB的数据库。
    2.用sqlite3 工具打开提示加密或者错误。
    3.需要对该数据库进行解密。

    解密流程:
    1.反编译apk,dex2jar工具及smali 文件夹中搜索都没有tmallWangXinDB 关键字。
    2.用IDA打开可疑的名称so,分析发现是个apk。

    3.反编译该apk及查找对应的关键字。

    4.构造函数有继承SQLiteOpenHelper设置秘钥的函数。

    5.SQLiteOpenHelper的包名可以知道采用也是sqlcypto加密(阿里的系列apk几乎都用此方案加密数据库)。

    6.setPassword(((TelephonyManager)paramContext.getSystemService("phone")).getDeviceId());获取为手机的imei
    部分手机为15位 不符合AES key要求为16位。

    7.IDA加载libdatabase_sqlcrypto.so

    8.sqlite3加密流程,sqlite3_key->sqlite3_key_v2->sqlite3CodecAttach
    sqlite3CodecAttach中的回调函数->aes_decrypt
    9.由于so存在反调试,采用hook获取aes_decrypt解密的参数。

    hook函数

     1 unsigned int my_aes_decrypt(int a1, int a2, int a3) {
     2 LOGD("my_aes_ hook!");
     3 char szHex_key[250] = { 0 };
     4 unsigned char* pTemp_key = (unsigned char*) a3;
     5 for (int i = 0; i < 0x10; ++i) {
     6 /* code */
     7 char szTemp_key[10] = { 0 };
     8 sprintf(szTemp_key, "%02x ", pTemp_key[i]);
     9 strcat(szHex_key, szTemp_key);
    10 }
    11 LOGD("Tips: key=a2===%s", szHex_key);
    12 return aes_decrypt(a1, a2, a3);
    13 }

    10.通过hook的参数可以知道当imei为15位的时候补充的字符为'{'(ascii 0x7b)。

    11. 编写解密程序验证 解密后的数据库为正常sqlite3 打开如下。

  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    栈和队列
    第六次作业
    第五次作业
    第四次作业
    第三次作业
    java任务
    第三周-自主学习任务-面向对象基础与类的识别
  • 原文地址:https://www.cnblogs.com/konf/p/5750672.html
Copyright © 2011-2022 走看看