010editor 记录


2024-03-06 21:33:33 星期三

注册码生成(AC和9C)

#include <Windows.h>
#include <stdio.h>
typedef   unsigned char _BYTE;

DWORD dword_140BB1410[] =
{
  969622712, 594890599, 1593930257, 1052452058, 890701766, 1677293387, 394424968, 266815521, 1532978959, 1211194088, 2019260265, 729421127, 953225874, 1117854514, 892543556, 2000911200, 514538256, 1400963072, 486675118, 1862498216, 1136668818, 758909582, 1653935295, 821063674, 888606944, 687085563, 890056597, 1513495898, 365692427, 184357836, 677395407, 863045227, 818746596, 391985767, 1842768403, 758385145, 1478392706, 1985112985, 1552765320, 746944881, 368385984, 1758203153, 1240817244, 660489060, 756944316, 1290697955, 844453952, 288239112, 1769473626, 1922176006, 826636519, 391520695, 1081548223, 1069693142, 1244729994, 766313326, 1101031894, 624951698, 14501479, 1794907983, 1460682958, 1660839647, 1104890686, 897721119, 1442187162, 480708164, 454443986, 1064446153, 1595150448, 1041527979, 1145775470, 1399869657, 255985995, 802693350, 2005610078, 1897360642, 2146073193, 1538606632, 431647857, 964049561, 395138253, 19164808, 856904574, 730737943, 708645054, 1506870658, 933323739, 819349658, 1780571206, 236747382, 533160167, 2042104933, 670325172, 2040165158, 1354372994, 705785180, 1669754395, 1066536508, 1426207888, 1437950089, 741941201, 796931522, 1694313338, 1290302874, 1367672048, 2039808424, 1062939821, 954597728, 1668694488, 859122242, 1369582617, 140269649, 53024683, 729221831, 816609203, 736893191, 55706320, 262747091, 1629838835, 581764799, 1488480625, 1607077349, 1879925846, 1453945819, 1521965565, 856558562, 1530662365, 1230847072, 1404918182, 1281256849, 1238970765, 272453753, 1640907491, 2127893021, 350314733, 556617458, 654390256, 1648581270, 531062411, 1862873022, 1241517385, 1471028336, 5121143, 1444839026, 1183580211, 1573659650, 2018540230, 1487873223, 234237236, 898254600, 1023090193, 728843548, 2007454357, 1451820833, 267351539, 302982385, 26807015, 865879122, 664886158, 195503981, 1625037691, 1330347906, 1742434311, 1330272217, 1645368040, 542321916, 1782121222, 411042851, 435386250, 1176704752, 1454246199, 1136813916, 1707755005, 224415730, 201138891, 989750331, 1006010278, 1147286905, 406860280, 840388503, 1282017578, 1605698145, 23396724, 862145265, 1898780916, 1855549801, 1571519230, 2083204840, 1859876276, 1602449334, 1009413590, 690816450, 86131931, 345661263, 1565025600, 857544170, 1329948960, 1211787679, 994381573, 991984748, 1956475134, 1098146294, 1655714289, 659576699, 689116467, 1485584392, 451884118, 255590636, 2108114754, 1266252396, 1589326471, 2019907768, 15552498, 1651075358, 614606175, 1656823678, 797605325, 1681594366, 2005080248, 624648446, 884695971, 1526931791, 1595240948, 439447199, 2060396292, 680093752, 409028215, 469068267, 195583689, 1791650630, 507724330, 1364025102, 1094582668, 813049577, 32316922, 1240756058, 1176200235, 2104494066, 325396055, 1796606917, 1709197385, 525495836, 1510101430, 735526761, 767523533, 1374043776, 1559389967, 567085571, 1560216161, 867042846, 1001796703, 1568754293, 628841972, 173812827, 379868455, 384973125,
};
unsigned __int16 __fastcall CalcUserNumber(__int16 a1)
{
	unsigned int v1; // er8

	v1 = (unsigned __int16)((a1 ^ 0x7892) + 0x4D30) ^ 0x3421;
	if (v1 % 0xB)
		return 0;
	else
		return (unsigned __int16)(v1 / 0xB);
}
unsigned __int16 __fastcall ReCalcUserNumber(__int16 a1)
{

	return (((a1 * 0xB) ^ 0x3421) - 0x4D30) ^ 0x7892;
}

