JAVA 知识点 | Hook

Java修饰符

在这里插入图片描述

https://blog.csdn.net/bujiujie8/article/details/81410607
https://blog.csdn.net/zw1996/article/details/53240155
构造函数
https://www.cnblogs.com/ibelieve618/p/6364541.html
package javastudy;

public class ConfunDemo {
    public static void main(String[] args) {
        Confun c1=new Confun();            //输出Hello World。new对象一建立,就会调用对应的构造函数Confun(),并执行其中的println语句。
    }
}
class Confun{        
    Confun(){       //这就是Confun的构造函数,相当于python的__init__()
        System.out.println("Hellow World");
    }
}

extend关键词(继承)
public class 子类名称 extends 父类名称{
    //.....
}
frida hook常用函数
https://www.52pojie.cn/thread-1196917-1-1.html
apply:调用回原函数
var CodecWarpper = Java.use("xx.CodecWarpper");
  CodecWarpper.encodeRequest.implementation = function() {
      var ret = this.encodeRequest.apply(this, arguments);
     //这里可以打印参数和返回值
      return ret;
  }

jstring, jbytearray 输出
function jstring2Str(jstring) {
   var ret;
   Java.perform(function() {
       var String = Java.use("java.lang.String");
       ret = Java.cast(jstring, String);
   });
   return ret;
}
 
function jbyteArray2Array(jbyteArray) {
   var ret;
   Java.perform(function() {
       var b = Java.use('[B');
       var buffer = Java.cast(jbyteArray, b);
       ret = Java.array('byte', buffer);
   });
   return ret;
}

打印堆栈
function showStacks() {
    Java.perform(function() {
        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
    });
}
Buffer对象
https://javascript.ruanyifeng.com/nodejs/buffer.html
ArrayBuffer 转换
function ab2Hex(buffer) {
    var arr = Array.prototype.map.call(new Uint8Array(buffer), function (x) {return ('00' + x.toString(16)).slice(-2)}).join(" ").toUpperCase();
    return "[" + arr + "]";
}
 
function ab2Str(buffer) {
    return String.fromCharCode.apply(null, new Uint8Array(buffer));
}
获取类型
function getParamType(obj) {
    return obj == null ? String(obj) : Object.prototype.toString.call(obj).replace(/\[object\s+(\w+)\]/i, "$1") || "object";
}
hook native 函数
function hookNativeFun(callback, funName, moduleName) {
    var time = 1000;
    moduleName = moduleName || null;
    if (!(callback && callback.onEnter && callback.onLeave)) {
        console.log("callback error");
        return
    }
    var address = Module.findExportByName(moduleName, funName);
    if (address == null) {
        setTimeout(hookNativeFun, time, callback, funName, moduleName);
    } else {
        console.log(funName + " hook ok")
        var nativePointer = new NativePointer(address);
        Interceptor.attach(nativePointer, callback);
    }
}
Android:JNI 与 NDK到底是什么?
https://www.52pojie.cn/thread-1196917-1-1.html
JNI(Java Native Interface)即 Java本地接口,使得Java 与 本地其他类型语言(如C、C++)交互
NDK(Native Development Kit)是 Android的一个工具开发包,能配合快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK
Hook和实例化

在这里插入图片描述

X509是证书

在这里插入图片描述

JAVA基础

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

类型转换

在这里插入图片描述

30000L是将30000转Long类型的意思
字符串和任何数据相加都会成字符串(类型自动转换)
运算符
&&和&,效果上都是一样,是and的意思,但是&左边为假时后边就不运算了,而&&两边都会运算
||和|,效果上也是一样,是或的意思,但|左边为真时右边就不运算了,||两边都会运算
循环

在这里插入图片描述

三元运算符

在这里插入图片描述

switch

在这里插入图片描述

for循环表达式

在这里插入图片描述

Java函数重载
参数的顺序不同,也算不同方法,也算重载
static
只会在初始化的时候创建一次,不会被销毁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值