吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8100|回复: 8
收起左侧

[原创] 某软件安装序列号算法分析

  [复制链接]
pendan2001 发表于 2016-6-29 13:57
本帖最后由 pendan2001 于 2016-6-29 14:29 编辑

【文章标题】:Adobe Photoshop 4.0.4英文版算法分析
【软件名称】: Adobe Photoshop 4.0.4英文版
【下载地址】: 自己找吧
【使用工具】: OD等
【操作平台】:Winxp
【软件介绍】: 一看就明白干什么的。
【 声     明】: 仅为算法研究,勿作它途。
这个现在都是古董了,很多年前写的,没什么技术含量,写的不好别笑我,当时没留截图,大家凑合着看把,呵呵,论坛没看到有这方面的资料,所以^O^。。。

首先
isdcc21 setup.ins>setup.txt

    // ------------- MAIN PROGRAM CODE --------------
program
start:
000CE1:0002:     Disable(12);
000CE8:0021:     number45 = 0;
000CF2:0021:     number33 = 0;
000CFC:0146:     InstallationInfo("Adobe", "Photoshop", "4.0", "photoshp.exe");
000D27:00B5:     function82();
000D2F:00B5:     function90();
000D37:0001:     Enable(54);
000D3E:0002:     Disable(11);

label1: //Ref: 000DD9  
000D49:0002:     Disable(50);
000D50:00B5:     function24("Photoshop");
000D64:00B5:     function5("", "");
000D72:0001:     Enable(50);

label2: //Ref: 000F97  001016  001388  
000D7D:00B5:     function0("Adobe Photoshop Setup", "", string11, string12, string14);
000DA9:0021:     number49 = LAST_RESULT;
000DB1:0021:     number34 = number49;
000DB9:0128:     number49 = number34 = 12;
000DCB:0022:     if (number49 = 0) then
                     goto label3;
                 endif;
000DD9:002C:     goto label1;

label3: //Ref: 000DCB  
000DE6:0125:     string25 = SUPPORTDIR ^ "PSSupprt.DLL";
000DFD:00B2:     UseDLL(string25);
000E02:0021:     number49 = LAST_RESULT;
000E0A:0021:     number42 = number49;
000E12:0128:     number49 = number42 != 0;
000E24:0022:     if (number49 = 0) then
                     goto label5;
                 endif;
000E32:0013:     string4 = "An Error occurred during the setup process! Please contact Adobe Systems Technical Support.";
000E95:0104:     SprintfBox(-65533, "Adobe Photoshop Setup", string4);
000EBA:002B:     exit;

label5: //Ref: 000E24  
000EC4:00B4:     PSFunc1(string14);
000ECC:0021:     number49 = LAST_RESULT;
000ED4:0128:     number50 = number49 = 0;
000EE6:0022:     if (number50 = 0) then
                     goto label7;
                 endif;
000EF4:00B3:     UnUseDLL("PSSupprt");//调用PSSupprt.DLL校验序列号
000F01:0013:     string4 = "The serial number %s is not a valid Adobe Photoshop serial number. Please re-enter your serial number.";
000F6F:0104:     SprintfBox(-65534, "Adobe Photoshop Setup", string4, string14);
000F97:002C:     goto label2;
运行安装程序后,任务拦进程多了5个文件,看下这几个文件的用途:
wowexec.exe:是操作系统相关程序,用于支持16位进程。
ntvdm.exe:是Windows 16位虚拟机的一部分。该进程用于使16位的进程能够运行在32位的系统环境下。这个程序对你系统的正常运行是非常重要的。
winoldap.mod:是用于载入一些早期在DOS模式下开发的16位应用程序。
_isdel.exe是 InstallShieled (很多软件都是使用这套安装程序)安装后删除临时文件的工作,在安装过程中,有些暂时的文件会先存放在 Windows\Temp 下

,安装完毕,就自动删除,_ISDEL 如果不能正常执行的话,这些临时的暂存盘就不会被删掉,你可以自己把 Windows/Temp 下的文件删除,Windows/Temp 本来

就是存放一些站存盘用的,里面的东西你都可以清除掉而不会影响到系统。

第二步:
首先OD载入PSSupprt.DLL
在输出中选择10001230 PSFunc1--反汇编窗口中跟随,在call 10001230
下F2断点,在Arg1,Arg2,Arg3,Arg4,Arg5,Arg6参数窗口打勾。不然,OD拦截不下来。
忽略所有异常,F9运行程序,输入假序列号PWW123R7654321-565,不点确定。再开一个OD,附加进程inso432.mp
查看可执行模块
Executable modules, 条目 1
基址=00E00000
大小=0000E000 (57344.)
入口=00E01000 _WUTL95.<模块入口点>
名称=_WUTL95
文件版本=1.12.000.0
路径=C:\WINDOWS\TEMP\_WUTL95.DLL