char __fastcall CalcLicenseType(char a1)
{
	return ((a1 ^ 0x18) + 0x3D) ^ 0xA7;
}
char __fastcall ReCalcLicenseType(char a1)
{
	//return ((a1 ^ 0x18) + 0x3D) ^ 0xA7;
	return ((a1 ^ 0xA7) - 0x3D) ^ 0x18;
}

__int64 __fastcall CalcWithUserName(char* username, int fcflag, char type, int user_number)
{
	unsigned int v5 = 0;
	unsigned __int64 v6 = 0xFFFFFFFFFFFFFFFFui64;
	__int64 v7;

	do
		++v6;
	while (username[v6]);

	v7 = (int)v6;
	if ((int)v6 <= 0)
		return v5;

	__int64 v8 = 0i64;
	unsigned __int8 v9 = 0;
	unsigned __int8 v10 = 0xF * user_number;
	unsigned __int8 v11 = 0;
	unsigned __int8 v12 = 0x11 * type;

	do
	{
		int v13 = toupper((unsigned __int8)username[v8]);
		DWORD* v14 = &dword_140BB1410[v12];
		unsigned int v15 = v5 + dword_140BB1410[v13];
		DWORD* v16 = &dword_140BB1410[v10];

		int v17, v18;
		__int64 v19;

		if (fcflag)
		{
			v17 = dword_140BB1410[(unsigned __int8)(v13 + 0xD)];
			v18 = (unsigned __int8)(v13 + 0x2F);
			v19 = v9;
		}
		else
		{
			v17 = dword_140BB1410[(unsigned __int8)(v13 + 0x3F)];
			v18 = (unsigned __int8)(v13 + 0x17);
			v19 = v11;
		}

		v12 += 9;
		v10 += 0xD;
		v9 += 0x13;
		v11 += 7;
		++v8;
		v5 = *v16 + *v14 + dword_140BB1410[v19] + dword_140BB1410[v18] * (v15 ^ v17);
	} while (v8 < v7);

	return v5;
}
int __fastcall CalcExpireDays(int a1, int a2)
{
	unsigned int v2; // ecx
	int result; // eax

	v2 = (((a2 ^ a1 ^ 0x22C078) - 0x2C175) ^ 0xFFE53167) & 0xFFFFFF;
	result = 0;
	if (v2 == 0x11 * (v2 / 0x11))
		return v2 / 0x11;

	return result;
}
int __fastcall ReCalcExpireDays(int x, int a2)
{

	int temp = (((x * 0x11) ^ 0xFFE53167) + 0x2C175) ^ 0x22C078;
	return (temp ^ a2) & 0xFFFFFF;

}


int CURRENT_RELEASE_DATE = 0x4C71;
int VID = 0xF;
/*
https://www.52pojie.cn/thread-1095855-1-1.html
1、0x9C,这个是没有免费技术支持,没有免费升级的注册类型,注册码中有版本号检查,必须大于当前软件的版本,否则提示注册码过期。注册码只有4段。
2、0xAC,这个是有免费技术支持、有免费升级的完整注册类型,不过会检查注册码中的过期时间(天数,从发布时间算起),这些免费支持是有期限的,会过期。注册码有5段,是最完整的注册码。
3、0xFC,这个不算正式注册版本,是延长试用期版本,最长可延长为5年试用期(从发布日期算起),这个版本会有一些检查(注册表中的数据),保证延期合法。注册码只有4段。
*/

