通常我们会利用对称加密的方式去加密内容,甭管你是否用到非对称加密,但是解密的时候肯定会调用Cipher.doFinal方法
所以我们可以通过hook的方式去hook这个点,我们就可以很好的拦截到数据
类似如下代码所示
XposedHelpers.findAndHookMethod(
Cipher::class.java,
"doFinal",
ByteArray::class.java,
object : XC_MethodHook() {
@Throws(Throwable::class)
override fun afterHookedMethod(param: MethodHookParam) {
var resultStr: StringBuffer = StringBuffer()
resultStr.append("\n")
resultStr.append("doFinal")
resultStr.append(
"(" + Util.byteArrayToString(param.args[0] as ByteArray).toString() + " ) "
)
resultStr.append("\n")
resultStr.append("result:")
resultStr.append(
Util.byteArrayToString(param.result as ByteArray).toString() + ""
)
XpLog.log(getTag(), resultStr.toString())
}
})
通过xposed的hook,可以完美破解到人家的数据内容,我管你用DES,还是AES
问题来了,我们如何解决这个问题呢
1考虑利用检测工具检测xposed是否存在(参考银行app)
2.转用ndk去实现加解密,ida分析llvm的so会有一定难度,如果仅仅写加解密操作在so不行,要后续的步骤要在jni写一点
3.建议自己实现自己的一套加解密算法,不用默认的
4.扣下常用的json库源码,修改名字和全混淆