F2,F9运行,断下来了
00E01000 >  55              push    ebp
00E01001    8BEC            mov     ebp, esp
00E01003    53              push    ebx
00E01004    56              push    esi
00E01005    57              push    edi
00E01006    8B45 08         mov     eax, dword ptr [ebp+8]
00E01009    A3 E894E000     mov     dword ptr [E094E8], eax
00E0100E    A1 E894E000     mov     eax, dword ptr [E094E8]
00E01013    A3 EC94E000     mov     dword ptr [E094EC], eax
00E01018    B8 01000000     mov     eax, 1
00E0101D    E9 00000000     jmp     00E01022

。。。。。。。。。。。

CTRL+F9,ALT+F9,CTRL+F9,返回到序列号注册输入领空,点“确定”按钮,
断在这里
7C92E514 >  C3              retn

观察寄存器,查看可执行模块,可以看到PSSupprt.DLL文件了
EAX 00000003
ECX 01689824 PSSupprt.01689824//数据窗口中跟随,下内存访问断点,F9
EDX F1680000
EBX 00000000
ESP 0013EB64
EBP 0013EC58
ESI 00253D10
EDI 00000000
EIP 7C92E514 ntdll.KiFastSystemCallRet

停在这里
004011E0    C705 A8BA4900 0>mov     dword ptr [49BAA8], 0
004011EA    E9 91000000     jmp     00401280
004011EF    837D 08 01      cmp     dword ptr [ebp+8], 1
004011F3    0F85 87000000   jnz     00401280


ctrl+f9,好了,终于到达PSSupprt.DLL文件算法领空,
观察寄存器
EAX 01681230 PSSupprt.PSFunc1
ECX 0000F9AC
EDX 00000005
EBX 7FFD7000
ESP 0013F910
EBP 0013FDF8
ESI 0015237E
EDI 7C92E920 ntdll.7C92E920
EIP 01671230 PSSupprt.PSFunc1
PSSupprt.DLL调用函数PSFunc1校验序列号