////User_number>=1000--site license
void register_editor(char* uName, int registerType = 0xAC, int License_type = 2, int User_number = 1000, int Expire_days = 365 * 10) {

	unsigned char sn[10] = { 0 };
	int sn_len = 10;
	sn[3] = registerType;
	BOOL isnotFC = sn[3] != 0xFC;

	switch (registerType)
	{
	case 0xAC: {
		Expire_days += CURRENT_RELEASE_DATE;
	}
			 break;
	case 0x9C: {
		sn_len = 8;
		if (License_type < VID) {
			License_type = VID + 0xd0;
		}
		if (License_type < 2) {
			Expire_days = License_type;
		}
		else {
			Expire_days = 0;
		}
	}
			 break;
	default:
		printf("unrealized!\n");
		return;
	}

	DWORD temp = CalcWithUserName(uName, isnotFC, Expire_days, User_number);
	sn[4] = temp & 0xff;
	sn[5] = (temp >> 8) & 0xff;
	sn[6] = (temp >> 16) & 0xff;
	sn[7] = (temp >> 24) & 0xff;

	DWORD re_u_num = ReCalcUserNumber(User_number);
	sn[2] = sn[5] ^ (re_u_num & 0xff);
	sn[1] = sn[7] ^ ((re_u_num >> 8) & 0xff);

	if (registerType == 0xAC) {
		int xordata = 0;
		DWORD xor_a2 = 0x5B8C27;
		xordata = ReCalcExpireDays(Expire_days, xor_a2);
		sn[0] = sn[6] ^ (xordata & 0xff);
		sn[8] = sn[4] ^ ((xordata >> 8) & 0xff);
		sn[9] = sn[5] ^ ((xordata >> 16) & 0xff);
	}
	else if (registerType == 0x9C) {
		int retype = ReCalcLicenseType(License_type);
		sn[0] = sn[6] ^ retype;
	}


	printf("User:%s\nSn:", uName);
	for (int i = 0; i < sn_len; ++i) {
		printf("%02X", sn[i]);

	}
	printf("\n");

}

关键校验函数

进一步跟踪校验点可关注参数1,全局对象,存储注册的相关信息

