1. 反编译
dex2jar生成jar文件然后通过jd-gui查看class文件apktool解压apk
2. 查找相关关键字
- 在
apktool解压出的项目中查找如购买等关键字,发现其定义在string.xml文件中,并可以追溯到public.xml中其对应的 id。 - 再对
id进行搜索找到相关文件,然后回到jd-gui中查看相关逻辑(其中部分方法并未转成java代码而是字节码,可能是有相关的防范措施?) - 修改
apktool解压的smali代码(类似汇编)改变逻辑,然后apktool打包生成apk文件并进行签名(安装后发现并未全部破解,部分文案仍然显示不全)
3. 数据库解密
- 发现数据是从apk中所带的
sqlite数据库中查出来的,在项目的res/raw文件夹下找到相关db文件 - 然后数据库文件被
sqlcipher加密过,在继续返回代码中查找xxx.db关键字,并找到获取数据库密码字符串方法
protected String a() {
char[] arrayOfChar = (new String(Base64.decode("w6PDl8OKw4fCtMK2w5rCssO0w6rDj8KzwrjCtMOk", 1))).toCharArray();
for (byte b1 = 0; b1 < arrayOfChar.length; b1++)
arrayOfChar[b1] = (char)(arrayOfChar[b1] ^ 0x80);
return (new StringBuilder(String.valueOf(arrayOfChar))).reverse().toString();
}
对数据库解密后,查看数据库中内容,发现数据库内并未存储完整的内容,应该是需要从服务器下载更新
4. 从服务器获取内容
待续...