Java写的第二个CM
本帖最后由 LoRyu 于 2020-11-11 06:25 编辑上一次发了cm之后,学习到了很多,发现自己挺多问题的
这次改进了很多,依旧是java写的,易语言打包,不过这次有Native混淆,所以还用上了C++
需要安装并配置MinGW
望大佬们指教 :) LoRyu 发表于 2020-11-12 12:16
厉害啊,能讲下过程吗兄弟
1. 在equals下断点,发现没有调用,我猜可能是遍历数组进行比对
2. 首先随便输入一个字符,在toCharArray下断点,可以看到这个字符被转换成unicode字符,然后unicode字符还会被转义一次,然后出现了一个奇怪的字符串,长度为16,跟unicode字符被转义后的长度一致
3. 看到Check里面有个奇怪的变量,下断点查看一下,看起来也是经过转换,但是长度为288,所以应该是真实长度为18的key
4. 看了一下Frame这个类,可以看出混淆后的常量都被放进了一个int数组变量,下断点记录一下
5. 然后发现checkString里面的流程非常复杂,不过可以先找调用SetCharArrayRegion的地方,然后一直往上找,找到GetIntArrayRegion,这里是从第四步的int数组读取常量,再往上找可以找到switch的跳转表,总共12处地方
6. 最后得出映射表,写个脚本还原一下在第三步得到的字符串即可
虚拟机没有Java环境就不搞了,只把jar和dll提出来看了看dll
给各位个建议,静态就 不要搞了,一层native就挺恶心的了,还有一层混淆
有 环境的可以下个断点调试看看
这混淆也太多层了吧 :lol 好像运行会自动退掉 萌新想问问KeyGen所产生的key是试出原先程序就有的key,还是重新生成新的key去“骗过”程序? Ravey 发表于 2020-11-12 08:36
这混淆也太多层了吧
厉害啊,能讲下过程吗兄弟 Ravey 发表于 2020-11-12 12:42
1. 在equals下断点,发现没有调用,我猜可能是遍历数组进行比对
2. 首先随便输入一个字符,在toCharArra ...
native方法也可以用jdb调试吗 LoRyu 发表于 2020-11-12 12:46
native方法也可以用jdb调试吗
不能,这次我用IDE的debugger调试,方便查看char数组
然后native方法我是用ida pro静态分析 Ravey 发表于 2020-11-12 12:53
不能,这次我用IDE的debugger调试,方便查看char数组
然后native方法我是用ida pro静态分析
6,厉害
页:
[1]
2