领航教育6算法分析与注册机核心代码
本帖最后由 vipcrack 于 2014-9-4 11:03 编辑涉及到商业版权,注册机源码和分析里省略掉N个码表的信息。
印象中是第2次见到利用汉字字符串作为加密算法取值的软件了,以高中版程序为例:
固定字符串为:
C7 AC B6 D2 C0 EB D5 F0 D9 E3 BF B2 F4 DE C0 A4乾兑离震巽坎艮坤
而小学的是:
87 55 8E 7E C9 EE 83 CC 8B 9B C5 DC 嘦巭深兲嫑跑....
下面以高中程序进行调试,简单记录算法过程
0059CCFD|.50 push eax
0059CCFE|.B9 D4CF5900 mov ecx, 0059CFD4 ;字符串
0059CD03|.BA E4CF5900 mov edx, 0059CFE4 ;系统本地信息
0059CD08|.8BC6 mov eax, esi
0059CD0A|.8B30 mov esi, dword ptr
0059CD0C|.FF16 call dword ptr ; function ReadString(const Section, Ident, Default: string): string; override
0059CD0E|.8B45 D4 mov eax, dword ptr ;堆栈 ss:=00E7B70C, (ASCII "4B4E")
0059CD11|.8D55 EC lea edx, dword ptr
0059CD14|.E8 8BC3E6FF call 004090A4 ; function Trim(const S: string): string
0059CD19|.8D45 D0 lea eax, dword ptr
0059CD1C|.50 push eax
0059CD1D|.A1 DC566300 mov eax, dword ptr
0059CD22|.8B00 mov eax, dword ptr
0059CD24|.B9 FCCF5900 mov ecx, 0059CFFC ;乾兑离震巽坎艮坤
0059CD29|.8B55 EC mov edx, dword ptr
0059CD2C|.E8 178C0000 call 005A5948 ;机器码前4个字母4B4E跟字串C7 AC B6 D2 C0 EB D5 F0 D9 E3 BF B2 F4 DE C0 A4处理
0059CD31|.8B45 D0 mov eax, dword ptr
0059CD34|.8D55 E8 lea edx, dword ptr
0059CD37|.E8 68C3E6FF call 004090A4 ; function Trim(const S: string): string
0059CD3C|.8B55 E8 mov edx, dword ptr ;处理结果转换成ASIIC数字,然后查表
0059CD3F|.8BC3 mov eax, ebx
0059CD41|.E8 9A030000 call 0059D0E0
0059CD46|.8D45 CC lea eax, dword ptr
0059CD49|.50 push eax
0059CD4A|.A1 DC566300 mov eax, dword ptr
0059CD4F|.8B00 mov eax, dword ptr
0059CD51|.B9 FCCF5900 mov ecx, 0059CFFC ;乾兑离震巽坎艮坤
0059CD56|.8B93 28030000mov edx, dword ptr ;查表结果(ASCII "A8A8CDB8AEA8ABC1CFC5B2BFA4CACDBA")
0059CD5C|.E8 E78B0000 call 005A5948 ;处理查表结果和固定字符串倒序的XOR,然后再跟机器码第2部分XOR处理操作
0059CD61|.8B45 CC mov eax, dword ptr
0059CD64|.8D55 E4 lea edx, dword ptr
0059CD67|.E8 38C3E6FF call 004090A4
0059CD6C|.E8 2BE9E6FF call 0040B69C
0059CD71|.83C4 F8 add esp, -0x8 ; /
0059CD74|.DD1C24 fstp qword ptr ; |Arg1 (8 字节)
0059CD77|.9B wait ; |
0059CD78|.8D55 F4 lea edx, dword ptr ; |
0059CD7B|.B8 18D05900 mov eax, 0059D018 ; |yyyymmdd
0059CD80|.E8 E7F5E6FF call 0040C36C ; \领航6教?0040C36C
0059CD85|.8D45 F8 lea eax, dword ptr
0059CD88|.50 push eax
0059CD89|.8D55 C8 lea edx, dword ptr
0059CD8C|.8B83 20030000mov eax, dword ptr
0059CD92|.E8 9DDBECFF call 0046A934
0059CD97|.8B45 C8 mov eax, dword ptr
0059CD9A|.E8 6D79E6FF call 0040470C ; function _LStrLen(const s: AnsiString): Longint
0059CD9F|.83E8 04 sub eax, 0x4
0059CDA2|.50 push eax
0059CDA3|.8D55 C4 lea edx, dword ptr
0059CDA6|.8B83 20030000mov eax, dword ptr
0059CDAC|.E8 83DBECFF call 0046A934
0059CDB1|.8B45 C4 mov eax, dword ptr
0059CDB4|.BA 05000000 mov edx, 0x5
0059CDB9|.59 pop ecx
0059CDBA|.E8 AD7BE6FF call 0040496C
0059CDBF|.8D45 FC lea eax, dword ptr
0059CDC2|.50 push eax
0059CDC3|.A1 DC566300 mov eax, dword ptr
0059CDC8|.8B00 mov eax, dword ptr
0059CDCA|.8B4D E4 mov ecx, dword ptr
0059CDCD|.8B55 F8 mov edx, dword ptr
0059CDD0|.E8 BB8D0000 call 005A5B90 ;机器码第2部分HEX每位跟查表结果循环每位正序XOR处理
没装程序,这个CALL的代码我省略掉了。
机器码格式494ELHCZDJB-CZSXRJXKB-Z2A8248X其中前4位是随机数得到,每次启动程序都不同,应该跟系统时间有关
机器码处理分为两部分——494E和 LHCZDJB-CZSXRJXKB-Z2A8248X(根据硬盘信息获取处理后的)
处理过程:
1、首先C7 AC B6 D2 C0 EB D5 F0 D9 E3 BF B2 F4 DE C0 A4乾兑离震巽坎艮坤 是固定字符串,与第一部分进行数据XOR处理,处理方式:
倒序上面的字符串得到新字符串 A4 C0 DE F4 B2 BF E3 D9 F0 D5 EB C0 D2 B6 AC C7
49 4E的计算步骤:
49 4E分别跟 A4进行XOR得到新字符串: 49 XOR A4 和 4E XOR A4 得到新字符串:ED EA
ED EA分别跟 C0进行XOR得到新字符串:2D 2A
2D 2A分别跟 DE进行XOR得到新字符串:
一直处理完成得到新字符串xx xx,XX组成的ASCII数字,就是查表的数值,比如得到数据位3130,则查表位是10,对应的码表假设是: CFC5B6C3CED3BCB7AEA8B68FC9C9
2、和上面4位字符处理一样,用CF C5 B6 C3 CE D3 BC B7 AE A8 B6 8F C9 C9的每2位跟字符串 A4 C0 DE F4 B2 BF E3 D9 F0 D5 EB C0 D2 B6 AC C7的每一位XOR
CF C5 B6 C3 CE D3 BC B7 AE A8 B6 8F C9 C9分别XOR A4,得到新字符串,新字符串每位继续XOR C0,一直到结束,得到新字符串。
1,2步的循环可以简化:C7 AC B6 D2 C0 EB D5 F0 D9 E3 BF B2 F4 DE C0 A4 先每位XOR,得到的结果是0x78,直接用前4位每2位XOR,得到新字符串查表。
查表的结果再和0x78处理得到新字符串,新字符串自己XOR,得到一个数值,这个数值和机器码第2部分的HEX字符串处理即可。
3、把机器码第2部分字符的HEX进行连接组成新字符串:LHCZDJB-CZSXRJXKB-Z2A8248X转换为:"4C48435A444A422D435A5358524A584B422D5A32413832343858"
用"4C48435A444A422D435A5358524A584B422D5A32413832343858" 的每位XOR 第2步得到的新字符串的每位,类似处理得到最终结果为注册码
//////////////////////////////////////////////////////////////////////////////////////////
1,2步的循环可以简化:C7 AC B6 D2 C0 EB D5 F0 D9 E3 BF B2 F4 DE C0 A4 先每位XOR,得到的结果是0x78,直接用前4位每2位XOR,得到新字符串查表。
查表的结果再和0x78处理得到新字符串,新字符串自己XOR,得到一个数值,这个数值和机器码第2部分的HEX字符串处理即可。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
码表:
1 BFD4B8DCB5B5BBB1A890B3B7B2DE
//
//
//
//
//
//
//
//为了版权问题,此处省略N个码表内容
//
//
//
//
//
//
//
DELPHI算法核心代码:
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d,i,l:integer;
s,s1,s2,s4,sn1,sn2,mb,sn3:String;
begin
s:=Edit1.Text;
if s='' then exit;
s1:=copy(s,1,2);
s2:=copy(s,3,2);
a:=strtoint('$'+s1);
b:=strtoint('$'+s2);
c:=a xor $43;
d:=b xor $43;
//sn:=inttohex(c,2)+inttohex(d,2);计算结果
sn1:=hextostr(inttohex(c,2))+hextostr(inttohex(d,2)); //计算出来的是查表的16进制的索引值
//根据索引值的16进制取码表字符串,然后再跟$78进行XOR运算,得到新字符串
//************************************************************************************************************//
//处理码表数据
if sn1='01' then mb:='B6A0B5F7C5B1C5EFDDA5DCD8C0E4';
//
//
//
//
//
//
//
//为了版权问题,此处省略N个码表内容
//
//
//
//
//
//
//
l:=length(mb);
for i:=1 to l div 2 do
begin
s1:=copy(mb,2*i-1,2);
sn2:=sn2+inttohex((strtoint('$'+s1) xor $43),2); //C8CBD0D4C9C6B6F1E5EBB3DFD6AEBCE4
end;
//*************************************************************************************************************//
//码表处理后的新字符串自身XOR结果计算
mb:=sn2; //C8 CB D0 D4 C9 C6 B6 F1 E5 EB B3 DF D6 AE BC E4
sn2:='0';
for i:=1 to length(mb) div 2 do
begin
s4:=copy(mb,2*i-1,2);
sn2:=inttohex((strtoint('$'+sn2) xor strtoint('$'+s4)),2); //0D
end;
//************************************************************************************************************//
//处理机器码第2部分
s:=copy(s,5,length(s)-16);//小学和高中,去掉前面4位和后面12位字符,初中只去掉前4位
sn3:='';
for i:=1 to length(s) do
begin
sn3:=sn3+inttohex(ord(s),2); // //取字母的HEX
end;
s:=sn3;
sn3:='';
for i:=1 to length(s) div 2 do
begin
s4:=copy(s,2*i-1,2);
sn3:=sn3+inttohex((strtoint('$'+s4) xor strtoint('$'+sn2)),2);//循环处理
end;
Edit2.Text:=sn3 ;
end;
看下能不能抢到沙发。。。。 可怕的算法大神VIP。。。 太牛了....两个VIP实在厉害 大牛额,顶起来,学习了 F8LEFT 发表于 2014-9-4 15:20
可怕的算法大神VIP。。。
同感~~~
算法大神,膜拜学习了 分析不错..... 只能拜膜,呵呵。 牛人呀。
页:
[1]
2