首页
社区
课程
招聘
来篇长的-DialogBlocks2.0的注册算法
发表于: 2005-6-16 09:04 10987

来篇长的-DialogBlocks2.0的注册算法

2005-6-16 09:04
10987

【破解作者】 qfejj
【作者邮箱】 qfejj@163.com
【使用工具】 OllyDbgv1.10;PEIDv0.93;MASM32;计算器
【破解平台】 Win9x/NT/2000/XP
【软件名称】 DialogBlocks Version 2.00
【软件大小】 5.19MB
【加壳方式】 无
【下载地址】 http://www.anthemion.co.uk/dialogblocks/DialogBlocks-2.00-Setup.exe
【破解声明】 本人破解无任何商业目的,纯粹兴趣使然
--------------------------------------------------------------------------------
【破解内容】
  
    DialogBlocks For wxWindgets,这个软件可以帮助软件设计者轻松快速地设计出专业的用户界面,更有跨平台的界面支持库,用过的朋友肯定知道它的强大功能,没有用过的朋友可以试试。注册成为正式用户后,解除所有限制的功能。付钱注册还是使用我的注册机注册,随你便,哈哈。(反正我对老外是不会客气的)
    这个软件采用用户名--注册码的保护方式,有标准版和个人版之分,注册信息保存在注册表,每次启动读取验证,用户名和注册码没有大小写之分。有个缺点是在内存中会出现完整的明文注册码,还好每次出现的地方都不同,可以对付一下注册机工具生成的内存注册机。软件只用了一个GetWindowText,至于提示注册成功与否的MessageBoxA也是用的同一个,拦截GetWindowText后,只要点击用户界面就会让你中断,MessageBox当然也是没什么用的,调试后你会发现,判断离那里很远。拦截注册表值的读取要等上很久,最快最方便的是查找出错字串来定位(软件作者好像忽略了这个,前面那些保护白做了)。
    我的习惯,贴代码前先说一下这个软件的注册过程。
    这个软件要完美爆破很简单,只要在0042B8C1处call dialogbl.0042B7A0使al返回值为1即可。对于这个call,如果第一次al返回1,注册成功且为标准版,第二次al返回1,注册成功也为标准版,第三次al返回1,注册成功为个人版。三次返回值都为0则注册失败。
    软件由用户名处理后得到注册码后直接比较,没有中间值(这样子对我来说太好了,写注册机不用写逆算部分),具体的处理过程如下:
    1. 获取用户名,把所有大写字母都转化为小写,然后在用户名后加上一固定字串,对于这个固定字串是这样子加的:
       a.计算标准版注册码所用的字串是"Anthemion Software DialogBlocks",80h
       b.另一个计算标准版注册码所用的字串"Anthemion Software DialogBlocks and HelpBlocks",80h
       c.计算个人版注册码所用的字串"Anthemion Software DialogBlocks Personal Edition",80h
       在用户名第一个字节向后偏移38h的地方加上一个值,这个值(16进制)=用户名长度(包括新加的字串)*8
       这里说一点,由a和b生成的注册码注册后同为标准版,就是说一个用户名可以有两个不用的注册码来完成标准版的注册,对于这两个不同的注册码完成的注册,我没看出有什么不同。像这样子处理,在没有用户名的情况下也是可以成功注册的。
    2.获取用户名长度(包括加上的字串长),对超出40(16进制64)的部分舍弃。我贴的注册机源码里没有这部分的代码,我想没有哪位喜欢用超过30个字符的ID来注册吧?(如果有,我单独给你写一个好了)
    3.通过一函数对处理后的用户名进行一定的计算,得到结果。这个函数体比较庞大,有点吓人,我只有通过代码来说明。
    下面看算法相关的代码,怎么跟的具体就不说了。另外,没有注释的地方你大可不看,以节约你宝贵的时间。

;***************处理用户名长度,计算附加值********************************
...
004257DE    push ebp                                      ;  具体进来处理
004257DF    mov ebp,esp
004257E1    push ebx
004257E2    mov ebx,dword ptr ss:[ebp+10]                 ;  用户名长度
004257E5    push esi                                      ;  esi指向类似于"Anthemion Software DialogBlocks"的字串,视具体版本
004257E6    mov esi,dword ptr ss:[ebp+8]                  ;  这个地址指向一个数组0123456789ABCDEFFEDCBA9876543210
004257E9    push edi
004257EA    mov eax,dword ptr ds:[esi+10]
004257ED    lea ecx,dword ptr ds:[eax+ebx*8]              ;  用户名长度*8+eax,eax=0
004257F0    cmp ecx,eax
004257F2    mov dword ptr ds:[esi+10],ecx                 ;  保存,这个值在处理用户名的时候要用
004257F5    jnb short dialogbl.004257FA
004257F7    inc dword ptr ds:[esi+14]
004257FA    mov ecx,ebx                                   ;  ebx=用户名长度
004257FC    shr ecx,1D
004257FF    add dword ptr ds:[esi+14],ecx                 ;  esi指向的是那个数组0123456789ABCDEFFEDCBA9876543210
00425802    shr eax,3
00425805    and eax,3F
00425808    je short dialogbl.0042583A
0042580A    push 40
0042580C    lea ecx,dword ptr ds:[eax+esi+18]
00425810    pop edi
00425811    sub edi,eax
00425813    cmp ebx,edi
00425815    jnb short dialogbl.0042581E
00425817    push ebx
00425818    push dword ptr ss:[ebp+C]
0042581B    push ecx
0042581C    jmp short dialogbl.00425871
0042581E    push edi                                      ; /n
0042581F    push dword ptr ss:[ebp+C]                     ; |src
00425822    push ecx                                      ; |dest
00425823    call <jmp.&MSVCRT.memcpy>                     ; \memcpy
00425828    lea eax,dword ptr ds:[esi+18]
0042582B    push eax
0042582C    push esi
0042582D    call dialogbl.00425901
00425832    add dword ptr ss:[ebp+C],edi
00425835    add esp,14
00425838    sub ebx,edi
0042583A    cmp ebx,40                                    ;  用户名长度和40比较
0042583D    jb short dialogbl.00425869                    ;  小于40则转去处理
0042583F    mov edi,ebx                                   ;  用户名长度要是大于40,右移6
00425841    shr edi,6
00425844    /push 40                                      ; /n = 40 (64.)
00425846    |lea eax,dword ptr ds:[esi+18]                ; |
00425849    |push dword ptr ss:[ebp+C]                    ; |src
0042584C    |push eax                                     ; |dest
0042584D    |call <jmp.&MSVCRT.memcpy>                    ; \memcpy  
00425852    |lea eax,dword ptr ds:[esi+18]
00425855    |push eax
00425856    |push esi
00425857    |call dialogbl.00425901
0042585C    |add dword ptr ss:[ebp+C],40
00425860    |add esp,14
00425863    |sub ebx,40
00425866    |dec edi
00425867    \jnz short dialogbl.00425844
00425869    push ebx                                      ; /n
0042586A    add esi,18                                    ; |
0042586D    push dword ptr ss:[ebp+C]                     ; |加了字串后的用户名
00425870    push esi                                      ; |地址
00425871    call <jmp.&MSVCRT.memcpy>                     ; \把加了字串的用户名复制到esi所指地址后
00425876    add esp,0C
00425879    pop edi
0042587A    pop esi
0042587B    pop ebx
0042587C    pop ebp
0042587D    retn
...

;************************处理用户名,得到注册码********************
...
0042B631    mov dword ptr ss:[ebp-14],ebx
0042B634    mov edi,dword ptr ss:[ebp-10]                 ;  用户名
0042B637    lea esi,dword ptr ss:[ebp-27C]
0042B63D    mov eax,edi
0042B63F    cmp byte ptr ds:[eax],bl
0042B641    je short dialogbl.0042B65C
0042B643    /mov al,byte ptr ds:[edi]                     ;  具体的处理部分
0042B645    |cmp al,20                                    ;  看取出的字母(数字)是否是空格
0042B647    |je short dialogbl.0042B657
0042B649    |movsx eax,al                                 ;  用户名ASCII值扩展到eax
0042B64C    |push eax                                     ; /c
0042B64D    |call dword ptr ds:[<&MSVCRT.tolower>]        ; \所有用户名中字母一律转换为小写字母
0042B653    |mov byte ptr ds:[esi],al                     ;  转换后得到的小写字母ASCII值保存到堆栈
0042B655    |pop ecx
0042B656    |inc esi
0042B657    |inc edi                                      ;  如果前面取得的是空格,则指针移到下一个字母(数字)
0042B658    |cmp byte ptr ds:[edi],bl                     ;  看用户名是否已经取完
0042B65A    \jnz short dialogbl.0042B643                  ;  若没取完,回去再取下一个并作小写转换处理
0042B65C    push dword ptr ss:[ebp-14]                    ; /一字串
0042B65F    lea eax,dword ptr ss:[ebp-27C]                ; |转换为小写字母后的用户名
0042B665    mov byte ptr ds:[esi],bl                      ; |
0042B667    push eax                                      ; |dest
0042B668    call <jmp.&MSVCRT.strcat>                     ; \在小写用户名后加上字串“Anthemion Software DialogBlocks”
                                                          ; 关于这个字串的规则是这样的:
                                                          ; 用户名后加上字串"Anthemion Software DialogBlocks",80h
                                                          ; 或者加上"Anthemion Software DialogBlocks and HelpBlocks",80h
                                                          ; 最后得到的是标准版的注册码
                                                          ; 用户名后加上字串"Anthemion Software DialogBlocks Personal Edition",80h
                                                          ; 最后得到的是个人版的注册码
0042B66D    mov eax,dword ptr ds:[908840]
0042B672    mov dword ptr ss:[ebp+C],eax
0042B675    lea eax,dword ptr ss:[ebp-7C]
0042B678    mov byte ptr ss:[ebp-4],2
0042B67C    push eax
0042B67D    call dialogbl.004257B6
0042B682    lea eax,dword ptr ss:[ebp-27C]                ;  加了字串后的用户名地址送到eax
0042B688    push eax                                      ; /s
0042B689    call <jmp.&MSVCRT.strlen>                     ; \取这个加了字串的用户名的长度,eax返回长度
0042B68E    push eax
0042B68F    lea eax,dword ptr ss:[ebp-27C]                ;  加了字串后的用户名地址送到eax
0042B695    push eax
0042B696    lea eax,dword ptr ss:[ebp-7C]                 ;  这个地址指向一个数组0123456789ABCDEFFEDCBA9876543210
0042B699    push eax
0042B69A    call dialogbl.004257DE
0042B69F    lea eax,dword ptr ss:[ebp-7C]                 ;  这个地址指向一个数组0123456789ABCDEFFEDCBA9876543210
0042B6A2    push eax
0042B6A3    lea eax,dword ptr ss:[ebp-24]                 ;  将指向下面函数处理的结果
0042B6A6    push eax
0042B6A7    call dialogbl.0042587E                        ;  处理得到结果,里面有一个处理用户名的关键call,如下面{}中所示:
                                                          ;  这段代码没有调用任何函数,写注册机的时候可以照搬过来,要改动
                                                          ;  的地方很少,我最喜欢这样的代码,写注册机的时候太方便了!

