安卓安全浅谈:我是怎么破解“某app”得到数据库加密信息的

东方盛慧科技大约 3 分钟androidandroid技术反编译

安卓安全浅谈:我是怎么破解“某app”得到数据库加密信息的

研究背景: 公司四六级的开发,由于产品经理感觉四六级内容数据不是很完美,例句信息不够完善,感觉某款App的内容比较不错,所以让我尝试破解此app得到相关四六级词本的信息,于是.........

前提步骤:

jarsigner -verbose -keystore keystore文件路径 -signedjar 签名后生成的apk路径 待签名的apk路径 别名

一、下载app

进入app官方网站:识别二维码 得到下载地址进行下载

dd
dd

发现该app安装包还挺大 50多M,喜欢学习的同学,这点流量应该还是hold住的:
版本应该是v2.5.0 包名:com.xdf.recite
然后将apk修改为.zip,并解压到leci文件夹: dddd

二、dex反编译

下载 dex2jar工具进行反编译
dex2jar下载地址:https://sourceforge.net/projects/dex2jar/files/?source=navbaropen in new window
解压并给可执行文件授权 然后给leci目录下面的.dex文件转换为jar文件 dd 然后打开解压完的jar文件 即可看到 反编译后的 某app源码 观察一下 碰碰运气就会发现很核心的 密钥信息,突然很兴奋有没有 dd

三、导出数据库数据

观察后发现某app的词本 下载完是直接存放到 sd卡上的,导出相关词本到电脑上

dd
dd

四、发现加密信息

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

dd
dd

五、解密摸索

刚开始是看到反编译后的相关代码,尝试着去还原代码,试了好几天都不行,后来观察核心类中有一些开发人员的日志信息,会不会通过日志信息搜索到当时开发人员使用的第三方jar包,经过google尝试搜索到2个jar包,第一个发现20多M,感觉应该不会,下载包总共才50多M,但还是试了一下,发现不行;第二个200多K,感觉有戏,试了一下,奇迹发生了!!!! dd

六、批量提取产品经理需要的内容

解密工作完成后,通过sqlite的jdbc进行了相关表的读写,就可以提取出所有的信息,包括词根、联想词汇、例句、翻译、视频地址、音频地址等,一个词本的所有信息都可以获取到了,最后导出到excel,然后剩下的就是看产品经理需要什么内容自由发挥了 操作base1.db文件: dd

总结:如何避免此事的发生

  1. apk代码混淆并加固 因为没有加固,所以可以得到dex文件,然后通过dex2jar文件反编译得到伪代码
  2. 秘钥信息不应在客户端保存 因为秘钥信息保存到本地,所以有经验的开发人员很容易通过反编译的代码发现秘钥 并进行解密
  3. 核心(加解密)代码尽可能的不要原封不动的采用第三方代码 由于找到了相关解密代码,配合秘钥,直接破解了相关内容
上次编辑于:
贡献者: 雷勋