记有度app数据库解密过程

有度app的聊天记录存储在/data/im.xinda.youdu/files/youdu/db/buin_14104680_user_100022位置

image-20240830162017315

用jadx-gui打开apk文件,直接搜索数据库名message.Db定位加密函数位置

image-20240830162407294

往下翻可以看到加密逻辑

image-20240830164219012

追踪一下各个函数的作用

1
im.xinda.youdu.lib.a.b.a()

这个函数就是对内部拼接的字符串计算sha-1的hash值,说明数据库的解密密钥就是这串hash值

image-20240830164324144

1
BuildConfig.FLAVOR

追踪其声明发现其值为空

image-20240830164736114

1
im.xinda.youdu.lib.utils.a.b(im.xinda.youdu.a.g.b.h()).hashCode()

该函数就是得到设备的deviceId并计算其hash值

image-20240830165015661

filelocater找一下存储的devideId的值

image-20240830165218496

写个简单的java代码计算其哈希码

image-20240830172030234

下面可以看到加密函数的用例,以得到传入的ij的值

1
a(int i, long j)

image-20240830172804846

可以看到i传入的是”buin”的值和j传入的是”gid”的值

image-20240830173139215

用filelocator查找一下这两个值

image-20240830173458371

得到

1
"gid":100022,"buin":14104680

最后拼接得到字符串:

1
197299081914104680601216000547603300100022

最后计算其sha-1值就得到了数据库密钥

1
6d2ac6f687955b27373cdeb422b4737d1f7b7c92

image-20240830173751155

解密数据库成功

image-20240830173810250