因工作需要,在网上找了一款可以在屏幕上画画的软件,屏幕画笔,打开一看竟然是共享软件,没办法,抄家伙了~.....
(程序有壳,先脱壳....)
该程序是重启验证,所以很快就定位到了关键点~
代码如下
//////////////////////////////////////////

代码:
004CB8FC  /.  55            push    ebp
004CB8FD  |.  8BEC          mov     ebp, esp
004CB8FF  |.  33C9          xor     ecx, ecx
004CB901  |.  51            push    ecx
004CB902  |.  51            push    ecx
004CB903  |.  51            push    ecx
004CB904  |.  51            push    ecx
004CB905  |.  51            push    ecx
004CB906  |.  51            push    ecx
004CB907  |.  53            push    ebx
004CB908  |.  56            push    esi
004CB909  |.  8BF0          mov     esi, eax
004CB90B  |.  33C0          xor     eax, eax
004CB90D  |.  55            push    ebp
004CB90E  |.  68 3DBA4C00   push    004CBA3D
004CB913  |.  64:FF30       push    dword ptr fs:[eax]
004CB916  |.  64:8920       mov     dword ptr fs:[eax], esp
004CB919  |.  B8 C8214D00   mov     eax, 004D21C8
004CB91E  |.  E8 498AF3FF   call    0040436C
004CB923  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
004CB926  |.  E8 89F9FFFF   call    004CB2B4
004CB92B  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
004CB92E  |.  B8 C8214D00   mov     eax, 004D21C8
004CB933  |.  E8 888AF3FF   call    004043C0
004CB938  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004CB93B  |.  E8 28FAFFFF   call    004CB368
004CB940  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
004CB943  |.  B8 BC214D00   mov     eax, 004D21BC
004CB948  |.  E8 738AF3FF   call    004043C0
004CB94D  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
004CB950  |.  E8 53FBFFFF   call    004CB4A8
004CB955  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
004CB958  |.  B8 C0214D00   mov     eax, 004D21C0
004CB95D  |.  E8 5E8AF3FF   call    004043C0
004CB962  |.  E8 D1F3FFFF   call    004CAD38
004CB967  |.  A1 BC214D00   mov     eax, dword ptr [4D21BC]
004CB96C  |.  BA 54BA4C00   mov     edx, 004CBA54                 ;  220.220.220.1
004CB971  |.  E8 F28DF3FF   call    00404768
004CB976  |.  75 0F         jnz     short 004CB987
004CB978  |.  E8 BFFDFFFF   call    004CB73C
004CB97D  |.  E8 52F7FFFF   call    004CB0D4
004CB982  |.  E8 69F6FFFF   call    004CAFF0
004CB987  |>  C605 B4214D00>mov     byte ptr [4D21B4], 0
004CB98E  |.  B2 01         mov     dl, 1
004CB990  |.  A1 087E4600   mov     eax, dword ptr [467E08]
004CB995  |.  E8 6EC5F9FF   call    00467F08
004CB99A  |.  8BD8          mov     ebx, eax
004CB99C  |.  BA 01000080   mov     edx, 80000001
004CB9A1  |.  8BC3          mov     eax, ebx
004CB9A3  |.  E8 00C6F9FF   call    00467FA8
004CB9A8  |.  B1 01         mov     cl, 1
004CB9AA  |.  BA 6CBA4C00   mov     edx, 004CBA6C                 ;  software\epen
004CB9AF  |.  8BC3          mov     eax, ebx
004CB9B1  |.  E8 56C6F9FF   call    0046800C
004CB9B6  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
004CB9B9  |.  BA 84BA4C00   mov     edx, 004CBA84                 ;  reguser
004CB9BE  |.  8BC3          mov     eax, ebx
004CB9C0  |.  E8 0FC8F9FF   call    004681D4
004CB9C5  |.  8B55 F0       mov     edx, dword ptr [ebp-10]
004CB9C8  |.  B8 B8214D00   mov     eax, 004D21B8
004CB9CD  |.  E8 EE89F3FF   call    004043C0
004CB9D2  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]
004CB9D5  |.  BA 94BA4C00   mov     edx, 004CBA94                 ;  regno
004CB9DA  |.  8BC3          mov     eax, ebx
004CB9DC  |.  E8 F3C7F9FF   call    004681D4
004CB9E1  |.  8B45 EC       mov     eax, dword ptr [ebp-14]
004CB9E4  |.  50            push    eax
004CB9E5  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]
004CB9E8  |.  BA A4BA4C00   mov     edx, 004CBAA4                 ;  epenchina
004CB9ED  |.  A1 B8214D00   mov     eax, dword ptr [4D21B8]
004CB9F2  |.  E8 8DD6FFFF   call    004C9084                      ;  算法
004CB9F7  |.  8B55 E8       mov     edx, dword ptr [ebp-18]       ;  运行到这里的时候,出现了注册码
004CB9FA  |.  58            pop     eax                           ;  (initial cpu selection)
004CB9FB  |.  E8 688DF3FF   call    00404768
004CBA00  |.  75 07         jnz     short 004CBA09                ;  关键跳
004CBA02  |.  C605 B4214D00>mov     byte ptr [4D21B4], 1          ;  全局注册标志
004CBA09  |>  8BC3          mov     eax, ebx
004CBA0B  |.  E8 D07BF3FF   call    004035E0
004CBA10  |.  B2 02         mov     dl, 2
004CBA12  |.  8BC6          mov     eax, esi
004CBA14  |.  E8 F7F9F8FF   call    0045B410
004CBA19  |.  33D2          xor     edx, edx
004CBA1B  |.  8BC6          mov     eax, esi
004CBA1D  |.  E8 76F2F8FF   call    0045AC98
004CBA22  |.  33C0          xor     eax, eax
004CBA24  |.  5A            pop     edx
004CBA25  |.  59            pop     ecx
004CBA26  |.  59            pop     ecx
004CBA27  |.  64:8910       mov     dword ptr fs:[eax], edx
004CBA2A  |.  68 44BA4C00   push    004CBA44
004CBA2F  |>  8D45 E8       lea     eax, dword ptr [ebp-18]
004CBA32  |.  BA 06000000   mov     edx, 6
004CBA37  |.  E8 5489F3FF   call    00404390
004CBA3C  \.  C3            retn
//////////////////////////////////////////

