luaj种的classNotFound问题【不用反编译jar】!

思路来源:https://blog.csdn.net/u011335423/article/details/80592715

上面的博主提到只需要修改Class.forName为1个参数就行,我是费了半天劲,
思路1.有luaj的源码包,但是不知道咋编译成jar【失败】
思路2.网上有说把某jar文件提取需要的class文件并解密为java,然后修改完后编译成class,再压缩回去,但是我发现压缩回去后,连反编译jar的软件都是别不出来.java文件了。【失败】
思路3.困得很,睡一觉。【成功】

我睡了1个小时,后来突然脑袋灵光了,看看是怎么我能不能写个类之类的把他给替换掉?说干就干,追了第一步,就发现了奥秘,在调用JsePlatform.standardGlobals()的时候standardGlobals这个方法里面有如下代码

		Globals globals = new Globals();
		globals.load(new JseBaseLib());
		globals.load(new PackageLib());
		globals.load(new Bit32Lib());
		globals.load(new TableLib());
		globals.load(new StringLib());
		globals.load(new CoroutineLib());
		globals.load(new JseMathLib());
		globals.load(new JseIoLib());
		globals.load(new JseOsLib());
		globals.load(new LuajavaLib());
		LoadState.install(globals);
		LuaC.install(globals);
		return globals;		

发现了在这里调用了LuajavaLib类来初始化luajava这个东西,所以,我们大胆的猜想一下,要不我们也仿照写一个,在摸索的过程中,发现JavaClass.forClass不允许外部访问,百度了一下,需要同一级的或者子类可以访问,所以我新建了一个java文件,内容如下

package org.luaj.vm2.lib.jse;//这个地方千万别漏掉~

public class JavaClassImpl extends JavaClass {
    public JavaClassImpl(Class c) {
        super(c);
    }
}

下面是我注入lua的代码,globals是通过JsePlatform.standardGlobals()获得的对象


globals.load(new TwoArgFunction(){
	public  LuaValue call(LuaValue modname,LuaValue env){
		LuaTable t = new LuaTable();
		Class f = this.getClass();
		t.set("bindClass",new mtn(1,"bindClass")); //此处的1表示下面的opcode 
		//下面这两个自己翻LuajavaLib.java文件照搬,主要是修改为了调用我们自己的classForName。
		// t.set("newInstance",new mtn(2,"newInstance"));
		// t.set("new",new mtn(3,"new"));
		env.set("luajavax",t);
		env.get("package").get("loaded").set("luajavax", t);
		return t;    
	}
   
    class mtn extends VarArgFunction{
    	  public mtn(int opcode, String name) {
    	  	this.opcode = opcode;
    	  	this.name = name;
    	  }
    	  public Varargs invoke(Varargs args) {
    	     try {
    	      switch ( opcode ) {
    	       	case 1:{
    	       		final Class clazz = classForName(args.checkjstring(1));
    	          	return new JavaClassImpl(clazz);
    	          	}
    	      	}
    	      }catch(Exception e){}
    	 }
    	 protected Class classForName(String name) throws ClassNotFoundException {
    	   return Class.forName(name);//就是这个地方,绕了一大圈!
    	 }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Jarclass反编译工具是一在线工具,可用于将Jar包文件中的class文件进行反编译。 这工具的主要功能是将编译后的Java字节码文件恢复成可读性较高的Java源代码,方便开发人员进行代码的理解、修改及调试等工作。 在线的Jarclass反编译工具通常通过上传Jar包文件,然后在服务器端进行反编译处理,最后将反编译后的Java源代码以可下载的方式提供给用户。 使用这工具,用户无需下载和安装额外的软件,只需将需要反编译Jar包文件上传到在线平台,即可获得相应的Java源代码。 Jarclass反编译工具的优势之一是方便快捷,用户只需几步操作即可获得反编译后的Java源代码,节省了安装配置和学习使用其他反编译工具的时间。 同时,由于是在线工具,也更加适用于需要临时反编译的场景,不需要在本地长期保留相关软件。 然而,需要注意的是,由于涉及源代码的反编译,应确保拥有合法的授权和权限,遵守相关的法律和规定。 另外,Jarclass反编译工具反编译出的Java源代码可能与原始代码存在一定的差异,并且可能不包含原始注释等附加信息。因此,在使用反编译代码时,需要根据具体情况进行审慎分析和验证。 总之,Jarclass反编译工具的在线版本是一方便快捷的工具,能够帮助开发人员在需要反编译Jar包文件的时候,快速获取Java源代码,提高效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值