星空网 > 软件开发 > 操作系统

Android 天猫apk聊天数据库解密

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

解密流程:
1.反编译apk,dex2jar工具及smali 文件夹中搜索都没有tmallWangXinDB 关键字。
2.用IDA打开可疑的名称so,分析发现是个apk。Android 天猫apk聊天数据库解密images/loading.gif' data-original="http://images2015.cnblogs.com/blog/643854/201608/643854-20160808192108621-1598959104.png" />

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

Android 天猫apk聊天数据库解密

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

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

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

7.IDA加载libdatabase_sqlcrypto.so

Android 天猫apk聊天数据库解密

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)。Android 天猫apk聊天数据库解密

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

Android 天猫apk聊天数据库解密




原标题:Android 天猫apk聊天数据库解密

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流