01681230 >/$  81EC 84020000 sub     esp, 284//中断在这里
01681236  |.  C64424 02 50  mov     byte ptr [esp+2], 50
0168123B  |.  C64424 03 57  mov     byte ptr [esp+3], 57
01681240  |.  53            push    ebx
01681241  |.  56            push    esi
01681242  |.  8BB424 900200>mov     esi, dword ptr [esp+290]//(ASCII "ABC123R7654321-566"),PSSupprt.PSFunc1+12
01681249  |.  57            push    edi
0168124A  |.  55            push    ebp
0168124B  |.  56            push    esi//esi=001C55BF, (ASCII "ABC123R7654321-566")
PSSupprt.PSFunc1+1B
0168124C  |.  FF15 DCA06801 call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA
01681252  |.  66:3D FE00    cmp     ax, 0FE//ax=12,比较序列号是否小等于254
01681256  |.  66:8BE8       mov     bp, ax
01681259  |.  7E 04         jle     short 0168125F
0168125B  |.  66:BD FE00    mov     bp, 0FE
0168125F  |>  0FBFC5        movsx   eax, bp
01681262  |.  8DBC24 940000>lea     edi, dword ptr [esp+94]
01681269  |.  8BC8          mov     ecx, eax
0168126B  |.  C1E9 02       shr     ecx, 2
0168126E  |.  F3:A5         rep     movs dword ptr es:[edi], dword p>
01681270  |.  8BC8          mov     ecx, eax
01681272  |.  33DB          xor     ebx, ebx
01681274  |.  83E1 03       and     ecx, 3
01681277  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>
01681279  |.  66:33F6       xor     si, si
0168127C  |.  889C04 940000>mov     byte ptr [esp+eax+94], bl
01681283  |.  66:85ED       test    bp, bp
01681286  |.  7E 6B         jle     short 016812F3
01681288  |.  BF 01000000   mov     edi, 1
0168128D  |>  393D 44866801 /cmp     dword ptr [1688644], edi\\\\\\\\\\\\\\\\\\\\\\\\
01681293  |.  7E 18         |jle     short 016812AD
....
016812AD  |>  0FBFC6        |movsx   eax, si
016812B0  |.  0FBE8C04 9400>|movsx   ecx, byte ptr [esp+eax+94]
016812B8  |.  8B15 38846801 |mov     edx, dword ptr [1688438]        ;  PSSupprt.01688442
016812BE  |.  33C0          |xor     eax, eax
016812C0  |.  66:8B044A     |mov     ax, word ptr [edx+ecx*2]
016812C4  |.  83E0 08       |and     eax, 8
016812C7  |>  85C0          |test    eax, eax
016812C9  |.  75 21         |jnz     short 016812EC
016812CB  |.  0FBFC6        |movsx   eax, si
016812CE  |.  0FBE8C04 9400>|movsx   ecx, byte ptr [esp+eax+94]///////////////依次取序列号每一位
016812D6  |.  51            |push    ecx
016812D7  |.  E8 7F160000   |call    0168295B//范围是否在A-Z,0-9
016812DC  |.  0FBFCB        |movsx   ecx, bx
016812DF  |.  66:43         |inc     bx
016812E1  |.  90            |nop
016812E2  |.  88840C 980000>|mov     byte ptr [esp+ecx+98], al
016812E9  |.  83C4 04       |add     esp, 4
016812EC  |>  66:46         |inc     si
016812EE  |.  66:3BEE       |cmp     bp, si
016812F1  |.^ 7F 9A         \jg      short 0168128D////////////////////////////////////
016812F3  |>  0FBFC3        movsx   eax, bx
016812F6  |.  33DB          xor     ebx, ebx
016812F8  |.  8D8C24 940000>lea     ecx, dword ptr [esp+94]
016812FF  |.  889C04 940000>mov     byte ptr [esp+eax+94], bl
01681306  |.  51            push    ecx                              ; /String
01681307  |.  FF15 DCA06801 call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA
0168130D  |.  0FBFE8        movsx   ebp, ax
01681310  |.  66:894424 10  mov     word ptr [esp+10], ax
01681315  |.  8DB424 940000>lea     esi, dword ptr [esp+94]
0168131C  |.  8DBC24 940100>lea     edi, dword ptr [esp+194]
01681323  |.  8BCD          mov     ecx, ebp
01681325  |.  C1E9 02       shr     ecx, 2
01681328  |.  F3:A5         rep     movs dword ptr es:[edi], dword p>
0168132A  |.  8BCD          mov     ecx, ebp
0168132C  |.  83E1 03       and     ecx, 3
0168132F  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>
01681331  |.  889C2C 940100>mov     byte ptr [esp+ebp+194], bl
01681338  |>  0FBFC3        /movsx   eax, bx
0168133B  |.  8A8C04 940000>|mov     cl, byte ptr [esp+eax+94]
01681342  |.  384C04 12     |cmp     byte ptr [esp+eax+12], cl//比较第1,2位序列号是否是PW
01681346  |.  75 21         |jnz     short 01681369
01681348  |.  66:43         |inc     bx
0168134A  |.  66:83FB 02    |cmp     bx, 2
0168134E  |.^ 7C E8         \jl      short 01681338
01681350  |.  66:837C24 10 >cmp     word ptr [esp+10], 5
01681356  |.  7C 18         jl      short 01681370
01681358  |.  80BC2C 900000>cmp     byte ptr [esp+ebp+90], 2D//比较第15位是否为“-”
01681360  |.  75 0E         jnz     short 01681370
01681362  |.  BE 01000000   mov     esi, 1
01681367  |.  EB 09         jmp     short 01681372
01681372  |>  85F6          test    esi, esi
01681374  |.  0F84 DD020000 je      01681657
0168137A  |.  8D842C 910000>lea     eax, dword ptr [esp+ebp+91]
01681381  |.  50            push    eax//取序列号最后3位 (ASCII "566")
PSSupprt.PSFunc1+151
01681382  |.  E8 4C150000   call    016828D3//转化为16进制值236
01681387  |.  C6842C 940000>mov     byte ptr [esp+ebp+94], 0
0168138F  |.  66:8BF0       mov     si, ax
01681392  |.  8D8424 980000>lea     eax, dword ptr [esp+98]
01681399  |.  83C4 04       add     esp, 4
0168139C  |.  50            push    eax//序列号前14位 (ASCII "PWW123R7654321"); /String
0168139D  |.  FF15 DCA06801 call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA
016813A3  |.  66:894424 10  mov     word ptr [esp+10], ax
016813A8  |.  8D8424 940000>lea     eax, dword ptr [esp+94]
016813AF  |.  50            push    eax// (ASCII "PWW123R7654321")
016813B0  |.  E8 EBFCFFFF   call    016810A0////F7
________________________________________________
016810BE  |> /66:B9 1100    /mov     cx, 11
016810C2  |. |66:8BC5       |mov     ax, bp
016810C5  |. |66:99         |cwd
016810C7  |. |66:F7F9       |idiv    cx
016810CA  |. |0FBFC2        |movsx   eax, dx
016810CD  |. |40            |inc     eax                                       ;  Switch (cases 0..10)
016810CE  |. |48            |dec     eax
016810CF  |. |83F8 10       |cmp     eax, 10
016810D2  |. |77 07         |ja      short 016810DB
016810D4  |. /FF2485 8C1167>|jmp     dword ptr [eax*4+167118C]                 ;  PSSupprt.016810E6
016810DB  |> \33C9          |xor     ecx, ecx
016810DD  |.  EB 75         |jmp     short 01681154
016810DF  |>  B9 52020000   |mov     ecx, 252                                  ;  Case 0 of switch 016810CD
016810E4  |.  EB 6E         |jmp     short 01681154
016810E6  |>  B9 75020000   |mov     ecx, 275                                  ;  Case 1 of switch 016810CD
016810EB  |.  EB 67         |jmp     short 01681154
016810ED  |>  B9 AF010000   |mov     ecx, 1AF                                  ;  Case 2 of switch 016810CD
016810F2  |.  EB 60         |jmp     short 01681154
016810F4  |>  B9 BA030000   |mov     ecx, 3BA                                  ;  Case 3 of switch 016810CD
016810F9  |.  EB 59         |jmp     short 01681154
016810FB  |>  B9 E4000000   |mov     ecx, 0E4                                  ;  Case 4 of switch 016810CD
01681100  |.  EB 52         |jmp     short 01681154
01681102  |>  B9 E5020000   |mov     ecx, 2E5                                  ;  Case 5 of switch 016810CD
01681107  |.  EB 4B         |jmp     short 01681154
01681109  |>  B9 9D010000   |mov     ecx, 19D                                  ;  Case 6 of switch 016810CD
0168110E  |.  EB 44         |jmp     short 01681154
01681110  |>  B9 4E030000   |mov     ecx, 34E                                  ;  Case 7 of switch 016810CD
01681115  |.  EB 3D         |jmp     short 01681154
01681117  |>  B9 24020000   |mov     ecx, 224                                  ;  Case 8 of switch 016810CD
0168111C  |.  EB 36         |jmp     short 01681154
0168111E  |>  B9 B1030000   |mov     ecx, 3B1                                  ;  Case 9 of switch 016810CD
01681123  |.  EB 2F         |jmp     short 01681154
01681125  |>  B9 BB000000   |mov     ecx, 0BB                                  ;  Case A of switch 016810CD
0168112A  |.  EB 28         |jmp     short 01681154
0168112C  |>  B9 77010000   |mov     ecx, 177                                  ;  Case B of switch 016810CD
01681131  |.  EB 21         |jmp     short 01681154
01681133  |>  B9 57020000   |mov     ecx, 257                                  ;  Case C of switch 016810CD
01681138  |.  EB 1A         |jmp     short 01681154
0168113A  |>  B9 79020000   |mov     ecx, 279                                  ;  Case D of switch 016810CD
0168113F  |.  EB 13         |jmp     short 01681154
01681141  |>  B9 A6030000   |mov     ecx, 3A6                                  ;  Case E of switch 016810CD
01681146  |.  EB 0C         |jmp     short 01681154
01681148  |>  B9 25020000   |mov     ecx, 225                                  ;  Case F of switch 016810CD
0168114D  |.  EB 05         |jmp     short 01681154
0168114F  |>  B9 5B010000   |mov     ecx, 15B                                  ;  Case 10 of switch 016810CD
01681154  |> \0FBFC5        |movsx   eax, bp                                   ;  Default case of switch 016810CD
01681157  |.  66:45         |inc     bp
01681159  |.  57            |push    edi/edi=0013F710, (ASCII "PWW123R7654321")
0168115A  |.  0FBE0438      |movsx   eax, byte ptr [eax+edi]//依次取每位ASCII
0168115E  |.  0FAFC1        |imul    eax, ecx//ecx=252,相乘
01681161  |.  03D8          |add     ebx, eax///每一次相乘后结果累加
01681163  |.  FFD6          |call    esi
01681165  |.  0FBFCD        |movsx   ecx, bp
01681168  |.  3BC1          |cmp     eax, ecx
0168116A  |.^ 0F8F 4EFFFFFF \jg      016810BE
01681170  |>  B9 E8030000   mov     ecx, 3E8
01681175  |.  8BC3          mov     eax, ebx
01681177  |.  99            cdq
01681178  |.  F7F9          idiv    ecx///768BE IDIV 3E8=1E5+236
0168117A  |.  83FA 64       cmp     edx, 64//比较余数236是否大于64
0168117D  |.  8BC2          mov     eax, edx
0168117F  |.  7D 05         jge     short 01681186
01681181  |.  05 1C010000   add     eax, 11C
01681186  |>  5D            pop     ebp
01681187  |.  5F            pop     edi
01681188  |.  5E            pop     esi
01681189  |.  5B            pop     ebx
0168118A  \.  C3            retn