上面的代码就是明显的从注册表里读取账号和注册码,然后验证,爆破就没意思!
我是个懒家伙,不管算法是多容易,我重来都是不愿意看的!
所以,我的目的是让程序成为注册机,清理下思路,我们要如何改造呢

首先,得有个程序来修改注册表,然后让程序自己算出注册码给我们!
上面说过,我很懒的,连编程语言都用E语言写

//////////////////////////////////////////////////////
.版本 2

写注册项 (#现行用户, “Software\EPen\RegUser”, 编辑框1.内容)
运行 (“mat.exe”, 假, )
结束 ()

////////////////////////////////////////////////////

那程序我是这样修改的
代码:
004CB9F2    E8 8DD6FFFF     call    004C9084                         ; 算法不变
004CB9F7    6A 00           push    0
004CB9F9    52              push    edx                              ; 这里是用户名
004CB9FA    8B55 E8         mov     edx, dword ptr [ebp-18]          ; 这里是真正的注册码
004CB9FD    52              push    edx
004CB9FE    6A 00           push    0
004CBA00    FF15 68324D00   call    dword ptr [<&user32.MessageBoxA>>; 弹出对话框
004CBA06    6A 00           push    0
004CBA08    FF15 28324D00   call    dword ptr [<&kernel32.ExitProces>; 结束程序
004CBA0E    90              nop
004CBA0F    90              nop
我又把程序优化了下,就是直接把文件入口写了一个跳
jmp     004CB8FC
将上面代码保存为文件mat.exe,
运行,没问题,OK
再压缩一下,好了,我们的注册机已经出世了

效果大家自己看附件

偷偷的告诉大家
(软件下载地址:
http://www.skycn.com/soft/25336.html)