wofan 发表于 2007-3-27 14:29:45

QQ聊天记录察看器 5.3分析及注册机源码

QQ聊天记录察看器 5.3
简单分析QQ聊天记录查看器5.3版。
附注册机源码:
为了找到自已的QQ密码,网上狂搜,的确没有有效的软件。Download这个东东,还要注册。无聊看了一下。贴给别人看。
呵无密码查看聊天记录,还真的有效。

0046EF2F|.E8 2096FCFF   call    00438554                         ;取得输入的假注册码1234567890123456,返回它的长度0x10
0046EF34|.8B55 F4       mov   edx, dword ptr
0046EF37|.B8 E89C4800   mov   eax, 00489CE8                  ;ASCII "(n?
0046EF3C|.E8 8F53F9FF   call    004042D0
0046EF41|.A1 E89C4800   mov   eax, dword ptr
0046EF46|.E8 19FDFFFF   call    0046EC64                         ;对输入的注册码进行简的Xor运算,并对比真假
0046EF4B|.A3 EC9C4800   mov   dword ptr , eax
0046EF50|.833D EC9C4800>cmp   dword ptr , 0
0046EF57|.74 34         je      short 0046EF8D
0046EF59|.6A 00         push    0
0046EF5B|.A1 E89C4800   mov   eax, dword ptr
0046EF60|.E8 C757F9FF   call    0040472C
0046EF65|.50            push    eax
0046EF66|.68 D0EF4600   push    0046EFD0                         ;注册成功
0046EF6B|.8B45 FC       mov   eax, dword ptr

=====================================================================================