{ ;Local Call from 0042B6A7
--------处理用户名的关键代码(一个庞大的函数体)---begin
        00425901    push ebp                                      ;  用户名-->标准版注册码的处理过程
        00425902    mov ebp,esp
        00425904    sub esp,44
        00425907    mov eax,dword ptr ss:[ebp+C]                  ;  堆栈地址指向用户名
        0042590A    mov ecx,dword ptr ss:[ebp+8]                  ;  堆栈地址指向数组0123456789ABCDEFFEDCBA987654321
        0042590D    push ebx
        0042590E    push esi
        0042590F    mov esi,dword ptr ds:[eax]                    ;  取出用户名前4个字母
        00425911    mov edx,dword ptr ds:[ecx+C]                  ;  取出数列中的4位(76543210)
        00425914    mov ebx,dword ptr ds:[ecx+4]                  ;  取出数列中的4位(89ABCDEF)
        00425917    push edi
        00425918    mov edi,dword ptr ds:[ecx+8]                  ;  取出数列中的4位(FEDCBA98)
        0042591B    mov dword ptr ss:[ebp-8],esi                  ;  用户名前4个字母,作为一个累计性质的值,保存到0012F8C8
        0042591E    mov esi,edx
        00425920    xor esi,edi
        00425922    and esi,ebx
        00425924    xor esi,edx
        00425926    mov edx,dword ptr ds:[ecx]                    ;  取出数列中的4位(01234567)
        00425928    add esi,dword ptr ss:[ebp-8]                  ;  和前4个用户名ASCII值相加
        0042592B    lea esi,dword ptr ds:[esi+edx+D76AA478]       ;  计算,里面常数写注册机时不用修改
        00425932    mov edx,esi
        00425934    shr edx,19
        00425937    shl esi,7
        0042593A    or edx,esi
        0042593C    mov esi,dword ptr ds:[eax+4]                  ;  向后取用户名4个字母
        0042593F    mov dword ptr ss:[ebp-1C],esi                 ;  作为一个累计性质的值,保存
        00425942    mov esi,edi
        00425944    add edx,ebx
        00425946    xor esi,ebx
        00425948    and esi,edx
        0042594A    xor esi,edi
        0042594C    mov edi,dword ptr ds:[ecx+C]
        0042594F    add esi,dword ptr ss:[ebp-1C]
        00425952    lea edi,dword ptr ds:[edi+esi+E8C7B756]
        00425959    mov esi,edi
        0042595B    shr esi,14
        0042595E    shl edi,0C
        00425961    or esi,edi
        00425963    mov edi,dword ptr ds:[eax+8]                  ;  向后取用户名4个字母
        00425966    mov dword ptr ss:[ebp-28],edi                 ;  作为一个累计性质的值,保存
        00425969    mov edi,ebx
        0042596B    add esi,edx
        0042596D    xor edi,edx
        0042596F    and edi,esi
        00425971    xor edi,ebx
        00425973    add edi,dword ptr ss:[ebp-28]
        00425976    mov ebx,edi
        00425978    mov edi,dword ptr ds:[ecx+8]
        0042597B    lea edi,dword ptr ds:[edi+ebx+242070DB]
        00425982    mov ebx,edi
        00425984    shr ebx,0F
        00425987    shl edi,11
        0042598A    or ebx,edi
        0042598C    mov edi,dword ptr ds:[eax+C]                  ;  向后取用户名4个字母
        0042598F    mov dword ptr ss:[ebp-14],edi                 ;  作为一个累计性质的值,保存
        00425992    mov edi,esi
        00425994    add ebx,esi
        00425996    xor edi,edx
        00425998    and edi,ebx
        0042599A    mov dword ptr ss:[ebp+C],ebx                  ;  作为一个累计性质的值,保存
        0042599D    xor edi,edx
        0042599F    add edi,dword ptr ss:[ebp-14]
        004259A2    mov ebx,edi
        004259A4    mov edi,dword ptr ds:[ecx+4]
        004259A7    lea edi,dword ptr ds:[edi+ebx+C1BDCEEE]
        004259AE    mov ebx,edi
        004259B0    shl ebx,16
        004259B3    shr edi,0A
        004259B6    or ebx,edi
        004259B8    mov edi,dword ptr ds:[eax+10]                 ;  向后取用户名4个字母
        004259BB    add ebx,dword ptr ss:[ebp+C]
        004259BE    mov dword ptr ss:[ebp-40],edi                 ;  作为一个累计性质的值,保存
        004259C1    mov dword ptr ss:[ebp-4],ebx                  ;  作为一个累计性质的值,保存
        004259C4    mov ebx,esi
        004259C6    xor ebx,dword ptr ss:[ebp+C]
        004259C9    and ebx,dword ptr ss:[ebp-4]
        004259CC    xor ebx,esi
        004259CE    add ebx,edi
        004259D0    lea edx,dword ptr ds:[edx+ebx+F57C0FAF]
        004259D7    mov edi,edx
        004259D9    shr edi,19
        004259DC    shl edx,7
        004259DF    mov ebx,dword ptr ss:[ebp+C]
        004259E2    or edi,edx
        004259E4    add edi,dword ptr ss:[ebp-4]
        004259E7    xor ebx,dword ptr ss:[ebp-4]
        004259EA    mov edx,dword ptr ds:[eax+14]
        004259ED    and ebx,edi
        004259EF    mov dword ptr ss:[ebp-2C],edx
        004259F2    xor ebx,dword ptr ss:[ebp+C]
        004259F5    add ebx,edx
        004259F7    lea esi,dword ptr ds:[esi+ebx+4787C62A]
        004259FE    mov ebx,dword ptr ss:[ebp+C]
        00425A01    mov edx,esi
        00425A03    shr edx,14
        00425A06    shl esi,0C
        00425A09    or edx,esi
        00425A0B    mov esi,dword ptr ds:[eax+18]                ;  向后取用户名4个字母
        00425A0E    mov dword ptr ss:[ebp-20],esi                ;  作为一个累计性质的值,保存
        00425A11    mov esi,dword ptr ss:[ebp-4]
        00425A14    add edx,edi
        00425A16    xor esi,edi
        00425A18    and esi,edx
        00425A1A    xor esi,dword ptr ss:[ebp-4]
        00425A1D    add esi,dword ptr ss:[ebp-20]
        00425A20    lea ebx,dword ptr ds:[ebx+esi+A8304613]
        00425A27    mov esi,ebx
        00425A29    shr esi,0F
        00425A2C    shl ebx,11
        00425A2F    or esi,ebx
        00425A31    mov ebx,dword ptr ds:[eax+1C]
        00425A34    mov dword ptr ss:[ebp-C],ebx
        00425A37    mov ebx,edx
        00425A39    add esi,edx
        00425A3B    xor ebx,edi
        00425A3D    and ebx,esi
        00425A3F    mov dword ptr ss:[ebp+C],esi
        00425A42    mov esi,dword ptr ss:[ebp-4]
        00425A45    xor ebx,edi
        00425A47    add ebx,dword ptr ss:[ebp-C]
        00425A4A    lea esi,dword ptr ds:[esi+ebx+FD469501]
        00425A51    mov ebx,esi
        00425A53    shl ebx,16
        00425A56    shr esi,0A
        00425A59    or ebx,esi
        00425A5B    mov esi,dword ptr ds:[eax+20]                ;  向后取用户名4个字母
        00425A5E    add ebx,dword ptr ss:[ebp+C]                 
        00425A61    mov dword ptr ss:[ebp-34],esi                ;  作为一个累计性质的值,保存
        00425A64    mov dword ptr ss:[ebp-4],ebx
        00425A67    mov ebx,edx
        00425A69    xor ebx,dword ptr ss:[ebp+C]
        00425A6C    and ebx,dword ptr ss:[ebp-4]
        00425A6F    xor ebx,edx
        00425A71    add ebx,esi
        00425A73    lea edi,dword ptr ds:[edi+ebx+698098D8]
        00425A7A    mov ebx,dword ptr ss:[ebp+C]
        00425A7D    xor ebx,dword ptr ss:[ebp-4]
        00425A80    mov esi,edi
        00425A82    shr esi,19
        00425A85    shl edi,7
        00425A88    or esi,edi
        00425A8A    mov edi,dword ptr ds:[eax+24]               ;  向后取用户名4个字母
        00425A8D    add esi,dword ptr ss:[ebp-4]
        00425A90    mov dword ptr ss:[ebp-44],edi               ;  作为一个累计性质的值,保存
        00425A93    and ebx,esi
        00425A95    xor ebx,dword ptr ss:[ebp+C]
        00425A98    add ebx,edi
        00425A9A    lea edx,dword ptr ds:[edx+ebx+8B44F7AF]
        00425AA1    mov ebx,dword ptr ss:[ebp+C]
        00425AA4    mov edi,edx
        00425AA6    shr edi,14
        00425AA9    shl edx,0C
        00425AAC    or edi,edx
        00425AAE    mov edx,dword ptr ds:[eax+28]              ;  向后取用户名4个字母
        00425AB1    mov dword ptr ss:[ebp-18],edx              ;  作为一个累计性质的值,保存
        00425AB4    mov edx,dword ptr ss:[ebp-4]
        00425AB7    add edi,esi
        00425AB9    xor edx,esi
        00425ABB    and edx,edi
        00425ABD    xor edx,dword ptr ss:[ebp-4]
        00425AC0    add edx,dword ptr ss:[ebp-18]
        00425AC3    lea ebx,dword ptr ds:[ebx+edx+FFFF5BB1]
        00425ACA    mov edx,ebx
        00425ACC    shr edx,0F
        00425ACF    shl ebx,11
        00425AD2    or edx,ebx
        00425AD4    mov ebx,dword ptr ds:[eax+2C]              ;  向后取用户名4个字母
        00425AD7    mov dword ptr ss:[ebp-24],ebx              ;  作为一个累计性质的值,保存
        00425ADA    mov ebx,edi
        00425ADC    xor ebx,esi
        00425ADE    add edx,edi
        00425AE0    and ebx,edx
        00425AE2    mov dword ptr ss:[ebp+C],edx
        00425AE5    mov edx,dword ptr ss:[ebp-4]
        00425AE8    xor ebx,esi
        00425AEA    add ebx,dword ptr ss:[ebp-24]
        00425AED    lea edx,dword ptr ds:[edx+ebx+895CD7BE]
        00425AF4    mov ebx,edx
        00425AF6    shl ebx,16
        00425AF9    shr edx,0A
        00425AFC    or ebx,edx
        00425AFE    mov edx,dword ptr ds:[eax+30]              ;  向后取用户名4个字母
        00425B01    add ebx,dword ptr ss:[ebp+C]            
        00425B04    mov dword ptr ss:[ebp-30],edx              ;  作为一个累计性质的值,保存
        00425B07    mov dword ptr ss:[ebp-4],ebx
        00425B0A    mov ebx,edi
        00425B0C    xor ebx,dword ptr ss:[ebp+C]
        00425B0F    and ebx,dword ptr ss:[ebp-4]
        00425B12    xor ebx,edi
        00425B14    add ebx,edx
        00425B16    lea esi,dword ptr ds:[esi+ebx+6B901122]
        00425B1D    mov ebx,dword ptr ss:[ebp+C]
        00425B20    xor ebx,dword ptr ss:[ebp-4]
        00425B23    mov edx,esi
        00425B25    shr edx,19
        00425B28    shl esi,7
        00425B2B    or edx,esi
        00425B2D    mov esi,dword ptr ds:[eax+34]            ;  向后取用户名4个字母
        00425B30    add edx,dword ptr ss:[ebp-4]
        00425B33    mov dword ptr ss:[ebp-3C],esi            ;  作为一个累计性质的值,保存
        00425B36    and ebx,edx
        00425B38    xor ebx,dword ptr ss:[ebp+C]
        00425B3B    add ebx,esi
        00425B3D    mov esi,dword ptr ds:[eax+38]            ;  向后取用户名4个字母,ds:[eax+38]所指的就是由用户名长度计算得到的值
        00425B40    mov dword ptr ss:[ebp-10],esi
        00425B43    mov esi,dword ptr ss:[ebp-4]
        00425B46    lea edi,dword ptr ds:[edi+ebx+FD987193]  ;  [下面代码直到ret没有特别的地方,就是计算然后累计
        00425B4D    xor esi,edx                              ;  其实这里所有的计算都是通过lea指令来累计的
        00425B4F    mov ebx,edi                              ;  这部分的代码写注册机的时候可以照搬,EBP指向的就是
        00425B51    mov eax,dword ptr ds:[eax+3C]            ;  保存累计结果的地址,写注册机的时候可以设一个变量
        00425B54    shr ebx,14                               ;  替换。]
        00425B57    shl edi,0C
        00425B5A    or ebx,edi
        00425B5C    mov edi,dword ptr ss:[ebp+C]
        00425B5F    add ebx,edx
        00425B61    mov dword ptr ss:[ebp-38],eax
        00425B64    and esi,ebx
        00425B66    mov dword ptr ss:[ebp+8],ebx
        00425B69    xor esi,dword ptr ss:[ebp-4]
        00425B6C    add esi,dword ptr ss:[ebp-10]
        00425B6F    lea edi,dword ptr ds:[edi+esi+A679438E]
        00425B76    mov esi,edi
        00425B78    shr esi,0F
        00425B7B    shl edi,11
        00425B7E    or esi,edi
        00425B80    mov edi,ebx
        00425B82    add esi,ebx
        00425B84    xor edi,edx
        00425B86    and edi,esi
        00425B88    xor edi,edx
        00425B8A    add edi,eax
        00425B8C    mov eax,dword ptr ss:[ebp-4]
        00425B8F    lea eax,dword ptr ds:[eax+edi+49B40821]
        00425B96    mov edi,eax
        00425B98    shl edi,16
        00425B9B    shr eax,0A
        00425B9E    or edi,eax
        00425BA0    mov eax,esi
        00425BA2    add edi,esi
        00425BA4    xor eax,edi
        00425BA6    and eax,ebx
        00425BA8    xor eax,esi
        00425BAA    add eax,dword ptr ss:[ebp-1C]
        00425BAD    lea edx,dword ptr ds:[edx+eax+F61E2562]
        00425BB4    mov eax,edx
        00425BB6    shr eax,1B
        00425BB9    shl edx,5
        00425BBC    or eax,edx
        00425BBE    mov edx,edi
        00425BC0    add eax,edi
        00425BC2    xor edx,eax
        00425BC4    and edx,esi
        00425BC6    xor edx,edi
        00425BC8    add edx,dword ptr ss:[ebp-20]
        00425BCB    lea ebx,dword ptr ds:[ebx+edx+C040B340]
        00425BD2    mov edx,ebx
        00425BD4    shr edx,17
        00425BD7    shl ebx,9
        00425BDA    or edx,ebx
        00425BDC    add edx,eax
        00425BDE    mov dword ptr ss:[ebp+8],edx
        00425BE1    xor edx,eax
        00425BE3    and edx,edi
        00425BE5    mov ebx,dword ptr ss:[ebp+8]
        00425BE8    xor edx,eax
        00425BEA    add edx,dword ptr ss:[ebp-24]
        00425BED    lea esi,dword ptr ds:[esi+edx+265E5A51]
        00425BF4    mov edx,esi
        00425BF6    shr edx,12
        00425BF9    shl esi,0E
        00425BFC    or edx,esi
        00425BFE    mov esi,dword ptr ss:[ebp+8]
        00425C01    add edx,dword ptr ss:[ebp+8]
        00425C04    xor esi,edx
        00425C06    and esi,eax
        00425C08    xor esi,dword ptr ss:[ebp+8]
        00425C0B    add esi,dword ptr ss:[ebp-8]
        00425C0E    lea edi,dword ptr ds:[edi+esi+E9B6C7AA]
        00425C15    mov esi,edi
        00425C17    shl esi,14
        00425C1A    shr edi,0C
        00425C1D    or esi,edi
        00425C1F    mov edi,edx
        00425C21    add esi,edx
        00425C23    xor edi,esi
        00425C25    and edi,dword ptr ss:[ebp+8]
        00425C28    xor edi,edx
        00425C2A    add edi,dword ptr ss:[ebp-2C]
        00425C2D    lea eax,dword ptr ds:[eax+edi+D62F105D]
        00425C34    mov edi,eax
        00425C36    shr edi,1B
        00425C39    shl eax,5
        00425C3C    or edi,eax
        00425C3E    mov eax,esi
        00425C40    add edi,esi
        00425C42    xor eax,edi
        00425C44    and eax,edx
        00425C46    xor eax,esi
        00425C48    add eax,dword ptr ss:[ebp-18]
        00425C4B    lea ebx,dword ptr ds:[ebx+eax+2441453]
        00425C52    mov eax,ebx
        00425C54    shr eax,17
        00425C57    shl ebx,9
        00425C5A    or eax,ebx
        00425C5C    add eax,edi
        00425C5E    mov dword ptr ss:[ebp+8],eax
        00425C61    xor eax,edi
        00425C63    and eax,esi
        00425C65    xor eax,edi
        00425C67    add eax,dword ptr ss:[ebp-38]
        00425C6A    lea edx,dword ptr ds:[edx+eax+D8A1E681]
        00425C71    mov eax,edx
        00425C73    shr eax,12
        00425C76    shl edx,0E
        00425C79    or eax,edx
        00425C7B    mov edx,dword ptr ss:[ebp+8]
        00425C7E    add eax,dword ptr ss:[ebp+8]
        00425C81    xor edx,eax
        00425C83    and edx,edi
        00425C85    xor edx,dword ptr ss:[ebp+8]
        00425C88    add edx,dword ptr ss:[ebp-40]
        00425C8B    lea esi,dword ptr ds:[esi+edx+E7D3FBC8]
        00425C92    mov edx,esi
        00425C94    shl edx,14
        00425C97    shr esi,0C
        00425C9A    or edx,esi
        00425C9C    mov esi,eax
        00425C9E    add edx,eax
        00425CA0    mov ebx,dword ptr ss:[ebp+8]
        00425CA3    xor esi,edx
        00425CA5    and esi,dword ptr ss:[ebp+8]
        00425CA8    xor esi,eax
        00425CAA    add esi,dword ptr ss:[ebp-44]
        00425CAD    lea edi,dword ptr ds:[edi+esi+21E1CDE6]
        00425CB4    mov esi,edi
        00425CB6    shr esi,1B
        00425CB9    shl edi,5
        00425CBC    or esi,edi
        00425CBE    mov edi,edx
        00425CC0    add esi,edx
        00425CC2    xor edi,esi
        00425CC4    and edi,eax
        00425CC6    xor edi,edx
        00425CC8    add edi,dword ptr ss:[ebp-10]
        00425CCB    lea ebx,dword ptr ds:[ebx+edi+C33707D6]
        00425CD2    mov edi,ebx
        00425CD4    shr edi,17
        00425CD7    shl ebx,9
        00425CDA    or edi,ebx
        00425CDC    add edi,esi
        00425CDE    mov dword ptr ss:[ebp+8],edi
        00425CE1    xor edi,esi
        00425CE3    and edi,edx
        00425CE5    mov ebx,dword ptr ss:[ebp+8]
        00425CE8    xor edi,esi
        00425CEA    add edi,dword ptr ss:[ebp-14]
        00425CED    lea eax,dword ptr ds:[eax+edi+F4D50D87]
        00425CF4    mov edi,eax
        00425CF6    shr edi,12
        00425CF9    shl eax,0E
        00425CFC    or edi,eax
        00425CFE    mov eax,dword ptr ss:[ebp+8]
        00425D01    add edi,dword ptr ss:[ebp+8]
        00425D04    xor eax,edi
        00425D06    and eax,esi
        00425D08    xor eax,dword ptr ss:[ebp+8]
        00425D0B    add eax,dword ptr ss:[ebp-34]
        00425D0E    lea edx,dword ptr ds:[edx+eax+455A14ED]
        00425D15    mov eax,edx
        00425D17    shl eax,14
        00425D1A    shr edx,0C
        00425D1D    or eax,edx
        00425D1F    mov edx,edi
        00425D21    add eax,edi
        00425D23    xor edx,eax
        00425D25    and edx,dword ptr ss:[ebp+8]
        00425D28    xor edx,edi
        00425D2A    add edx,dword ptr ss:[ebp-3C]
        00425D2D    lea esi,dword ptr ds:[esi+edx+A9E3E905]
        00425D34    mov edx,esi
        00425D36    shr edx,1B
        00425D39    shl esi,5
        00425D3C    or edx,esi
        00425D3E    mov esi,eax
        00425D40    add edx,eax
        00425D42    xor esi,edx
        00425D44    and esi,edi
        00425D46    xor esi,eax
        00425D48    add esi,dword ptr ss:[ebp-28]
        00425D4B    lea ebx,dword ptr ds:[ebx+esi+FCEFA3F8]
        00425D52    mov esi,ebx
        00425D54    shr esi,17
        00425D57    shl ebx,9
        00425D5A    or esi,ebx
        00425D5C    add esi,edx
        00425D5E    mov dword ptr ss:[ebp+8],esi
        00425D61    xor esi,edx
        00425D63    and esi,eax
        00425D65    xor esi,edx
        00425D67    add esi,dword ptr ss:[ebp-C]
        00425D6A    lea edi,dword ptr ds:[edi+esi+676F02D9]
        00425D71    mov esi,dword ptr ss:[ebp+8]
        00425D74    mov ebx,edi
        00425D76    shr ebx,12
        00425D79    shl edi,0E
        00425D7C    or ebx,edi
        00425D7E    add ebx,esi
        00425D80    mov dword ptr ss:[ebp-4],esi
        00425D83    xor dword ptr ss:[ebp-4],ebx
        00425D86    mov edi,dword ptr ss:[ebp-4]
        00425D89    and edi,edx
        00425D8B    xor edi,esi
        00425D8D    add edi,dword ptr ss:[ebp-30]
        00425D90    lea eax,dword ptr ds:[eax+edi+8D2A4C8A]
        00425D97    mov edi,dword ptr ss:[ebp+8]
        00425D9A    mov esi,eax
        00425D9C    shl esi,14
        00425D9F    shr eax,0C
        00425DA2    or esi,eax
        00425DA4    mov eax,dword ptr ss:[ebp-4]
        00425DA7    add esi,ebx
        00425DA9    xor eax,esi
        00425DAB    add eax,dword ptr ss:[ebp-2C]
        00425DAE    lea edx,dword ptr ds:[edx+eax+FFFA3942]
        00425DB5    mov eax,edx
        00425DB7    shr eax,1C
        00425DBA    shl edx,4
        00425DBD    or eax,edx
        00425DBF    mov edx,ebx
        00425DC1    xor edx,esi
        00425DC3    add eax,esi
        00425DC5    xor edx,eax
        00425DC7    add edx,dword ptr ss:[ebp-34]
        00425DCA    lea edx,dword ptr ds:[edi+edx+8771F681]
        00425DD1    mov edi,edx
        00425DD3    shr edi,15
        00425DD6    shl edx,0B
        00425DD9    or edi,edx
        00425DDB    add edi,eax
        00425DDD    mov edx,edi
        00425DDF    mov dword ptr ss:[ebp-4],edi
        00425DE2    xor edx,esi
        00425DE4    xor edx,eax
        00425DE6    add edx,dword ptr ss:[ebp-24]
        00425DE9    lea edx,dword ptr ds:[ebx+edx+6D9D6122]
        00425DF0    mov ebx,edx
        00425DF2    shr ebx,10
        00425DF5    shl edx,10
        00425DF8    or ebx,edx
        00425DFA    add ebx,edi
        00425DFC    xor dword ptr ss:[ebp-4],ebx
        00425DFF    mov edx,dword ptr ss:[ebp-4]
        00425E02    xor edx,eax
        00425E04    add edx,dword ptr ss:[ebp-10]
        00425E07    lea esi,dword ptr ds:[esi+edx+FDE5380C]
        00425E0E    mov edx,esi
        00425E10    shl edx,17
        00425E13    shr esi,9
        00425E16    or edx,esi
        00425E18    mov esi,dword ptr ss:[ebp-4]
        00425E1B    add edx,ebx
        00425E1D    xor esi,edx
        00425E1F    add esi,dword ptr ss:[ebp-1C]
        00425E22    lea esi,dword ptr ds:[eax+esi+A4BEEA44]
        00425E29    mov eax,esi
        00425E2B    shr eax,1C
        00425E2E    shl esi,4
        00425E31    or eax,esi
        00425E33    mov esi,ebx
        00425E35    add eax,edx
        00425E37    xor esi,edx
        00425E39    xor esi,eax
        00425E3B    add esi,dword ptr ss:[ebp-40]
        00425E3E    lea edi,dword ptr ds:[edi+esi+4BDECFA9]
        00425E45    mov esi,edi
        00425E47    shr esi,15
        00425E4A    shl edi,0B
        00425E4D    or esi,edi
        00425E4F    add esi,eax
        00425E51    mov edi,esi
        00425E53    xor edi,edx
        00425E55    xor edi,eax
        00425E57    add edi,dword ptr ss:[ebp-C]
        00425E5A    lea ebx,dword ptr ds:[ebx+edi+F6BB4B60]
        00425E61    mov edi,ebx
        00425E63    shr edi,10
        00425E66    shl ebx,10
        00425E69    or edi,ebx
        00425E6B    mov dword ptr ss:[ebp-4],esi
        00425E6E    add edi,esi
        00425E70    xor dword ptr ss:[ebp-4],edi
        00425E73    mov ebx,dword ptr ss:[ebp-4]
        00425E76    xor ebx,eax
        00425E78    add ebx,dword ptr ss:[ebp-18]
        00425E7B    lea ebx,dword ptr ds:[edx+ebx+BEBFBC70]
        00425E82    mov edx,ebx
        00425E84    shl edx,17
        00425E87    shr ebx,9
        00425E8A    or edx,ebx
        00425E8C    mov ebx,dword ptr ss:[ebp-4]
        00425E8F    add edx,edi
        00425E91    xor ebx,edx
        00425E93    add ebx,dword ptr ss:[ebp-3C]
        00425E96    lea ebx,dword ptr ds:[eax+ebx+289B7EC6]
        00425E9D    mov eax,ebx
        00425E9F    shr eax,1C
        00425EA2    shl ebx,4
        00425EA5    or eax,ebx
        00425EA7    mov ebx,edi
        00425EA9    add eax,edx
        00425EAB    xor ebx,edx
        00425EAD    xor ebx,eax
        00425EAF    add ebx,dword ptr ss:[ebp-8]
        00425EB2    lea esi,dword ptr ds:[esi+ebx+EAA127FA]
        00425EB9    mov ebx,esi
        00425EBB    shr ebx,15
        00425EBE    shl esi,0B
        00425EC1    or ebx,esi
        00425EC3    add ebx,eax
        00425EC5    mov esi,ebx
        00425EC7    mov dword ptr ss:[ebp-4],ebx
        00425ECA    xor esi,edx
        00425ECC    xor esi,eax
        00425ECE    add esi,dword ptr ss:[ebp-14]
        00425ED1    lea edi,dword ptr ds:[edi+esi+D4EF3085]
        00425ED8    mov esi,edi
        00425EDA    shr esi,10
        00425EDD    shl edi,10
        00425EE0    or esi,edi
        00425EE2    add esi,ebx
        00425EE4    xor dword ptr ss:[ebp-4],esi
        00425EE7    mov dword ptr ss:[ebp+C],esi
        00425EEA    mov edi,dword ptr ss:[ebp-4]
        00425EED    xor edi,eax
        00425EEF    add edi,dword ptr ss:[ebp-20]
        00425EF2    lea edi,dword ptr ds:[edx+edi+4881D05]
        00425EF9    mov edx,edi
        00425EFB    shl edx,17
        00425EFE    shr edi,9
        00425F01    or edx,edi
        00425F03    mov edi,dword ptr ss:[ebp-4]
        00425F06    add edx,esi
        00425F08    xor edi,edx
        00425F0A    xor esi,edx
        00425F0C    add edi,dword ptr ss:[ebp-44]
        00425F0F    lea edi,dword ptr ds:[eax+edi+D9D4D039]
        00425F16    mov eax,edi
        00425F18    shr eax,1C
        00425F1B    shl edi,4
        00425F1E    or eax,edi
        00425F20    add eax,edx
        00425F22    xor esi,eax
        00425F24    add esi,dword ptr ss:[ebp-30]
        00425F27    lea ebx,dword ptr ds:[ebx+esi+E6DB99E5]
        00425F2E    mov esi,ebx
        00425F30    shr esi,15
        00425F33    shl ebx,0B
        00425F36    or esi,ebx
        00425F38    mov ebx,dword ptr ss:[ebp+C]
        00425F3B    add esi,eax
        00425F3D    mov edi,esi
        00425F3F    xor edi,edx
        00425F41    xor edi,eax
        00425F43    add edi,dword ptr ss:[ebp-38]
        00425F46    lea ebx,dword ptr ds:[ebx+edi+1FA27CF8]
        00425F4D    mov edi,ebx
        00425F4F    shr edi,10
        00425F52    shl ebx,10
        00425F55    or edi,ebx
        00425F57    mov ebx,esi
        00425F59    add edi,esi
        00425F5B    xor ebx,edi
        00425F5D    mov dword ptr ss:[ebp+C],edi
        00425F60    xor ebx,eax
        00425F62    add ebx,dword ptr ss:[ebp-28]
        00425F65    lea edx,dword ptr ds:[edx+ebx+C4AC5665]
        00425F6C    mov ebx,dword ptr ss:[ebp+C]
        00425F6F    mov edi,edx
        00425F71    shl edi,17
        00425F74    shr edx,9
        00425F77    or edi,edx
        00425F79    mov edx,esi
        00425F7B    add edi,ebx
        00425F7D    not edx
        00425F7F    or edx,edi
        00425F81    xor edx,ebx
        00425F83    add edx,dword ptr ss:[ebp-8]
        00425F86    lea eax,dword ptr ds:[eax+edx+F4292244]
        00425F8D    mov edx,eax
        00425F8F    shr edx,1A
        00425F92    shl eax,6
        00425F95    or edx,eax
        00425F97    mov eax,ebx
        00425F99    add edx,edi
        00425F9B    not eax
        00425F9D    or eax,edx
        00425F9F    xor eax,edi
        00425FA1    add eax,dword ptr ss:[ebp-C]
        00425FA4    lea esi,dword ptr ds:[esi+eax+432AFF97]
        00425FAB    mov eax,esi
        00425FAD    shr eax,16
        00425FB0    shl esi,0A
        00425FB3    or eax,esi
        00425FB5    mov esi,edi
        00425FB7    add eax,edx
        00425FB9    not esi
        00425FBB    or esi,eax
        00425FBD    xor esi,edx
        00425FBF    add esi,dword ptr ss:[ebp-10]
        00425FC2    lea ebx,dword ptr ds:[ebx+esi+AB9423A7]
        00425FC9    mov esi,ebx
        00425FCB    shr esi,11
        00425FCE    shl ebx,0F
        00425FD1    or esi,ebx
        00425FD3    mov ebx,edx
        00425FD5    add esi,eax
        00425FD7    not ebx
        00425FD9    or ebx,esi
        00425FDB    xor ebx,eax
        00425FDD    add ebx,dword ptr ss:[ebp-2C]
        00425FE0    lea edi,dword ptr ds:[edi+ebx+FC93A039]
        00425FE7    mov ebx,edi
        00425FE9    shl ebx,15
        00425FEC    shr edi,0B
        00425FEF    or ebx,edi
        00425FF1    mov edi,eax
        00425FF3    add ebx,esi
        00425FF5    not edi
        00425FF7    or edi,ebx
        00425FF9    xor edi,esi
        00425FFB    add edi,dword ptr ss:[ebp-30]
        00425FFE    lea edi,dword ptr ds:[edx+edi+655B59C3]
        00426005    mov edx,edi
        00426007    shr edx,1A
        0042600A    shl edi,6
        0042600D    or edx,edi
        0042600F    mov edi,esi
        00426011    add edx,ebx
        00426013    not edi
        00426015    or edi,edx
        00426017    xor edi,ebx
        00426019    add edi,dword ptr ss:[ebp-14]
        0042601C    lea edi,dword ptr ds:[eax+edi+8F0CCC92]
        00426023    mov eax,edi
        00426025    shr eax,16
        00426028    shl edi,0A
        0042602B    or eax,edi
        0042602D    mov edi,ebx
        0042602F    add eax,edx
        00426031    not edi
        00426033    or edi,eax
        00426035    xor edi,edx
        00426037    add edi,dword ptr ss:[ebp-18]
        0042603A    lea edi,dword ptr ds:[esi+edi+FFEFF47D]
        00426041    mov esi,edi
        00426043    shr esi,11
        00426046    shl edi,0F
        00426049    or esi,edi
        0042604B    mov edi,edx
        0042604D    add esi,eax
        0042604F    not edi
        00426051    or edi,esi
        00426053    xor edi,eax
        00426055    add edi,dword ptr ss:[ebp-1C]
        00426058    lea ebx,dword ptr ds:[ebx+edi+85845DD1]
        0042605F    mov edi,ebx
        00426061    shr ebx,0B
        00426064    shl edi,15
        00426067    or edi,ebx
        00426069    mov ebx,eax
        0042606B    not ebx
        0042606D    add edi,esi
        0042606F    or ebx,edi
        00426071    xor ebx,esi
        00426073    add ebx,dword ptr ss:[ebp-34]
        00426076    lea ebx,dword ptr ds:[edx+ebx+6FA87E4F]
        0042607D    mov edx,ebx
        0042607F    shl ebx,6
        00426082    shr edx,1A
        00426085    or edx,ebx
        00426087    mov ebx,esi
        00426089    add edx,edi
        0042608B    not ebx
        0042608D    or ebx,edx
        0042608F    xor ebx,edi
        00426091    add ebx,dword ptr ss:[ebp-38]
        00426094    lea ebx,dword ptr ds:[eax+ebx+FE2CE6E0]
        0042609B    mov eax,ebx
        0042609D    shr eax,16
        004260A0    shl ebx,0A
        004260A3    or eax,ebx
        004260A5    mov ebx,edi
        004260A7    add eax,edx
        004260A9    not ebx
        004260AB    or ebx,eax
        004260AD    xor ebx,edx
        004260AF    add ebx,dword ptr ss:[ebp-20]
        004260B2    lea ebx,dword ptr ds:[esi+ebx+A3014314]
        004260B9    mov esi,ebx
        004260BB    shr esi,11
        004260BE    shl ebx,0F
        004260C1    or esi,ebx
        004260C3    mov ebx,edx
        004260C5    add esi,eax
        004260C7    not ebx
        004260C9    or ebx,esi
        004260CB    xor ebx,eax
        004260CD    add ebx,dword ptr ss:[ebp-3C]
        004260D0    lea ebx,dword ptr ds:[edi+ebx+4E0811A1]
        004260D7    mov edi,ebx
        004260D9    shl edi,15
        004260DC    shr ebx,0B
        004260DF    or edi,ebx
        004260E1    mov ebx,eax
        004260E3    add edi,esi
        004260E5    not ebx
        004260E7    or ebx,edi
        004260E9    xor ebx,esi
        004260EB    add ebx,dword ptr ss:[ebp-40]
        004260EE    lea ebx,dword ptr ds:[edx+ebx+F7537E82]
        004260F5    mov edx,ebx
        004260F7    shr edx,1A
        004260FA    shl ebx,6
        004260FD    or edx,ebx
        004260FF    mov ebx,esi
        00426101    add edx,edi
        00426103    not ebx
        00426105    or ebx,edx
        00426107    xor ebx,edi
        00426109    add ebx,dword ptr ss:[ebp-24]
        0042610C    lea eax,dword ptr ds:[eax+ebx+BD3AF235]
        00426113    mov ebx,eax
        00426115    shr ebx,16
        00426118    shl eax,0A
        0042611B    or ebx,eax
        0042611D    mov eax,edi
        0042611F    add ebx,edx
        00426121    not eax
        00426123    or eax,ebx
        00426125    xor eax,edx
        00426127    add eax,dword ptr ss:[ebp-28]
        0042612A    lea esi,dword ptr ds:[esi+eax+2AD7D2BB]
        00426131    mov eax,esi
        00426133    shr eax,11
        00426136    shl esi,0F
        00426139    or eax,esi
        0042613B    mov esi,edx
        0042613D    add eax,ebx
        0042613F    not esi
        00426141    or esi,eax
        00426143    xor esi,ebx
        00426145    add esi,dword ptr ss:[ebp-44]
        00426148    lea edi,dword ptr ds:[edi+esi+EB86D391]
        0042614F    mov esi,dword ptr ds:[ecx]
        00426151    add esi,edx
        00426153    mov edx,edi
        00426155    shl edx,15
        00426158    shr edi,0B                                    ; 上面的一大串代码所作的处理,可以当作黑箱操作看待
        0042615B    or edx,edi                                    ; 下面是保存结果,写注册机时设个变量替换那些地址就可以了
        0042615D    mov dword ptr ds:[ecx],esi                    ; 保存结果
        0042615F    add edx,dword ptr ds:[ecx+4]
        00426162    pop edi
        00426163    pop esi
        00426164    add edx,eax
        00426166    mov dword ptr ds:[ecx+4],edx                  ; 保存结果
        00426169    mov edx,dword ptr ds:[ecx+8]
        0042616C    add edx,eax
        0042616E    mov eax,dword ptr ds:[ecx+C]
        00426171    add eax,ebx
        00426173    mov dword ptr ds:[ecx+8],edx                  ; 保存结果
        00426176    mov dword ptr ds:[ecx+C],eax                  ; 保存结果
        00426179    pop ebx
        0042617A    leave
        0042617B    retn
        -------------------处理用户名的关键代码--------end
}

