安卓安全浅谈:我是怎么破解“某app”得到数据库加密信息的
安卓安全浅谈:我是怎么破解“某app”得到数据库加密信息的
研究背景: 公司四六级的开发,由于产品经理感觉四六级内容数据不是很完美,例句信息不够完善,感觉某款App的内容比较不错,所以让我尝试破解此app得到相关四六级词本的信息,于是.........
前提步骤:
jarsigner -verbose -keystore keystore文件路径 -signedjar 签名后生成的apk路径 待签名的apk路径 别名
一、下载app
进入app官方网站:识别二维码 得到下载地址进行下载
- 官网:http://www.ileci.com/staticView/index
- 下载地址:http://a.app.qq.com/o/simple.jsp?pkgname=com.xdf.recite

发现该app安装包还挺大 50多M,喜欢学习的同学,这点流量应该还是hold住的:
版本应该是v2.5.0 包名:com.xdf.recite
然后将apk修改为.zip,并解压到leci文件夹:
二、dex反编译
下载 dex2jar工具进行反编译
dex2jar下载地址:https://sourceforge.net/projects/dex2jar/files/?source=navbar
解压并给可执行文件授权 然后给leci目录下面的.dex文件转换为jar文件 然后打开解压完的jar文件 即可看到 反编译后的 某app源码 观察一下 碰碰运气就会发现很核心的 密钥信息,突然很兴奋有没有
三、导出数据库数据
观察后发现某app的词本 下载完是直接存放到 sd卡上的,导出相关词本到电脑上

四、发现加密信息
用Sqlite相关工具打开 base1.db,我用的SQLite Professional,打开后发现加密数据,一般为例句翻译、词汇、视频地址等核心相关信息

五、解密摸索
刚开始是看到反编译后的相关代码,尝试着去还原代码,试了好几天都不行,后来观察核心类中有一些开发人员的日志信息,会不会通过日志信息搜索到当时开发人员使用的第三方jar包,经过google尝试搜索到2个jar包,第一个发现20多M,感觉应该不会,下载包总共才50多M,但还是试了一下,发现不行;第二个200多K,感觉有戏,试了一下,奇迹发生了!!!!
六、批量提取产品经理需要的内容
解密工作完成后,通过sqlite的jdbc进行了相关表的读写,就可以提取出所有的信息,包括词根、联想词汇、例句、翻译、视频地址、音频地址等,一个词本的所有信息都可以获取到了,最后导出到excel,然后剩下的就是看产品经理需要什么内容自由发挥了 操作base1.db文件:
总结:如何避免此事的发生
- apk代码混淆并加固 因为没有加固,所以可以得到dex文件,然后通过dex2jar文件反编译得到伪代码
- 秘钥信息不应在客户端保存 因为秘钥信息保存到本地,所以有经验的开发人员很容易通过反编译的代码发现秘钥 并进行解密
- 核心(加解密)代码尽可能的不要原封不动的采用第三方代码 由于找到了相关解密代码,配合秘钥,直接破解了相关内容