ZHOU2X 发表于 2008-10-24 11:45:02

ScreensaverShot 3.1 算法分析

ScreensaverShot 3.1
软件大小:1068KB
软件类别:国外软件/桌面制作
软件授权:共享版
软件语言:英文
运行环境:Win9x/Me/NT/2000/XP/2003
下载地址:http://www.onlinedown.net/soft/9966.htm

软件信息:
      ScreensaverShot 让你无需任何编程经验,就可以制作出最具感染力的屏幕保护作品。此软件制作屏幕保护十分简单方便,共分以下三个步骤:1.选择图片,支持 bmp,jpg 和 jpeg 格式;2.选择背景颜色和音乐,音乐格式包括 mp3,mid,rmi 和 wav;3.生成屏幕保护。

软件是 UPX 压缩壳,由 DELPHI 编的,注册成功时有提示.

00483000/.55            push    ebp
00483001|.8BEC            mov   ebp, esp
00483003|.6A 00         push    0
00483005|.6A 00         push    0
00483007|.6A 00         push    0
00483009|.53            push    ebx
0048300A|.8BD8            mov   ebx, eax
0048300C|.33C0            xor   eax, eax
0048300E|.55            push    ebp
0048300F|.68 9B304800   push    0048309B
00483014|.64:FF30         push    dword ptr fs:
00483017|.64:8920         mov   dword ptr fs:, esp
0048301A|.8D55 F8         lea   edx,
0048301D|.8B83 04030000   mov   eax, dword ptr ds:
00483023|.E8 986FFCFF   call    00449FC0
00483028|.8B45 F8         mov   eax,
0048302B|.8D4D FC         lea   ecx,
0048302E|.8B93 14030000   mov   edx, dword ptr ds:
00483034|.E8 9FFBFFFF   call    00482BD8                        ;算法 CALL 1 ,跟进
00483039|.8B45 FC         mov   eax,
0048303C|.50            push    eax
0048303D|.8D55 F4         lea   edx,
00483040|.8B83 08030000   mov   eax, dword ptr ds:
00483046|.E8 756FFCFF   call    00449FC0
0048304B|.8B55 F4         mov   edx,
0048304E|.58            pop   eax                               ;00A582A4
0048304F|.E8 8413F8FF   call    004043D8                        ;此处可以做内存注册机
00483054|.75 22         jnz   short 00483078
00483056|.6A 00         push    0
00483058|.B9 A8304800   mov   ecx, 004830A8                     ;ASCII "Step3"
0048305D|.BA B0304800   mov   edx, 004830B0                     ;ASCII "OK. Successfully registered!"
00483062|.A1 448C4800   mov   eax, dword ptr ds:
00483067|.8B00            mov   eax, dword ptr ds:
00483069|.E8 EA7FFEFF   call    0046B058
0048306E|.C783 4C020000 0>mov   dword ptr ds:, 1
00483078|>33C0            xor   eax, eax
0048307A|.5A            pop   edx
0048307B|.59            pop   ecx
0048307C|.59            pop   ecx
0048307D|.64:8910         mov   dword ptr fs:, edx
00483080|.68 A2304800   push    004830A2
00483085|>8D45 F4         lea   eax,
00483088|.BA 02000000   mov   edx, 2
0048308D|.E8 5E0FF8FF   call    00403FF0
00483092|.8D45 FC         lea   eax,
00483095|.E8 320FF8FF   call    00403FCC
0048309A\.C3            retn
0048309B   .^ E9 3009F8FF   jmp   004039D0
004830A0   .^ EB E3         jmp   short 00483085
004830A2   .5B            pop   ebx
004830A3   .8BE5            mov   esp, ebp
004830A5   .5D            pop   ebp
004830A6   .C3            retn


算法CALL 1