016813B5  |.  66:2BC6       sub     ax, si////ax=0236,si=236,上面运算的余数-序列号最后3位的16进制值=0
016813B8  |.  83C4 04       add     esp, 4//相等则序列号正确
016813BB  |.  66:3D 0100    cmp     ax, 1
016813BF  |.  1BF6          sbb     esi, esi
016813C1  |.  F7DE          neg     esi
016813C3  |.  85F6          test    esi, esi///esi=0则完了,等于1正确。
016813C5  |.  0F84 8C020000 je      01681657///跳就over了。
016813CB  |.  66:C705 A0626>mov     word ptr [16862A0], 1
016813D4  |.  66:837C24 10 >cmp     word ptr [esp+10], 7
016813DA  |.  7C 14         jl      short 016813F0
016813DC  |.  80BC24 9A0000>cmp     byte ptr [esp+9A], 41(A)//取序列号第7位即R比较是否在(A--Z)
016813E4  |.  7C 0A         jl      short 016813F0
016813E6  |.  80BC24 9A0000>cmp     byte ptr [esp+9A], 5A(Z)
016813EE  |.  7E 02         jle     short 016813F2
016813F0  |>  33F6          xor     esi, esi
016813F2  |>  66:837C24 10 >cmp     word ptr [esp+10], 5
016813F8  |.  0F8C A1000000 jl      0168149F
016813FE  |.  0FBF4424 10   movsx   eax, word ptr [esp+10]
01681403  |.  8DBC04 900000>lea     edi, dword ptr [esp+eax+90]//(ASCII "4321")取序列号第11-14位
0168140A  |.  803F 2D       cmp     byte ptr [edi], 2D//是否等于“-”,不等继续往下
0168140D  |.  0F85 8C000000 jnz     0168149F
01681413  |.  8D8404 910000>lea     eax, dword ptr [esp+eax+91]
0168141A  |.  8D4C24 14     lea     ecx, dword ptr [esp+14]
0168141E  |.  50            push    eax                              ; /String2
0168141F  |.  51            push    ecx                              ; |String1
01681420  |.  FF15 30A16801 call    dword ptr [<&KERNEL32.lstrcpyA>] ; \lstrcpyA
01681426  |.  8D8C24 940000>lea     ecx, dword ptr [esp+94]
0168142D  |.  BB 01000000   mov     ebx, 1
01681432  |.  51            push    ecx                              ; /String
01681433  |.  C607 00       mov     byte ptr [edi], 0                ; |
01681436  |.  66:33FF       xor     di, di                           ; |
01681439  |.  FF15 DCA06801 call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA
0168143F  |.  66:894424 10  mov     word ptr [esp+10], ax
01681444  |>  85F6          /test    esi, esi
01681446  |.  74 3A         |je      short 01681482
01681448  |.  391D 44866801 |cmp     dword ptr [1688644], ebx
0168144E  |.  7E 15         |jle     short 01681465
01681450  |.  0FBFC7        |movsx   eax, di
01681453  |.  0FBE4C04 14   |movsx   ecx, byte ptr [esp+eax+14]
01681458  |.  6A 04         |push    4
0168145A  |.  51            |push    ecx
0168145B  |.  E8 80140000   |call    016828E0
01681460  |.  83C4 08       |add     esp, 8
01681463  |.  EB 17         |jmp     short 0168147C
01681465  |>  0FBFC7        |movsx   eax, di
01681468  |.  0FBE5404 14   |movsx   edx, byte ptr [esp+eax+14]
0168146D  |.  8B0D 38846801 |mov     ecx, dword ptr [1688438]        ;  PSSupprt.01688442
01681473  |.  33C0          |xor     eax, eax
01681475  |.  66:8B0451     |mov     ax, word ptr [ecx+edx*2]
01681479  |.  83E0 04       |and     eax, 4
0168147C  |>  8BF3          |mov     esi, ebx
0168147E  |.  85C0          |test    eax, eax
01681480  |.  75 02         |jnz     short 01681484
01681482  |>  33F6          |xor     esi, esi
01681484  |>  66:47         |inc     di
01681486  |.  66:83FF 03    |cmp     di, 3
0168148A  |.^ 7C B8         \jl      short 01681444
0168148C  |.  8D4424 14     lea     eax, dword ptr [esp+14]
01681490  |.  50            push    eax
01681491  |.  E8 3D140000   call    016828D3
01681496  |.  66:A3 A062680>mov     word ptr [16862A0], ax
0168149C  |.  83C4 04       add     esp, 4
0168149F  |>  33DB          xor     ebx, ebx
016814A1  |.  85F6          test    esi, esi
016814A3  |.  0F84 06010000 je      016815AF
016814A9  |.  66:837C24 10 >cmp     word ptr [esp+10], 6
016814AF  |.  0F8E FA000000 jle     016815AF
016814B5  |.  8D8424 940000>lea     eax, dword ptr [esp+94]
016814BC  |.  8D4C24 14     lea     ecx, dword ptr [esp+14]
016814C0  |.  50            push    eax //(ASCII "PWW123R7654321"); /String2
016814C1  |.  51            push    ecx                              ; |String1
016814C2  |.  FF15 30A16801 call    dword ptr [<&KERNEL32.lstrcpyA>] ; \lstrcpyA
016814C8  |.  0FBF4C24 10   movsx   ecx, word ptr [esp+10]
016814CD  |.  8D5424 14     lea     edx, dword ptr [esp+14]
016814D1  |.  885C0C 0E     mov     byte ptr [esp+ecx+E], bl
016814D5  |.  52            push    edx // (ASCII "PWW123R7")        ;/String
016814D6  |.  FF15 DCA06801 call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA
016814DC  |.  66:8BF8       mov     di, ax
016814DF  |.  66:85FF       test    di, di
016814E2  |.  0F8E 8F000000 jle     01681577
016814E8  |.  BD 01000000   mov     ebp, 1
016814ED  |>  85F6          /test    esi, esi\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\循环
016814EF  |.  74 79         |je      short 0168156A
016814F1  |.  392D 44866801 |cmp     dword ptr [1688644], ebp
016814F7  |.  7E 15         |jle     short 0168150E
016814F9  |.  0FBFC3        |movsx   eax, bx
016814FC  |.  0FBE4C04 14   |movsx   ecx, byte ptr [esp+eax+14]
01681501  |.  6A 04         |push    4
01681503  |.  51            |push    ecx
01681504  |.  E8 D7130000   |call    016828E0
01681509  |.  83C4 08       |add     esp, 8
0168150C  |.  EB 17         |jmp     short 01681525
0168150E  |>  0FBFC3        |movsx   eax, bx
01681511  |.  0FBE4C04 14   |movsx   ecx, byte ptr [esp+eax+14]//依次取"PWW123R7"
01681516  |.  8B15 38846801 |mov     edx, dword ptr [1688438]        ;  PSSupprt.01688442
0168151C  |.  33C0          |xor     eax, eax
0168151E  |.  66:8B044A     |mov     ax, word ptr [edx+ecx*2]
01681522  |.  83E0 04       |and     eax, 4
01681525  |>  85C0          |test    eax, eax
01681527  |.  75 3D         |jnz     short 01681566
01681529  |.  392D 44866801 |cmp     dword ptr [1688644], ebp
0168152F  |.  7E 18         |jle     short 01681549
01681531  |.  0FBFC3        |movsx   eax, bx
01681534  |.  0FBE4C04 14   |movsx   ecx, byte ptr [esp+eax+14]
01681539  |.  68 03010000   |push    103
0168153E  |.  51            |push    ecx
0168153F  |.  E8 9C130000   |call    016828E0
01681544  |.  83C4 08       |add     esp, 8
01681547  |.  EB 19         |jmp     short 01681562
01681549  |>  0FBFC3        |movsx   eax, bx
0168154C  |.  0FBE4C04 14   |movsx   ecx, byte ptr [esp+eax+14]
01681551  |.  8B15 38846801 |mov     edx, dword ptr [1688438]        ;  PSSupprt.01688442
01681557  |.  33C0          |xor     eax, eax
01681559  |.  66:8B044A     |mov     ax, word ptr [edx+ecx*2]
0168155D  |.  25 03010000   |and     eax, 103
01681562  |>  85C0          |test    eax, eax
01681564  |.  74 04         |je      short 0168156A
01681566  |>  8BF5          |mov     esi, ebp
01681568  |.  EB 02         |jmp     short 0168156C
0168156A  |>  33F6          |xor     esi, esi
0168156C  |>  66:43         |inc     bx
0168156E  |.  66:3BFB       |cmp     di, bx
01681571  |.^ 0F8F 76FFFFFF \jg      016814ED///////////////////////////////循环,取8次
01681577  |>  66:83FF 08    cmp     di, 8
0168157B  |.  7F 12         jg      short 0168158F
0168157D  |.  8D4424 14     lea     eax, dword ptr [esp+14]
01681581  |.  50            push    eax                              ; /String2
01681582  |.  68 00606801   push    01686000                         ; |String1 = PSSupprt.01686000
01681587  |.  FF15 30A16801 call    dword ptr [<&KERNEL32.lstrcpyA>] ; \lstrcpyA
0168158D  |.  EB 02         jmp     short 01681591
0168158F  |>  33F6          xor     esi, esi
01681591  |>  66:8B4424 10  mov     ax, word ptr [esp+10]
01681596  |.  8D8C24 940000>lea     ecx, dword ptr [esp+94]
0168159D  |.  66:2D 0600    sub     ax, 6
016815A1  |.  50            push    eax
016815A2  |.  6A 00         push    0
016815A4  |.  51            push    ecx
016815A5  |.  E8 56FAFFFF   call    01681000////PSSupprt.DLL文件入口地址
016815AA  |.  83C4 0C       add     esp, 0C
016815AD  |.  EB 07         jmp     short 016815B6
016815AF  |>  C605 00606801>mov     byte ptr [1686000], 0
016815B6  |>  66:33FF       xor     di, di
016815B9  |.  8D8424 940000>lea     eax, dword ptr [esp+94]
016815C0  |.  50            push    eax(ASCII "654321")              ; /String
016815C1  |.  FF15 DCA06801 call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA
016815C7  |.  66:8BD8       mov     bx, ax
016815CA  |.  66:85DB       test    bx, bx
016815CD  |.  7E 52         jle     short 01681621
016815CF  |.  BD 01000000   mov     ebp, 1
016815D4  |>  85F6          /test    esi, esi
016815D6  |.  74 40         |je      short 01681618
016815D8  |.  392D 44866801 |cmp     dword ptr [1688644], ebp
016815DE  |.  7E 18         |jle     short 016815F8
016815E0  |.  0FBFC7        |movsx   eax, di
016815E3  |.  0FBE8C04 9400>|movsx   ecx, byte ptr [esp+eax+94]
016815EB  |.  6A 04         |push    4
016815ED  |.  51            |push    ecx
016815EE  |.  E8 ED120000   |call    016828E0
016815F3  |.  83C4 08       |add     esp, 8
016815F6  |.  EB 1A         |jmp     short 01681612
016815F8  |>  0FBFC7        |movsx   eax, di
016815FB  |.  0FBE9404 9400>|movsx   edx, byte ptr [esp+eax+94]///依次取序列号“654321”
01681603  |.  8B0D 38846801 |mov     ecx, dword ptr [1688438]        ;  PSSupprt.01688442
01681609  |.  33C0          |xor     eax, eax
0168160B  |.  66:8B0451     |mov     ax, word ptr [ecx+edx*2]
0168160F  |.  83E0 04       |and     eax, 4
01681612  |>  8BF5          |mov     esi, ebp
01681614  |.  85C0          |test    eax, eax
01681616  |.  75 02         |jnz     short 0168161A
01681618  |>  33F6          |xor     esi, esi
0168161A  |>  66:47         |inc     di
0168161C  |.  66:3BDF       |cmp     bx, di//循环6次
0168161F  |.^ 7F B3         \jg      short 016815D4
01681621  |>  8D8424 940000>lea     eax, dword ptr [esp+94]
01681628  |.  50            push    eax                //(ASCII "654321")
01681629  |.  E8 10120000   call    0168283E          //654321转化为16进制9FBF1
0168162E  |.  83C4 04       add     esp, 4
01681631  |.  A3 9C626801   mov     dword ptr [168629C], eax
01681636  |.  8D8424 940100>lea     eax, dword ptr [esp+194]
0168163D  |.  50            push    eax            //(ASCII "PWW123R7654321-566")
0168163E  |.  E8 8DFBFFFF   call    016811D0///////F7
01681643  |.  83C4 04       add     esp, 4
01681646  |.  85C0          test    eax, eax
01681648  |.  74 0D         je      short 01681657
0168164A  |.  68 D0070000   push    7D0                              ; /Timeout = 2000. ms
0168164F  |.  33F6          xor     esi, esi                         ; |
01681651  |.  FF15 E4A06801 call    dword ptr [<&KERNEL32.Sleep>]    ; \Sleep
01681657  |>  8BC6          mov     eax, esi
01681659  |>  5D            pop     ebp
0168165A  |.  5F            pop     edi
0168165B  |.  5E            pop     esi
0168165C  |.  5B            pop     ebx
0168165D  |.  81C4 84020000 add     esp, 284
01681663  \.  C2 0400       retn    4

