Java逆向之利用lua动态替换java中的代码
来源:互联网 发布:effective java 下载 编辑:程序博客网 时间:2024/06/05 10:05
转载时请注明转载地址:http://blog.csdn.net/qq_26914291/article/details/78310087
实现步骤
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 strend
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 strend
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 strend
7.输出结果
qwert asdfadd
项目源码
下载地址:luajavaSimple
依赖库
1.luaj-3.0.1
参考文章
1.Java中内嵌Lua脚本
2.菜鸟教程
阅读全文
1 0
- Java逆向之利用lua动态替换java中的代码
- Android逆向之利用lua动态替换java中方法
- java中的动态加载和热替换
- Java在利用反射条件下替换英文字母中的值
- java.lang.Instrument 动态修改替换类代码
- java.lang.Instrument 动态修改替换类代码
- java.lang.Instrument 动态修改替换类代码
- Java参数中的\替换
- Java中的字符替换
- Java中的字符替换
- 【Android】通过Java代码替换TabHost中的drawableTop资源
- Editplus 替换 jd-gui 反编后JAVA代码中的注解
- 利用php中的eval来模拟java中的动态代理
- Android逆向之Xposed不重启手机替换hook代码(并不是简单替换字符串)
- 利用javax.tools动态编译执行java代码
- 利用Java代码给gridLayout动态添加button按钮
- 纯JAVA代码利用DynamicReports插件生成动态报表
- Java代码 枚举类型替换
- Leetcode挑战题——Repeated String Match
- [BZOJ2338][HNOI2011]数矩形
- Linkit ONE开发板实验01-闪灯程序
- 30 多年的编码经验总结成 10 条最佳实践
- Linux Shell经典面试题(其一)
- Java逆向之利用lua动态替换java中的代码
- hello world
- Linux 新开terminal自动source 文件
- 【未完成】常微分实验3.3:解 & 连续的初值 & 可微性定理
- nginx 配置文件
- 34、C#里面的网页视图组件的运用
- 1033. 旧键盘打字(20)
- 对DFA和NFA的理解以及它们之间的区别
- python venv 虚拟环境配置 gpu