0042B6AC    add esp,24
0042B6AF    xor edi,edi
0042B6B1    lea esi,dword ptr ss:[ebp-24]                 ;  使esi指向前面处理的结果
0042B6B4    /xor ecx,ecx
0042B6B6    |xor eax,eax
0042B6B8    |/movzx edx,byte ptr ds:[esi+eax]             ;  下面这个循环处理前面保存的结果,
0042B6BC    ||shl ecx,8
0042B6BF    ||add ecx,edx                                 ;  其实整个过程就把数据的高低位换了一下
0042B6C1    ||inc eax
0042B6C2    ||cmp eax,4
0042B6C5    |\jl short dialogbl.0042B6B8
0042B6C7    |mov eax,dword ptr ds:[908840]
0042B6CC    |cmp edi,2
0042B6CF    |jge short dialogbl.0042B704
0042B6D1    |mov dword ptr ss:[ebp+10],eax
0042B6D4    |push ecx
0042B6D5    |lea eax,dword ptr ss:[ebp+10]
0042B6D8    |push dialogbl.008D87E4                       ;  ASCII "%08lX-"
0042B6DD    |push eax
0042B6DE    |mov byte ptr ss:[ebp-4],3
0042B6E2    |call dialogbl.005871A0                       ;  这个call设置输出格式,把结果保存到一个地方
0042B6E7    |mov ecx,dword ptr ss:[ebp+10]                ;  加了"-"的结果,作为注册码第一段
0042B6EA    |add esp,0C
0042B6ED    |mov eax,dword ptr ds:[ecx-8]                 ;  结果的长度,包括"-"
0042B6F0    |push eax
0042B6F1    |push ecx
0042B6F2    |push eax
0042B6F3    |lea ecx,dword ptr ss:[ebp+C]
0042B6F6    |call dialogbl.00585A10
0042B6FB    |mov byte ptr ss:[ebp-4],2
0042B6FF    |lea ecx,dword ptr ss:[ebp+10]
0042B702    |jmp short dialogbl.0042B735
0042B704    |mov dword ptr ss:[ebp+10],eax
0042B707    |push ecx
0042B708    |lea eax,dword ptr ss:[ebp+10]
0042B70B    |push dialogbl.008D87DC                       ;  ASCII "%08lX"
0042B710    |push eax
0042B711    |mov byte ptr ss:[ebp-4],4
0042B715    |call dialogbl.005871A0                       ;  这个call设置输出格式,把结果保存到一个地方
0042B71A    |mov ecx,dword ptr ss:[ebp+10]                ;  加了"-"的结果,作为注册码第二段
0042B71D    |add esp,0C
0042B720    |mov eax,dword ptr ds:[ecx-8]                 ;  结果的长度,包括"-"           
0042B723    |push eax
0042B724    |push ecx
0042B725    |push eax
0042B726    |lea ecx,dword ptr ss:[ebp+C]
0042B729    |call dialogbl.00585A10
0042B72E    |mov byte ptr ss:[ebp-4],2
0042B732    |lea ecx,dword ptr ss:[ebp+10]
0042B735    |call dialogbl.0040104B
0042B73A    |inc edi
0042B73B    |add esi,4
0042B73E    |cmp edi,3
0042B741    \jl dialogbl.0042B6B4
0042B747    mov eax,dword ptr ss:[ebp+C]                  ;  调试到这里的时候可以看到计算出的注册码
0042B74A    mov edi,dword ptr ss:[ebp+8]
0042B74D    cmp dword ptr ds:[eax-8],ebx
0042B750    jnz short dialogbl.0042B75B
0042B752    mov eax,dword ptr ds:[908840]
0042B757    mov dword ptr ds:[edi],eax
0042B759    jmp short dialogbl.0042B769
0042B75B    mov dword ptr ds:[edi],eax                    ;  复制指针
0042B75D    mov ecx,dword ptr ds:[eax-C]
...
     
    三种不同版本的注册码(确切的说应该是两种版本三个注册码)的计算都用到了那个庞大的函数,唯一不同的是固定字串和后面对应的值(就是那个通过用户名长度计算得到的),看到这里,我想各位都大致知道该怎么写这个软件的注册机了吧?我自己写了一个注册机,我也贴一个只计算标准版注册码的注册机源码,大家要是有兴趣可以照着源码写一个计算个人版注册码的注册机,要做的只是把固定字串的值按规则替换掉(前面我提到过)。当然也可以写在一起,用radiobutton或是checkbox来区分版本,然后给定不同的的字串,最后调用那个计算函数就可以了,要注意的是存放累计值的变量前后(特别是前面)需要很大的空间,如果不够会造成数据覆盖,计算出错(可以通过修改保存临时结果的地址来解决这个问题,不过这样工作量很大,要改很多地方)。对这个软件只要调试,就会发现明码的,要爆破安我说的也很简单,但是如果你写过了这个软件的注册机,会发现收获很大。好了,废话说道这里,虽然我的文笔不好,但还是希望大家会喜欢。
    最后贴个注册机,不当之处请大家指正。