0046EC64/$55            push    ebp
0046EC65|.8BEC          mov   ebp, esp
0046EC67|.83C4 C8       add   esp, -38
0046EC6A|.8945 FC       mov   dword ptr , eax         ;假注册码1234567890123456
0046EC6D|.8B45 FC       mov   eax, dword ptr
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:
0046EC80|.64:8920       mov   dword ptr fs:, esp
0046EC83|.33C0          xor   eax, eax
0046EC85|.8945 F8       mov   dword ptr , eax
0046EC88|.8B45 FC       mov   eax, dword ptr
0046EC8B|.E8 A458F9FF   call    00404534
0046EC90|.83F8 10       cmp   eax, 10                        ;注册码长度为0x10位
0046EC93|.0F8C F4000000 jl      0046ED8D
0046EC99|.8B45 FC       mov   eax, dword ptr
0046EC9C|.E8 9358F9FF   call    00404534
0046ECA1|.83F8 10       cmp   eax, 10
0046ECA4|.0F8F E3000000 jg      0046ED8D
0046ECAA|.8B45 FC       mov   eax, dword ptr          ;假注册码
0046ECAD|.BA BCED4600   mov   edx, 0046EDBC                  ;1163659294813585
0046ECB2|.E8 C159F9FF   call    00404678
0046ECB7|.0F84 D0000000 je      0046ED8D
0046ECBD|.8B45 FC       mov   eax, dword ptr
0046ECC0|.BA D8ED4600   mov   edx, 0046EDD8                  ;0386848021608060
0046ECC5|.E8 AE59F9FF   call    00404678
0046ECCA|.0F84 BD000000 je      0046ED8D
0046ECD0|.8B45 FC       mov   eax, dword ptr
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
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 , eax
0046ECFB|>8B45 FC       /mov   eax, dword ptr           ;假注册码
0046ECFE|.8B55 DC       |mov   edx, dword ptr
0046ED01|.8A0410      |mov   al, byte ptr
0046ED04|.E8 13FFFFFF   |call    0046EC1C
0046ED09|.8B55 DC       |mov   edx, dword ptr
0046ED0C|.884415 CB   |mov   byte ptr , al
0046ED10|.FF45 DC       |inc   dword ptr
0046ED13|.837D DC 10    |cmp   dword ptr , 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 , al
0046EC23|.807D FF 30    cmp   byte ptr , 30
0046EC27|.72 10         jb      short 0046EC39
0046EC29|.807D FF 39    cmp   byte ptr , 39
0046EC2D|.77 0A         ja      short 0046EC39
0046EC2F|.8A45 FF       mov   al, byte ptr
0046EC32|.2C 30         sub   al, 30
0046EC34|.8845 FD       mov   byte ptr , al
0046EC37|.EB 1C         jmp   short 0046EC55
0046EC39|>807D FF 41    cmp   byte ptr , 41
0046EC3D|.72 12         jb      short 0046EC51
0046EC3F|.807D FF 46    cmp   byte ptr , 46
0046EC43|.77 0C         ja      short 0046EC51
0046EC45|.8A45 FF       mov   al, byte ptr
0046EC48|.2C 41         sub   al, 41
0046EC4A|.04 0A         add   al, 0A
0046EC4C|.8845 FD       mov   byte ptr , al
0046EC4F|.EB 04         jmp   short 0046EC55
0046EC51|>C645 FD FF    mov   byte ptr , 0FF    ;如果是小写字母,则以FF代替,否则原样输出
0046EC55|>8A45 FD       mov   al, byte ptr
0046EC58|.8845 FE       mov   byte ptr , al
0046EC5B|.8A45 FE       mov   al, byte ptr
0046EC5E|.59            pop   ecx
0046EC5F|.5D            pop   ebp
0046EC60\.C3            retn
//---------------------------------------------------------------------------------
0046ED19|.33C0          xor   eax, eax
0046ED1B|.8945 E0       mov   dword ptr , eax
0046ED1E|>8B45 E0       /mov   eax, dword ptr       ;假注册码,两两组合成一个新的Byte
0046ED21|.03C0          |add   eax, eax
0046ED23|.8A4405 CC   |mov   al, byte ptr
0046ED27|.C1E0 04       |shl   eax, 4
0046ED2A|.8B55 E0       |mov   edx, dword ptr
0046ED2D|.03D2          |add   edx, edx
0046ED2F|.024415 CB   |add   al, byte ptr
0046ED33|.8B55 E0       |mov   edx, dword ptr
0046ED36|.884415 EF   |mov   byte ptr , al
0046ED3A|.FF45 E0       |inc   dword ptr
0046ED3D|.837D E0 09    |cmp   dword ptr , 9
0046ED41|.^ 75 DB         \jnz   short 0046ED1E                ;0012F2EF21 43 65 87 09 21 43 65 就称为N1..N8吧
0046ED43|.8A45 F2       mov   al, byte ptr          ;现在捉对厮杀
0046ED46|.3245 EF       xor   al, byte ptr           ;N1 xor N4
0046ED49|.8845 E6       mov   byte ptr , al
0046ED4C|.8A45 F0       mov   al, byte ptr
0046ED4F|.3245 F6       xor   al, byte ptr          ;N2 xor N8
0046ED52|.8845 E7       mov   byte ptr , al
0046ED55|.8A45 F1       mov   al, byte ptr
0046ED58|.3245 F4       xor   al, byte ptr          ;N3 xor N6
0046ED5B|.8845 E8       mov   byte ptr , al
0046ED5E|.8A45 F5       mov   al, byte ptr
0046ED61|.3245 F3       xor   al, byte ptr          ;N5 xor N7
0046ED64|.8845 E9       mov   byte ptr , al         ;以上是逐对进行Xor,生成另一组Byte
0046ED67|.807D E6 38    cmp   byte ptr , 38         ;结果与常数比对,第一个Byte
0046ED6B|.75 1B         jnz   short 0046ED88
0046ED6D|.807D E7 6E    cmp   byte ptr , 6E          ;第二个Byte
0046ED71|.75 15         jnz   short 0046ED88
0046ED73|.807D E8 4E    cmp   byte ptr , 4E          ;第三个Byte
0046ED77|.75 0F         jnz   short 0046ED88
0046ED79|.807D E9 1A    cmp   byte ptr , 1A          ;第四个Byte
0046ED7D|.75 09         jnz   short 0046ED88
0046ED7F|.C745 F8 FFFFF>mov   dword ptr , -1          ;注册标志赋值
0046ED86|.EB 05         jmp   short 0046ED8D
0046ED88|>33C0          xor   eax, eax
0046ED8A|.8945 F8       mov   dword ptr , 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:, edx
0046ED95|.68 AAED4600   push    0046EDAA
0046ED9A|>8D45 FC       lea   eax, dword ptr
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'+#13+'QQ:339171218'+#13+'2007-3-27');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
SN:array of byte;
t:array of byte;
i:integer;
str:string;
begin
Randomize;
{
SN_str:='';
fillchar(sn,sizeof(sn),0);
fillchar(t,sizeof(t),0);
}
SN:=random(10);   //随机生成第某些位置的注册码字符
SN:=random(10);   //Random(x)将生成一个0<=num<x的数

SN:=random(10);
SN:=random(10);

SN:=random(10);
SN:=random(10);

SN:=random(10);
SN:=random(10);

t:=(SN shl 4+SN) xor $38;//捉对厮杀
t:=(SN shl 4+SN) xor $6E;
t:=(SN shl 4+SN) xor $4E;
t:=(SN shl 4+SN) xor $1A;

SN:=t shr 4;         //从结果中提取出注册字符
SN:=t and $F;
SN:=t shr 4;
SN:=t and $F;
SN:=t shr 4;
SN:=t and $F;
SN:=t shr 4;
SN:=t and $F;

for i:=0 to 15 do
    SN_str:=SN_str+inttohex(SN,1);
edit1.Text:=SN_str;      //输出注册码
end;

bhcjl 发表于 2007-4-1 09:35:31

注册机源码怎么用

coolmy 发表于 2007-4-15 21:45:01

这个不错!学习下了!

lly 发表于 2007-11-2 16:22:37

SN_str:=SN_str+inttohex(SN,1);
inttohex这里编译通过不了的啊?

var
SN:array of byte;
t:array of byte;
i:integer;
str:string;//这个变量应该是SN_str吧?

fengasdf 发表于 2007-11-19 16:37:30

学习,不断提高自己
页: [1]
查看完整版本: QQ聊天记录察看器 5.3分析及注册机源码