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;
}
格式验证
Pswd:XXXX-XXXX-XXXX-XXXX-XXXX
不能包含空格
检验pswd [7]、pswd [8];[8]’C’ && ([7]’9’ || [7]==’F’ )取19字符
处理name,去除开头、结尾的‘\’或‘“’
处理pswd, 'O' 'o' >0 'l'>1
校验
#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,就知道怎么入手了。
乱写一通,记点笔记。