添加新的Hook点
Java版本
添加hook点
package com.baidu.openrasp.hook;
import com.baidu.openrasp.HookHandler;
import javassist.CannotCompileException;
import javassist.CtClass;
import javassist.NotFoundException;
import java.io.IOException;
/**
* 自定义hook点继承自AbstractClassHook
*/
public class MyHook extends AbstractClassHook {
/**
* 返回自定义的hook点类型名称
*/
@Override
public String getType() {
return "string_replace";
}
@Override
protected void hookMethod(CtClass ctClass) throws IOException, CannotCompileException, NotFoundException {
/*
* 获取要插入函数开始的代码
* 参数 "$0,$1,$2" 表示获取带插入函数的 this,第一个参数以及第二个参数
* 然后用获取的参数调用HookHandler.checkStringReplaceEnter这个静态方法
* 最后三个参数代表HookHandler.checkStringReplaceEnter方法的参数类型
*/
String srcBefore = getInvokeStaticSrc(HookHandler.class, "checkStringReplaceEnter",
"$0,$1,$2", String.class, String.class, String.class);
// 在String.replace函数开始的地方,插入刚才获取的代码片段,第三个个参数为函数签名信息
insertBefore(ctClass, "replace", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", srcBefore);
/*
* 获取要插入函数结束的代码
* 参数 "$_" 代表获取待插入函数的返回值
* 最后用获取的内容调用HookHandler.checkStringReplaceExit这个静态方法
*/
String srcAfter = getInvokeStaticSrc(HookHandler.class, "checkStringReplaceExit", "$_", String.class);
/*
* 在String.replace函数结束的地方,插入刚才获取的代码片段,第三个个参数为函数签名信息
* 最后一个参数为true代表在异常退出的地方异常会插入响应的代码段
*/
insertAfter(ctClass, "replace", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", srcAfter, true);
}
/**
* 匹配需要hook的类名
*/
@Override
public boolean isClassMatched(String className) {
return "java.lang.String".equals(className);//该hook点hook的是java.lang.String类
}
}添加检测类型
构造参数并进入checker
PHP 版本
新增hook点
Last updated