--------------------------------------------------------------------------------
【算法注册机】

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>> Keygen For DialogBlocks Version 2.00 >>>
;>>>           author:qfejj               >>>
;>>>         Email :qfejj@163.com         >>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.586
.model flat, stdcall  
option casemap :none  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc
include    user32.inc
include    kernel32.inc
includelib user32.lib
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDD_DLGBOX              equ 1000
IDC_NAME                equ 1001
IDC_KEY                 equ 1002
IDC_STC1                equ 1004
IDC_STC2                equ 1005
IDC_GENERATE            equ 1006
IDC_ABOUT               equ 1007
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :HWND,:UINT,:WPARAM,:LPARAM
GetKey  proto
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szMsgboxText    db '-=You are free to do as you wish!=-',0dh
                db '         -=Email:qfejj@163.com=-',0
szMsgboxCaption db 'about',0
format1         db '%X-',0
;--参与用户名处理的数据:
szAppendString1 db 'Anthemion Software DialogBlocks',80h,0  ;看这里占了多少字节?
aConvertString  db 01h,23h,45h,67h,89h,0ABh,0CDh,0EFh,0FEh,0DCh,0BAh,98h,76h,54h,32h,10h

.data?
hInstance       HINSTANCE ?
hDlg            HINSTANCE ?
sAppendString   dd ?
temp            dd 20 dup(?)
aAcumulate      dd 20 dup(?)    ;它前后需要很大的空间
aNameBuffer     db 60 dup(?)
aStdKeyBuffer   db 20 dup(?)    ;存放标准版注册码初步处理结果
aStdKeyOut      db 30 dup(?)    ;存放最终标准版注册码
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

