绕过一个app的frida检测(libmsaoaidsec.so库)
本文最后更新于 165 天前,其中的信息可能已经有所发展或是发生改变。

遇到一个app,叫wakeup课程表,注入frida后,frida会停止但是app正常运行

如何定位校验代码?我选择hook dlopen ext来监控so的加载,当执行包含检测代码的so时,app就会让frida退出
多次执行hook代码,发现app总是在加载libmsaoaidsec.so后frida退出。

将目标so拖入idapro反编译,查找jnionload

jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
  jint v4; // w19
  int v5; // w0
  __int64 v6; // x8
  int *v7; // x23
  const char *v8; // x0
  void (__fastcall *v10)(JavaVM *, void *); // [xsp+8h] [xbp-48h] BYREF
  __int64 v11[2]; // [xsp+10h] [xbp-40h] BYREF

  v11[1] = *(_QWORD *)(_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2)) + 40);
  v11[0] = 0LL;
  v4 = 65540;
  if ( (*vm)->GetEnv(vm, (void **)v11, 65540LL) )
    return -1;
  _android_log_write(4, "NagaLinker", "v8.83");
  v5 = sub_12340(v11[0]);
  v6 = v11[0];
  v7 = off_47FB8;
  *off_47FB8 = v5;
  v8 = (const char *)sub_12600(v6);
  if ( strchr(v8, 77) )
  {
    *v7 = 23;
  }
  else if ( *v7 >= 24 )
  {
    *off_47ED8 = 1;
  }
  v10 = 0LL;
  if ( sub_8734(qword_49248, (__int64)"JNI_OnLoad", (__int64 *)&v10) )
    v10(vm, reserved);
  return v4;
}

复制代码这里调用了sub_12340和sub_12600来进行环境检查,进入函数发现会对安卓api和安卓版本号检查,后面的if else对检查结果进行比较。

bool __fastcall sub_8734(__int64 a1, __int64 a2, __int64 *a3)
{
  __int64 v4; // x0

  _ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2));
  v4 = sub_ED8C(a1, a2);
  *a3 = v4;
  return v4 != 0;
}                       

复制代码然后调用了sub8734进行动态查找,这个很可能和frida检测相关,找到之后,v10就不是变量了变成了目标地址,拿到地址后通过jni onload来执行。(大概就是这样吧可能有点乱

LOAD:0000000000013B28 A0 00 00 34                   CBZ             W0, loc_13B3C
LOAD:0000000000013B28
LOAD:0000000000013B2C E8 07 40 F9                   LDR             X8, [SP,#0x50+var_48]
LOAD:0000000000013B30 E0 03 15 AA                   MOV             X0, X21
LOAD:0000000000013B34 E1 03 14 AA                   MOV             X1, X20
LOAD:0000000000013B38 00 01 3F D6                   BLR             X8
LOAD:0000000000013B38
LOAD:0000000000013B3C
LOAD:0000000000013B3C                               loc_13B3C                             

    复制代码回到汇编,blr x8就是v10(vm, reserved);我们要阻止这句执行,直接将CBZ W0, loc_13B3C改成无条件跳转,就绕过了这句话。
    打开010 editer,跳转到代码地址13B28,光标会自动定位原机器码A0 00 00 34,修改为05 00 00 14,对应指令B loc_13B3C实现无条件跳转

    修改后保存,替换原so,打包签名,注入frida验证,成功绕过

    暂无评论

    发送评论 编辑评论

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