[Pascal] 纯文本查看 复制代码
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
k: array[0..7] of Byte = ($11, $22, $33, $9C, $55, $66, $77, $88);
Encode: array[0..255] of LongWord = (
$39CB44B8, $23754F67, $5F017211, $3EBB24DA, $351707C6, $63F9774B, $17827288, $0FE74821,
$5B5F670F, $48315AE8, $785B7769, $2B7A1547, $38D11292, $42A11B32, $35332244, $77437B60,
$1EAB3B10, $53810000, $1D0212AE, $6F0377A8, $43C03092, $2D3C0A8E, $62950CBF, $30F06FFA,
$34F710E0, $28F417FB, $350D2F95, $5A361D5A, $15CC060B, $0AFD13CC, $28603BCF, $3371066B,
$30CD14E4, $175D3A67, $6DD66A13, $2D3409F9, $581E7B82, $76526B99, $5C8D5188, $2C857971,
$15F51FC0, $68CC0D11, $49F55E5C, $275E4364, $2D1E0DBC, $4CEE7CE3, $32555840, $112E2E08,
$6978065A, $72921406, $314578E7, $175621B7, $40771DBF, $3FC238D6, $4A31128A, $2DAD036E,
$41A069D6, $25400192, $00DD4667, $6AFC1F4F, $571040CE, $62FE66DF, $41DB4B3E, $3582231F,
$55F6079A, $1CA70644, $1B1643D2, $3F7228C9, $5F141070, $3E1474AB, $444B256E, $537050D9,
$0F42094B, $2FD820E6, $778B2E5E, $71176D02, $7FEA7A69, $5BB54628, $19BA6C71, $39763A99,
$178D54CD, $01246E88, $3313537E, $2B8E2D17, $2A3D10BE, $59D10582, $37A163DB, $30D6489A,
$6A215C46, $0E1C7A76, $1FC760E7, $79B80C65, $27F459B4, $799A7326, $50BA1782, $2A116D5C,
$63866E1B, $3F920E3C, $55023490, $55B56089, $2C391FD1, $2F8035C2, $64FD2B7A, $4CE8759A,
$518504F0, $799501A8, $3F5B2CAD, $38E60160, $637641D8, $33352A42, $51A22C19, $085C5851,
$032917AB, $2B770AC7, $30AC77B3, $2BEC1907, $035202D0, $0FA933D3, $61255DF3, $22AD06BF,
$58B86971, $5FCA0DE5, $700D6456, $56A973DB, $5AB759FD, $330E0BE2, $5B3C0DDD, $495D3C60,
$53BD59A6, $4C5E6D91, $49D9318D, $103D5079, $61CE42E3, $7ED5121D, $14E160ED, $212D4EF2,
$270133F0, $62435A96, $1FA75E8B, $6F092FBE, $4A000D49, $57AE1C70, $004E2477, $561E7E72,
$468C0033, $5DCC2402, $78507AC6, $58AF24C7, $0DF62D34, $358A4708, $3CFB1E11, $2B71451C,
$77A75295, $56890721, $0FEF75F3, $120F24F1, $01990AE7, $339C4452, $27A15B8E, $0BA7276D,
$60DC1B7B, $4F4B7F82, $67DB7007, $4F4A57D9, $621252E8, $20532CFC, $6A390306, $18800423,
$19F3778A, $462316F0, $56AE0937, $43C2675C, $65CA45FD, $0D604FF2, $0BFD22CB, $3AFE643B,
$3BF67FA6, $44623579, $184031F8, $32174F97, $4C6A092A, $5FB50261, $01650174, $33634AF1,
$712D18F4, $6E997169, $5DAB7AFE, $7C2B2EE8, $6EDB75B4, $5F836FB6, $3C2A6DD6, $292D05C2,
$052244DB, $149A5F4F, $5D486540, $331D15EA, $4F456920, $483A699F, $3B450F05, $3B207C6C,
$749D70FE, $417461F6, $62B031F1, $2750577B, $29131533, $588C3808, $1AEF3456, $0F3C00EC,
$7DA74742, $4B797A6C, $5EBB3287, $786558B8, $00ED4FF2, $6269691E, $24A2255F, $62C11F7E,
$2F8A7DCD, $643B17FE, $778318B8, $253B60FE, $34BB63A3, $5B03214F, $5F1571F4, $1A316E9F,
$7ACF2704, $28896838, $18614677, $1BF569EB, $0BA85EC9, $6ACA6B46, $1E43422A, $514D5F0E,
$413E018C, $307626E9, $01ED1DFA, $49F46F5A, $461B642B, $7D7007F2, $13652657, $6B160BC5,
$65E04849, $1F526E1C, $5A0251B6, $2BD73F69, $2DBF7ACD, $51E63E80, $5CF2670F, $21CD0A03,
$5CFF0261, $33AE061E, $3BB6345F, $5D814A75, $257B5DF4, $0A5C2C5B, $16A45527, $16F23945
);
var
x: Integer;
k0xork6, k1xork7, k2xork5: Byte;
eeddxx: Integer;
eeaaxx1: Byte;
eeaaxx2: Integer;
eessii1: Integer;
function Encde(const a1: PAnsiChar; a2: Integer; a3: AnsiChar; a4: Integer): LongWord;
var
v4: PAnsiChar;
v5, v6: Integer;
v7, v13, v14, v15: Byte;
v8: Byte;
v9, v10, v12: LongWord;
v16: LongWord;
begin
v4 := a1;
v16 := 0;
v5 := StrLen(a1);
v6 := 0;
if v5 <= 0 then
begin
Result := 0;
Exit;
end;
v13 := 0;
v14 := 0;
v7 := 15 * a4;
v15 := 17 * Byte(a3);
repeat
v8 := Byte(UpCase(AnsiChar(v4[v6])));
v9 := v16 + Encode[v8];
if a2 <> 0 then
begin
v10 := Encode[v7] + Encode[v15] +
Encode[Byte(v8 + 47)] * (Encode[Byte(v8 + 13)] xor v9);
Result := Encode[v14] + v10;
v16 := Encode[v14] + v10;
end
else
begin
v12 := Encode[v7] + Encode[v15] +
Encode[Byte(v8 + 23)] * (Encode[Byte(v8 + 63)] xor v9);
Result := Encode[v13] + v12;
v16 := Encode[v13] + v12;
end;
v14 := v14 + 19;
Inc(v6);
v15 := v15 + 9;
v7 := v7 + 13;
v13 := v13 + 7;
v4 := a1;
until v6 >= v5;
end;
procedure w9c1;
var
k0: Byte;
al: Byte;
eax: LongWord;
begin
while True do
begin
k0 := Random($FF);
al := k0;
al := al xor k[6];
k0xork6 := al;
eax := al;
eax := eax xor $18;
eax := eax + $3D;
eax := eax xor $A7;
eeaaxx1 := eax and $FF;
if (eeaaxx1 <> 0) and (eeaaxx1 >= 10) then
begin
k[0] := k0;
Break;
end;
end;
end;
procedure w9c2;
var
k1, k2: Byte;
al: Byte;
eax, ecx: LongWord;
cx: Word;
begin
while True do
begin
k1 := Random($FF);
k2 := Random($FF);
al := k1 xor k[7];
ecx := al;
eax := $100;
cx := ecx and $FFFF;
cx := cx * Word(eax);
al := k2 xor k[5];
k2xork5 := al;
eax := al;
ecx := cx + eax;
eessii1 := ecx and $FFFF;
eax := ecx and $FFFF;
ecx := $B;
eax := eax xor $7892;
eax := eax + $4D30;
eax := eax xor $3421;
eax := eax and $FFFF;
eeddxx := eax mod ecx;
eeaaxx2 := eax div ecx;
if (eeddxx = 0) and (eeaaxx2 <> 0) and (eeaaxx2 = $3E7) then
begin
k[1] := k1;
k[2] := k2;
Break;
end;
end;
end;
procedure Reg9C(const a1: PAnsiChar);
var
En: LongWord;
edx: LongWord;
EnDl, r8, r10, r18: Byte;
begin
En := Encde(a1, 1, #0, $3E7);
edx := En;
EnDl := edx and $FF;
r8 := (edx shr 8) and $FF;
r10 := (edx shr 16) and $FF;
r18 := (edx shr 24) and $FF;
k[4] := EnDl;
k[5] := r8;
k[6] := r10;
k[7] := r18;
w9c1;
w9c2;
Writeln(Format('%2.2X%2.2X-%2.2X9C-%2.2X%2.2X-%2.2X%2.2X',
[k[0], k[1], k[2], k[4], k[5], k[6], k[7]]));
end;
procedure RegFC(const a1: PAnsiChar);
var
En: LongWord;
edx: LongWord;
EnDl, r8, r10, r18: Byte;
eeccxx, eeaaxx: LongWord;
k0, k1, k2: Byte;
ecx, eax: LongWord;
edx2: LongWord;
begin
En := Encde(a1, 0, #$FF, 1);
edx := En;
EnDl := edx and $FF;
r8 := (edx shr 8) and $FF;
r10 := (edx shr 16) and $FF;
r18 := (edx shr 24) and $FF;
k[4] := EnDl;
k[5] := r8;
k[6] := r10;
k[7] := r18;
while True do
begin
k2 := Random($FF);
k1 := Random($FF);
k0 := Random($FF);
ecx := k2 shl 8;
eax := k1;
ecx := ecx + eax;
ecx := ecx shl 8;
eax := k0;
ecx := ecx + eax;
ecx := ecx xor En;
ecx := ecx xor $22C078;
ecx := ecx - $2C175;
ecx := ecx xor $FFE53167;
ecx := ecx and $FFFFFF;
eax := $F0F0F0F1;
// 模拟 64位乘法
edx2 := (ecx * eax) shr 32;
edx2 := edx2 shr 4;
eax := edx2 shl 4;
eax := eax + edx2;
eeaaxx := eax;
eeccxx := ecx;
if eeccxx = eeaaxx then
begin
k[0] := k0;
k[1] := k1;
k[2] := k2;
Break;
end;
end;
Writeln(Format('%2.2X%2.2X-%2.2XFC-%2.2X%2.2X-%2.2X%2.2X',
[k[0], k[1], k[2], k[4], k[5], k[6], k[7]]));
end;
var
Username: array[0..99] of AnsiChar;
id: Integer;
input: string;
begin
Randomize;
while True do
begin
Write('请输入您的用户名称:');
Readln(input);
// 解析输入
if Pos(' ', input) > 0 then
begin
StrPCopy(Username, Copy(input, 1, Pos(' ', input) - 1));
id := StrToIntDef(Copy(input, Pos(' ', input) + 1, Length(input)), 0);
end
else
begin
StrPCopy(Username, input);
id := 0;
end;
case id of
0: Reg9C(Username);
1: RegFC(Username);
2: Exit;
end;
end;
end.