本帖最后由 329337656 于 2024-1-11 02:59 编辑
前言:
最近遇到了FrIDA hook 出错,返回提示找不到类(关键字:ClassNotFoundException:Didn't find class)文章最后有彩蛋~
问题过程:
明明jadx反编译回来直接复制粘贴,为什么找不到该类?贴上hook代码:
[JavaScript] 纯文本查看 复制代码 function hook(){
var huishao=Java.use('脱敏处理.KkkKKkkKkK.p007kkkkkkkKkKkkk.KKkKkKkkkkKKKkK')
huishao.m27kkkkkkkKkKkkk.implementation=function (){
return this.m27kkkkkkkKkKkkk();
}
}
Java.perform(function (){
hook();
})
以及jadx代码:
==========================================================================
涉及到高风险app,大面积脱敏处理。望理解,不影响我们分析问题 我们继续放大jadx代码研究:
==========================================================================
翻译过来就是:重命名自:包和类名 原因:无效类名和无效包
也就是告诉你了。这个原来是这个名字:
什么?K? k ?还有一个字符是什么鬼?
反正我是头晕了,分享一下给bing吧。
显而易见,就是这货了,为什么会出现这样的情况?
因为混淆的时候就是需要这样的效果,让你稍微不留意就进入了混淆的坑,让你万劫不复。
先总结目前遇到的问题:
Jadx反编译的时候为了反混淆,会将类名还有方法名做个处理。这样好让你不会满屏都是变量K实际上jadx已经提示你了,这个类名是:
解决方法:
好了,知道问题所在,我们就要想办法解决这样的问题(我这里其实直接复制过去也是可以的,不过有些字符复制过去就是找不到这货。)
经过探索,这个应该就是Unicode 字符(我自己的理解,非严谨)
既然是Unicode,应该就可以encodeURIComponent呀,打开浏览器测试了一下:
还原一下:
妥了。跟着我内心的想法继续改造脚本进行验证 将类名复制到浏览器进行编码
方法名也处理一下
把字符复制下来,在脚本先定义并且转码保存起来,用的时候直接调用就可以了。代码如下:
[JavaScript] 纯文本查看 复制代码 function hook(){
//定义混淆的类名
var classname=decodeURIComponent("cn.tongdun.android.KkkKKkkKkK.k%E2%82%ADkk%E2%82%ADk%E2%82%ADkkkK%E2%82%ADk%E2%82%ADKk%E2%82%ADk%E2%82%AD%E2%82%ADk.KKkK%E2%82%AD%E2%82%ADkKkkkkKKKk%E2%82%ADK")
//使用混淆的类名
var huishao=Java.use(classname)
//定义混淆的方法名
var funstr=decodeURIComponent("k%E2%82%ADkk%E2%82%ADk%E2%82%ADkkkK%E2%82%ADk%E2%82%ADKk%E2%82%ADk%E2%82%AD%E2%82%ADk")
console.log(classname)
console.log(funstr)
}
可以正常打印了。
总结一下解决方法 既然混淆代码之后会给我们特殊的字符串,让我们无从下手,我们应该要更加细心
1:将字符串编码之后,我们能够随意复制粘贴
2:在hook的js代码里,利用decodeURIComponent还原回来
这样就能解决混淆送我们踩的坑了。
最后的彩蛋是:当大家遇上反混淆的app需要逆向hook的时候(有特殊字符的情况下),最好就是利用frida进行hook类下面所有的方法,并且以encodeURIComponent形式返回,这样你会少走很多坑~~如有不同意见或者错误希望大神提出指正!
|