frida 实战_初识Frida(二)

 前言:初学逆向 请多多指教

学习到的内容

1、编写类似Xposed的自吐算法模块

2、加强对Frida API的运用

01

这里就简单的拿jdk包中的md5加密类来进行举例子,其实跟Xposed很相似,不过语法变了点,思路其实都是一样的

先获取MessageDigest类的JavaScript引用赋值给md变量

var md = Java.use('java.security.MessageDigest');

然后开始对该类的函数进行hook,一般MessageDigest类用的方法都是getInstance/update/final

然后这里需要注意的是这几个方法都是有重载方法的,所以这里进行HOOK的时候需要使用overload来进行hook

在overload中的第一个参数来对参数的类型进行描述的时候用到的是signture类型,也就是smali中的类型表达方式

比如这里如果需要接收一个字节数组的话,那么表达方式就是'[B'

    var md = Java.use('java.security.MessageDigest');    md.update.overload('[B').implementation = function (a) {
            send("update:" + bytesToString(a))        showStacks();        send("======================================");        return this.update(a);    }

fff21b3fb60278f6f25a03b1d7300529.png

java.security.cert.CertificateFactory中的generateCertificate这个方法其实也可以进行hook(在实战练习中遇到过这种情况,但是正常的hook是hook不到这种情况的,所以也可以加上CertificateFactory的generateCertificate hook),但是自己这里在js代码中不知道该如何转换,因为generateCertificate方法参数是InputStream类型的,该InputStream对象中存储着密钥的字节流,所以还需要转换为ByteArrayOutputStream类型,然后再调用toByteArray转换为字节数据最后new String,这些思路在frida中的js不知道该咋写,所以这个就先留着先(有大佬知道的话 也可以发个消息教一下哈)!

最终的代码如下:

jsCode = """function showStacks() {
        Java.perform(function() {
            send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));    });}function bytesToHex(arr) {
        var str = "";    for (var i = 0; i < arr.length; i++) {
            var tmp = arr[i];        if (tmp < 0) {
                tmp = (255 + tmp + 1).toString(16);        } else {
                tmp = tmp.toString(16);        }        if (tmp.length == 1) {
                tmp = "0" + tmp;        }        str += tmp;    }    return str;}function bytesToBase64(e) {
        var base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';    var r, a, c, h, o, t;    for (c = e.length, a = 0, r = ''; a < c;) {
            if (h = 255 & e[a++], a == c) {
                r += base64EncodeChars.charAt(h >> 2),            r += base64EncodeChars.charAt((3 & h) << 4),            r += '==';            break        }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值