maoabc / nmmp

dex-vm used to protect the android classes.dex file
736 stars 260 forks source link

aar下会出现类似得问题,不知为何? #59

Open frankgogoland opened 1 year ago

frankgogoland commented 1 year ago

Exception in thread "main" java.lang.TypeNotPresentException: Type com/layer3/gis/sdk/util/t/e not present at org.objectweb.asm.ClassWriter.getCommonSuperClass(ClassWriter.java:1045) at org.objectweb.asm.SymbolTable.addMergedType(SymbolTable.java:1202) at org.objectweb.asm.Frame.merge(Frame.java:1299) at org.objectweb.asm.Frame.merge(Frame.java:1197) at org.objectweb.asm.MethodWriter.computeAllFrames(MethodWriter.java:1611) at org.objectweb.asm.MethodWriter.visitMaxs(MethodWriter.java:1547) at org.objectweb.asm.ClassReader.readCode(ClassReader.java:2665) at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1514) at org.objectweb.asm.ClassReader.accept(ClassReader.java:744) at org.objectweb.asm.ClassReader.accept(ClassReader.java:424) at com.nmmedit.apkprotect.aar.ModuleProtect.modifyClass(ModuleProtect.java:208) at com.nmmedit.apkprotect.aar.ModuleProtect.modifyClassFiles(ModuleProtect.java:155) at com.nmmedit.apkprotect.aar.ModuleProtect.run(ModuleProtect.java:72) at com.nmmedit.protect.AarModuleMain.main(AarModuleMain.java:51) at com.nmmedit.protect.Main.main(Main.java:27) Caused by: java.lang.ClassNotFoundException: com.layer3.gis.sdk.util.t.e at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:415) at org.objectweb.asm.ClassWriter.getCommonSuperClass(ClassWriter.java:1043)

跟踪代码得时候发现实际解析得类是com.layer3.gis.sdk.util.t.a。现象奇特。阻止这个类解析则没有问题。其他得类都正常解析了,可以生成加固后得aar

maoabc commented 1 year ago

把创建ClassWriter时的flag去掉COMPUTE_FRAMES试试。

maoabc commented 1 year ago

主要是需要修改方法后自动计算maxStatck和maxLocal,应该不用计算frame,只加COMPUTE_MAXS没问题。

frankgogoland commented 1 year ago

好的,有个比较棘手的问题Serializable 接口的类都混淆不了,这个有什么办法吗?

maoabc commented 1 year ago

这个没办法,可能涉及本地库,序列化没法支持,不过这些类也没有加固必要吧。安卓的Parcelable接口应该没问题

frankgogoland commented 1 year ago

好的,我这边做个中间bean做为桥接。 另外 再请教一个问题。//虚拟机库名称,如果cmake里配置为静态库,这个可以忽略 public static final String VM_NAME = "nmmvm"; 这个名称能修改吗,我尝试改了一下,编译错了。 后来尝试改CMakeLists.txt文件,但是编译过不去。谢谢

maoabc commented 1 year ago

BuildNativeLib.java里也需要修改,不然找不到编译后的.so文件

maoabc commented 1 year ago

这个按我开始想法libnmmvm.so可以使用静态库,这样编译后就只生成libnmmp.so,nmmp这个名称在generateCmake里会替换掉。

frankgogoland commented 1 year ago

改了2个地方 1.BuildNativeLib.java 的VM_NAME定义 2.vm目录下的配置文件 改完之后重新压缩zip文件,替换之前的资源。 但是改完之后就编译不过去。

maoabc commented 1 year ago

你改vm目录下的cmake文件,那么上层的cmake文件里链接库名称也需要改,不然找不到库

maoabc commented 1 year ago

target_link_libraries(${LIBNAME_PLACEHOLDER} nmmvm log)这里的vm库名称也需要改

frankgogoland commented 1 year ago

image 是这么改的,2个文件都改成和java设置的名称一样,最后cmake的时候会报错。

maoabc commented 1 year ago

先确定dex2c下面是否有cmakelists.txt,然后自己调用cmake相关命令。或者把dex2c弄到android studio里。两个cmakelists.txt文件,一个处理vm部分,一个处理生成的代码,具体怎么可以先去学下cmake相关,然后按自己想要的改。

frankgogoland @.***> 于 2023年2月1日周三 21:14写道:

[image: image] https://user-images.githubusercontent.com/1207767/216052710-069a6179-54bc-4dd9-8fa6-4679aac2ef40.png 是这么改的,2个文件都改成和java设置的名称一样,最后cmake的时候会报错。

— Reply to this email directly, view it on GitHub https://github.com/maoabc/nmmp/issues/59#issuecomment-1412039433, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA27LVZATK3W7XYVPKNKSH3WVJOSPANCNFSM6AAAAAAUKEZXJ4 . You are receiving this because you commented.Message ID: @.***>

frankgogoland commented 1 year ago

谢谢,目前发现就不能改里面的文件,然后再压缩替换之前的内容。修改后命令不正常了。并不是字符串替换的问题。 建议您弄个群,好交流谢谢。

maoabc commented 1 year ago

并没有问题,有问题只会是你操作或者使用工具有问题。本质上只是内嵌个zip把c源码放里面方便读取而已,那个报错明显是修改后连cmakelists.txt都丢失了。 你应该检查那些工具怎么直接修改zip的,很简单的问题没必要复杂化然后变成玄学问题。

frankgogoland commented 1 year ago

并没有问题,有问题只会是你操作或者使用工具有问题。本质上只是内嵌个zip把c源码放里面方便读取而已,那个报错明显是修改后连cmakelists.txt都丢失了。 你应该检查那些工具怎么直接修改zip的,很简单的问题没必要复杂化然后变成玄学问题。

是zip路径多了一层,感谢支持。现在可以改名了!