00482BD8/$55            push    ebp
00482BD9|.8BEC            mov   ebp, esp
00482BDB|.83C4 EC         add   esp, -14
00482BDE|.53            push    ebx
00482BDF|.56            push    esi
00482BE0|.57            push    edi
00482BE1|.33DB            xor   ebx, ebx
00482BE3|.895D EC         mov   , ebx
00482BE6|.894D F4         mov   , ecx
00482BE9|.8955 F8         mov   , edx                   ;定值:4D3
00482BEC|.8945 FC         mov   , eax                   ;注册名
00482BEF|.8B45 FC         mov   eax,
00482BF2|.E8 8518F8FF   call    0040447C
00482BF7|.33C0            xor   eax, eax
00482BF9|.55            push    ebp
00482BFA|.68 B02C4800   push    00482CB0
00482BFF|.64:FF30         push    dword ptr fs:
00482C02|.64:8920         mov   dword ptr fs:, esp
00482C05|.8B45 FC         mov   eax,                    ;注册名
00482C08|.E8 7F16F8FF   call    0040428C                         ;计算注册名长度
00482C0D|.8945 F0         mov   , eax                   ;注册名长度
00482C10|.8B75 F8         mov   esi,                    ;esi = 定值:4D3
00482C13|.8B45 F0         mov   eax,                    ;eax = 注册名长度
00482C16|.85C0            test    eax, eax
00482C18|.7E 13         jle   short 00482C2D
00482C1A|.BF 01000000   mov   edi, 1                           ;edi = 1
00482C1F|>8B55 FC         /mov   edx,                   ;edx = 注册名 ,试炼码"ZHOU2X"
00482C22|.0FB6543A FF   |movzx   edx, byte ptr ds:    ;edx = 注册名取代码
00482C27|.03F2            |add   esi, edx                        ;加法,esi = esi + edx
00482C29|.47            |inc   edi                           ;edi = edi + 1
00482C2A|.48            |dec   eax                           ;eax = eax - 1
00482C2B|.^ 75 F2         \jnz   short 00482C1F                  ;判断循环 ,结果 esi = 6A3
00482C2D|>8B45 F4         mov   eax,
00482C30|.E8 9713F8FF   call    00403FCC
00482C35|.33FF            xor   edi, edi
00482C37|>8BC6            /mov   eax, esi                        ;eax = esi
00482C39|.B9 24000000   |mov   ecx, 24                         ;ecx = 24
00482C3E|.99            |cdq
00482C3F|.F7F9            |idiv    ecx                           ;除法,eax = eax / ecx
00482C41|.8BC2            |mov   eax, edx                        ;edx = 余数,eax = edx
00482C43|.E8 68FFFFFF   |call    00482BB0                        ;算法 CALL 2
00482C48|.8BD8            |mov   ebx, eax                        ;ebx = eax
00482C4A|.8BC3            |mov   eax, ebx                        ;eax = ebx
00482C4C|.04 D0         |add   al, 0D0                         ;al = al + 0D0
00482C4E|.2C 02         |sub   al, 2                           ;al = al - 2
00482C50|.72 21         |jb      short 00482C73                  ;小于 则 跳转
00482C52|.2C 17         |sub   al, 17                        ;al = al - 17
00482C54|.74 1D         |je      short 00482C73                  ;等于 则 跳转
00482C56|.2C 06         |sub   al, 6                           ;al = al - 6
00482C58|.74 19         |je      short 00482C73                  ;等于 则 跳转
00482C5A|.8D45 EC         |lea   eax,
00482C5D|.8BD3            |mov   edx, ebx
00482C5F|.E8 5015F8FF   |call    004041B4
00482C64|.8B55 EC         |mov   edx,
00482C67|.8B45 F4         |mov   eax,
00482C6A|.E8 2516F8FF   |call    00404294                        ;将算法 2 算出的注册码连接
00482C6F|.8B45 F4         |mov   eax,
00482C72|.47            |inc   edi                           ;edi = edi + 1
00482C73|>8BC7            |mov   eax, edi                        ;eax = edi
00482C75|.99            |cdq
00482C76|.F77D F0         |idiv                         ;除以 注册名长度
00482C79|.8BC2            |mov   eax, edx                        ;edx = 余数,eax = edx
00482C7B|.40            |inc   eax                           ;eax = eax + 1
00482C7C|.8B55 FC         |mov   edx,                   ;edx = 注册名
00482C7F|.0FB64402 FF   |movzx   eax, byte ptr ds:    ;eax = edx 取代码
00482C84|.2BF0            |sub   esi, eax                        ;esi = esi - eax
00482C86|.85F6            |test    esi, esi
00482C88|.7D 03         |jge   short 00482C8D                  ;esi 大于等于 eax 则跳转
00482C8A|.0375 F8         |add   esi,                   ;否则 esi = esi + 4D3
00482C8D|>83FF 0A         |cmp   edi, 0A                         ;edi 与 0A 比较
00482C90|.^ 7C A5         \jl      short 00482C37                  ;小于 则 循环
00482C92|.33C0            xor   eax, eax
00482C94|.5A            pop   edx
00482C95|.59            pop   ecx
00482C96|.59            pop   ecx
00482C97|.64:8910         mov   dword ptr fs:, edx
00482C9A|.68 B72C4800   push    00482CB7
00482C9F|>8D45 EC         lea   eax,
00482CA2|.E8 2513F8FF   call    00403FCC
00482CA7|.8D45 FC         lea   eax,
00482CAA|.E8 1D13F8FF   call    00403FCC
00482CAF\.C3            retn
00482CB0   .^ E9 1B0DF8FF   jmp   004039D0
00482CB5   .^ EB E8         jmp   short 00482C9F
00482CB7   .5F            pop   edi
00482CB8   .5E            pop   esi
00482CB9   .5B            pop   ebx
00482CBA   .8BE5            mov   esp, ebp
00482CBC   .5D            pop   ebp
00482CBD   .C3            retn


