首页
社区
课程
招聘
[求助]Frida Native Hook到方法后可以调用该方法吗?
发表于: 2019-6-11 13:23 10556

[求助]Frida Native Hook到方法后可以调用该方法吗?

2019-6-11 13:23
10556

我在尝试破解一个软件的验证,我用ida找到了它的方法,方法中有一个base64加密过的字符串,并且在方法中有调用过它自己写的解密方法,那base64字符串我尝试过在解密网站解密但是解密出来的内容不正常,我就想能不能直接通过hook调用它那个解密方法,就像hook java方法那样,原谅我没去官网找就直接来问(我知道不对),因为我英语很烂,用谷歌翻译翻译出的看着很怪;我把整个方法都贴上来吧,其中有注释是我自己写的
int __fastcall getAuthString(int a1, int a2, int *a3, int a4)
{
  int v4; // r9
  int *v5; // r8
  _DWORD *v6; // r10
  int v7; // r11
  const char *v8; // r0
  int v9; // r5
  int v10; // r0
  unsigned int v11; // r2
  unsigned int v12; // r1
  char *v13; // r1
  int *v14; // r2
  unsigned int v15; // r0
  int v16; // r0
  int v17; // r4
  const char *v19; // r6
  unsigned int v20; // r3
  int v21; // r2
  char *v22; // r1
  char *i; // r2
  char v24; // r3
  unsigned int v25; // r0
  const char *v26; // r0
  int v27; // r6
  int v28; // r0
  const char *v29; // r0
  unsigned int v30; // r6
  int v31; // r3
  char *v32; // r2
  char *j; // r0
  char v34; // r3
  size_t v35; // r0
  int v36; // r0
  const char *v37; // r6
  unsigned int v38; // r0
  const char *v39; // r10
  time_t v40; // r6
  int v41; // r0
  int v42; // r0
  int v43; // r10
  int v44; // r1
  _BYTE *v45; // r1
  int v46; // r2
  char *v47; // r1
  int v48; // r2
  const char *v49; // r6
  unsigned int v50; // r0
  const char *v51; // r0
  int v52; // r6
  int v53; // r0
  int v54; // r1
  char *v55; // r1
  _DWORD *v56; // [sp+4h] [bp-134h]
  int v57; // [sp+Ch] [bp-12Ch]
  int v58; // [sp+10h] [bp-128h]
  int v59; // [sp+14h] [bp-124h]
  int v60; // [sp+18h] [bp-120h]
  char v61; // [sp+1Ch] [bp-11Ch]
  int v62; // [sp+28h] [bp-110h]
  int v63; // [sp+2Ch] [bp-10Ch]
  const char *v64; // [sp+30h] [bp-108h]
  int v65; // [sp+38h] [bp-100h]
  int v66; // [sp+3Ch] [bp-FCh]
  int v67; // [sp+40h] [bp-F8h]
  unsigned __int8 v68; // [sp+48h] [bp-F0h]
  _BYTE v69[3]; // [sp+49h] [bp-EFh]
  __int64 v70; // [sp+4Ch] [bp-ECh]
  unsigned __int8 v71; // [sp+54h] [bp-E4h]
  const char *v72; // [sp+5Ch] [bp-DCh]
  int v73; // [sp+60h] [bp-D8h]
  unsigned int v74; // [sp+64h] [bp-D4h]
  const char *v75; // [sp+68h] [bp-D0h]
  int v76; // [sp+70h] [bp-C8h]
  unsigned int v77; // [sp+74h] [bp-C4h]
  const char *v78; // [sp+78h] [bp-C0h]
  int v79; // [sp+80h] [bp-B8h]
  unsigned int v80; // [sp+84h] [bp-B4h]
  char *v81; // [sp+88h] [bp-B0h]
  char v82[4]; // [sp+90h] [bp-A8h]
  int v83; // [sp+94h] [bp-A4h]
  char *v84; // [sp+98h] [bp-A0h]
  char v85; // [sp+103h] [bp-35h]
  char s; // [sp+10Dh] [bp-2Bh]
  int v87; // [sp+118h] [bp-20h]

  v57 = a4;
  v4 = a1;
  v5 = a3;
  v6 = &_stack_chk_guard;
  v7 = getPackageName(a1, a3);                  // 获取应用包名
  v8 = (const char *)(*(int (__fastcall **)(int))(*(_DWORD *)v4 + 676))(v4);
  v81 = 0;
  v9 = (int)v8;
  v79 = 0;
  v80 = 0;
  v10 = strlen(v8);
  std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(
    (int)&v79,
    v9,
    v10);
  v11 = v80;
  v12 = dword_7C0B4;
  if ( !(v79 & 1) )
    v11 = (unsigned int)(unsigned __int8)v79 >> 1;
  if ( !(byte_7C0B0 & 1) )
    v12 = (unsigned int)(unsigned __int8)byte_7C0B0 >> 1;
  if ( v11 != v12 )
    goto LABEL_15;
  v13 = (char *)dword_7C0B8;
  if ( !(byte_7C0B0 & 1) )
    v13 = &byte_7C0B1;
  if ( v79 & 1 )
  {
    if ( !std::__ndk1::char_traits<char>::compare(v81, v13) )// 验证包名
      goto LABEL_19;
LABEL_15:
    v16 = (*(int (__fastcall **)(int, const char *))(*(_DWORD *)v4 + 668))(v4, "wrong package name");
    goto LABEL_16;
  }
  v14 = &v79;
  v15 = -((unsigned int)(unsigned __int8)v79 >> 1);
  while ( 1 )
  {
    v14 = (int *)((char *)v14 + 1);
    if ( !v15 )
      break;
    if ( *(unsigned __int8 *)v14 != (unsigned __int8)*v13 )
      goto LABEL_15;
    ++v15;
    ++v13;
  }
  do
  {
LABEL_19:
    if ( checkSignature(v4, (int)v5, v7) )      // 验证签名
    {
      v56 = v6;
      v78 = 0;
      v76 = 0;
      v77 = 0;
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(
        (int)&v76,
        (int)"ldTM3cTZiFTMhFzMlFWN2cjMjVDNzQWYxYTOwU2MwIDZHljcadFN2wUe5omYyATdZJTO2J2RGdXY5VDdZhlSypFWRZXW6l1MadVWx8EVRpn"
             "T6dGMaRUQ14keVdnWH5UbZ1WS61EVBlXTHl1dZdVSvcDZzI2YmVWMjF2NwAjZkN2YmVTY4UTO1YWO4Y2NwQGO",
        192);
      v19 = v78;
      v20 = v77;
      v21 = v76 & 1;
      if ( !(v76 & 1) )
        v20 = (unsigned int)(unsigned __int8)v76 >> 1;
      v22 = (char *)v78;
      if ( !(v76 & 1) )
        v22 = (char *)&v76 + 1;
      if ( v20 )
      {
        for ( i = &v22[v20 - 1]; v22 < i; --i )
        {
          v24 = *v22;
          *v22++ = *i;
          *i = v24;
        }
        v19 = v78;
        v21 = v76 & 1;
      }
      if ( !v21 )
        v19 = (char *)&v76 + 1;
      v25 = strlen(v19);                        // v19 字符串长度
      v26 = (const char *)b64_decode(v19, v25); // 将v19的字符串进行base64解密
      v27 = (int)v26;
      v75 = 0;
      v73 = 0;
      v74 = 0;
      v28 = strlen(v26);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(
        (int)&v73,
        v27,
        v28);
      v29 = v75;
      v30 = v74;
      v31 = v73 & 1;
      if ( !(v73 & 1) )
        v30 = (unsigned int)(unsigned __int8)v73 >> 1;
      v32 = (char *)v75;
      if ( !(v73 & 1) )
        v32 = (char *)&v73 + 1;
      if ( v30 )
      {
        for ( j = &v32[v30 - 1]; v32 < j; --j )
        {
          v34 = *v32;
          *v32++ = *j;
          *j = v34;
        }
        v29 = v75;
        v31 = v73 & 1;
      }
      if ( !v31 )
        v29 = (char *)&v73 + 1;
      v35 = strlen(v29);
      v36 = std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::basic_string(
              &v71,
              &v73,
              32,
              v35 - 64,
              &v73);
      v37 = v72;
      if ( !(v71 << 31) )
        v37 = (const char *)(v36 + 1);
      v38 = strlen(v37);
      v39 = (const char *)b64_decode(v37, v38);
      v40 = time(0);                            // 获取当前时间
      sprintf(&s, "%d", v40);                   // 将当前时间给 s
      sprintf(&v85, "%x", v40);                 // 将当前时间以十六进制形式给 v85
      _android_log_print(3, (int)"NATIVE-LIB", "time %s", &s);
      _android_log_print(3, (int)"NATIVE-LIB", "time %s", &v85);
      v67 = 0;
      v65 = 0;
      v66 = 0;
      v41 = strlen(&s);                         // 获取 时间变量s 的长度
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(
        (int)&v65,
        (int)&s,
        v41);                                   // 应该是根据字符串长度重新负值给变量 v65
      MD5::MD5((MD5 *)v82, (unsigned __int8 *)&v65);// md5 加密
      MD5::hexdigest((MD5 *)&v68, v82);         // 将加密结果转为十六进制格式
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v65);
      v67 = 0;
      v65 = 0;
      v66 = 0;
      v42 = strlen(v39);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(
        (int)&v65,
        (int)v39,
        v42);
      v43 = (*(int (__fastcall **)(int, int, _DWORD))(*(_DWORD *)v4 + 676))(v4, v57, 0);
      v44 = 0;
      v64 = 0;
      v62 = 0;
      v63 = 0;
      while ( v44 != 3 )
        *(&v62 + v44++) = 0;
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::operator=(
        (int)&v62,
        (int)&v65);
      v45 = (_BYTE *)HIDWORD(v70);
      v46 = v70;
      if ( !(v68 & 1) )
      {
        v45 = v69;
        v46 = (unsigned int)v68 >> 1;
      }
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)&v62,
        (int)v45,
        v46,
        v68 & 1);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)&v62,
        (int)"$");
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)&v62,
        v43);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)&v62,
        (int)"&");
      v47 = v81;
      v48 = v80;
      if ( !(v79 & 1) )
      {
        v47 = (char *)&v79 + 1;
        v48 = (unsigned int)(unsigned __int8)v79 >> 1;
      }
      v5 = &v62;
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)&v62,
        (int)v47,
        v48,
        (int)&v79);
      v49 = v64;
      if ( !((unsigned __int8)v62 << 31) )
        v49 = (char *)&v62 + 1;
      v50 = strlen(v49);
      v51 = (const char *)b64_encode((const unsigned __int8 *)v49, v50);
      v52 = (int)v51;
      v60 = 0;
      v58 = 0;
      v59 = 0;
      v53 = strlen(v51);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(
        (int)&v58,
        v52,
        v53);
      MD5::MD5((MD5 *)v82, (unsigned __int8 *)&v58);
      MD5::hexdigest((MD5 *)&v61, v82);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v58);
      v54 = 0;
      v84 = 0;
      *(_DWORD *)v82 = 0;
      v83 = 0;
      while ( v54 != 3 )
        *(_DWORD *)&v82[4 * v54++] = 0;
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::operator=(
        (int)v82,
        (int)&v61);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append((int)v82, v43);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)v82,
        (int)"0x");
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(
        (int)v82,
        (int)&v85);
      (*(void (__fastcall **)(int, int, int))(*(_DWORD *)v4 + 680))(v4, v7, v9);
      (*(void (__fastcall **)(int, int, int))(*(_DWORD *)v4 + 680))(v4, v57, v43);
      v55 = v84;
      if ( !((unsigned __int8)v82[0] << 31) )
        v55 = &v82[1];
      v17 = (*(int (__fastcall **)(int, char *))(*(_DWORD *)v4 + 668))(v4, v55);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(v82);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v61);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v62);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v65);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v68);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v71);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v73);
      std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v76);
      v6 = v56;
    }
    else
    {
      v16 = (*(int (__fastcall **)(int, const char *))(*(_DWORD *)v4 + 668))(v4, "wrong signature");
LABEL_16:
      v17 = v16;
    }
    std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string(&v79);
  }
  while ( *v6 != v87 );
  return v17;
}

