简单分析QQ聊天记录查看器5.3版。
附注册机源码:
为了找到自已的QQ密码,网上狂搜,的确没有有效的软件。Download这个东东,还要注册。无聊看了一下。贴给别人看。
呵无密码查看聊天记录,还真的有效。
0046EF2F |. E8 2096FCFF call 00438554 ; 取得输入的假注册码1234567890123456,返回它的长度0x10
0046EF34 |. 8B55 F4 mov edx, dword ptr [ebp-C]
0046EF37 |. B8 E89C4800 mov eax, 00489CE8 ; ASCII "(n?
0046EF3C |. E8 8F53F9FF call 004042D0
0046EF41 |. A1 E89C4800 mov eax, dword ptr [489CE8]
0046EF46 |. E8 19FDFFFF call 0046EC64 ; 对输入的注册码进行简的Xor运算,并对比真假
0046EF4B |. A3 EC9C4800 mov dword ptr [489CEC], eax
0046EF50 |. 833D EC9C4800>cmp dword ptr [489CEC], 0
0046EF57 |. 74 34 je short 0046EF8D
0046EF59 |. 6A 00 push 0
0046EF5B |. A1 E89C4800 mov eax, dword ptr [489CE8]
0046EF60 |. E8 C757F9FF call 0040472C
0046EF65 |. 50 push eax
0046EF66 |. 68 D0EF4600 push 0046EFD0 ; 注册成功
0046EF6B |. 8B45 FC mov eax, dword ptr [ebp-4]
=====================================================================================
0046EC64 /$ 55 push ebp
0046EC65 |. 8BEC mov ebp, esp
0046EC67 |. 83C4 C8 add esp, -38
0046EC6A |. 8945 FC mov dword ptr [ebp-4], eax ; 假注册码1234567890123456
0046EC6D |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EC70 |. E8 A75AF9FF call 0040471C
0046EC75 |. 33C0 xor eax, eax
0046EC77 |. 55 push ebp
0046EC78 |. 68 A3ED4600 push 0046EDA3
0046EC7D |. 64:FF30 push dword ptr fs:[eax]
0046EC80 |. 64:8920 mov dword ptr fs:[eax], esp
0046EC83 |. 33C0 xor eax, eax
0046EC85 |. 8945 F8 mov dword ptr [ebp-8], eax
0046EC88 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EC8B |. E8 A458F9FF call 00404534
0046EC90 |. 83F8 10 cmp eax, 10 ; 注册码长度为0x10位
0046EC93 |. 0F8C F4000000 jl 0046ED8D
0046EC99 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EC9C |. E8 9358F9FF call 00404534
0046ECA1 |. 83F8 10 cmp eax, 10
0046ECA4 |. 0F8F E3000000 jg 0046ED8D
0046ECAA |. 8B45 FC mov eax, dword ptr [ebp-4] ; 假注册码
0046ECAD |. BA BCED4600 mov edx, 0046EDBC ; 1163659294813585
0046ECB2 |. E8 C159F9FF call 00404678
0046ECB7 |. 0F84 D0000000 je 0046ED8D
0046ECBD |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECC0 |. BA D8ED4600 mov edx, 0046EDD8 ; 0386848021608060
0046ECC5 |. E8 AE59F9FF call 00404678
0046ECCA |. 0F84 BD000000 je 0046ED8D
0046ECD0 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECD3 |. BA F4ED4600 mov edx, 0046EDF4 ; 8319e4005f00pyg0 //呵呵,这可是PYG的标记?
0046ECD8 |. E8 9B59F9FF call 00404678
0046ECDD |. 0F84 AA000000 je 0046ED8D
0046ECE3 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECE6 |. BA 10EE4600 mov edx, 0046EE10 ; 0566838690673180
0046ECEB |. E8 8859F9FF call 00404678
0046ECF0 |. 0F84 97000000 je 0046ED8D ; 以上都是黑名单
0046ECF6 |. 33C0 xor eax, eax
0046ECF8 |. 8945 DC mov dword ptr [ebp-24], eax
0046ECFB |> 8B45 FC /mov eax, dword ptr [ebp-4] ; 假注册码
0046ECFE |. 8B55 DC |mov edx, dword ptr [ebp-24]
0046ED01 |. 8A0410 |mov al, byte ptr [eax+edx]
0046ED04 |. E8 13FFFFFF |call 0046EC1C
0046ED09 |. 8B55 DC |mov edx, dword ptr [ebp-24]
0046ED0C |. 884415 CB |mov byte ptr [ebp+edx-35], al
0046ED10 |. FF45 DC |inc dword ptr [ebp-24]
0046ED13 |. 837D DC 10 |cmp dword ptr [ebp-24], 10
0046ED17 |.^ 75 E2 \jnz short 0046ECFB ; 0012F2CB 01 02 03 04 05 06 07 08 09 00 01 02 03 04 05 06 ..
//------------------------------------------------------------------------
0046EC1C /$ 55 push ebp
0046EC1D |. 8BEC mov ebp, esp
0046EC1F |. 51 push ecx
0046EC20 |. 8845 FF mov byte ptr [ebp-1], al
0046EC23 |. 807D FF 30 cmp byte ptr [ebp-1], 30
0046EC27 |. 72 10 jb short 0046EC39
0046EC29 |. 807D FF 39 cmp byte ptr [ebp-1], 39
0046EC2D |. 77 0A ja short 0046EC39
0046EC2F |. 8A45 FF mov al, byte ptr [ebp-1]
0046EC32 |. 2C 30 sub al, 30
0046EC34 |. 8845 FD mov byte ptr [ebp-3], al
0046EC37 |. EB 1C jmp short 0046EC55
0046EC39 |> 807D FF 41 cmp byte ptr [ebp-1], 41
0046EC3D |. 72 12 jb short 0046EC51
0046EC3F |. 807D FF 46 cmp byte ptr [ebp-1], 46
0046EC43 |. 77 0C ja short 0046EC51
0046EC45 |. 8A45 FF mov al, byte ptr [ebp-1]
0046EC48 |. 2C 41 sub al, 41
0046EC4A |. 04 0A add al, 0A
0046EC4C |. 8845 FD mov byte ptr [ebp-3], al
0046EC4F |. EB 04 jmp short 0046EC55
0046EC51 |> C645 FD FF mov byte ptr [ebp-3], 0FF ;如果是小写字母,则以FF代替,否则原样输出
0046EC55 |> 8A45 FD mov al, byte ptr [ebp-3]
0046EC58 |. 8845 FE mov byte ptr [ebp-2], al
0046EC5B |. 8A45 FE mov al, byte ptr [ebp-2]
0046EC5E |. 59 pop ecx
0046EC5F |. 5D pop ebp
0046EC60 \. C3 retn
//---------------------------------------------------------------------------------
0046ED19 |. 33C0 xor eax, eax
0046ED1B |. 8945 E0 mov dword ptr [ebp-20], eax
0046ED1E |> 8B45 E0 /mov eax, dword ptr [ebp-20] ;假注册码,两两组合成一个新的Byte
0046ED21 |. 03C0 |add eax, eax
0046ED23 |. 8A4405 CC |mov al, byte ptr [ebp+eax-34]
0046ED27 |. C1E0 04 |shl eax, 4
0046ED2A |. 8B55 E0 |mov edx, dword ptr [ebp-20]
0046ED2D |. 03D2 |add edx, edx
0046ED2F |. 024415 CB |add al, byte ptr [ebp+edx-35]
0046ED33 |. 8B55 E0 |mov edx, dword ptr [ebp-20]
0046ED36 |. 884415 EF |mov byte ptr [ebp+edx-11], al
0046ED3A |. FF45 E0 |inc dword ptr [ebp-20]
0046ED3D |. 837D E0 09 |cmp dword ptr [ebp-20], 9
0046ED41 |.^ 75 DB \jnz short 0046ED1E ; 0012F2EF 21 43 65 87 09 21 43 65 就称为N1..N8吧
0046ED43 |. 8A45 F2 mov al, byte ptr [ebp-E] ;现在捉对厮杀
0046ED46 |. 3245 EF xor al, byte ptr [ebp-11] ;N1 xor N4
0046ED49 |. 8845 E6 mov byte ptr [ebp-1A], al
0046ED4C |. 8A45 F0 mov al, byte ptr [ebp-10]
0046ED4F |. 3245 F6 xor al, byte ptr [ebp-A] ;N2 xor N8
0046ED52 |. 8845 E7 mov byte ptr [ebp-19], al
0046ED55 |. 8A45 F1 mov al, byte ptr [ebp-F]
0046ED58 |. 3245 F4 xor al, byte ptr [ebp-C] ;N3 xor N6
0046ED5B |. 8845 E8 mov byte ptr [ebp-18], al
0046ED5E |. 8A45 F5 mov al, byte ptr [ebp-B]
0046ED61 |. 3245 F3 xor al, byte ptr [ebp-D] ;N5 xor N7
0046ED64 |. 8845 E9 mov byte ptr [ebp-17], al ;以上是逐对进行Xor,生成另一组Byte
0046ED67 |. 807D E6 38 cmp byte ptr [ebp-1A], 38 ;结果与常数比对,第一个Byte
0046ED6B |. 75 1B jnz short 0046ED88
0046ED6D |. 807D E7 6E cmp byte ptr [ebp-19], 6E ;第二个Byte
0046ED71 |. 75 15 jnz short 0046ED88
0046ED73 |. 807D E8 4E cmp byte ptr [ebp-18], 4E ;第三个Byte
0046ED77 |. 75 0F jnz short 0046ED88
0046ED79 |. 807D E9 1A cmp byte ptr [ebp-17], 1A ;第四个Byte
0046ED7D |. 75 09 jnz short 0046ED88
0046ED7F |. C745 F8 FFFFF>mov dword ptr [ebp-8], -1 ; 注册标志赋值
0046ED86 |. EB 05 jmp short 0046ED8D
0046ED88 |> 33C0 xor eax, eax
0046ED8A |. 8945 F8 mov dword ptr [ebp-8], eax ; 注册标志得到0,注册失败
0046ED8D |> 33C0 xor eax, eax
0046ED8F |. 5A pop edx
0046ED90 |. 59 pop ecx
0046ED91 |. 59 pop ecx
0046ED92 |. 64:8910 mov dword ptr fs:[eax], edx
0046ED95 |. 68 AAED4600 push 0046EDAA
0046ED9A |> 8D45 FC lea eax, dword ptr [ebp-4]
0046ED9D |. E8 DA54F9FF call 0040427C
0046EDA2 \. C3 retn
===============================================================================
假设输入假注册码:
1234567890123456
简单处理之,如果是小写字母则以FF代替,否则原样输出:
即:
01 02 03 04 05 06 07 08 09 00 01 02 03 04 05 06
简单处理成:
21 43 65 87 09 21 43 65
我且依序取名为:
N1 N2 N3 N4 N5 N6 N7 N8
简单的Xor运算:
N1 xor N4==A6 结果如果是38则通过
N2 xor N8==26 结果如果是6E则通过
N3 xor N6==44 结果如果是4E则通过
N5 xor N7==4A 结果如果是1A则通过
判断:
A6==38
26==6E
44==4E
4A==1A
//=============================================================================
于是有简单的注册机:
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('Code by wofan[OCN]'+#13+'QQ:339171218'+#13+'2007-3-27');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SN:array[0..15] of byte;
t:array[0..3] of byte;
i:integer;
str:string;
begin
Randomize;
{
SN_str:='';
fillchar(sn,sizeof(sn),0);
fillchar(t,sizeof(t),0);
}
SN[0]:=random(10); //随机生成第某些位置的注册码字符
SN[1]:=random(10); //Random(x)将生成一个0<=num<x的数
SN[2]:=random(10);
SN[3]:=random(10);
SN[4]:=random(10);
SN[5]:=random(10);
SN[8]:=random(10);
SN[9]:=random(10);
t[0]:=(SN[1] shl 4+SN[0]) xor $38; //捉对厮杀
t[1]:=(SN[3] shl 4+SN[2]) xor $6E;
t[2]:=(SN[5] shl 4+SN[4]) xor $4E;
t[3]:=(SN[9] shl 4+SN[8]) xor $1A;
SN[7]:=t[0] shr 4; //从结果中提取出注册字符
SN[6]:=t[0] and $F;
SN[15]:=t[1] shr 4;
SN[14]:=t[1] and $F;
SN[11]:=t[2] shr 4;
SN[10]:=t[2] and $F;
SN[13]:=t[3] shr 4;
SN[12]:=t[3] and $F;
for i:=0 to 15 do
SN_str:=SN_str+inttohex(SN[i],1);
edit1.Text:=SN_str; //输出注册码
end;
这应该算是一个灰色软件。
用Baidu一搜,居然有很多爆破版,晕死!这个简单的东西怎么要用爆破。软件作者还在里面记录了黑名单!现在好了,用注册机生成无限个注册码,不知这个记录会有多长。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课