不容易啊!用了两百多个小时,终于把384位的大数都分解出来。
A Speeder 的注册算法中包括两次RSA操作,
第一次RSA的模N1为:
A7456C12309EAF6BEF610A5B1F408D62B4AF7775E167656C236BC3B8D77F587E92D80DB14AC83281(320 Bits);
第二次RSA的模N2为:
C985F97A3C4E0D3BF7D35DC4148E5C47749076D668CA8464A6D2CCFB1B26183623315E5450610784D974ED5E9702A451(384 Bits)。
工具:msieve 1.48 + 默认参数
环境:处理器:DualCore Intel Pentium E5300, 2633 MHz
内存:Kingston 2 GB DDR2-800
运行时:CPU占用50%,内存占用由开始的几十M到后来的一百五十M左右
分解结果:
第一次:
Public Exponent(E)[Hex]: D0330A59
Modulus(N): A7456C12309EAF6BEF610A5B1F408D62B4AF7775E167656C236BC3B8D77F587E92D80DB14AC83281 (320 bits)
1395660439721015270126240845153599129950924567822737384396748786425066836865869715998909791744641 (97 digits)
1st Prime(P): B9ACE5158C6DF974656CC7B9AB55B4BE587BECE1
2nd Prime(Q): E6A00E0E0F2B1EAC015ECE4747BE2782513E59A1
Private Exponent(D): 70F9DBA8CE783C0EAE3A919CF19375555DFBFAA44B1829A87F5E22D89364CC7A4397CAA2444181E9
耗时:03:24:53
第二次:
Public Exponent(E)[Hex]: D0330A59
Modulus(N): C985F97A3C4E0D3BF7D35DC4148E5C47749076D668CA8464A6D2CCFB1B26183623315E5450610784D974ED5E9702A451 (384 bits)
31017280513987652525152470475453447548754507323789647108338589020372858265164301167949291293516476040979435659371601 (116 digits)
1st Prime(P): E23A4A70ABBBFBD3D355386C3BECFB780327972E121731D9
2nd Prime(Q): E40B6214CB1475663200AE630875649A059CE05EAF7B0339
Private Exponent(D): 70A886ACC2BB10A2A668B4497012873DBE0F92B92481EF922E0E6FE70EE9AEBBFA11D83CEFA47D92612F14BEC1DA02E9
耗时:208:46:36
注册算法(00404E1F到00405188之间)的C伪代码如下:
N = 0; E = 0; X1 = 0; X2 = 0; C = 0; sprintf(&out, "%X", 0xD0330A59u); zhsread(&out, (int)&E); sprintf(&out, "%X", 0xA7456C12u); sprintf(&v14, "%X", 0x309EAF6Bu); sprintf(&v15, "%X", 0xEF610A5Bu); sprintf(&v16, "%X", 0x1F408D62u); sprintf(&v17, "%X", 0xB4AF7775u); sprintf(&v18, "%X", 0xE167656Cu); sprintf(&v19, "%X", 0x236BC3B8u); sprintf(&v20, "%X", 0xD77F587Eu); sprintf(&v21, "%X", 0x92D80DB1u); sprintf(&v22, "%X", 0x4AC83281u); zhsread(&out, (int)&N); sprintf(&out, "%08X", *(_DWORD *)arglist); Encrypt(&out, (int)&C); zexpmod(C, E, N, (int)&X1); Decrypt(&out, X1); strcat(&out, "ABSQ2009"); Encrypt(&out, (int)&X1); sprintf(&out, "%X", 0xC985F97Au); sprintf(&v14, "%X", 0x3C4E0D3Bu); sprintf(&v15, "%X", 0xF7D35DC4u); sprintf(&v16, "%X", 0x148E5C47u); sprintf(&v17, "%X", 0x749076D6u); sprintf(&v18, "%X", 0x68CA8464u); sprintf(&v19, "%X", 0xA6D2CCFBu); sprintf(&v20, "%X", 0x1B261836u); sprintf(&v21, "%X", 0x23315E54u); sprintf(&v22, "%X", 0x50610784u); sprintf(&v23, "%X", 0xD974ED5Eu); sprintf(&v24, "%X", 0x9702A451u); zhsread(&out, (int)&N); Encrypt(register, (int)&C); zexpmod(C, E, N, (int)&X2); Decrypt(&out, X2); RegFlag = zcompare(X1, X2) == 0; zfree(&N); zfree(&E); zfree(&X1); zfree(&X2); zfree(&C); if ( RegFlag )
《A变速器算法分析》里的fun1和fun2其实是加密和解密对,另外就是老版本的连接字串是“ASPEEDER”,新版本的是“ABSQ2009”。
Word文档 A Speeder 注册机.doc