start:
        invoke GetModuleHandle,NULL
        mov hInstance,eax
        invoke DialogBoxParam,hInstance,IDD_DLGBOX,NULL,addr DlgProc,NULL
        invoke ExitProcess,0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
        mov eax,uMsg
        .if     eax==WM_CLOSE
                  invoke EndDialog,hWin,0
        .elseif eax==WM_INITDIALOG
                  push hWin
                  pop  hDlg
        .elseif eax==WM_COMMAND
                  mov eax,wParam
                  .if eax==IDC_GENERATE
                        invoke RtlZeroMemory,offset aNameBuffer,sizeof aNameBuffer
                        invoke RtlZeroMemory,offset aStdKeyBuffer,sizeof aStdKeyBuffer
                        invoke RtlZeroMemory,offset aStdKeyOut,sizeof aStdKeyOut
                         invoke GetKey
                  .elseif eax==IDC_ABOUT
                        invoke MessageBox,hWin,addr szMsgboxText,addr szMsgboxCaption,MB_OK
                  .endif                 
        .else
                mov eax,FALSE
                ret
        .endif
        mov eax,TRUE
        ret

DlgProc endp
       
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       
GetKey proc

;-----------------------
; 在用户名后加上固定字串
;-----------------------
        invoke GetDlgItemText,hDlg,IDC_NAME,offset aNameBuffer,sizeof aNameBuffer
        invoke GetDlgItem,hDlg,IDC_NAME
        invoke GetWindowTextLength,eax
        invoke CharLowerBuff,addr aNameBuffer,eax ; 转换成小写
        invoke lstrcat,offset aNameBuffer,offset szAppendString1
        invoke lstrlen,addr aNameBuffer
        sub eax,1                                 ; 一定要减1
        lea ecx,dword ptr[eax*8]                  
        mov sAppendString,ecx
        invoke lstrcat,offset [aNameBuffer+38h],offset sAppendString  ;自己调试的时候留意一下,看这里为什么要用38h