017511D0  /$  53            push    ebx
017511D1  |.  56            push    esi
017511D2  |.  57            push    edi
017511D3  |.  33F6          xor     esi, esi
017511D5  |.  8B7C24 10     mov     edi, dword ptr [esp+10]
017511D9  |.  8B1D DCA07501 mov     ebx, dword ptr [<&KERNEL32.lstrlenA>]     ;  kernel32.lstrlenA
017511DF  |.  57            push    edi                                       ; /String
017511E0  |.  FFD3          call    ebx                                       ; \lstrlenA
017511E2  |.  85C0          test    eax, eax
017511E4  |.  7E 0C         jle     short 017511F2
017511E6  |>  803437 AA     /xor     byte ptr [edi+esi], 0AA//取序列号“PWW123R7654321-566”与AA异或
017511EA  |.  46            |inc     esi
017511EB  |.  57            |push    edi
017511EC  |.  FFD3          |call    ebx
017511EE  |.  3BC6          |cmp     eax, esi
017511F0  |.^ 7F F4         \jg      short 017511E6//循环18次
017511F2  |>  BE 00807501   mov     esi, 01758000
017511F7  |.  85F6          test    esi, esi
017511F9  |.  74 19         je      short 01751214
017511FB  |.  8B1D E0A07501 mov     ebx, dword ptr [<&KERNEL32.lstrcmpA>]     ;  kernel32.lstrcmpA
01751201  |>  8B06          /mov     eax, dword ptr [esi]
01751203  |.  85C0          |test    eax, eax
01751205  |.  74 0D         |je      short 01751214
01751207  |.  57            |push    edi
01751208  |.  50            |push    eax
01751209  |.  FFD3          |call    ebx                                      ;  kernel32.lstrcmpA
0175120B  |.  85C0          |test    eax, eax
0175120D  |.  74 0B         |je      short 0175121A
0175120F  |.  83C6 04       |add     esi, 4
01751212  |.^ 75 ED         \jnz     short 01751201
01751214  |>  33C0          xor     eax, eax
01751216  |.  5F            pop     edi
01751217  |.  5E            pop     esi
01751218  |.  5B            pop     ebx
01751219  |.  C3            retn