__int64 __fastcall check0_need_2d(HttpCheck *a1, unsigned int License_type_f, unsigned int n_4c71)
{
  // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]

  // 参数3,0x4c71,当前版本号日期(距离1970)
  n_4c711 = n_4c71;
  // License_type1此版本id??,函数的第二个参数: 0xf
  License_type1 = License_type_f;
  isNotFC = 0;
  v29 = 0;
  *(_QWORD *)&a1->field_40 = 0i64;
  HIDWORD(a1->qword24) = 0;
  if ( !a1->qstring_Name8.d->size || !a1->qstring_Password10.d->size )
    return 0x93i64;

  sub_140005493(a1, (char *)pswdhex);
  v5 = &off_140BB18E0;
  do
  {
    if ( (unsigned __int8)QString::operator==(&a1->qstring_Name8, *v5) )
      return 0xE7i64;

    ++v5;
  }
  while ( (__int64)v5 < (__int64)&unk_140BB18E8 );

  if ( a1->qstring_Name8.d->size > 1 )
  {
    v6 = (unsigned __int8 *)&unk_140BB18E9;
    do
    {
      v7 = *(_WORD *)QChar::QChar((QChar *)v30, v6[0xFFFFFFFF]);
      v8 = QString::operator[](&a1->qstring_Name8, v37, 0i64);
      if ( *(_WORD *)QCharRef::toUpper(v8, v31) == v7 )
      {
        v9 = *(_WORD *)QChar::QChar((QChar *)v32, *v6);
        v10 = QString::operator[](&a1->qstring_Name8, v38, 1i64);
        if ( *(_WORD *)QCharRef::toUpper(v10, v33) == v9 )
        {
          v11 = 0;
          v12 = 0i64;
          v13 = v6 + 0xA;
          do
          {
            if ( pswdhex[v12] != *v13 )
              break;

            ++v11;
            ++v12;
            --v13;
          }
          while ( v12 < 0xA );

          if ( v11 == 0xA )
            return 0xE7i64;
        }
      }

      v6 += 12;
    }
    while ( (__int64)v6 < (__int64)&dword_140BB1901 );
  }

  pswdhex_5_ = pswdhex[5];
  pswdhex_2_ = pswdhex[2];
  pswdhex_1_ = pswdhex[1];
  pswdhex_0_ = pswdhex[0];
  pswdhex_3_ = pswdhex[3];
  switch ( pswdhex[3] )
  {
    case 0x9Cu:
      v19 = (unsigned __int16)((unsigned __int8)(pswdhex[5] ^ pswdhex[2])
                             + ((unsigned __int8)(pswdhex[7] ^ pswdhex[1]) << 8));
      a1->License_type_2C = (unsigned __int8)j_CalcLicenseType(pswdhex[6] ^ pswdhex[0]);
      v20 = (unsigned __int16)j_CalcUserNumber(v19);
      a1->user_number_30 = (unsigned __int16)v20;
      License_type_2C = a1->License_type_2C;
      if ( License_type_2C && (unsigned int)(v20 - 1) <= 999 )
      {
        ExpireDays = 0;
        if ( License_type_2C < 2 )
          ExpireDays = a1->License_type_2C;

LABEL_26:
        QString::toUtf8(&a1->qstring_Name8, v36);
        LOBYTE(isNotFC) = pswdhex_3_ != 0xFC;
        username = QByteArray::data((QByteArray *)v36);
        v25 = j_CalcWithUserName(username, isNotFC, ExpireDays, a1->user_number_30);
        if ( pswdhex[4] == (_BYTE)v25
          && (_BYTE)pswdhex_5_ == BYTE1(v25)
          && pswdhex[6] == BYTE2(v25)
          && pswdhex[7] == HIBYTE(v25) )
        {
          if ( pswdhex_3_ == 0x9C )
          {
            // License_type1此版本id??,函数的第二个参数: 0xf
            if ( License_type1 > a1->License_type_2C )
            {
              // error
              v26 = 0x4E;

LABEL_41:
              QByteArray::~QByteArray((QByteArray *)v36);
              return v26;
            }

SUCCESS:
            v26 = 0x2D;
            goto LABEL_41;
          }

          if ( pswdhex_3_ == 0xFC )
          {
            v27 = j_CalcExpireDays(pswdhex[0] + (pswdhex[1] << 8) + (pswdhex[2] << 0x10), v25);
            if ( v27 )
            {
              HIDWORD(a1->qword24) = v27;
              v26 = 0x93;
              goto LABEL_41;
            }
          }

          else if ( v29 )
          {
            if ( n_4c711 > v29 )
            {
              v26 = 0x4E;
              goto LABEL_41;
            }

            goto SUCCESS;
          }
        }

        v26 = 0xE7;
        goto LABEL_41;
      }

      break;

    case 0xFCu:
      ExpireDays = 0xFF;
      a1->License_type_2C = 0xFF;
      a1->user_number_30 = 1;
      a1->field_40 = 1;
      goto LABEL_26;

    case 0xACu:
      a1->License_type_2C = 2;
      v23 = j_CalcUserNumber((unsigned __int8)(pswdhex_5_ ^ pswdhex_2_) + ((unsigned __int8)(pswdhex[7] ^ pswdhex_1_) << 8));
      a1->user_number_30 = v23;
      if ( (unsigned int)v23 - 1 <= 999 )
      {
        v29 = j_CalcExpireDays(
                (pswdhex[6] ^ pswdhex_0_) + ((pswdhex_5_ ^ pswdhex[9]) << 0x10) + ((pswdhex[8] ^ pswdhex[4]) << 8),
                0x5B8C27);
        a1->ExpireDays44 = v29;
        ExpireDays = v29;
        goto LABEL_26;
      }

      break;
  }

  return 0xE7i64;
}

格式验证
image

Pswd:XXXX-XXXX-XXXX-XXXX-XXXX
不能包含空格
image

检验pswd [7]、pswd [8];[8]’C’ && ([7]’9’ || [7]==’F’ )取19字符
image

处理name,去除开头、结尾的‘\’或‘“’
image

处理pswd, 'O' 'o' >0 'l'>1
image

校验
image

