java 动态替换_Java逆向之利用lua动态替换java中的代码

实现步骤

1.调用方法

2.替换方法

3.返回数据

所需工具

1.luaj.文章尾部有下载地址

2.Eclipse

具体实现

1.新建一个Hello.java类import org.luaj.vm2.Globals;

import org.luaj.vm2.LuaValue;

import org.luaj.vm2.lib.jse.JsePlatform;

public class Hello {

public static String beCall(String str){//被替换方法

str= replaceMethod(str);//调用替换方法

return str;

}

public static String replaceMethod(String str) {

Globals globals = JsePlatform.standardGlobals();

globals.loadfile("C:/luaCallJava.lua").call();//加载电脑C盘中lua文件

LuaValue aver=globals.get(LuaValue.valueOf("replaceMethod"));//调用lua中的替换方法

String result=aver.call(LuaValue.valueOf(str)).tojstring();//获取处理后的数据

return result;

}

}

2.新建luaCallJava.lua文件,并把这文件放到上面hello.java类所指定的路径中(路径可以自己定义)。function replaceMethod(str)

str=str.."我是返回数据"--在原字符后追加一串字符

return str

end

3.调用beCall方法System.out.println(Hello.beCall("the result data:"));//这里以控制台方式显示获取信息

4.测试结果the result data:我是返回数据

技术进阶

如果被调用函数中包含其他函数,应该如何替换呢?那就需要用到luaJ库中的luajava.bindClass函数了,

举个例子:

1.新建个BeCallClass.java类:public class BeCallClass {

public String strcopy(String stra,String strb) {//这是个内部函数,需要实例化该类才能调用

return stra+strb;//该函数实现一个拼接字符串的功能

}

public static String strDelete(String stra,String strb) {//这是个静态函数,直接就可以调用

return stra.replaceAll(strb, "");//该函数实现一个删除原字符串中的strb的字符

}

}

2.修改beCall函数(先测试静态函数):public static String beCall(String str){

str=BeCallClass.strDelete(str,"ert");//调用BeCallClass中的静态函数,删除原字符串中的ert字符

return str;

}

3.替换beCall函数public static String beCall(String str){

str=replaceMethod(str);//替换为我们的函数

return str;

}

4.在lua实现该替换函数function replaceMethod(str)

local BeCallClass=luajava.bindClass("BeCallClass")//绑定BeCallClass类

str= BeCallClass:strDelete(str,"er")//调用BeCallClass类中的静态函数strDelete,不再删除ert而是删除er。

return str

end

6.调用beCall函数System.out.println(beCall("qwert asdf"));

5.输出结果qwt asdf

6.测试调用内部函数

只要将luajava.bindClass("BeCallClass")替换成luajava.newInstance("BeCallClass")即可,然后调用该类中的内部函数strCopy

下面是修改后的lua文件:function replaceMethod(str)

local BeCallClass=luajava.newInstance("BeCallClass")

str= BeCallClass:strCopy(str,"add")//拼接两个字符

return str

end

7.输出结果qwert asdfadd

项目源码

依赖库

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值