;-------------------------------
;  处理用户名,得到标准版的注册码
;-------------------------------

        mov eax,offset aNameBuffer
        mov ecx,offset aConvertString
        push ebx
        push esi
        mov esi,dword ptr [eax]                   ;  取出用户名前4个字母
        mov edx,dword ptr [ecx+0Ch]               ;  取出数列中的4位(76543210)
        mov ebx,dword ptr [ecx+4]                 ;  取出数列中的4位(89ABCDEF)
        push edi
        mov edi,dword ptr [ecx+8]                 ;  取出数列中的4位(FEDCBA98)
        mov dword ptr [aAcumulate-8],esi          ;  用户名前4个字母,作为一个累计性质的值,保存到0012F8C8
        mov esi,edx
        xor esi,edi
        and esi,ebx
        xor esi,edx
        mov edx,dword ptr [ecx]                   ;  取出数列中的4位(01234567)
        add esi,dword ptr [aAcumulate-8]          ;  和前4个用户名ASCII值相加
        lea esi,dword ptr [esi+edx+0D76AA478h]    ;  计算,里面常数写注册机时不用修改
        mov edx,esi
        shr edx,19h
        shl esi,7
        or edx,esi
        mov esi,dword ptr [eax+4]                 ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-1Ch],esi        ;  作为一个累计性质的值,保存
        mov esi,edi
        add edx,ebx
        xor esi,ebx
        and esi,edx
        xor esi,edi
        mov edi,dword ptr [ecx+0Ch]
        add esi,dword ptr [aAcumulate-1Ch]
        lea edi,dword ptr [edi+esi+0E8C7B756h]
        mov esi,edi
        shr esi,14h
        shl edi,0Ch
        or esi,edi
        mov edi,dword ptr [eax+8]                 ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-28h],edi        ;  作为一个累计性质的值,保存
        mov edi,ebx
        add esi,edx
        xor edi,edx
        and edi,esi
        xor edi,ebx
        add edi,dword ptr [aAcumulate-28h]
        mov ebx,edi
        mov edi,dword ptr [ecx+8]
        lea edi,dword ptr [edi+ebx+242070DBh]
        mov ebx,edi
        shr ebx,0Fh
        shl edi,11h
        or ebx,edi
        mov edi,dword ptr [eax+0Ch]                 ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-14h],edi          ;  作为一个累计性质的值,保存
        mov edi,esi
        add ebx,esi
        xor edi,edx
        and edi,ebx
        mov dword ptr [aAcumulate+0Ch],ebx          ;  作为一个累计性质的值,保存
        xor edi,edx
        add edi,dword ptr [aAcumulate-14h]
        mov ebx,edi
        mov edi,dword ptr [ecx+4]
        lea edi,dword ptr [edi+ebx+0C1BDCEEEh]
        mov ebx,edi
        shl ebx,16h
        shr edi,0Ah
        or ebx,edi
        mov edi,dword ptr [eax+10h]                 ;  向后取用户名4个字母
        add ebx,dword ptr [aAcumulate+0Ch]
        mov dword ptr [aAcumulate-40h],edi          ;  作为一个累计性质的值,保存
        mov dword ptr [aAcumulate-4],ebx            ;  作为一个累计性质的值,保存
        mov ebx,esi
        xor ebx,dword ptr [aAcumulate+0Ch]
        and ebx,dword ptr [aAcumulate-4]
        xor ebx,esi
        add ebx,edi
        lea edx,dword ptr [edx+ebx+0F57C0FAFh]
        mov edi,edx
        shr edi,19h
        shl edx,7
        mov ebx,dword ptr [aAcumulate+0Ch]
        or edi,edx
        add edi,dword ptr [aAcumulate-4]
        xor ebx,dword ptr [aAcumulate-4]
        mov edx,dword ptr [eax+14h]
        and ebx,edi
        mov dword ptr [aAcumulate-2Ch],edx
        xor ebx,dword ptr [aAcumulate+0Ch]
        add ebx,edx
        lea esi,dword ptr [esi+ebx+4787C62Ah]
        mov ebx,dword ptr [aAcumulate+0Ch]
        mov edx,esi
        shr edx,14h
        shl esi,0Ch
        or edx,esi
        mov esi,dword ptr [eax+18h]                 ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-20h],esi          ;  作为一个累计性质的值,保存
        mov esi,dword ptr [aAcumulate-4]           
        add edx,edi
        xor esi,edi
        and esi,edx
        xor esi,dword ptr [aAcumulate-4]
        add esi,dword ptr [aAcumulate-20h]
        lea ebx,dword ptr [ebx+esi+0A8304613h]
        mov esi,ebx
        shr esi,0Fh
        shl ebx,11h
        or esi,ebx
        mov ebx,dword ptr [eax+1Ch]               ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-0Ch],ebx        ;  作为一个累计性质的值,保存
        mov ebx,edx
        add esi,edx
        xor ebx,edi
        and ebx,esi
        mov dword ptr [aAcumulate+0Ch],esi
        mov esi,dword ptr [aAcumulate-4]
        xor ebx,edi
        add ebx,dword ptr [aAcumulate-0Ch]
        lea esi,dword ptr [esi+ebx+0FD469501h]
        mov ebx,esi
        shl ebx,16h
        shr esi,0Ah
        or ebx,esi
        mov esi,dword ptr [eax+20h]                 ;  向后取用户名4个字母
        add ebx,dword ptr [aAcumulate+0Ch]         ;  作为一个累计性质的值,保存
        mov dword ptr [aAcumulate-34h],esi
        mov dword ptr [aAcumulate-4],ebx
        mov ebx,edx
        xor ebx,dword ptr [aAcumulate+0Ch]
        and ebx,dword ptr [aAcumulate-4]
        xor ebx,edx
        add ebx,esi
        lea edi,dword ptr [edi+ebx+698098D8h]
        mov ebx,dword ptr [aAcumulate+0Ch]
        xor ebx,dword ptr [aAcumulate-4]
        mov esi,edi
        shr esi,19h
        shl edi,7
        or esi,edi
        mov edi,dword ptr [eax+24h]                ;  向后取用户名4个字母
        add esi,dword ptr [aAcumulate-4]
        mov dword ptr [aAcumulate-44h],edi        ;  作为一个累计性质的值,保存
        and ebx,esi
        xor ebx,dword ptr [aAcumulate+0Ch]
        add ebx,edi
        lea edx,dword ptr [edx+ebx+8B44F7AFh]
        mov ebx,dword ptr [aAcumulate+0Ch]
        mov edi,edx
        shr edi,14h
        shl edx,0Ch
        or edi,edx
        mov edx,dword ptr [eax+28h]                 ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-18h],edx          ;  作为一个累计性质的值,保存
        mov edx,dword ptr [aAcumulate-4]
        add edi,esi
        xor edx,esi
        and edx,edi
        xor edx,dword ptr [aAcumulate-4]
        add edx,dword ptr [aAcumulate-18h]
        lea ebx,dword ptr [ebx+edx+0FFFF5BB1h]
        mov edx,ebx
        shr edx,0Fh
        shl ebx,11h
        or edx,ebx
        mov ebx,dword ptr [eax+2C0h]
        mov dword ptr [aAcumulate-24h],ebx
        mov ebx,edi
        xor ebx,esi
        add edx,edi
        and ebx,edx
        mov dword ptr [aAcumulate+0Ch],edx
        mov edx,dword ptr [aAcumulate-4]
        xor ebx,esi
        add ebx,dword ptr [aAcumulate-24h]
        lea edx,dword ptr [edx+ebx+895CD7BEh]
        mov ebx,edx
        shl ebx,16h
        shr edx,0Ah
        or ebx,edx
        mov edx,dword ptr [eax+30h]                  ;  向后取用户名4个字母
        add ebx,dword ptr [aAcumulate+0Ch]
        mov dword ptr [aAcumulate-30h],edx          ;  作为一个累计性质的值,保存
        mov dword ptr [aAcumulate-4],ebx
        mov ebx,edi
        xor ebx,dword ptr [aAcumulate+0Ch]
        and ebx,dword ptr [aAcumulate-4]
        xor ebx,edi
        add ebx,edx
        lea esi,dword ptr [esi+ebx+6B901122h]
        mov ebx,dword ptr [aAcumulate+0Ch]
        xor ebx,dword ptr [aAcumulate-4]
        mov edx,esi
        shr edx,19h
        shl esi,7
        or edx,esi
        mov esi,dword ptr [eax+34h]                ;  向后取用户名4个字母
        add edx,dword ptr [aAcumulate-4]
        mov dword ptr [aAcumulate-3Ch],esi          ;  作为一个累计性质的值,保存
        and ebx,edx
        xor ebx,dword ptr [aAcumulate+0Ch]
        add ebx,esi
        mov esi,dword ptr [eax+38h]               ;  向后取用户名4个字母
        mov dword ptr [aAcumulate-10h],esi        ;  作为一个累计性质的值,保存
        mov esi,dword ptr [aAcumulate-4]
        lea edi,dword ptr [edi+ebx+0FD987193h]
        xor esi,edx
        mov ebx,edi
        mov eax,dword ptr [eax+3Ch]
        shr ebx,14h
        shl edi,0Ch
        or ebx,edi
        mov edi,dword ptr [aAcumulate+0Ch]
        add ebx,edx
        mov dword ptr [aAcumulate-38h],eax
        and esi,ebx
        mov dword ptr [aAcumulate+8],ebx
        xor esi,dword ptr [aAcumulate-4]
        add esi,dword ptr [aAcumulate-10h]
        lea edi,dword ptr [edi+esi+0A679438Eh]
        mov esi,edi
        shr esi,0Fh
        shl edi,11h
        or esi,edi
        mov edi,ebx
        add esi,ebx
        xor edi,edx
        and edi,esi
        xor edi,edx
        add edi,eax
        mov eax,dword ptr [aAcumulate-4]
        lea eax,dword ptr [eax+edi+49B40821h]
        mov edi,eax
        shl edi,16h
        shr eax,0Ah
        or edi,eax
        mov eax,esi
        add edi,esi
        xor eax,edi
        and eax,ebx
        xor eax,esi
        add eax,dword ptr [aAcumulate-1Ch]
        lea edx,dword ptr [edx+eax+0F61E2562h]
        mov eax,edx
        shr eax,1Bh
        shl edx,5
        or eax,edx
        mov edx,edi
        add eax,edi
        xor edx,eax
        and edx,esi
        xor edx,edi
        add edx,dword ptr [aAcumulate-20h]
        lea ebx,dword ptr [ebx+edx+0C040B340h]
        mov edx,ebx
        shr edx,17h
        shl ebx,9
        or edx,ebx
        add edx,eax
        mov dword ptr [aAcumulate+8],edx
        xor edx,eax
        and edx,edi
        mov ebx,dword ptr [aAcumulate+8]
        xor edx,eax
        add edx,dword ptr [aAcumulate-24h]
        lea esi,dword ptr [esi+edx+265E5A51h]
        mov edx,esi
        shr edx,12h
        shl esi,0Eh
        or edx,esi
        mov esi,dword ptr [aAcumulate+8]
        add edx,dword ptr [aAcumulate+8]
        xor esi,edx
        and esi,eax
        xor esi,dword ptr [aAcumulate+8]
        add esi,dword ptr [aAcumulate-8]
        lea edi,dword ptr [edi+esi+0E9B6C7AAh]
        mov esi,edi
        shl esi,14h
        shr edi,0Ch
        or esi,edi
        mov edi,edx
        add esi,edx
        xor edi,esi
        and edi,dword ptr [aAcumulate+8]
        xor edi,edx
        add edi,dword ptr [aAcumulate-2Ch]
        lea eax,dword ptr [eax+edi+0D62F105Dh]
        mov edi,eax
        shr edi,1Bh
        shl eax,5
        or edi,eax
        mov eax,esi
        add edi,esi
        xor eax,edi
        and eax,edx
        xor eax,esi
        add eax,dword ptr [aAcumulate-18h]
        lea ebx,dword ptr [ebx+eax+2441453h]
        mov eax,ebx
        shr eax,17h
        shl ebx,9
        or eax,ebx
        add eax,edi
        mov dword ptr [aAcumulate+8],eax
        xor eax,edi
        and eax,esi
        xor eax,edi
        add eax,dword ptr [aAcumulate-38h]
        lea edx,dword ptr [edx+eax+0D8A1E681h]
        mov eax,edx
        shr eax,12h
        shl edx,0Eh
        or eax,edx
        mov edx,dword ptr [aAcumulate+8]
        add eax,dword ptr [aAcumulate+8]
        xor edx,eax
        and edx,edi
        xor edx,dword ptr [aAcumulate+8]
        add edx,dword ptr [aAcumulate-40h]
        lea esi,dword ptr [esi+edx+0E7D3FBC8h]
        mov edx,esi
        shl edx,14h
        shr esi,0Ch
        or edx,esi
        mov esi,eax
        add edx,eax
        mov ebx,dword ptr [aAcumulate+8]
        xor esi,edx
        and esi,dword ptr [aAcumulate+8]
        xor esi,eax
        add esi,dword ptr [aAcumulate-44h]
        lea edi,dword ptr [edi+esi+21E1CDE6h]
        mov esi,edi
        shr esi,1Bh
        shl edi,5
        or esi,edi
        mov edi,edx
        add esi,edx
        xor edi,esi
        and edi,eax
        xor edi,edx
        add edi,dword ptr [aAcumulate-10h]
        lea ebx,dword ptr [ebx+edi+0C33707D6h]
        mov edi,ebx
        shr edi,17h
        shl ebx,9
        or edi,ebx
        add edi,esi
        mov dword ptr [aAcumulate+8],edi
        xor edi,esi
        and edi,edx
        mov ebx,dword ptr [aAcumulate+8]
        xor edi,esi
        add edi,dword ptr [aAcumulate-14h]
        lea eax,dword ptr [eax+edi+0F4D50D87h]
        mov edi,eax
        shr edi,12h
        shl eax,0Eh
        or edi,eax
        mov eax,dword ptr [aAcumulate+8]
        add edi,dword ptr [aAcumulate+8]
        xor eax,edi
        and eax,esi
        xor eax,dword ptr [aAcumulate+8]
        add eax,dword ptr [aAcumulate-34h]
        lea edx,dword ptr [edx+eax+455A14EDh]
        mov eax,edx
        shl eax,14h
        shr edx,0Ch
        or eax,edx
        mov edx,edi
        add eax,edi
        xor edx,eax
        and edx,dword ptr [aAcumulate+8]
        xor edx,edi
        add edx,dword ptr [aAcumulate-3Ch]
        lea esi,dword ptr [esi+edx+0A9E3E905h]
        mov edx,esi
        shr edx,1Bh
        shl esi,5
        or edx,esi
        mov esi,eax
        add edx,eax
        xor esi,edx
        and esi,edi
        xor esi,eax
        add esi,dword ptr [aAcumulate-28h]
        lea ebx,dword ptr [ebx+esi+0FCEFA3F8h]
        mov esi,ebx
        shr esi,17h
        shl ebx,9
        or esi,ebx
        add esi,edx
        mov dword ptr [aAcumulate+8],esi
        xor esi,edx
        and esi,eax
        xor esi,edx
        add esi,dword ptr [aAcumulate-0Ch]
        lea edi,dword ptr [edi+esi+676F02D9h]
        mov esi,dword ptr [aAcumulate+8]
        mov ebx,edi
        shr ebx,12h
        shl edi,0Eh
        or ebx,edi
        add ebx,esi
        mov dword ptr [aAcumulate-4],esi
        xor dword ptr [aAcumulate-4],ebx
        mov edi,dword ptr [aAcumulate-4]
        and edi,edx
        xor edi,esi
        add edi,dword ptr [aAcumulate-30h]
        lea eax,dword ptr [eax+edi+8D2A4C8Ah]
        mov edi,dword ptr [aAcumulate+8]
        mov esi,eax
        shl esi,14h
        shr eax,0Ch
        or esi,eax
        mov eax,dword ptr [aAcumulate-4]
        add esi,ebx
        xor eax,esi
        add eax,dword ptr [aAcumulate-2Ch]
        lea edx,dword ptr [edx+eax+0FFFA3942h]
        mov eax,edx
        shr eax,1Ch
        shl edx,4
        or eax,edx
        mov edx,ebx
        xor edx,esi
        add eax,esi
        xor edx,eax
        add edx,dword ptr [aAcumulate-34h]
        lea edx,dword ptr [edi+edx+8771F681h]
        mov edi,edx
        shr edi,15h
        shl edx,0Bh
        or edi,edx
        add edi,eax
        mov edx,edi
        mov dword ptr [aAcumulate-4],edi
        xor edx,esi
        xor edx,eax
        add edx,dword ptr [aAcumulate-24h]
        lea edx,dword ptr [ebx+edx+6D9D6122h]
        mov ebx,edx
        shr ebx,10h
        shl edx,10h
        or ebx,edx
        add ebx,edi
        xor dword ptr [aAcumulate-4],ebx
        mov edx,dword ptr [aAcumulate-4]
        xor edx,eax
        add edx,dword ptr [aAcumulate-10h]
        lea esi,dword ptr [esi+edx+0FDE5380Ch]
        mov edx,esi
        shl edx,17h
        shr esi,9
        or edx,esi
        mov esi,dword ptr [aAcumulate-4]
        add edx,ebx
        xor esi,edx
        add esi,dword ptr [aAcumulate-1Ch]
        lea esi,dword ptr [eax+esi+0A4BEEA44h]
        mov eax,esi
        shr eax,1Ch
        shl esi,4
        or eax,esi
        mov esi,ebx
        add eax,edx
        xor esi,edx
        xor esi,eax
        add esi,dword ptr [aAcumulate-40h]
        lea edi,dword ptr [edi+esi+4BDECFA9h]
        mov esi,edi
        shr esi,15h
        shl edi,0Bh
        or esi,edi
        add esi,eax
        mov edi,esi
        xor edi,edx
        xor edi,eax
        add edi,dword ptr [aAcumulate-0Ch]
        lea ebx,dword ptr [ebx+edi+0F6BB4B60h]
        mov edi,ebx
        shr edi,10h
        shl ebx,10h
        or edi,ebx
        mov dword ptr [aAcumulate-4],esi
        add edi,esi
        xor dword ptr [aAcumulate-4],edi
        mov ebx,dword ptr [aAcumulate-4]
        xor ebx,eax
        add ebx,dword ptr [aAcumulate-18h]
        lea ebx,dword ptr [edx+ebx+0BEBFBC70h]
        mov edx,ebx
        shl edx,17h
        shr ebx,9
        or edx,ebx
        mov ebx,dword ptr [aAcumulate-4]
        add edx,edi
        xor ebx,edx
        add ebx,dword ptr [aAcumulate-3Ch]
        lea ebx,dword ptr [eax+ebx+289B7EC6h]
        mov eax,ebx
        shr eax,1Ch
        shl ebx,4
        or eax,ebx
        mov ebx,edi
        add eax,edx
        xor ebx,edx
        xor ebx,eax
        add ebx,dword ptr [aAcumulate-8]
        lea esi,dword ptr [esi+ebx+0EAA127FAh]
        mov ebx,esi
        shr ebx,15h
        shl esi,0Bh
        or ebx,esi
        add ebx,eax
        mov esi,ebx
        mov dword ptr [aAcumulate-4],ebx
        xor esi,edx
        xor esi,eax
        add esi,dword ptr [aAcumulate-14h]
        lea edi,dword ptr [edi+esi+0D4EF3085h]
        mov esi,edi
        shr esi,10h
        shl edi,10h
        or esi,edi
        add esi,ebx
        xor dword ptr [aAcumulate-4],esi
        mov dword ptr [aAcumulate+0Ch],esi
        mov edi,dword ptr [aAcumulate-4]
        xor edi,eax
        add edi,dword ptr [aAcumulate-20h]
        lea edi,dword ptr [edx+edi+4881D05h]
        mov edx,edi
        shl edx,17h
        shr edi,9
        or edx,edi
        mov edi,dword ptr [aAcumulate-4]
        add edx,esi
        xor edi,edx
        xor esi,edx
        add edi,dword ptr [aAcumulate-44h]
        lea edi,dword ptr [eax+edi+0D9D4D039h]
        mov eax,edi
        shr eax,1Ch
        shl edi,4
        or eax,edi
        add eax,edx
        xor esi,eax
        add esi,dword ptr [aAcumulate-30h]
        lea ebx,dword ptr [ebx+esi+0E6DB99E5h]
        mov esi,ebx
        shr esi,15h
        shl ebx,0Bh
        or esi,ebx
        mov ebx,dword ptr [aAcumulate+0Ch]
        add esi,eax
        mov edi,esi
        xor edi,edx
        xor edi,eax
        add edi,dword ptr [aAcumulate-38h]
        lea ebx,dword ptr [ebx+edi+1FA27CF8h]
        mov edi,ebx
        shr edi,10h
        shl ebx,10h
        or edi,ebx
        mov ebx,esi
        add edi,esi
        xor ebx,edi
        mov dword ptr [aAcumulate+0Ch],edi
        xor ebx,eax
        add ebx,dword ptr [aAcumulate-28h]
        lea edx,dword ptr [edx+ebx+0C4AC5665h]
        mov ebx,dword ptr [aAcumulate+0Ch]
        mov edi,edx
        shl edi,17h
        shr edx,9
        or edi,edx
        mov edx,esi
        add edi,ebx
        not edx
        or edx,edi
        xor edx,ebx
        add edx,dword ptr [aAcumulate-8]
        lea eax,dword ptr [eax+edx+0F4292244h]
        mov edx,eax
        shr edx,1Ah
        shl eax,6
        or edx,eax
        mov eax,ebx
        add edx,edi
        not eax
        or eax,edx
        xor eax,edi
        add eax,dword ptr [aAcumulate-0Ch]
        lea esi,dword ptr [esi+eax+432AFF97h]
        mov eax,esi
        shr eax,16h
        shl esi,0Ah
        or eax,esi
        mov esi,edi
        add eax,edx
        not esi
        or esi,eax
        xor esi,edx
        add esi,dword ptr [aAcumulate-10h]
        lea ebx,dword ptr [ebx+esi+0AB9423A7h]
        mov esi,ebx
        shr esi,11h
        shl ebx,0Fh
        or esi,ebx
        mov ebx,edx
        add esi,eax
        not ebx
        or ebx,esi
        xor ebx,eax
        add ebx,dword ptr [aAcumulate-2Ch]
        lea edi,dword ptr [edi+ebx+0FC93A039h]
        mov ebx,edi
        shl ebx,15h
        shr edi,0Bh
        or ebx,edi
        mov edi,eax
        add ebx,esi
        not edi
        or edi,ebx
        xor edi,esi
        add edi,dword ptr [aAcumulate-30h]
        lea edi,dword ptr [edx+edi+655B59C3h]
        mov edx,edi
        shr edx,1Ah
        shl edi,6
        or edx,edi
        mov edi,esi
        add edx,ebx
        not edi
        or edi,edx
        xor edi,ebx
        add edi,dword ptr [aAcumulate-14h]
        lea edi,dword ptr [eax+edi+8F0CCC92h]
        mov eax,edi
        shr eax,16h
        shl edi,0Ah
        or eax,edi
        mov edi,ebx
        add eax,edx
        not edi
        or edi,eax
        xor edi,edx
        add edi,dword ptr [aAcumulate-18h]
        lea edi,dword ptr [esi+edi+0FFEFF47Dh]
        mov esi,edi
        shr esi,11h
        shl edi,0Fh
        or esi,edi
        mov edi,edx
        add esi,eax
        not edi
        or edi,esi
        xor edi,eax
        add edi,dword ptr [aAcumulate-1Ch]
        lea ebx,dword ptr [ebx+edi+85845DD1h]
        mov edi,ebx
        shr ebx,0Bh
        shl edi,15h
        or edi,ebx
        mov ebx,eax
        not ebx
        add edi,esi
        or ebx,edi
        xor ebx,esi
        add ebx,dword ptr [aAcumulate-34h]
        lea ebx,dword ptr [edx+ebx+6FA87E4Fh]
        mov edx,ebx
        shl ebx,6
        shr edx,1Ah
        or edx,ebx
        mov ebx,esi
        add edx,edi
        not ebx
        or ebx,edx
        xor ebx,edi
        add ebx,dword ptr [aAcumulate-38h]
        lea ebx,dword ptr [eax+ebx+0FE2CE6E0h]
        mov eax,ebx
        shr eax,16h
        shl ebx,0Ah
        or eax,ebx
        mov ebx,edi
        add eax,edx
        not ebx
        or ebx,eax
        xor ebx,edx
        add ebx,dword ptr [aAcumulate-20h]
        lea ebx,dword ptr [esi+ebx+0A3014314h]
        mov esi,ebx
        shr esi,11h
        shl ebx,0Fh
        or esi,ebx
        mov ebx,edx
        add esi,eax
        not ebx
        or ebx,esi
        xor ebx,eax
        add ebx,dword ptr [aAcumulate-3Ch]
        lea ebx,dword ptr [edi+ebx+4E0811A1h]
        mov edi,ebx
        shl edi,15h
        shr ebx,0Bh
        or edi,ebx
        mov ebx,eax
        add edi,esi
        not ebx
        or ebx,edi
        xor ebx,esi
        add ebx,dword ptr [aAcumulate-40h]
        lea ebx,dword ptr [edx+ebx+0F7537E82h]
        mov edx,ebx
        shr edx,1Ah
        shl ebx,6
        or edx,ebx
        mov ebx,esi
        add edx,edi
        not ebx
        or ebx,edx
        xor ebx,edi
        add ebx,dword ptr [aAcumulate-24h]
        lea eax,dword ptr [eax+ebx+0BD3AF235h]
        mov ebx,eax
        shr ebx,16h
        shl eax,0Ah
        or ebx,eax
        mov eax,edi
        add ebx,edx
        not eax
        or eax,ebx
        xor eax,edx
        add eax,dword ptr [aAcumulate-28h]
        lea esi,dword ptr [esi+eax+2AD7D2BBh]
        mov eax,esi
        shr eax,11h
        shl esi,0Fh
        or eax,esi
        mov esi,edx
        add eax,ebx
        not esi
        or esi,eax
        xor esi,ebx
        add esi,dword ptr [aAcumulate-44h]
        lea edi,dword ptr [edi+esi+0EB86D391h]
        mov esi,dword ptr [ecx]
        add esi,edx
        mov edx,edi
        shl edx,15h
        shr edi,0Bh
        or edx,edi
        mov dword ptr [aStdKeyBuffer],esi             ; 保存结果
        add edx,dword ptr [ecx+4]
        pop edi
        pop esi
        add edx,eax
        mov dword ptr [aStdKeyBuffer+4],edx           ; 保存结果
        mov edx,dword ptr [ecx+8]
        add edx,eax
        mov eax,dword ptr [ecx+0Ch]
        add eax,ebx
        mov dword ptr [aStdKeyBuffer+8],edx           ; 保存结果
        mov dword ptr [aStdKeyBuffer+0Ch],eax         ; 保存结果
        ;------------------------------------
        xor edi,edi
