youduck7 发表于 2026-5-25 16:32

frida怎么hook真实值

本帖最后由 youduck7 于 2026-5-25 19:32 编辑

我在复现PCTF2025的eazyflag这一题的时候,(之前做出来,现在整理笔记需要用到)附件在最后

就是一道将 flag 给到 firstLayerEncrypt 和 secondLayerEncrypt 两个方法后
跟 bc273817ab96cf4a4206321199dbe36140e1dee3d7dbc89ea76f7e 比较一下

secondLayerEncrypt 是native层用ida打开是一个rc4,那个key 我没找到,但是可以利用异或或对称来解决

然后就是主角 firstLayerEncrypt 了
    public byte key1 = 67;
    public byte key2 = 33;

    private byte[] firstLayerEncrypt(String str) {
      if (str == null || str.isEmpty()) {
            return new byte;
      }
      byte[] bytes = str.getBytes();
      int[] iArr = new int;
      for (int i = 0; i < bytes.length; i++) {
            bytes = (byte) (((((bytes & UByte.MAX_VALUE) ^ this.key1) & 255) + this.key2) & 255);
      }
      return bytes;
    }
这里的key1和key2不是静态的,但是我用frida没有打印出来
这是hook.js
Java.preform(()=>{
    var class_Main = Java.use("f.f.eazyflag.MainActivity")
    class_Main.firstLayerEncrypt.implementation = function(str){
      var k1 = this.key1.value
      var k2 = this.key2.value
      console.log(k1)
      console.log(k1)
      return this.firstLayerEncrypt(str)
    }
})



有疑问的就是,我又是运行出来的是 17 18 ,但是有时候是 67 33 ,代码什么的都没变,原本都是 67 33的,刚才运行出个17 18 退出再来一遍是67 33



通过网盘分享的文件:app-release.apk
链接: https://pan.baidu.com/s/1XwTpCavyWhv_VtgrKK7OQg?pwd=2222 提取码: 2222
页: [1]
查看完整版本: frida怎么hook真实值