zhanghaigang666 发表于 2025-12-7 14:50

hook RegisterNatives到假的native实现函数?

遇到个问题,我用frida hook RegisterNatives找对应native实现方法地址,找到了,但是感觉这个地址是假的,接受到的参数不对劲,打印不了发送的两个字符串,逆向的这个是一个游戏的mod插件,java层搞的UI给so层发消息,这个mod插件有hook能力,用的libshadowhook.so,进行不下去了,求帮助
fnPtr='0x72855cc9a8 libmod.so!0x1839a8' method='public static native java.lang.String com.plugin_mod.message.send(java.lang.String,java.lang.String)'

后面怎么进行,求思路,这个so还是混淆过的应该
// local variable allocation has failed, the output may be wrong!
ssize_t sub_1839A8(int a1, const void *a2, size_t a3, int a4)
{
__int64 v5; // x19
int v6; // w9
int v7; // w8
int k; // w8
__int64 v9; // x0
int v10; // w8
bool v11; // zf
_BOOL4 v12; // w8
int v13; // w10
int i; // w8
_BOOL4 v15; // w8
_BOOL4 v16; // w8
int m; // w8
_BOOL4 v18; // w8
int j; // w8
_BOOL4 v20; // w8
_BOOL4 v21; // w8
__int64 v23; //
bool v24; //
bool v25; //
char *s1; //
int v27; //
bool v28; //
bool v29; //
bool v30; //
bool v31; //
bool v32; //
bool v33; //
bool v34; //
bool v35; //
bool v36; //
const char *v37; //

v23 = *&a4;
v24 = ((((x_101 - 1) * x_101) ^ 0xFFFFFFFE) & ((x_101 - 1) * x_101)) == 0;
v25 = y_102 < 10;
v5 = *&a1;
v6 = 1571333055;
while ( 1 )
{
    while ( 1 )
    {
      while ( 1 )
      {
      while ( 1 )
      {
          v7 = v6;
          if ( v6 <= 827620742 )
            break;
          if ( v6 <= 1571333054 )
          {
            v6 = -1494488739;
            if ( v7 != 827620743 )
            {
            v6 = v7;
            if ( v7 == 1427777092 )
            {
                byte_228940 = v27 != 0;
                v6 = -1732137972;
            }
            }
          }
          else if ( v6 == 2096439659 )
          {
            byte_228944 = v27 != 0;
            v6 = 2031294483;
          }
          else if ( v6 == 2031294483 )
          {
            byte_228944 = v27 != 0;
            if ( (y_102 < 10) ^ ((((x_101 - 1) * x_101) & 1) == 0) | !((y_102 > 9) | ((x_101 - 1) * x_101) & 1) )
            v6 = 827620743;
            else
            v6 = 2096439659;
          }
          else if ( (v24 ^ v25) & 1 | (v24 && v25) )
          {
            v6 = -528760743;
          }
          else
          {
            v6 = 81433655;
          }
      }
      if ( v6 <= -528760744 )
          break;
      if ( v6 == -528760743 )
      {
          v30 = (((x_103 - 1) * x_103) & 1) == 0;
          v34 = y_104 < 10;
          for ( i = 951118017; ; i = 598058311 )
          {
            while ( i <= 1844820888 )
            {
            if ( i == 598058311 )
            {
                v37 = (*(*v5 + 1352LL))(v5, a3, 0);
                v15 = ((((x_103 - 1) * x_103) ^ 0xFFFFFFFE) & ((x_103 - 1) * x_103)) == 0;
                if ( (y_104 < 10 && v15) | (y_104 < 10) ^ v15 )
                  i = 1844820889;
                else
                  i = 2021235784;
            }
            else if ( (((v30 && v34) | v30 ^ v34) & 1) != 0 )
            {
                i = 598058311;
            }
            else
            {
                i = 2021235784;
            }
            }
            if ( i == 1844820889 )
            break;
            (*(*v5 + 1352LL))(v5, a3, 0);
          }
          s1 = v37;
          v32 = (((x_103 - 1) * x_103) & 1) == 0;
          v36 = y_104 < 10;
          for ( j = 951118017; ; j = 598058311 )
          {
            while ( j <= 1844820888 )
            {
            if ( j == 598058311 )
            {
                v37 = (*(*v5 + 1352LL))(v5, v23, 0);
                v20 = (((x_103 - 1) * x_103) & 1) == 0;
                if ( (y_104 < 10 && v20) | (y_104 < 10) ^ v20 )
                  j = 1844820889;
                else
                  j = 2021235784;
            }
            else if ( (!v32 ^ !v36) & 1 | (v32 && v36) )
            {
                j = 598058311;
            }
            else
            {
                j = 2021235784;
            }
            }
            if ( j == 1844820889 )
            break;
            (*(*v5 + 1352LL))(v5, v23, 0);
          }
          v27 = atoi(v37);
          v28 = strcmp(s1, aL) == 0;
          v21 = (((x_101 - 1) * x_101) & 1) == 0;
          if ( (y_102 < 10 && v21) | (y_102 < 10) ^ v21 )
            v6 = -886218259;
          else
            v6 = 81433655;
      }
      else if ( v6 == -396896598 )
      {
          v16 = ((((x_101 - 1) * x_101) ^ 0xFFFFFFFE) & ((x_101 - 1) * x_101)) == 0;
          if ( (y_102 < 10 && v16) | (y_102 < 10) ^ v16 )
            v6 = 2031294483;
          else
            v6 = 2096439659;
      }
      else
      {
          v29 = ((((x_103 - 1) * x_103) ^ 0xFFFFFFFE) & ((x_103 - 1) * x_103)) == 0;
          v33 = y_104 < 10;
          for ( k = 951118017; ; k = 598058311 )
          {
            while ( k <= 1844820888 )
            {
            if ( k == 598058311 )
            {
                v9 = (*(*v5 + 1352LL))(v5, a3, 0);
                v10 = (x_103 - 1) * x_103;
                v11 = ((v10 ^ 0xFFFFFFFE) & v10) == 0;
                v12 = ((v10 ^ 0xFFFFFFFE) & v10) != 0;
                v13 = v11;
                v37 = v9;
                if ( (y_104 < 10) ^ v13 | (y_104 <= 9 && !v12) )
                  k = 1844820889;
                else
                  k = 2021235784;
            }
            else if ( (((v29 && v33) | v29 ^ v33) & 1) != 0 )
            {
                k = 598058311;
            }
            else
            {
                k = 2021235784;
            }
            }
            if ( k == 1844820889 )
            break;
            (*(*v5 + 1352LL))(v5, a3, 0);
          }
          v31 = (((x_103 - 1) * x_103) & 1) == 0;
          v35 = y_104 < 10;
          for ( m = 951118017; ; m = 598058311 )
          {
            while ( m <= 1844820888 )
            {
            if ( m == 598058311 )
            {
                v37 = (*(*v5 + 1352LL))(v5, v23, 0);
                v18 = (((x_103 - 1) * x_103) & 1) == 0;
                if ( (y_104 < 10 && v18) | (y_104 < 10) ^ v18 )
                  m = 1844820889;
                else
                  m = 2021235784;
            }
            else if ( (((v31 && v35) | v31 ^ v35) & 1) != 0 )
            {
                m = 598058311;
            }
            else
            {
                m = 2021235784;
            }
            }
            if ( m == 1844820889 )
            break;
            (*(*v5 + 1352LL))(v5, v23, 0);
          }
          v6 = -528760743;
      }
      }
      if ( v6 != -1732137972 )
      break;
      if ( !strcmp(s1, &qword_21A4B8) )
      v6 = -396896598;
      else
      v6 = -1494488739;
    }
    if ( v6 != -886218259 )
      break;
    if ( v28 )
      v6 = 1427777092;
    else
      v6 = -1732137972;
}
return (*(*v5 + 1336LL))(v5, &byte_21A4C0);
}
页: [1]
查看完整版本: hook RegisterNatives到假的native实现函数?