unsigned char byte_6060F0[]
=
{
0x4B
,
0x56
,
0x39
,
0x36
,
0x47
,
0x4D
,
0x4A
,
0x59
,
0x48
,
0x37
,
0x51
,
0x46
,
0x35
,
0x54
,
0x43
,
0x57
,
0x34
,
0x55
,
0x33
,
0x58
,
0x5A
,
0x50
,
0x52
,
0x53
,
0x44
,
0x4E
,
0x00
};
unsigned char unk_606210[]
=
{
0x23
,
0xDD
,
0x78
,
0xB5
,
0x33
,
0x6F
,
0xD4
,
0xF9
,
0xA6
,
0xE8
,
0xCC
,
0x7C
,
0x9F
,
0xB3
,
0x22
,
0xDA
,
0x32
,
0xDF
,
0x71
,
0xB7
,
0x61
,
0x3D
,
0x6B
,
0x57
,
0xD7
,
0xA1
,
0x34
,
0x38
,
0xF2
,
0xE1
,
0xF3
,
0xB8
,
0x1A
,
0x80
,
0xF5
,
0xFE
,
0x91
,
0x01
,
0x3C
,
0x73
,
0x93
,
0x48
,
0xA0
,
0xE0
,
0x94
,
0xAA
,
0x39
,
0x8F
,
0x58
,
0xE2
,
0x31
,
0x0B
,
0xBB
,
0xCE
,
0x4C
,
0xD2
,
0x56
,
0xC2
,
0x5E
,
0x27
,
0xB6
,
0xFB
,
0x65
,
0xAE
,
0x55
,
0x60
,
0xBD
,
0x10
,
0x86
,
0xF7
,
0xC1
,
0x88
,
0x12
,
0xED
,
0x67
,
0xC4
,
0x74
,
0x30
,
0x1B
,
0xBC
,
0x9A
,
0xB0
,
0xEF
,
0x36
,
0xC5
,
0x72
,
0x5B
,
0x7E
,
0x54
,
0x2C
,
0x0F
,
0xF6
,
0xA9
,
0x85
,
0x2A
,
0xB1
,
0x37
,
0xF1
,
0x2F
,
0x4E
,
0xE7
,
0x6A
,
0x75
,
0xA8
,
0x26
,
0xEB
,
0x3F
,
0x6C
,
0x69
,
0x20
,
0x87
,
0x62
,
0x8D
,
0x68
,
0xA5
,
0xFA
,
0x3A
,
0x04
,
0x21
,
0x1F
,
0xAC
,
0x05
,
0xA4
,
0x76
,
0x11
,
0x70
,
0x9E
,
0x46
,
0x24
,
0x5D
,
0xC6
,
0xE4
,
0x95
,
0x82
,
0x1C
,
0xBA
,
0x59
,
0x09
,
0xD9
,
0x44
,
0x98
,
0x92
,
0x07
,
0xAF
,
0xA7
,
0x41
,
0x96
,
0x90
,
0xB4
,
0x42
,
0x63
,
0x99
,
0xD0
,
0x4D
,
0x97
,
0xBE
,
0x40
,
0xCF
,
0x84
,
0xE5
,
0x1D
,
0x5A
,
0x0C
,
0x7F
,
0xC7
,
0xEA
,
0xEE
,
0xEC
,
0x00
,
0xD5
,
0x49
,
0x2D
,
0x51
,
0xAD
,
0xB9
,
0x89
,
0x77
,
0x52
,
0x3E
,
0x8C
,
0xE6
,
0xFF
,
0x15
,
0xDE
,
0x6D
,
0x14
,
0xA2
,
0xCD
,
0xA3
,
0xD6
,
0x17
,
0x81
,
0xC8
,
0x45
,
0x4B
,
0x35
,
0x0A
,
0x0D
,
0xFC
,
0x9D
,
0x16
,
0x3B
,
0xD3
,
0x7D
,
0xD1
,
0xF4
,
0xFD
,
0xCA
,
0x25
,
0x06
,
0x6E
,
0xF8
,
0x5F
,
0xBF
,
0x8A
,
0x7B
,
0x50
,
0xD8
,
0x79
,
0x9C
,
0xAB
,
0x43
,
0x53
,
0xCB
,
0x8E
,
0x4F
,
0xE3
,
0xC9
,
0x8B
,
0xDC
,
0x5C
,
0xC0
,
0x1E
,
0x9B
,
0x18
,
0x02
,
0x47
,
0x03
,
0x2B
,
0x0E
,
0x66
,
0x4A
,
0xB2
,
0xF0
,
0xE9
,
0x19
,
0x29
,
0x7A
,
0xC3
,
0x08
,
0x83
,
0xDB
,
0x64
,
0x13
,
0x2E
,
0x28
};
int
*
__cdecl sub_5153C0(BYTE
*
pSerial, unsigned
int
nLength, BYTE
*
pData,
int
*
pResult)
{
unsigned
int
i;
/
/
esi
BYTE v5;
/
/
cl
unsigned
int
j;
/
/
eax
int
*
result;
/
/
eax
for
(i
=
0
; i <
4
;
*
((BYTE
*
)pResult
+
i
-
1
)
=
byte_6060F0[v5
%
26
])
{
v5
=
pData[(unsigned __int8)(i
+
*
pSerial)];
for
(j
=
1
; j < nLength;
+
+
j)
v5
=
pData[v5 ^ (char)pSerial[j]];
result
=
pResult;
+
+
i;
}
return
result;
}
void CSourceInsightTool::GenerateSerial(char szSerial[
20
])
{
int
nResult
=
0
;
sub_5153C0((BYTE
*
)szSerial,
15
, unk_606210, &nResult);
*
(UINT32
*
)&szSerial[
15
]
=
nResult;
szSerial[
19
]
=
0
;
}
const char
*
gActIdTable[
49
]
=
{
"673A44D35B3608E5C603D775C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"44D35B3608E5C603D775C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"5B3608E5C603D775C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"08E5C603D775C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"C603D775C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"D775C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"C76216F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"16F555E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"55E000D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"00D04B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"4B6718E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"18E33E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"3E93F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"F35887A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"87A8A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"A360D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"D2F468E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"68E313DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"13DC7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"7B3E047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"047E08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"08F10A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"0A51B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"B75561B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"61B5L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"L55576B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"76B63BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"3BF2D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"D7750F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"0F09557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"557AF661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"F661F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"F14849F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"49F94F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"4F2652A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"52A903A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"03A10E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"0E9074E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"74E61EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"1EA4FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"FE7E83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"83A6F5090AD61F3F365D1C67DA22A478FA17"
,
"F5090AD61F3F365D1C67DA22A478FA17"
,
"0AD61F3F365D1C67DA22A478FA17"
,
"1F3F365D1C67DA22A478FA17"
,
"365D1C67DA22A478FA17"
,
"1C67DA22A478FA17"
,
"DA22A478FA17"
,
"A478FA17"
};
unsigned char unk_5D6B98[]
=
{
0x32
,
0xDF
,
0x71
,
0xB7
,
0x61
,
0x3D
,
0x6B
,
0x57
,
0xD7
,
0xA1
,
0x34
,
0x38
,
0xF2
,
0xE1
,
0xF3
,
0xB8
,
0x23
,
0xDD
,
0x78
,
0xB5
,
0x33
,
0x6F
,
0xD4
,
0xF9
,
0xA6
,
0xE8
,
0xCC
,
0x7C
,
0x9F
,
0xB3
,
0x22
,
0xDA
,
0x37
,
0xF1
,
0x2F
,
0x4E
,
0xE7
,
0x6A
,
0x75
,
0xA8
,
0x26
,
0xEB
,
0x3F
,
0x6C
,
0x69
,
0x20
,
0x87
,
0x62
,
0xA7
,
0x41
,
0x96
,
0x90
,
0xB4
,
0x42
,
0x63
,
0x99
,
0xD0
,
0x4D
,
0x97
,
0xBE
,
0x40
,
0xCF
,
0x84
,
0xE5
,
0x1D
,
0x5A
,
0x0C
,
0x7F
,
0xC7
,
0xEA
,
0xEE
,
0xEC
,
0x00
,
0xD5
,
0x49
,
0x2D
,
0x51
,
0xAD
,
0xB9
,
0x89
,
0x1A
,
0x80
,
0xF5
,
0xFE
,
0x91
,
0x01
,
0x3C
,
0x73
,
0x93
,
0x48
,
0xA0
,
0xE0
,
0x94
,
0xAA
,
0x39
,
0x8F
,
0x58
,
0xE2
,
0x31
,
0x0B
,
0xBB
,
0xCE
,
0x4C
,
0xD2
,
0x56
,
0xC2
,
0x5E
,
0x27
,
0xB6
,
0xFB
,
0x65
,
0xAE
,
0x9A
,
0xB0
,
0xEF
,
0x36
,
0xC5
,
0x72
,
0x5B
,
0x7E
,
0x54
,
0x2C
,
0x0F
,
0xF6
,
0xA9
,
0x85
,
0x2A
,
0xB1
,
0x55
,
0x60
,
0xBD
,
0x10
,
0x86
,
0xF7
,
0xC1
,
0x88
,
0x12
,
0xED
,
0x67
,
0xC4
,
0x74
,
0x30
,
0x1B
,
0xBC
,
0x77
,
0x52
,
0x3E
,
0x8C
,
0xE6
,
0xFF
,
0x15
,
0xDE
,
0x6D
,
0x14
,
0xA2
,
0xCD
,
0xA3
,
0xD6
,
0x17
,
0x81
,
0x8D
,
0x68
,
0xA5
,
0xFA
,
0x3A
,
0x04
,
0x21
,
0x1F
,
0xAC
,
0x05
,
0xA4
,
0x76
,
0x11
,
0x70
,
0x9E
,
0x46
,
0x24
,
0x5D
,
0xC6
,
0xE4
,
0x95
,
0x82
,
0x1C
,
0xBA
,
0x59
,
0x09
,
0xD9
,
0x44
,
0x98
,
0x92
,
0x07
,
0xAF
,
0xC8
,
0x45
,
0x4B
,
0x35
,
0x0A
,
0x0D
,
0xFC
,
0x9D
,
0x16
,
0x3B
,
0xD3
,
0x7D
,
0xD1
,
0xF4
,
0xFD
,
0xCA
,
0x8E
,
0x4F
,
0xE3
,
0xC9
,
0x8B
,
0xDC
,
0x5C
,
0xC0
,
0x1E
,
0x9B
,
0x18
,
0x02
,
0x47
,
0x03
,
0x2B
,
0x0E
,
0x25
,
0x06
,
0x6E
,
0xF8
,
0x5F
,
0xBF
,
0x8A
,
0x7B
,
0x50
,
0xD8
,
0x79
,
0x9C
,
0xAB
,
0x43
,
0x53
,
0xCB
,
0x66
,
0x4A
,
0xB2
,
0xF0
,
0xE9
,
0x19
,
0x29
,
0x7A
,
0xC3
,
0x08
,
0x83
,
0xDB
,
0x64
,
0x13
,
0x2E
,
0x28
};
void __declspec(naked) __cdecl sub_402FF0_ASM(unsigned __int8
*
Info,
int
InfoLen,
int
a3,
int
Size, unsigned __int8
*
buff, unsigned __int8
*
*
a6)
{
__asm {
push ebx
xor ebx, ebx
cmp
[esp
+
0x14
], ebx
jle short loc_403055
mov edx, [esp
+
1Ch
]
push ebp
push esi
mov esi, [esp
+
14h
]
push edi
mov edi, [esp
+
14h
]
jmp short loc_403010
loc_403010 :
movzx eax, byte ptr[edi]
add eax, ebx
add eax, [esp
+
1Ch
]
and
eax,
800000FFh
jns short loc_403027
dec eax
or
eax,
0FFFFFF00h
inc eax
loc_403027 :
mov cl, [eax
+
edx]
mov eax,
1
cmp
esi, eax
jle short loc_403044
loc_403033 :
movzx ebp, byte ptr[eax
+
edi]
movzx ecx, cl
xor ebp, ecx
mov cl, [edx
+
ebp]
inc eax
cmp
eax, esi
jl short loc_403033
loc_403044 :
mov eax, [esp
+
24h
]
mov [ebx
+
eax], cl
inc ebx
cmp
ebx, [esp
+
20h
]
jl short loc_403010
pop edi
pop esi
pop ebp
loc_403055 :
pop ebx
retn
}
}
bool
CSourceInsightTool::GenerateActId(char szActId[
16
])
{
bool
bIsFail
=
FALSE;
int
nActIdIndex
=
0
;
srand((unsigned
int
)time(NULL));
nActIdIndex
=
rand()
/
sizeof(gActIdTable);
/
/
nActIdIndex
=
0
;
for
(
int
i
=
0
; i <
4
;
+
+
i)
{
szActId[i]
=
gActIdTable[nActIdIndex][i];
}
/
/
获取磁盘
id
char szVolumeMountPoint[
0xFF
]
=
"C:\\"
;
char szVolumeName[
0xFF
]
=
{
0
};
char szVolumeId[
0xFF
]
=
{
0
};
char
*
pVolumeIdEnd
=
NULL;
if
(!GetVolumeNameForVolumeMountPoint(szVolumeMountPoint, szVolumeName, sizeof(szVolumeName)))
{
return
false;
}
sscanf_s(szVolumeName,
"\\\\?\\Volume{%s}\\"
, szVolumeId, _countof(szVolumeId));
pVolumeIdEnd
=
strchr(szVolumeId,
'}'
);
if
(pVolumeIdEnd)
{
*
pVolumeIdEnd
=
0
;
}
/
/
获取 token
HWND hWindow
=
NULL;
DWORD dwProcessId
=
0
;
HANDLE hProcess
=
NULL;
HANDLE hToken
=
NULL;
DWORD dwReturnLength
=
0
;
PVOID TokenInformation
=
NULL;
DWORD TokenInformationLength
=
0
;
LPTSTR StringSid
=
NULL;
do
{
/
/
hWindow
=
FindWindowA(
"si4_Frame"
,
"(No Project) - Source Insight 4.0"
);
hWindow
=
FindWindowA(
"si4_Frame"
, NULL);
if
(!hWindow)
{
bIsFail
=
true;
break
;
}
GetWindowThreadProcessId(hWindow, &dwProcessId);
hProcess
=
OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if
(!hProcess)
{
bIsFail
=
true;
break
;
}
OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken);
if
(!hToken)
{
return
false;
}
if
(!GetTokenInformation(hToken, TokenUser, NULL,
0
, &dwReturnLength))
{
if
(ERROR_INSUFFICIENT_BUFFER !
=
GetLastError())
{
return
false;
}
}
TokenInformationLength
=
dwReturnLength;
TokenInformation
=
calloc(TokenInformationLength,
1
);
if
(!GetTokenInformation(hToken, TokenUser, TokenInformation, TokenInformationLength, &dwReturnLength))
{
return
false;
}
ConvertSidToStringSid(
*
(PSID
*
)TokenInformation, &StringSid);
}
while
(false);
if
(!TokenInformation)
{
free(TokenInformation);
TokenInformation
=
NULL;
}
if
(hToken)
{
CloseHandle(hToken);
hToken
=
NULL;
}
if
(hProcess)
{
CloseHandle(hProcess);
hProcess
=
NULL;
}
/
/
if
(hWindow)
/
/
{
/
/
CloseHandle(hWindow);
/
/
hWindow
=
NULL;
/
/
}
if
(bIsFail)
{
return
!bIsFail;
}
/
/
获取计算机名
char szComputerName[
256
]
=
{
0
};
DWORD dwSize
=
sizeof(szComputerName);
if
(!GetComputerName(szComputerName, &dwSize))
{
return
false;
}
/
/
生成校验码
int
nLength
=
0
;
char
*
pBuffer
=
NULL;
UINT8 result[
4
]
=
{
0
};
char szResult[
12
]
=
{
0
};
do
{
nLength
=
strlen(szVolumeId)
+
strlen(StringSid)
+
strlen(szComputerName)
+
sizeof(
'\0'
);
pBuffer
=
(char
*
)calloc(nLength,
1
);
if
(!pBuffer)
{
bIsFail
=
true;
break
;
}
sprintf_s(pBuffer, nLength,
"%s%s%s"
, szVolumeId, StringSid, szComputerName);
sub_402FF0_ASM((unsigned char
*
)pBuffer, strlen(pBuffer),
0x7A9
, sizeof(result), result, (unsigned char
*
*
)&unk_5D6B98);
sprintf_s(szResult, sizeof(szResult),
"%u"
,
*
(PDWORD)result);
strcat_s(szActId,
16
, szResult);
}
while
(false);
if
(pBuffer)
{
free(pBuffer);
pBuffer
=
NULL;
}
return
!bIsFail;
}
bool
CSourceInsightTool::GenerateSignatureFile(const char
*
sFilePath,
const char
*
sActId,
const char
*
sSerial,
const char
*
sLicensedUser,
const char
*
sOrganization,
const char
*
sEmail,
const char
*
sDate
)
{
/
/
char sRegisterInformation[]
=
"<!--SourceInsight4.xLicenseFileDONOTEDITTHISFILE.Doingsowillrenderitunusable.Thislicensewascreatedfor:userMicrosoftuser@user.com--><SourceInsightLicense><LicensePropertiesActId=\"673A2434362875\"Serial=\"S4SG-ARCD-EFGH-36V6\"LicensedUser=\"user\"Organization=\"Microsoft\"Email=\"user@user.com\"Type=\"Standard\"Version=\"4\"MinorVersion=\"0\"Date=\"2023-04-06\"/>\x00"
;
char sRegisterInformationFormat[]
=
"<!--SourceInsight4.xLicenseFileDONOTEDITTHISFILE.Doingsowillrenderitunusable.Thislicensewascreatedfor:%s%s%s--><SourceInsightLicense><LicensePropertiesActId=\"%s\"Serial=\"%s\"LicensedUser=\"%s\"Organization=\"%s\"Email=\"%s\"Type=\"Standard\"Version=\"4\"MinorVersion=\"0\"Date=\"%s\"/>"
;
char szRegisterInforamtion[
512
]
=
{
0
};
unsigned char szBinarySignature[
0x80
]
=
{
0
};
int
nSignatureLength
=
0
;
char szSignature[
0xFF
]
=
{
0
};
sprintf_s(szRegisterInforamtion, sizeof(szRegisterInforamtion), sRegisterInformationFormat,
sLicensedUser,
sOrganization,
sEmail,
sActId,
sSerial,
sLicensedUser,
sOrganization,
sEmail,
sDate
);
sub_402FF0_ASM((unsigned char
*
)szRegisterInforamtion,
strlen(szRegisterInforamtion)
+
1
,
0x7B0
,
sizeof(szBinarySignature),
szBinarySignature,
(unsigned char
*
*
)&unk_5D6B98
);
nSignatureLength
=
::base64_encode(szBinarySignature, sizeof(szBinarySignature), szSignature);
/
/
写文件
const char
*
sSignatureFileFormat
=
"<!--\r\n\tSource Insight 4.x License File\r\n\r\n\tDO NOT EDIT THIS FILE. Doing so will render it unusable.\r\n\r\n\tThis license was created for:\r\n\r\n\t\t%s\r\n\t\t%s\r\n\t\t%s\r\n\r\n-->\r\n<SourceInsightLicense>\r\n\t<LicenseProperties\r\n\t\tActId=\"%s\"\r\n\t\tSerial=\"%s\"\r\n\t\tLicensedUser=\"%s\"\r\n\t\tOrganization=\"%s\"\r\n\t\tEmail=\"%s\"\r\n\t\tType=\"Standard\"\r\n\t\tVersion=\"4\"\r\n\t\tMinorVersion=\"0\"\r\n\t\tDate=\"%s\"\r\n\t/>\r\n\t<Signature\r\n\t\tValue=\"%s\"\r\n\t/>\r\n</SourceInsightLicense>\r\n"
;
HANDLE hFile
=
NULL;
char szBuffer[
1024
]
=
{
0
};
DWORD dwNumberOfBytesWritten
=
0
;
sprintf_s(szBuffer, sizeof(szBuffer), sSignatureFileFormat,
sLicensedUser,
sOrganization,
sEmail,
sActId,
sSerial,
sLicensedUser,
sOrganization,
sEmail,
sDate,
szSignature
);
hFile
=
CreateFileA(sFilePath,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
dwNumberOfBytesWritten
=
strlen(szBuffer);
WriteFile(hFile, szBuffer, dwNumberOfBytesWritten, &dwNumberOfBytesWritten, NULL);
if
(hFile)
{
CloseHandle(hFile);
hFile
=
NULL;
}
return
true;
}