• 标 题:Windows System Optimizer V3.1算法分析  
  • 作 者:wzh123
  • 时 间:2003/04/21 02:21pm 
  • 链 接:http://bbs.pediy.com

Windows System Optimizer V3.1算法分析

作者:wzh123

软件大小:  1196 KB
软件语言:  英文
软件类别:  国外软件 / 共享版 / 系统设置
应用平台:  Win9x/NT/2000/XP
软件介绍:  Windows System Optimizer是一个非常不错的系统优化软件,主要包含系统安全优化,文件系统优化,注册表优化,IE浏览器优化,网络优化,和一般优化六个部分,可以帮助你全面的为系统加速,程序界面简单清晰,分类明确,非常容易使用!


PJ工具:TRW20001.23注册版,W32Dasm8.93黄金版,FI2.5
作者申明:只是学习,无其他目的。

1、软件没有加壳,用vc++编的;
2、用TRW20001.23注册版,输入试验码:a12-b34567-c89(跟踪可知格式),下断点,确定,过程不多说了,大家跟一下就知道了,直接说核心吧。(其实这个软件是以前破的,现在手上只留下了关于算法的笔记,自己又不想再跟一次,所以只有算法分析这一块,请大家谅解。另一方面,我觉得光看教程是一方面,关键自己要亲自操练一下才能有更大的收获,本人也是刚刚学破解,第一次写这种东西,错误在所难免,写的也很乱,请各位包涵,也请各位高手指教)