#include <iostream>
#include <Windows.h>
unsigned int  getboxnumb_1403491A0(char* name, __int64 not_fc_flag, __int64 zero_or_calc_2c, __int64 calc_30);
char __fastcall calc_2c_140349150(char a1)
{
	return ((a1 ^ 0x18) + 0x3D) ^ 0xA7;
}
unsigned __int16 __fastcall calc_30_1403490C0(__int16 a1)
{
	unsigned __int16 v1; // er8

	v1 = (unsigned __int16)((a1 ^ 0x7892) + 0x4D30) ^ 0x3421;
	if (v1 % 0xB)
		return 0i64;
	else
		return (unsigned __int16)(v1 / 0xB);
}
__int64 __fastcall calc_140349040(int a1, int a2)
{
	unsigned int v2; // ecx
	__int64 result; // rax

	v2 = (((a2 ^ a1 ^ 0x22C078) - 0x2C175) ^ 0xFFE53167) & 0xFFFFFF;
	result = 0i64;
	if (v2 == 0x11 * (v2 / 0x11))
		return v2 / 0x11;

	return result;
}

void oppswd(unsigned char* data) {
	while (*data++)
	{
		if (*data == 'O' || *data == 'o') {
			*data = '0';
		}
		else if (*data == 'l')
		{
			*data == '1';
		}
	}
}
int test() {
	unsigned __int16 v19 = 0;
	unsigned int calc_2C = 0;
	unsigned int v20 = 0;
	unsigned int calc_30 = 0;
	int v22 = 0;
	int v26 = 0;
	bool v4 = false;
	DWORD v25 = 0;
	int v27 = 0;
	int v29 = 0;

	int numb_13u_ = 13;
	int numb_18887u_ = 18887;
	int endtime_28 = 0;


	unsigned char namedata[] = {
	0x77, 0x77, 0x77, 0x2E, 0x62, 0x75, 0x64, 0x69, 0x6E, 0x67, 
	0x77, 0x61,0x6E, 0x67, 0x2E, 0x63,0x6F, 0x6D,0
	};

	//用户名:www.budingwang.com
	//注册码 : CR96 - 4B9C - 6470 - 303F
	//ord('R')-ord('7')+16*(ord('C')-ord('7'))   0xdb
	__int8 hex_pswd_bytearray = 0xdb;
	__int8 hex_pswd_bytearray_1 = 0x96;
	__int8 hex_pswd_bytearray_2 = 0x4B;

	unsigned __int8 hex_pswd_bytearray_3 = 0x9C;

	__int8 hex_pswd_bytearray_4 = 0x64;
	__int8 hex_pswd_bytearray_5 = 0x70;
	__int8 hex_pswd_bytearray_6 = 0x30;
	__int8 hex_pswd_bytearray_7 = 0x3F;






	__int8 hex_pswd_bytearray_71 = hex_pswd_bytearray_7;
	__int8 hex_pswd_bytearray_51 = hex_pswd_bytearray_5;
	__int8 hex_pswd_bytearray_21 = hex_pswd_bytearray_2;
	__int8 hex_pswd_bytearray_11 = hex_pswd_bytearray_1;
	__int8 hex_pswd_bytearray1 = hex_pswd_bytearray;
	__int8  hex_pswd_bytearray_31 = hex_pswd_bytearray_3;



	switch (hex_pswd_bytearray_3)
	{
	case 0x9C:
		v19 = (unsigned __int16)((unsigned __int8)(hex_pswd_bytearray_5 ^ hex_pswd_bytearray_2)
			+ ((unsigned __int8)(hex_pswd_bytearray_7 ^ hex_pswd_bytearray_1) << 8));
		calc_2C = (unsigned __int8)calc_2c_140349150(hex_pswd_bytearray_6 ^ hex_pswd_bytearray);// ((a1 ^ 0x18) + 0x3D) ^ 0xA7
		v20 = (unsigned __int16)calc_30_1403490C0(v19);// ((a1 ^ 0x7892) + 0x4D30) ^ 0x3421
												// 如果为0xb倍数返回商,否则返回0
												// 
		calc_30 = (unsigned __int16)v20;
		//calc_2C = this->calc_2C;
		//clac_2c>0&&clac_2c>=13
		if (calc_2C && (unsigned int)(v20 - 1) <= 999)
		{
			v22 = 0;
			if (calc_2C < 2)
				v22 = calc_2C;
		encrypto:
			//QString::toUtf8(p_name, v36);
			v4 = hex_pswd_bytearray_31 != -4;// 0FCh
			//namedata = QByteArray::data((QByteArray*)v36);
			v25 = getboxnumb_1403491A0((char*)namedata, v4, v22, (unsigned int)calc_30);
			if (hex_pswd_bytearray_4 == (v25 & 0xFF)
				&& (BYTE)hex_pswd_bytearray_51 == ((v25 >> (8 * 1)) & 0xFF)
				&& hex_pswd_bytearray_6 == ((v25 >> (8 * 2)) & 0xFF)
				&& hex_pswd_bytearray_7 == ((v25 >> (8 * 3)) & 0xFF))
			{
				if (hex_pswd_bytearray_31 == (char)0x9C)
				{
					if (numb_13u_ > calc_2C)
					{
						v26 = 78;

					ret:
						//QByteArray::~QByteArray((QByteArray*)v36);
						return v26;
					}

				need_45:
					v26 = 45;
					goto ret;
				}

				if (hex_pswd_bytearray_31 == (char)0xFC)
				{
					v27 = calc_140349040(hex_pswd_bytearray + (hex_pswd_bytearray_1 << 8) + (hex_pswd_bytearray_2 << 16), v25);// (((a2 ^ a1 ^ 0x22C078) - 0x2C175) ^ 0xFFE53167) & 0xFFFFFF;
													  // 整除0x11
					if (v27)
					{
						endtime_28 = v27;
						v26 = 147;
						goto ret;
					}
				}

				else if (v29)
				{
					if (numb_18887u_ > v29)
					{
						v26 = 78;
						goto ret;
					}

					goto need_45;                     // need this
				}
			}

			v26 = 231;
			goto ret;
		}

		break;
	}//end switch 
}
int main()
{
	int iret = test();
	printf("%#2x,%d\n", iret, iret);
	std::cout << "Hello World!\n";
}
DWORD box_140B34AD0[308] =
{
  969622712, 594890599, 1593930257, 1052452058, 890701766, 1677293387, 394424968, 266815521, 1532978959, 1211194088, 2019260265, 729421127, 953225874, 1117854514, 892543556, 2000911200, 514538256, 1400963072, 486675118, 1862498216, 1136668818, 758909582, 1653935295, 821063674, 888606944, 687085563, 890056597, 1513495898, 365692427, 184357836, 677395407, 863045227, 818746596, 391985767, 1842768403, 758385145, 1478392706, 1985112985, 1552765320, 746944881, 368385984, 1758203153, 1240817244, 660489060, 756944316, 1290697955, 844453952, 288239112, 1769473626, 1922176006, 826636519, 391520695, 1081548223, 1069693142, 1244729994, 766313326, 1101031894, 624951698, 14501479, 1794907983, 1460682958, 1660839647, 1104890686, 897721119, 1442187162, 480708164, 454443986, 1064446153, 1595150448, 1041527979, 1145775470, 1399869657, 255985995, 802693350, 2005610078, 1897360642, 2146073193, 1538606632, 431647857, 964049561, 395138253, 19164808, 856904574, 730737943, 708645054, 1506870658, 933323739, 819349658, 1780571206, 236747382, 533160167, 2042104933, 670325172, 2040165158, 1354372994, 705785180, 1669754395, 1066536508, 1426207888, 1437950089, 741941201, 796931522, 1694313338, 1290302874, 1367672048, 2039808424, 1062939821, 954597728, 1668694488, 859122242, 1369582617, 140269649, 53024683, 729221831, 816609203, 736893191, 55706320, 262747091, 1629838835, 581764799, 1488480625, 1607077349, 1879925846, 1453945819, 1521965565, 856558562, 1530662365, 1230847072, 1404918182, 1281256849, 1238970765, 272453753, 1640907491, 2127893021, 350314733, 556617458, 654390256, 1648581270, 531062411, 1862873022, 1241517385, 1471028336, 5121143, 1444839026, 1183580211, 1573659650, 2018540230, 1487873223, 234237236, 898254600, 1023090193, 728843548, 2007454357, 1451820833, 267351539, 302982385, 26807015, 865879122, 664886158, 195503981, 1625037691, 1330347906, 1742434311, 1330272217, 1645368040, 542321916, 1782121222, 411042851, 435386250, 1176704752, 1454246199, 1136813916, 1707755005, 224415730, 201138891, 989750331, 1006010278, 1147286905, 406860280, 840388503, 1282017578, 1605698145, 23396724, 862145265, 1898780916, 1855549801, 1571519230, 2083204840, 1859876276, 1602449334, 1009413590, 690816450, 86131931, 345661263, 1565025600, 857544170, 1329948960, 1211787679, 994381573, 991984748, 1956475134, 1098146294, 1655714289, 659576699, 689116467, 1485584392, 451884118, 255590636, 2108114754, 1266252396, 1589326471, 2019907768, 15552498, 1651075358, 614606175, 1656823678, 797605325, 1681594366, 2005080248, 624648446, 884695971, 1526931791, 1595240948, 439447199, 2060396292, 680093752, 409028215, 469068267, 195583689, 1791650630, 507724330, 1364025102, 1094582668, 813049577, 32316922, 1240756058, 1176200235, 2104494066, 325396055, 1796606917, 1709197385, 525495836, 1510101430, 735526761, 767523533, 1374043776, 1559389967, 567085571, 1560216161, 867042846, 1001796703, 1568754293, 628841972, 173812827, 379868455, 384973125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};


