NetAssist 網絡調試助手 注冊分析[1]


upx加殼,可直接upx脫

調試定位注冊事件

sub_421180

 

本地校驗處:check_41F31C

網絡請求處:net_check_4217D0 (暫不分析,patch )

 

check_41F31C:

int __usercall check_41F31C@<eax>(int a1@<eax>, long double timestamp@<st0>)
{
  _DWORD *mycode; // eax
  int codelen; // ecx
  const void *v5; // edx
  _BYTE *v6; // eax
  __int16 v7; // ax
  unsigned __int64 v8; // rax
  char decryptodata[65]; // [esp+0h] [ebp-50h] BYREF

  mycode = (_DWORD *)(a1 + 0x90);
  if ( *mycode )
    codelen = *(_DWORD *)(*mycode - 4);
  else
    codelen = 0;

  if ( codelen != 64 )
    return 2;

  v5 = *(_DWORD *)(a1 + 144) ? *(const void **)(a1 + 144) : &unk_56A306;
  memcpy(decryptodata, v5, sizeof(decryptodata));
  aes_key_484B80(&gIdentification_code_590F54, 0x10u);
  v6 = aes_4829B4((unsigned __int8 *)decryptodata, decryptodata);
  if ( aes_484C3C((int)decryptodata, (int)v6, (int)decryptodata) != 44 )// aes-ecb-128 decrypto   解密后數據長度為44
    return 2;

  v7 = CRC16_484058(decryptodata, 42);
  if ( v7 != *(_WORD *)&decryptodata[42] )
    return 2;

  sub_4832B0(decryptodata, 40, *(__int16 *)&decryptodata[40]);//根據[40\41] WORD值對前40位進行變換 if ( memcmp(decryptodata, &gIdentification_code_590F54, 0x10u)
    || *(unsigned __int16 *)&decryptodata[32] != dword_577944// f
    || *(_DWORD *)&decryptodata[24] <= 0x484Au )
  {
    return 2;                                   // 無效的授權碼
  }

  v8 = sub_484F80(timestamp) / 0x15180;         // 0x15180 十進制表示為 86400 秒,剛好為 1 天
                                                // 距離1970年1月1日 天數
  if ( (unsigned int)v8 < *(_DWORD *)&decryptodata[24] )// 非法授權碼
    return 3;

  if ( (unsigned int)v8 >= *(_DWORD *)&decryptodata[28] )// 授權已過期
    return 5;

  if ( (unsigned int)v8 < dword_5C1368 )        // 授權需重新激活
    return 4;

  qmemcpy(&unk_590F65, decryptodata, 40u);
  dword_5C1318 = *(_DWORD *)&decryptodata[20];
  dword_5C1368 = v8;                            // day time
  byte_56A0A4 = sub_41F258();
  return 0;
}

 

流程:

授權碼為64位base64編碼字符串,

終端識別碼(去掉‘-’)作為 AES-ECB-128 密鑰,對輸入的授權碼進行解密,

解密得到原始數據44位,crc16校驗,根據[40\41]word 值進行變換前40位,進行關鍵字段檢驗

關鍵字段校驗:

[0-16]  bytes 機器碼

[16-20]  未知

[20\21\22\23] 未知

[24\25\26\27] DWORD 第25-28位 激活日期 (距離1970年1月1日 天數) 要<=當前天數

[28\29\30\31] DWORD 第29-32位 失效日期 (距離1970年1月1日 天數) 要>當前天數

[32、33]WORD 固定值 0x0066  ‘f’

[34\35\36\3738\39]未知

[40\41]WORD 該值會將前40位進行變換,0時保持原值;

[42、43]WORD 最后2位為前42位數據的CRC16校驗碼

 

 

 

 

 

 

 

 

之后授權碼保存到

C:\Users\xxx\AppData\Roaming\Cmsoft\NetAssist.lic

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM