Frida 怎么构造 C# string 注入函数
本文最后更新于 645 天前,其中的信息可能已经有所发展或是发生改变。

之前一直只用 frida 来打印 il2cpp 注入后的函数,今天遇到一个游戏,需要在 unity 层去注入lua,因为用的 xlua 框架,从 so 里面注入无法注入。

分析了一段时间后,可以从从 il2cpp_string_new 这个函数入手

const il2cpp = Module.findBaseAddress("libil2cpp.so");
const il2cpp_string_new = new NativeFunction(
    il2cpp.add(ptr("0x143FE80")),  // il2cpp_string_new 函数地址
    "pointer",
    ["pointer", "int"]
);

function createString(str) {
    const length = str.length;
    const strPtr = Memory.allocUtf8String(str);
    const strObj = il2cpp_string_new(strPtr, length);
    return strObj;
}

const str = createString("Hello, World!");
console.log("String Object:", str);

上面的代码中,il2cpp_string_new 函数的地址需要根据实际情况进行修改。createString 函数用于构造 C# string 对象,其中 str 参数是要构造的字符串。在函数内部,使用 Memory.allocUtf8String 函数将字符串转换为 UTF-8 编码的字节数组,然后调用 il2cpp_string_new 函数构造 C# string 对象。

这个问题还算稍微麻烦一点,记录一下方便之后遇到,可以直接解决。

评论

  1. ssdfsdf
    1年前
    2023-8-28 13:45:32

    其实可以直接find 找到 il2cpp_string_new 的,并不需要通过偏移地址;因为偏移地址大概率每次都不一样

    • 博主
      ssdfsdf
      1年前
      2023-12-18 17:17:34

      你说的没错, android 大部分可以直接通过 find 找到偏移,但是 部分机器可能 find 会有问题,而且 iOS 中无法 find,因为 iOS 的二进制都被去除了符号。
      为了快速验证,一般建议直接用 偏移

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