unsigned int  getboxnumb_1403491A0(char* name, __int64 not_fc_flag, __int64 zero_or_calc_2c, __int64 calc_30)
{
	unsigned int v5; // ebp
	__int64 name_size; // rax
	__int64 name_size1; // r13
	__int64 index; // rbx
	unsigned __int8 v9; // r14
	unsigned __int8 v10; // si
	unsigned __int8 v11; // r15
	unsigned __int8 v12; // di
	int v13; // eax
	DWORD* v14; // r9
	unsigned int v15; // er11
	DWORD* v16; // r10
	int v17; // ebp
	__int64 v18; // rcx
	__int64 v19; // rax
	int not_fc_flag1; // [rsp+58h] [rbp+10h]

	not_fc_flag1 = not_fc_flag;
	v5 = 0;
	name_size = -1i64;
	do
		++name_size;
	while (name[name_size]);

	name_size1 = (int)name_size;
	if ((int)name_size > 0)
	{
		index = 0i64;
		v9 = 0;
		v10 = 15 * calc_30;
		v11 = 0;
		v12 = 17 * zero_or_calc_2c;
		do
		{
			v13 = toupper((unsigned __int8)name[index]);
			v14 = &box_140B34AD0[v12];
			v15 = v5 + box_140B34AD0[v13];
			v16 = &box_140B34AD0[v10];
			if (not_fc_flag1)
			{
				v17 = box_140B34AD0[(unsigned __int8)(v13 + 13)];
				v18 = (unsigned __int8)(v13 + 47);
				v19 = v9;
			}
			else
			{
				v17 = box_140B34AD0[(unsigned __int8)(v13 + 63)];
				v18 = (unsigned __int8)(v13 + 23);
				v19 = v11;
			}

			v12 += 9;
			v10 += 13;
			v9 += 19;
			v11 += 7;
			++index;
			v5 = *v16 + *v14 + box_140B34AD0[v19] + box_140B34AD0[v18] * (v15 ^ v17);
		} while (index < name_size1);
	}

	return v5;
}

qt程序逆向是比较简单的,下个qt creator,写个小应用,对照ida和moc_xxx,就知道怎么入手了。

乱写一通,记点笔记。

posted @ 2022-04-20 20:41  DirWangK  阅读(554)  评论(0编辑  收藏  举报