下面是汇编
; ===========================================================================
.solo:00066500
.solo:00066500 ; Segment type: Pure code
.solo:00066500                 AREA .solo, CODE
.solo:00066500                 ; ORG 0x66500
.solo:00066500                 CODE16
.solo:00066500
.solo:00066500 ; =============== S U B R O U T I N E =======================================
.solo:00066500
.solo:00066500 ; Attributes: bp-based frame
.solo:00066500
.solo:00066500                 EXPORT getAuthString
.solo:00066500 getAuthString                           ; CODE XREF: j_getAuthString+8↑j
.solo:00066500                                         ; DATA XREF: LOAD:00000490↑o ...
.solo:00066500
.solo:00066500 var_138         = -0x138
.solo:00066500 var_134         = -0x134
.solo:00066500 var_130         = -0x130
.solo:00066500 var_12C         = -0x12C
.solo:00066500 var_128         = -0x128
.solo:00066500 anonymous_3     = -0x124
.solo:00066500 var_120         = -0x120
.solo:00066500 var_11C         = -0x11C
.solo:00066500 var_110         = -0x110
.solo:00066500 anonymous_1     = -0x10C
.solo:00066500 var_108         = -0x108
.solo:00066500 var_100         = -0x100
.solo:00066500 anonymous_0     = -0xFC
.solo:00066500 var_F8          = -0xF8
.solo:00066500 var_F0          = -0xF0
.solo:00066500 anonymous_2     = -0xEC
.solo:00066500 var_E4          = -0xE4
.solo:00066500 var_DC          = -0xDC
.solo:00066500 var_D8          = -0xD8
.solo:00066500 var_D4          = -0xD4
.solo:00066500 var_D0          = -0xD0
.solo:00066500 var_C8          = -0xC8
.solo:00066500 var_C4          = -0xC4
.solo:00066500 var_C0          = -0xC0
.solo:00066500 var_B8          = -0xB8
.solo:00066500 var_B4          = -0xB4
.solo:00066500 var_B0          = -0xB0
.solo:00066500 var_A8          = -0xA8
.solo:00066500 anonymous_4     = -0xA4
.solo:00066500 var_A0          = -0xA0
.solo:00066500 var_35          = -0x35
.solo:00066500 s               = -0x2B
.solo:00066500 var_20          = -0x20
.solo:00066500
.solo:00066500 ; __unwind { // j___gxx_personality_v0
.solo:00066500                 PUSH            {R4-R7,LR}
.solo:00066502                 ADD             R7, SP, #0xC
.solo:00066504                 PUSH.W          {R8-R11}
.solo:00066508                 SUB             SP, SP, #0x11C
.solo:0006650A                 STR             R3, [SP,#0x138+var_12C]
.solo:0006650C                 MOV             R9, R0
.solo:0006650E                 LDR             R0, =(__stack_chk_guard_ptr - 0x66518)
.solo:00066510                 MOV             R1, R2
.solo:00066512                 MOV             R8, R2
.solo:00066514                 ADD             R0, PC  ; __stack_chk_guard_ptr
.solo:00066516                 LDR.W           R10, [R0] ; __stack_chk_guard
.solo:0006651A                 LDR.W           R0, [R10]
.solo:0006651E                 STR             R0, [SP,#0x138+var_20]
.solo:00066520                 MOV             R0, R9
.solo:00066522                 BLX             j__Z14getPackageNameP7_JNIEnvP8_jobject ; getPackageName(_JNIEnv *,_jobject *)
.solo:00066526                 MOV             R1, R0
.solo:00066528                 LDR.W           R0, [R9]
.solo:0006652C                 MOVS            R2, #0
.solo:0006652E                 MOVS            R4, #0
.solo:00066530                 MOV             R11, R1
.solo:00066532                 LDR.W           R3, [R0,#0x2A4]
.solo:00066536                 MOV             R0, R9
.solo:00066538                 BLX             R3
.solo:0006653A                 STR             R4, [SP,#0x138+var_B0]
.solo:0006653C                 MOV             R5, R0
.solo:0006653E                 STRD.W          R4, R4, [SP,#0x80]
.solo:00066542                 BLX             strlen
.solo:00066546                 MOV             R2, R0
.solo:00066548                 ADD             R0, SP, #0x138+var_B8
.solo:0006654A                 MOV             R1, R5
.solo:0006654C                 STR             R5, [SP,#0x138+var_130]
.solo:0006654E                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(char const*,uint)
.solo:00066552                 LDR             R3, =(byte_7C0B0 - 0x6655C)
.solo:00066554                 LDRB.W          R0, [SP,#0x138+var_B8]
.solo:00066558                 ADD             R3, PC  ; byte_7C0B0
.solo:0006655A                 LDR             R2, [SP,#0x138+var_B4]
.solo:0006655C                 ANDS.W          R5, R0, #1
.solo:00066560                 LDRB            R6, [R3]
.solo:00066562                 LDR             R1, [R3,#(dword_7C0B4 - 0x7C0B0)]
.solo:00066564                 IT EQ
.solo:00066566                 LSREQ           R2, R0, #1
.solo:00066568                 ANDS.W          R4, R6, #1
.solo:0006656C                 IT EQ
.solo:0006656E                 LSREQ           R1, R6, #1
.solo:00066570                 CMP             R2, R1
.solo:00066572                 BNE             loc_665A2
.solo:00066574                 LDR             R1, [R3,#(dword_7C0B8 - 0x7C0B0)]
.solo:00066576                 CMP             R4, #0
.solo:00066578                 IT EQ
.solo:0006657A                 ADDEQ           R1, R3, #1
.solo:0006657C                 CBNZ            R5, loc_6659A
.solo:0006657E                 LSRS            R0, R0, #1
.solo:00066580                 ADD             R2, SP, #0x138+var_B8
.solo:00066582                 NEGS            R0, R0
.solo:00066584                 B               loc_66592
.solo:00066586 ; ---------------------------------------------------------------------------
.solo:00066586
.solo:00066586 loc_66586                               ; CODE XREF: getAuthString+96↓j
.solo:00066586                 LDRB            R3, [R1]
.solo:00066588                 LDRB            R6, [R2]
.solo:0006658A                 CMP             R6, R3
.solo:0006658C                 BNE             loc_665A2
.solo:0006658E                 ADDS            R0, #1
.solo:00066590                 ADDS            R1, #1
.solo:00066592
.solo:00066592 loc_66592                               ; CODE XREF: getAuthString+84↑j
.solo:00066592                 ADDS            R2, #1
.solo:00066594                 CMP             R0, #0
.solo:00066596                 BNE             loc_66586
.solo:00066598                 B               loc_665D2
.solo:0006659A ; ---------------------------------------------------------------------------
.solo:0006659A
.solo:0006659A loc_6659A                               ; CODE XREF: getAuthString+7C↑j
.solo:0006659A                 LDR             R0, [SP,#0x138+var_B0]
.solo:0006659C                 BLX             j__ZNSt6__ndk111char_traitsIcE7compareEPKcS3_j ; std::__ndk1::char_traits<char>::compare(char const*,char const*,uint)
.solo:000665A0                 CBZ             R0, loc_665D2
.solo:000665A2
.solo:000665A2 loc_665A2                               ; CODE XREF: getAuthString+72↑j
.solo:000665A2                                         ; getAuthString+8C↑j
.solo:000665A2                 LDR.W           R0, [R9]
.solo:000665A6                 LDR.W           R2, [R0,#0x29C]
.solo:000665AA                 LDR             R1, =(aWrongPackageNa - 0x665B0)
.solo:000665AC                 ADD             R1, PC  ; "wrong package name"
.solo:000665AE                 MOV             R0, R9
.solo:000665B0                 BLX             R2
.solo:000665B2
.solo:000665B2 loc_665B2                               ; CODE XREF: getAuthString+40A↓j
.solo:000665B2                 MOV             R4, R0
.solo:000665B4
.solo:000665B4 loc_665B4                               ; CODE XREF: getAuthString+3F8↓j
.solo:000665B4                 ADD             R0, SP, #0x138+var_B8
.solo:000665B6                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000665BA                 LDR             R0, [SP,#0x138+var_20]
.solo:000665BC                 LDR.W           R1, [R10]
.solo:000665C0                 SUBS            R0, R1, R0
.solo:000665C2                 ITTTT EQ
.solo:000665C4                 MOVEQ           R0, R4
.solo:000665C6                 ADDEQ           SP, SP, #0x11C
.solo:000665C8                 POPEQ.W         {R8-R11}
.solo:000665CC                 POPEQ           {R4-R7,PC}
.solo:000665CE                 BLX             __stack_chk_fail
.solo:000665D2 ; ---------------------------------------------------------------------------
.solo:000665D2
.solo:000665D2 loc_665D2                               ; CODE XREF: getAuthString+98↑j
.solo:000665D2                                         ; getAuthString+A0↑j
.solo:000665D2                 MOV             R0, R9
.solo:000665D4                 MOV             R1, R8
.solo:000665D6                 MOV             R2, R11
.solo:000665D8                 BLX             j__Z14checkSignatureP7_JNIEnvP8_jobjectP8_jstring ; checkSignature(_JNIEnv *,_jobject *,_jstring *)
.solo:000665DC                 CMP             R0, #0
.solo:000665DE                 BEQ.W           loc_668FA
.solo:000665E2                 STR.W           R10, [SP,#0x138+var_134]
.solo:000665E6                 MOVS            R0, #0
.solo:000665E8                 LDR             R1, =(aLdtm3ctziftmhf - 0x665F0)
.solo:000665EA                 STR             R0, [SP,#0x138+var_C0]
.solo:000665EC                 ADD             R1, PC  ; "ldTM3cTZiFTMhFzMlFWN2cjMjVDNzQWYxYTOwU2"...
.solo:000665EE                 STRD.W          R0, R0, [SP,#0x70]
.solo:000665F2                 ADD.W           R10, SP, #0x138+var_C8
.solo:000665F6                 MOVS            R2, #0xC0
.solo:000665F8                 MOV             R0, R10
.solo:000665FA                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(char const*,uint)
.solo:000665FE                 LDRB.W          R0, [SP,#0x138+var_C8]
.solo:00066602                 LDR             R6, [SP,#0x138+var_C0]
.solo:00066604                 LDR             R3, [SP,#0x138+var_C4]
.solo:00066606                 ANDS.W          R2, R0, #1
.solo:0006660A                 IT EQ
.solo:0006660C                 LSREQ           R3, R0, #1
.solo:0006660E                 ADD.W           R0, R10, #1
.solo:00066612                 MOV             R1, R6
.solo:00066614                 IT EQ
.solo:00066616                 MOVEQ           R1, R0
.solo:00066618                 CBZ             R3, loc_6663A
.solo:0006661A                 ADDS            R2, R1, R3
.solo:0006661C                 SUBS            R2, #1
.solo:0006661E                 B               loc_6662C
.solo:00066620 ; ---------------------------------------------------------------------------
.solo:00066620
.solo:00066620 loc_66620                               ; CODE XREF: getAuthString+12E↓j
.solo:00066620                 LDRB            R3, [R1]
.solo:00066622                 LDRB            R6, [R2]
.solo:00066624                 STRB.W          R6, [R1],#1
.solo:00066628                 STRB.W          R3, [R2],#-1
.solo:0006662C
.solo:0006662C loc_6662C                               ; CODE XREF: getAuthString+11E↑j
.solo:0006662C                 CMP             R1, R2
.solo:0006662E                 BCC             loc_66620
.solo:00066630                 LDRB.W          R1, [SP,#0x138+var_C8]
.solo:00066634                 LDR             R6, [SP,#0x138+var_C0]
.solo:00066636                 AND.W           R2, R1, #1
.solo:0006663A
.solo:0006663A loc_6663A                               ; CODE XREF: getAuthString+118↑j
.solo:0006663A                 CMP             R2, #0
.solo:0006663C                 IT EQ
.solo:0006663E                 MOVEQ           R6, R0
.solo:00066640                 MOV             R0, R6  ; s
.solo:00066642                 BLX             strlen
.solo:00066646                 MOV             R1, R0  ; unsigned int
.solo:00066648                 MOV             R0, R6  ; char *
.solo:0006664A                 BLX             j__Z10b64_decodePKcj ; b64_decode(char const*,uint)
.solo:0006664E                 MOV             R6, R0
.solo:00066650                 MOVS            R0, #0
.solo:00066652                 STR             R0, [SP,#0x138+var_D0]
.solo:00066654                 STRD.W          R0, R0, [SP,#0x60]
.solo:00066658                 MOV             R0, R6  ; s
.solo:0006665A                 BLX             strlen
.solo:0006665E                 MOV             R2, R0
.solo:00066660                 ADD.W           R10, SP, #0x138+var_D8
.solo:00066664                 MOV             R1, R6
.solo:00066666                 MOV             R0, R10
.solo:00066668                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(char const*,uint)
.solo:0006666C                 LDRB.W          R1, [SP,#0x138+var_D8]
.solo:00066670                 LDR             R0, [SP,#0x138+var_D0]
.solo:00066672                 LDR             R6, [SP,#0x138+var_D4]
.solo:00066674                 ANDS.W          R3, R1, #1
.solo:00066678                 IT EQ
.solo:0006667A                 LSREQ           R6, R1, #1
.solo:0006667C                 ADD.W           R1, R10, #1
.solo:00066680                 MOV             R2, R0
.solo:00066682                 IT EQ
.solo:00066684                 MOVEQ           R2, R1
.solo:00066686                 CBZ             R6, loc_666A8
.solo:00066688                 ADDS            R0, R2, R6
.solo:0006668A                 SUBS            R0, #1
.solo:0006668C                 B               loc_6669A
.solo:0006668E ; ---------------------------------------------------------------------------
.solo:0006668E
.solo:0006668E loc_6668E                               ; CODE XREF: getAuthString+19C↓j
.solo:0006668E                 LDRB            R3, [R2]
.solo:00066690                 LDRB            R6, [R0]
.solo:00066692                 STRB.W          R6, [R2],#1
.solo:00066696                 STRB.W          R3, [R0],#-1
.solo:0006669A
.solo:0006669A loc_6669A                               ; CODE XREF: getAuthString+18C↑j
.solo:0006669A                 CMP             R2, R0
.solo:0006669C                 BCC             loc_6668E
.solo:0006669E                 LDRB.W          R2, [SP,#0x138+var_D8]
.solo:000666A2                 LDR             R0, [SP,#0x138+var_D0]
.solo:000666A4                 AND.W           R3, R2, #1
.solo:000666A8
.solo:000666A8 loc_666A8                               ; CODE XREF: getAuthString+186↑j
.solo:000666A8                 CMP             R3, #0
.solo:000666AA                 IT EQ
.solo:000666AC                 MOVEQ           R0, R1  ; s
.solo:000666AE                 BLX             strlen
.solo:000666B2                 SUB.W           R3, R0, #0x40
.solo:000666B6                 ADD             R0, SP, #0x138+var_E4
.solo:000666B8                 MOV             R1, R10
.solo:000666BA                 MOVS            R2, #0x20 ; ' '
.solo:000666BC                 STR.W           R10, [SP,#0x138+var_138]
.solo:000666C0                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_jjRKS4_ ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::basic_string(std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>> const&,uint,uint,std::__ndk1::allocator<char> const&)
.solo:000666C4                 LDRB.W          R1, [SP,#0x138+var_E4]
.solo:000666C8                 LDR             R6, [SP,#0x138+var_DC]
.solo:000666CA                 LSLS            R1, R1, #0x1F
.solo:000666CC                 IT EQ
.solo:000666CE                 ADDEQ           R6, R0, #1
.solo:000666D0                 MOV             R0, R6  ; s
.solo:000666D2                 BLX             strlen
.solo:000666D6                 MOV             R1, R0  ; unsigned int
.solo:000666D8                 MOV             R0, R6  ; char *
.solo:000666DA                 BLX             j__Z10b64_decodePKcj ; b64_decode(char const*,uint)
.solo:000666DE                 MOV             R10, R0
.solo:000666E0                 MOVS            R0, #0  ; timer
.solo:000666E2                 BLX             time
.solo:000666E6                 LDR             R1, =(aD - 0x666F2)
.solo:000666E8                 SUB.W           R8, R7, #-s
.solo:000666EC                 MOV             R6, R0
.solo:000666EE                 ADD             R1, PC  ; "%d"
.solo:000666F0                 MOV             R0, R8  ; s
.solo:000666F2                 MOV             R2, R6
.solo:000666F4                 BLX             sprintf
.solo:000666F8                 LDR             R1, =(aX - 0x66704)
.solo:000666FA                 SUB.W           R0, R7, #-var_35 ; s
.solo:000666FE                 MOV             R2, R6
.solo:00066700                 ADD             R1, PC  ; "%x"
.solo:00066702                 BLX             sprintf
.solo:00066706                 LDR             R1, =(aNativeLib - 0x6670E)
.solo:00066708                 LDR             R2, =(aTimeS - 0x66710)
.solo:0006670A                 ADD             R1, PC  ; "NATIVE-LIB"
.solo:0006670C                 ADD             R2, PC  ; "time %s"
.solo:0006670E                 MOVS            R0, #3
.solo:00066710                 MOV             R3, R8
.solo:00066712                 BLX             __android_log_print
.solo:00066716                 LDR             R1, =(aNativeLib - 0x6671E)
.solo:00066718                 LDR             R2, =(aTimeS - 0x66720)
.solo:0006671A                 ADD             R1, PC  ; "NATIVE-LIB"
.solo:0006671C                 ADD             R2, PC  ; "time %s"
.solo:0006671E                 SUB.W           R3, R7, #-var_35
.solo:00066722                 MOVS            R0, #3
.solo:00066724                 BLX             __android_log_print
.solo:00066728                 SUB.W           R6, R7, #-s
.solo:0006672C                 MOVS            R0, #0
.solo:0006672E                 STR             R0, [SP,#0x138+var_F8]
.solo:00066730                 STRD.W          R0, R0, [SP,#0x38]
.solo:00066734                 MOV             R0, R6  ; s
.solo:00066736                 BLX             strlen
.solo:0006673A                 MOV             R2, R0
.solo:0006673C                 ADD             R0, SP, #0x138+var_100
.solo:0006673E                 MOV             R1, R6
.solo:00066740                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(char const*,uint)
.solo:00066744                 ADD             R0, SP, #0x138+var_A8 ; this
.solo:00066746                 ADD             R1, SP, #0x138+var_100
.solo:00066748                 BLX             j__ZN3MD5C2ERKNSt6__ndk112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE ; MD5::MD5(std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>> const&)
.solo:0006674C                 ADD.W           R8, SP, #0x138+var_F0
.solo:00066750                 ADD             R1, SP, #0x138+var_A8
.solo:00066752                 MOV             R0, R8  ; this
.solo:00066754                 BLX             j__ZNK3MD59hexdigestEv ; MD5::hexdigest(void)
.solo:00066758                 ADD             R0, SP, #0x138+var_100
.solo:0006675A                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:0006675E                 MOVS            R0, #0
.solo:00066760                 STR             R0, [SP,#0x138+var_F8]
.solo:00066762                 STRD.W          R0, R0, [SP,#0x38]
.solo:00066766                 MOV             R0, R10 ; s
.solo:00066768                 BLX             strlen
.solo:0006676C                 MOV             R2, R0
.solo:0006676E                 ADD             R0, SP, #0x138+var_100
.solo:00066770                 MOV             R1, R10
.solo:00066772                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(char const*,uint)
.solo:00066776                 LDR.W           R0, [R9]
.solo:0006677A                 LDR.W           R3, [R0,#0x2A4]
.solo:0006677E                 LDR             R1, [SP,#0x138+var_12C]
.solo:00066780                 MOV             R0, R9
.solo:00066782                 MOVS            R2, #0
.solo:00066784                 MOVS            R6, #0
.solo:00066786                 BLX             R3
.solo:00066788                 MOV             R10, R0
.solo:0006678A                 ADD             R0, SP, #0x138+var_110
.solo:0006678C                 MOVS            R1, #0
.solo:0006678E                 STR             R6, [SP,#0x138+var_108]
.solo:00066790                 STRD.W          R6, R6, [SP,#0x28]
.solo:00066794                 B               loc_6679C
.solo:00066796 ; ---------------------------------------------------------------------------
.solo:00066796
.solo:00066796 loc_66796                               ; CODE XREF: getAuthString+29E↓j
.solo:00066796                 STR.W           R6, [R0,R1,LSL#2]
.solo:0006679A                 ADDS            R1, #1
.solo:0006679C
.solo:0006679C loc_6679C                               ; CODE XREF: getAuthString+294↑j
.solo:0006679C                 CMP             R1, #3
.solo:0006679E                 BNE             loc_66796
.solo:000667A0                 ADD             R0, SP, #0x138+var_110
.solo:000667A2                 ADD             R1, SP, #0x138+var_100
.solo:000667A4                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_ ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::operator=(std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>> const&)
.solo:000667A8                 LDRD.W          R2, R1, [SP,#0x4C]
.solo:000667AC                 LDRB.W          R0, [SP,#0x138+var_F0]
.solo:000667B0                 ANDS.W          R3, R0, #1
.solo:000667B4                 ITT EQ
.solo:000667B6                 ADDEQ.W         R1, R8, #1
.solo:000667BA                 LSREQ           R2, R0, #1
.solo:000667BC                 ADD             R0, SP, #0x138+var_110
.solo:000667BE                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*,uint)
.solo:000667C2                 LDR             R1, =(asc_71EEA - 0x667C8)
.solo:000667C4                 ADD             R1, PC  ; "$"
.solo:000667C6                 ADD             R0, SP, #0x138+var_110
.solo:000667C8                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*)
.solo:000667CC                 ADD             R0, SP, #0x138+var_110
.solo:000667CE                 MOV             R1, R10
.solo:000667D0                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*)
.solo:000667D4                 LDR             R1, =(asc_71EEC - 0x667DA)
.solo:000667D6                 ADD             R1, PC  ; "&"
.solo:000667D8                 ADD             R0, SP, #0x138+var_110
.solo:000667DA                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*)
.solo:000667DE                 LDRD.W          R2, R1, [SP,#0x84]
.solo:000667E2                 LDRB.W          R0, [SP,#0x138+var_B8]
.solo:000667E6                 ANDS.W          R3, R0, #1
.solo:000667EA                 ADD             R3, SP, #0x138+var_B8
.solo:000667EC                 ITT EQ
.solo:000667EE                 ADDEQ           R1, R3, #1
.solo:000667F0                 LSREQ           R2, R0, #1
.solo:000667F2                 ADD.W           R8, SP, #0x138+var_110
.solo:000667F6                 MOV             R0, R8
.solo:000667F8                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*,uint)
.solo:000667FC                 LDRB.W          R0, [SP,#0x138+var_110]
.solo:00066800                 LDR             R6, [SP,#0x138+var_108]
.solo:00066802                 LSLS            R0, R0, #0x1F
.solo:00066804                 IT EQ
.solo:00066806                 ADDEQ.W         R6, R8, #1
.solo:0006680A                 MOV             R0, R6  ; s
.solo:0006680C                 BLX             strlen
.solo:00066810                 MOV             R1, R0  ; unsigned int
.solo:00066812                 MOV             R0, R6  ; unsigned __int8 *
.solo:00066814                 BLX             j__Z10b64_encodePKhj ; b64_encode(uchar const*,uint)
.solo:00066818                 MOV             R6, R0
.solo:0006681A                 MOVS            R0, #0
.solo:0006681C                 STR             R0, [SP,#0x138+var_120]
.solo:0006681E                 STRD.W          R0, R0, [SP,#0x10]
.solo:00066822                 MOV             R0, R6  ; s
.solo:00066824                 BLX             strlen
.solo:00066828                 MOV             R2, R0
.solo:0006682A                 ADD             R0, SP, #0x138+var_128
.solo:0006682C                 MOV             R1, R6
.solo:0006682E                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::__init(char const*,uint)
.solo:00066832                 ADD             R0, SP, #0x138+var_A8 ; this
.solo:00066834                 ADD             R1, SP, #0x138+var_128
.solo:00066836                 BLX             j__ZN3MD5C2ERKNSt6__ndk112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE ; MD5::MD5(std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>> const&)
.solo:0006683A                 ADD             R6, SP, #0x138+var_A8
.solo:0006683C                 ADD             R0, SP, #0x138+var_11C ; this
.solo:0006683E                 MOV             R1, R6
.solo:00066840                 BLX             j__ZNK3MD59hexdigestEv ; MD5::hexdigest(void)
.solo:00066844                 ADD             R0, SP, #0x138+var_128
.solo:00066846                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:0006684A                 MOVS            R0, #0
.solo:0006684C                 MOVS            R1, #0
.solo:0006684E                 STR             R0, [SP,#0x138+var_A0]
.solo:00066850                 STRD.W          R0, R0, [SP,#0x90]
.solo:00066854                 B               loc_6686A
.solo:00066854 ; ---------------------------------------------------------------------------
.solo:00066856                 ALIGN 4
.solo:00066858 off_66858       DCD __stack_chk_guard_ptr - 0x66518
.solo:00066858                                         ; DATA XREF: getAuthString+E↑r
.solo:0006685C off_6685C       DCD byte_7C0B0 - 0x6655C
.solo:0006685C                                         ; DATA XREF: getAuthString+52↑r
.solo:00066860 off_66860       DCD aWrongPackageNa - 0x665B0
.solo:00066860                                         ; DATA XREF: getAuthString+AA↑r
.solo:00066860                                         ; "wrong package name"
.solo:00066864 ; ---------------------------------------------------------------------------
.solo:00066864
.solo:00066864 loc_66864                               ; CODE XREF: getAuthString+36C↓j
.solo:00066864                 STR.W           R0, [R6,R1,LSL#2]
.solo:00066868                 ADDS            R1, #1
.solo:0006686A
.solo:0006686A loc_6686A                               ; CODE XREF: getAuthString+354↑j
.solo:0006686A                 CMP             R1, #3
.solo:0006686C                 BNE             loc_66864
.solo:0006686E                 ADD             R0, SP, #0x138+var_A8
.solo:00066870                 ADD             R1, SP, #0x138+var_11C
.solo:00066872                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_ ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::operator=(std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>> const&)
.solo:00066876                 ADD             R0, SP, #0x138+var_A8
.solo:00066878                 MOV             R1, R10
.solo:0006687A                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*)
.solo:0006687E                 LDR             R1, =(a0x - 0x66884)
.solo:00066880                 ADD             R1, PC  ; "0x"
.solo:00066882                 ADD             R0, SP, #0x138+var_A8
.solo:00066884                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*)
.solo:00066888                 ADD             R6, SP, #0x138+var_A8
.solo:0006688A                 SUB.W           R1, R7, #-var_35
.solo:0006688E                 MOV             R0, R6
.solo:00066890                 BLX             j__ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::append(char const*)
.solo:00066894                 LDR.W           R0, [R9]
.solo:00066898                 LDR.W           R3, [R0,#0x2A8]
.solo:0006689C                 LDR             R2, [SP,#0x138+var_130]
.solo:0006689E                 MOV             R0, R9
.solo:000668A0                 MOV             R1, R11
.solo:000668A2                 BLX             R3
.solo:000668A4                 LDR.W           R0, [R9]
.solo:000668A8                 LDR.W           R3, [R0,#0x2A8]
.solo:000668AC                 LDR             R1, [SP,#0x138+var_12C]
.solo:000668AE                 MOV             R0, R9
.solo:000668B0                 MOV             R2, R10
.solo:000668B2                 BLX             R3
.solo:000668B4                 LDR.W           R0, [R9]
.solo:000668B8                 LDRB.W          R2, [SP,#0x138+var_A8]
.solo:000668BC                 LDR             R1, [SP,#0x138+var_A0]
.solo:000668BE                 LDR.W           R3, [R0,#0x29C]
.solo:000668C2                 LSLS            R0, R2, #0x1F
.solo:000668C4                 IT EQ
.solo:000668C6                 ADDEQ           R1, R6, #1
.solo:000668C8                 MOV             R0, R9
.solo:000668CA                 BLX             R3
.solo:000668CC                 MOV             R4, R0
.solo:000668CE                 LDR             R0, =(_ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev_ptr - 0x668D4)
.solo:000668D0                 ADD             R0, PC  ; _ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev_ptr
.solo:000668D2                 LDR             R5, [R0] ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string() ...
.solo:000668D4                 ADD             R0, SP, #0x138+var_A8
.solo:000668D6                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668D8                 ADD             R0, SP, #0x138+var_11C
.solo:000668DA                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668DC                 ADD             R0, SP, #0x138+var_110
.solo:000668DE                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668E0                 ADD             R0, SP, #0x138+var_100
.solo:000668E2                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668E4                 ADD             R0, SP, #0x138+var_F0
.solo:000668E6                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668E8                 ADD             R0, SP, #0x138+var_E4
.solo:000668EA                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668EC                 ADD             R0, SP, #0x138+var_D8
.solo:000668EE                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668F0                 ADD             R0, SP, #0x138+var_C8
.solo:000668F2                 BLX             R5      ; std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::~basic_string()
.solo:000668F4                 LDR.W           R10, [SP,#0x138+var_134]
.solo:000668F8                 B               loc_665B4
.solo:000668FA ; ---------------------------------------------------------------------------
.solo:000668FA
.solo:000668FA loc_668FA                               ; CODE XREF: getAuthString+DE↑j
.solo:000668FA                 LDR.W           R0, [R9]
.solo:000668FE                 LDR.W           R2, [R0,#0x29C]
.solo:00066902                 LDR             R1, =(aWrongSignature - 0x66908)
.solo:00066904                 ADD             R1, PC  ; "wrong signature"
.solo:00066906                 MOV             R0, R9
.solo:00066908                 BLX             R2
.solo:0006690A                 B               loc_665B2
.solo:0006690A ; End of function getAuthString
.solo:0006690A
谢谢了

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
这个方法的作用应该是获取当前时间然后用md5加密
2019-6-11 13:24
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
我只会java和python,c/c++的代码我只能看懂这些了
2019-6-11 13:25
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

......

最后于 2020-4-7 20:41 被junkboy编辑 ,原因: ......
2019-6-11 13:28
0
雪    币: 2443
活跃值: (464)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
RPC就行了,Apk丢上来看看
2019-6-11 13:41
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
飘云 RPC就行了,Apk丢上来看看
就是酷安,www.coolapk.com,apk没什么看的,我可以把so给你,apk就调用这个关键方法
最后于 2019-6-11 13:44 被zckuna编辑 ,原因:
2019-6-11 13:43
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
so
上传的附件:
2019-6-11 13:47
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
zckuna so
方便分析,这是native类
public class AuthUtils {
    static {
        System.loadLibrary("native-lib");
    }

    public AuthUtils() {
        super();
    }

    // 就是这个方法
    public static native String getAS(Context arg0, String arg1) {
    }
}

2019-6-11 13:50
0
雪    币: 110
活跃值: (665)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
首先ida中找到b64_decode的偏移,假如是 0x1234567,代码如下:

function get_func_by_offset(module_name , offset){
    var module = Process.getModuleByName(module_name)
    var addr = module.base.add(offset)
    return new NativePointer(addr.toString())
}
var addr = get_func_by_offset('libnative-lib.so', 0x1234567)
var b64_decode = new NativeFunction(addr, 'pointer', ['pointer', 'int']);

下面你就可以直接调用b64_decode这个函数了。
2019-6-11 14:42
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
yzlmars 首先ida中找到b64_decode的偏移,假如是 0x1234567,代码如下:function&nbsp;get_func_by_offset(module_name&nbsp;, ...
找地址会,已经hook到了,但是不会像hook java时那样直接调用hook的方法或者根据包名+类名直接调用方法,我想问的就是如何调用so里的方法,上面有人提到rpc,我看了一下官方提供的例子好像不是我想要的
2019-6-11 15:00
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
你写出的最后是直接通过new NativeFunction对象就可以调用了吗,谢谢
2019-6-11 15:01
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
yzlmars 首先ida中找到b64_decode的偏移,假如是 0x1234567,代码如下:function&nbsp;get_func_by_offset(module_name&nbsp;, ...
谢谢,我已经看了官方文档,希望有人能翻译一下,不然不好找
2019-6-11 15:05
0
雪    币: 110
活跃值: (665)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
zckuna 谢谢,我已经看了官方文档,希望有人能翻译一下,不然不好找
对的,就是new NativeFunction这句最关键,它就相当于C/C++中的定义一个函数一样。你就这么用的就行了。
2019-6-11 15:21
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
yzlmars 对的,就是new NativeFunction这句最关键,它就相当于C/C++中的定义一个函数一样。你就这么用的就行了。
有一个问题。
这个_BYTE返回值类型在c/c++中是没有的,有也是unsigned char,我填uchar是找不到,我代码如下
// var func = new NativeFunction(pointer, 'uchar', ['pointer', 'uint', 'pointer'])
// var func = new NativeFunction(pointer, 'uchar', ['char', 'uint', 'uint'])

2019-6-11 16:02
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
zckuna 有一个问题。这个_BYTE返回值类型在c/c++中是没有的,有也是unsigned char,我填uchar是找不到,我代码如下//&nbsp;var&nbsp;func&nb ...
已经解决,谢谢所有帮助我的人,由衷的谢谢各位大佬
2019-6-12 00:52
0
雪    币: 905
活跃值: (1037)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
利用NativeFunction和RPC,我想这篇文章适合你https://grepharder.github.io/blog/0x04_calling_ios_native_functions_from_python_using_frida_and_rpc.html
最后于 2019-6-21 16:25 被La0s编辑 ,原因:
2019-6-21 15:31
0
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
你好,加.so文件名和方法名能hook到native层的方法吗,我一直hook不到是为什么
2019-7-16 15:32
0
雪    币: 182
活跃值: (435)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
请问如果so中的函数是  jstring __fastcall helloWord(JNIEnv *env, jobject thiz, jobject arg1, jbyteArray arg2, jint arg3){....}
NativeFunction后面的返回值类型和参数类型该如何对应写出呢。。。
2019-10-8 23:31
0
雪    币:
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
zckuna 已经解决,谢谢所有帮助我的人,由衷的谢谢各位大佬
如果解决了问题,把你的答案也留下来会不会更好呢?
2019-12-15 10:02
0
雪    币: 1973
活跃值: (779)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
自由快挂 如果解决了问题,把你的答案也留下来会不会更好呢?
我不太记得怎么解决的了,好像是直接像调用java那样调用,如果new NativeFunction的话需要jnienv和jobject,这个jobject不清楚怎么获取
2019-12-15 15:13
0
游客
登录 | 注册 方可回帖
返回
//