@1:
        xor ecx,ecx
        xor eax,eax
@2:
        movzx edx,byte ptr[aStdKeyBuffer+eax+edi*4]
        shl ecx,8
        add ecx,edx
        inc eax
        cmp eax,4
        jl @2                                        ;小循环结束后,ecx中就是其中一段注册码
        invoke wsprintf,addr temp,addr format1,ecx
        invoke lstrcat,addr aStdKeyOut,addr temp
        inc edi
        cmp edi,3
        jl @1
        mov byte ptr[aStdKeyOut+26],0
        invoke SetDlgItemText,hDlg,IDC_KEY,addr aStdKeyOut
           leave
        ret

GetKey endp

end start
--------------------------------------------------------------------------------
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>    keygen.rc     >>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define IDD_DLGBOX 1000
#define IDC_GRP1 1003
#define IDC_NAME 1001
#define IDC_KEY 1002
#define IDC_STC1 1004
#define IDC_STC2 1005
#define IDC_GENERATE 1006
#define IDC_ABOUT 1007
IDD_DLGBOX DIALOGEX 4,5,214,78
CAPTION "Keygen For DialogBlocks Version 2.00"
FONT 8,"MS Sans Serif"
STYLE 0x10CA0880
EXSTYLE 0x00000001
BEGIN
  CONTROL "",IDC_NAME,"Edit",0x50010000,54,7,142,15,0x00000200
  CONTROL "",IDC_KEY,"Edit",0x50010800,54,27,142,15,0x00000200
  CONTROL "Name :",IDC_STC1,"Static",0x50000201,14,7,40,15,0x00000000
  CONTROL "Key :",IDC_STC2,"Static",0x50000201,14,27,40,15,0x00000000
  CONTROL "GENERATE",IDC_GENERATE,"Button",0x50010000,52,55,52,17,0x00000000
  CONTROL "ABOUT",IDC_ABOUT,"Button",0x50010000,128,55,52,17,0x00000000
  CONTROL "",IDC_GRP1,"Button",0x50000007,10,1,194,46,0x00000000