:0040D7D0 52                      push edx    
:0040D7D1 E8EAFEFFFF              call 0040D6C0
:0040D7D6 8B542443                mov edx, dword ptr [esp+43]
:0040D7DA 88442418                mov byte ptr [esp+18], al
:0040D7DE 52                      push edx
:0040D7DF E8DCFEFFFF              call 0040D6C0
:0040D7E4 8AD8                    mov bl, al
:0040D7E6 8B44244C                mov eax, dword ptr [esp+4C]
:0040D7EA 50                      push eax
:0040D7EB 885C245C                mov byte ptr [esp+5C], bl
:0040D7EF E8CCFEFFFF              call 0040D6C0
:0040D7F4 8A4C2420                mov cl, byte ptr [esp+20]
:0040D7F8 83C40C                  add esp, 0000000C
:0040D7FB 3ACB                    cmp cl, bl
:0040D7FD 88442410                mov byte ptr [esp+10], al
:0040D801 0F841AFFFFFF            je 0040D721
:0040D807 3AD8                    cmp bl, al
:0040D809 0F8412FFFFFF            je 0040D721
:0040D80F 3AC1                    cmp al, cl
:0040D811 0F840AFFFFFF            je 0040D721                  第5、8、13位不能相等
:0040D817 8B742414                mov esi, dword ptr [esp+14]  
:0040D81B 8B6C2410                mov ebp, dword ptr [esp+10]  
:0040D81F 8B7C2450                mov edi, dword ptr [esp+50]  
:0040D823 81E6FF000000            and esi, 000000FF            第5位->esi
:0040D829 8BC6                    mov eax, esi
:0040D82B 81E5FF000000            and ebp, 000000FF            第13位->ebp
:0040D831 F7D0                    not eax                      第5位取反->eax
:0040D833 81E7FF000000            and edi, 000000FF            第8位->edi
:0040D839 23C5                    and eax, ebp                 第5位取反and ebp->eax
:0040D83B 0BC7                    or eax, edi      
:0040D83D B93E000000              mov ecx, 0000003E            0x3e->ecx
:0040D842 0BC6                    or eax, esi
:0040D844 896C241C                mov dword ptr [esp+1C], ebp ebp->ss:[12f2fc]
:0040D848 33C6                    xor eax, esi
:0040D84A 99                      cdq
:0040D84B F7F9                    idiv ecx
:0040D84D 8BDA                    mov ebx, edx                 余数->ebx
:0040D84F 8B542438                mov edx, dword ptr [esp+38] "a123"->edx
:0040D853 52                      push edx
:0040D854 895C2428                mov dword ptr [esp+28], ebx  (余数)->ss:[12f304]
:0040D858 E863FEFFFF              call 0040D6C0
:0040D85D 83C404                  add esp, 00000004
:0040D860 3AD8                    cmp bl, al                   假码第1位与余数比较
:0040D862 0F85B9FEFFFF            jne 0040D721                 不等就死
:0040D868 8BDD                    mov ebx, ebp                 第13位->ebx
:0040D86A 8BEF                    mov ebp, edi                 第8位->ebp
:0040D86C F7D3                    not ebx                      第13位取反->ebx
:0040D86E 23EE                    and ebp, esi                 第8位 and 第5位->ebp
:0040D870 23DF                    and ebx, edi                 ebx and 第8位->ebx
:0040D872 8BC5                    mov eax, ebp    
:0040D874 B93E000000              mov ecx, 0000003E
:0040D879 0BC3                    or eax, ebx      
:0040D87B 99                      cdq
:0040D87C F7F9                    idiv ecx
:0040D87E 89542418                mov dword ptr [esp+18], edx   余数->ss:[12f2f8]
:0040D882 8B542439                mov edx, dword ptr [esp+39]   "12-b"->edx
:0040D886 52                      push edx
:0040D887 E834FEFFFF              call 0040D6C0 转换
:0040D88C 8A4C241C                mov cl, byte ptr [esp+1C]     ss:[12f2f8]余数->cl  
:0040D890 83C404                  add esp, 00000004
:0040D893 3AC8                    cmp cl, al                    假码第2位与余数比较
:0040D895 0F8586FEFFFF            jne 0040D721                  不等就死
:0040D89B 8A442410                mov al, byte ptr [esp+10]     ss:[12f2f0]第13位->al
:0040D89F 8A4C2450                mov cl, byte ptr [esp+50]     ss:[12f330]第8位->cl
:0040D8A3 32C1                    xor al, cl                    第13位 xor 第8位->al
:0040D8A5 8A4C2414                mov cl, byte ptr [esp+14]     ss:[12f2f4]第5位->cl
:0040D8A9 32C1                    xor al, cl
:0040D8AB 0AC1                    or al, cl
:0040D8AD 88442450                mov byte ptr [esp+50], al      al->ss:[12f330]
:0040D8B1 8B44243A                mov eax, dword ptr [esp+3A]    "2-b3"->eax
:0040D8B5 50                      push eax
:0040D8B6 E805FEFFFF              call 0040D6C0
:0040D8BB 8A4C2454                mov cl, byte ptr [esp+54]      ss:[12f330]->cl
:0040D8BF 83C404                  add esp, 00000004
:0040D8C2 3AC8                    cmp cl, al                     假码第3位与cl比较
:0040D8C4 0F8557FEFFFF            jne 0040D721                   不等就死
:0040D8CA 8A442410                mov al, byte ptr [esp+10]      ss:[12f2f0]第13位->al
:0040D8CE B93E000000              mov ecx, 0000003E              3e->ecx
:0040D8D3 F6D0                    not al                         al取反
:0040D8D5 25FF000000              and eax, 000000FF              eax and ff->eax
:0040D8DA 0BC6                    or eax, esi                    eax or 第5位->eax
:0040D8DC 33C7                    xor eax, edi                   eax or 第8位->eax
:0040D8DE 99                      cdq
:0040D8DF F7F9                    idiv ecx
:0040D8E1 89542420                mov dword ptr [esp+20], edx    余数->ss:[12f300]
:0040D8E5 8B54243D                mov edx, dword ptr [esp+3D]    "3456"->edx
:0040D8E9 52                      push edx
:0040D8EA E8D1FDFFFF              call 0040D6C0
:0040D8EF 8A4C2424                mov cl, byte ptr [esp+24]      ss:[12f300]余数->cl
:0040D8F3 83C404                  add esp, 00000004
:0040D8F6 3AC8                    cmp cl, al                     假码第6位与余数比较
:0040D8F8 0F8523FEFFFF            jne 0040D721                   不等就死
:0040D8FE 8B44241C                mov eax, dword ptr [esp+1C]    ss:[12f2fc]->eax
:0040D902 B93E000000              mov ecx, 0000003E              3e->ecx
:0040D907 33E8                    xor ebp, eax                
:0040D909 8D446D00                lea eax, dword ptr [ebp+2*ebp]
:0040D90D 8D448500                lea eax, dword ptr [ebp+4*eax] ebp*D->eax
:0040D911 99                      cdq
:0040D912 F7F9                    idiv ecx
:0040D914 8954241C                mov dword ptr [esp+1C], edx    余数->ss:[12f2fc]
:0040D918 8B54243E                mov edx, dword ptr [esp+3E]    "4567"->edx
:0040D91C 52                      push edx
:0040D91D E89EFDFFFF              call 0040D6C0
:0040D922 8A4C2420                mov cl, byte ptr [esp+20]      ss:[12f2fc]余数->cl
:0040D926 83C404                  add esp, 00000004
:0040D929 3AC8                    cmp cl, al                    假码第7位与余数比较
:0040D92B 0F85F0FDFFFF            jne 0040D721                  不等就死
:0040D931 8A442424                mov al, byte ptr [esp+24]     ss:[12f304]即余数->al(见上)
:0040D935 8B4C2440                mov ecx, dword ptr [esp+40]   "67-c"->ecx
:0040D939 88442424                mov byte ptr [esp+24], al     al->ss:[12f304]
:0040D93D 51                      push ecx
:0040D93E 8B6C2428                mov ebp, dword ptr [esp+28]   ss:[12f304]即余数->ebp(见上)
:0040D942 81E5FF000000            and ebp, 000000FF             ebp and ff->ebp
:0040D948 E873FDFFFF              call 0040D6C0
:0040D94D 8AC8                    mov cl, al                    第9位->cl
:0040D94F 8BC5                    mov eax, ebp                  ebp->eax
:0040D951 F7D0                    not eax                       eax取反->eax
:0040D953 23C7                    and eax, edi                  eax and edi->eax
:0040D955 83C404                  add esp, 00000004
:0040D958 0BC5                    or eax, ebp                   eax or ebp->eax
:0040D95A 0BC6                    or eax, esi                   eax or esi->eax
:0040D95C 33C5                    xor eax, ebp                  eax xor ebp->eax
:0040D95E BD3E000000              mov ebp, 0000003E             3e->ebp
:0040D963 99                      cdq
:0040D964 F7FD                    idiv ebp
:0040D966 3AD1                    cmp dl, cl                    余数与假码第9位比较
:0040D968 0F85B3FDFFFF            jne 0040D721                  不等就死
:0040D96E 8B542441                mov edx, dword ptr [esp+41]   "7-c8"->edx
:0040D972 52                      push edx
:0040D973 E848FDFFFF              call 0040D6C0
:0040D978 8AC8                    mov cl, al                    第10位->cl
:0040D97A 8B44241C                mov eax, dword ptr [esp+1C]   ss:[12f2f8]余数(见上)->eax
:0040D97E 25FF000000              and eax, 000000FF             第8位 and ff->eax
:0040D983 83C404                  add esp, 00000004
:0040D986 23C7                    and eax, edi                  eax and edi=第8位->eax
:0040D988 8BFD                    mov edi, ebp                  3e->edi
:0040D98A 0BC3                    or eax, ebx                   eax or ebx
:0040D98C 99                      cdq
:0040D98D F7FF                    idiv edi
:0040D98F 3AD1                    cmp dl, cl                    假码第10位与余数比较
:0040D991 0F858AFDFFFF            jne 0040D721                  不等就死
:0040D997 8B542443                mov edx, dword ptr [esp+43]   "c89E"->edx
:0040D99B 52                      push edx
:0040D99C E81FFDFFFF              call 0040D6C0
:0040D9A1 8A4C2454                mov cl, byte ptr [esp+54]    ss:[12f330]即第3位算码->cl(见上)
:0040D9A5 8A5C2414                mov bl, byte ptr [esp+14]    ss:[12f2f0]"8"->bl
:0040D9A9 8AD1                    mov dl, cl                   cl->dl
:0040D9AB 83C404                  add esp, 00000004
:0040D9AE 32D3                    xor dl, bl                   dl xor bl->dl
:0040D9B0 8A5C2414                mov bl, byte ptr [esp+14]    ss:[12f2f4]"b"->bl
:0040D9B4 32D3                    xor dl, bl                   dl xor bl->dl
:0040D9B6 0AD1                    or dl, cl                    dl or cl->dl
:0040D9B8 3AD0                    cmp dl, al                   dl与假码第12位比较
:0040D9BA 0F8561FDFFFF            jne 0040D721                 不等就死
:0040D9C0 8B442445                mov eax, dword ptr [esp+45]  "9E"->eax
:0040D9C4 50                      push eax
:0040D9C5 E8F6FCFFFF              call 0040D6C0
:0040D9CA 8B4C2424                mov ecx, dword ptr [esp+24]  ss:[12f300]即第6位算码(见上)->ecx
:0040D9CE 8AD8                    mov bl, al                   第14位->bl
:0040D9D0 8A442420                mov al, byte ptr [esp+20]    ss:[12f2fc]余数即第7位算码->al
:0040D9D4 81E1FF000000            and ecx, 000000FF            ecx and ff->ecx
:0040D9DA F6D0                    not al                       al取反->al
:0040D9DC 25FF000000              and eax, 000000FF            取al->eax
:0040D9E1 83C404                  add esp, 00000004
:0040D9E4 0BC1                    or eax, ecx                  eax or ecx->eax
:0040D9E6 8BCD                    mov ecx, ebp                 3e->ecx  
:0040D9E8 33C6                    xor eax, esi                 eax xor 第4位->eax
:0040D9EA 5F                      pop edi
:0040D9EB 99                      cdq
:0040D9EC F7F9                    idiv ecx
:0040D9EE 33C0                    xor eax, eax
:0040D9F0 5E                      pop esi
:0040D9F1 5D                      pop ebp
:0040D9F2 3AD3                    cmp dl, bl                   余数与假码第14位比较
:0040D9F4 5B                      pop ebx
:0040D9F5 0F94C0                  sete al                      不等则条件为假去死
:0040D9F8 83C43C                  add esp, 0000003C
:0040D9FB C3                      ret


所以注册码与姓名无关,算法如下:

注册码为14位,格式:s1s2s3-s4s5s6s7s8s9-s10s11s12  s取值范围为:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

s4、s7、s11位决定其他各位,且s4,s7,s11互不相等。
1、s1=((((~s4)&s11)|s7)^s4)%0x3E;
2、s2=(((~s11)&s7)|(s7&s4))%0x3E;
3、s3=((s11^s7)^s4)|s4;
4、s5=((((~s11)&0xFF)|s4)^s7)%0x3E;
5、s6=(((s4&s7)^s11)*)0xD)%0x3E;
6、s8=(((((~s1)&s7)|s1)|s4)^s1)%0x3E;
7、s9=((s2&s7)|((~s11)&s7))%0x3E;
8、s10=((s3|s11)^s4)|s3;
9、s12=(((~s6)|s5)^s4)%0x3E.

XaP-qqBaXa-az6是2.6版的注册码

一个可用的注册码是xaX-qqBaqa-Xz6