算法总结:
1。序列号18位,格式为S1-S2。S1共14位,第1,2位为PW,第7位为字母,范围在A--Z,
   第15位是否为“-”,S2共3位。
2。S1共14位中的每一位与252,275,1AF,3BA,0E4,2E5,19D,34E,224,3B1,0BB,177,257,
   279相乘,每次结果相加。最后的结果除以1000,余数等于S2的16进制值,但要大等于100。

得到简单的几个安装序列号
PWF400T9876543-514
PWW400R7110035-487
PWW123R7654321-566


经测试,该算法同样适合Adobe Photoshop5.0 简体中文版、Adobe Photoshop6.0中文版。





免费评分

参与人数 9热心值 +9 收起 理由
wnagzihxain + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yeyulang + 1 谢谢@Thanks!
微笑着走过 + 1 碉堡了居然是PS
Vanish + 1 热心回复!
Webrobot + 1 注意下文章排版就更好了!
Sound + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
啦灯是我干掉的 + 1 鼓励一下吧!
许鹏0101 + 1 你帮过我 谢谢你
cohon + 1 感谢,收藏先

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bestyyb 发表于 2016-6-29 14:01
强大啊 学习了
头像被屏蔽
iamLiar 发表于 2016-6-29 14:03
still1414 发表于 2016-6-29 14:09
rzlsysw01 发表于 2016-6-29 14:10
好强大,完全看不懂……。
cohon 发表于 2016-6-29 14:13
可以写个注册机出来了
 楼主| pendan2001 发表于 2016-6-29 14:14
都很老的东西了,写出来也没什么价值的,呵呵
yhxing 发表于 2016-6-29 15:14
方法不错的啊 学习了 支持~
zhangbaida 发表于 2016-7-21 22:49
楼主果然厉害
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 13:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表