END

----------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
2
强!注册机用汇编写更牛啊!
2005-6-16 09:17
0
雪    币: 261
活跃值: (162)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
3
其实这个软件软件的算法注册机还是用汇编写了方便,要是用C或者别的高级语言来写,代码量一样很多,而且生成的文件太大,占的空间有240多K,够我放30个汇编注册机了。
2005-6-16 09:30
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
向你学习了.
2005-6-16 10:12
0
雪    币: 328
活跃值: (925)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
5
厉害啊,学习了
2005-6-16 11:36
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
6
破解水平高,编程功底深厚啊。
2005-6-16 14:34
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害!学习了!
2005-6-16 14:57
0
雪    币: 255
活跃值: (175)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
支持!!!!!!
2005-6-16 15:00
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
9
学习了,汇编做注册机更厉害
2005-6-16 15:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
厉害
看来我要努力的学习了
2005-6-16 17:42
0
雪    币: 333
活跃值: (369)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
11
最初由 qfejj 发布
其实这个软件软件的算法注册机还是用汇编写了方便,要是用C或者别的高级语言来写,代码量一样很多,而且生成的文件太大,占的空间有240多K,够我放30个汇编注册机了。

不会吧!这算法!就是md5呀,我用C++写了一个md5计算器才十多k的呀!不会有那么大吧!我是用.net 2003 编译的,记得编译时要优化一下,自己写入口函数
/Enterpoint
2005-6-20 16:36
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
牛人!! 顶!
2005-8-19 19:19
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
编程功底深厚啊
2005-8-19 20:29
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
14
2005-8-20 11:49
0
雪    币: 1263
活跃值: (607)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
历害。学学。还要学汇编。
2005-8-20 14:12
0
游客
登录 | 注册 方可回帖
返回
//