算法CALL 2

00482BB0/$B2 20         mov   dl, 20                            ;dl = 20
00482BB2|.8BC8            mov   ecx, eax                        ;ecx = eax
00482BB4|.83E9 3E         sub   ecx, 3E                           ;ecx = ecx - 3E
00482BB7|.73 19         jnb   short 00482BD2                  ;多余,除以 24 余数怎么可能大于 3E
00482BB9|.8BC8            mov   ecx, eax                        ;ecx = eax
00482BBB|.83E9 0A         sub   ecx, 0A                           ;ecx = ecx - 0A
00482BBE|.72 07         jb      short 00482BC7                  ;ecx是否小于 0A
00482BC0|.83E9 1A         sub   ecx, 1A                           ;ecx = ecx - 1A
00482BC3|.72 07         jb      short 00482BCC                  ;ecx是否小于 1A
00482BC5|.EB 0B         jmp   short 00482BD2
00482BC7|>8D50 30         lea   edx, dword ptr ds:      ;ecx 小于 0A ,则 edx = eax + 30
00482BCA|.EB 06         jmp   short 00482BD2
00482BCC|>8D50 41         lea   edx, dword ptr ds:      ;ecx 小于 1A ,则 edx = eax + 41
00482BCF|.83EA 0A         sub   edx, 0A                           ;edx = edx - 0A
00482BD2|>8BC2            mov   eax, edx                        ;eax = edx
00482BD4\.C3            retn

注册机源码
.版本 2

.子程序 _按钮1_被单击, , , 算法CALL1
.局部变量 local2, 整数型
.局部变量 local1, 文本型
.局部变量 local4, 整数型
.局部变量 esi, 整数型
.局部变量 SN, 文本型

local2 = 1235
local1 = 编辑框1.内容
local4 = 取文本长度 (local1)
esi = local2
eax = local4
.如果 (eax = 0)
    编辑框2.内容 = “请填写注册名”
    返回 ()
.否则

.如果结束
edi = 1
.循环判断首 ()
    edx = 取代码 (local1, edi)
    esi = esi + edx
    edi = edi + 1
    eax = eax - 1
.循环判断尾 (eax ≠ 0)
edi = 0
.循环判断首 ()
    ' eax = esi
    ecx = 36
    eax = esi % ecx
    eax = 算法CALL2 (eax)
    ebx = eax
    eax = eax + 208
    .如果 (eax < 2)

    .否则
      eax = eax - 2
      .如果 (eax = 23)

      .否则
            eax = eax - 23
            .如果 (eax = 6)

            .否则
                SN = SN + 字符 (ebx)
                edi = edi + 1
            .如果结束

      .如果结束

    .如果结束
    eax = edi
    eax = eax % local4
    eax = eax + 1
    eax = 取代码 (local1, eax)
    esi = esi - eax
    .如果 (esi ≥ 0)

    .否则
      esi = esi + 1235
    .如果结束

.循环判断尾 (edi < 10)
编辑框2.内容 = SN

.子程序 算法CALL2, 整数型
.参数 参数1, 整数型

edx = 32
ecx = 参数1
.如果 (ecx < 10)
    edx = 参数1 + 48
.否则
    ecx = ecx - 10
    .如果 (ecx < 26)
      edx = 参数1 + 65
      edx = edx - 10
    .否则

    .如果结束

.如果结束
返回 (edx)

注册机成品
https://www.chinapyg.com/viewthread.php?tid=41232&extra=page%3D1

夜冷风 发表于 2008-10-24 12:19:23

分析的太详细.不错学习了!!!

JackyChou 发表于 2008-10-24 19:59:50

为什么注册机用E语言写呢?/:011

天蓝小色色 发表于 2008-10-24 22:22:12

希望能用vb 写算法机.努力学习中

lixy8888 发表于 2008-10-25 14:19:06

分析的很好,收获很多,谢谢分享

香帅 发表于 2008-10-25 15:20:06

易语言看起来还真是不习关/:good

yunfeng 发表于 2008-10-26 06:47:51

好文章,学习一下分析算法。

coolfire1983 发表于 2008-11-3 20:34:00

分析得好详细啊 好好学习中....
页: [1]
查看完整版本: ScreensaverShot 3.1 算法分析