一,了解java中的DES加密
1. 先看一段基本的DES加密代码。
algorithm:算法,如DES
key:根据算法对应的密钥
plainText:明文
// 生成Cipher对象
cipher = Cipher.getInstance(algorithm);
// 操作模式为加密(Cipher.ENCRYPT_MODE),key为密钥
cipher.init(Cipher.ENCRYPT_MODE, key);
// 得到加密后的字节数组
cipherText = cipher.doFinal(plainText.getBytes());
2. 上面简单实现了加密的过程。可以看到代码中主要的是cipher对象,并有以下调用
(1)Cipher对象需要传入一个参数algorithm。
(2)cipher对象使用需要三个参数("加密模式","密钥","向量")。
(3)cipher.doFinal()的调用要做数据转换,方法中传入的是一个byte数组。
实际上Cipher类实现了多种加密算法,在创建Cipher对象时,传入不同的参数就可以进行不同的加密算法。而这些算法不同的地方只是创建密匙的方法不同而已。
3. 创建密匙主要使用SecretKeySpec、KeyGenerator和KeyPairGenerator三个类来创建密匙。
二、解密实战
1.首先拿到DES加密样本,放入GDA反编译工具中进行查看,找到程序入口为:com.phone2.stop.activity.MainActivity。
进入j.a();方法,看到将拼接好的“h~m”字符串存入str,并放入数组f传入a.a(),返回str=h~mx。拿到DES算法加密密钥“h~mx”。
接下来在gwrxibberje.ofmvxveqv.oknctzzmzp.db.a中找到四段加密的密文,分别是
①16be6196e7e3d0253fa0c4311a7b3229
②cba18e2d797dde0e49d7bddec14256175acb86f0d9ee4a45
③16be6196e7e3d02514b53f46cac6e9f0f72927203283a7fe
④8d8ddffcdc53f5952d6f318d0398ac9feda7f36474f02f3d
使用DES在线解密工具,可以分别解密为:
① 用于发信手机号:18230324072
② 2015-10-19 23:59:00
③ 邮箱账户:[email protected]
④ 密码:nhnwlbqanszlgddp
2.其实我们通过对算法主要类和方法的搜索,就可以快速定位加密的类型和位置。
搜索Cipher.getInstance,可以直接定位到设置加密算法的位置,如图。
搜索SecretKeySpec,可以直接定位到设置密钥的代码位置,如图。
三、算法通杀工具
我们可以借助调试工具来完成对加密算法的通杀,为大家介绍一款调试工具,叫做“算法助手”。打开算法助手,可以看到一共有两栏,分别为应用和日志。
在应用一栏中找到我们要调试的程序。点击进入后在算法分析一栏中,勾选摘要算法、含密钥信息摘要和加密算法三项。
点击右上角启动调试的目标程序,程序运行后返回加密算法页面,到日志一栏就可以看到抓取到算法相关数据了,进入查看详情,在解密密钥中可以看到文本内容为h~mx。并且可以看到所调用的堆栈,方便我们定位加密位置。
四、总结
掌握了以上关于DES加密算法的知识,相信大家对DES算法的定位与解密更加轻松了。通过手动分析代码,以及调试工具的辅助配合,能够最快速度解出加密的内容,后续我们也将推出更多关于安卓逆向和加密解密的内容。
来源:盘古石取证,作者:技术专家 张栩图