【破文标题】VB软件XYPlorer 5.40.0017的注册算法
【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】XYPlorer 5.40.0017
【软件大小】800KB
【原版下载】http://www.newhua.com/soft/37383.htm
【保护方式】名+码
【软件简介】是一款多标签文件管理器,具有强大的文件搜索功能,各种预览功能,可以高度自定义的界面,以及一系列方法可以让你的电脑有效地自动处理周期性的任务。XYplorer是一个工具而非玩具,名副其实,绝对是高级用户和电脑高手苦苦寻找的浏览器替代品。
【破解声明】向大侠们学习!!!只为学习!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------

   感觉这个软件的注册部分就是一个Crackme。特别那个错误的信息框。


1、由于是vb程序,所以我们先让它运行起来,然后输入注册信息:名:binbinbin;码:123456789。用__vbaStrCmp断点可以找到下面代码。


0055BDA0   > \55            push    ebp
0055BDA1   .  8BEC          mov     ebp, esp
0055BDA3   .  83EC 0C       sub     esp, 0C
0055BDA6   .  68 56894000   push    <jmp.&MSVBVM50.__vbaExceptHand>;  SE 处理程序安装
0055BDAB   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
0055BDB1   .  50            push    eax
0055BDB2   .  64:8925 00000>mov     dword ptr fs:[0], esp
0055BDB9   .  81EC C0000000 sub     esp, 0C0
0055BDBF   .  53            push    ebx
0055BDC0   .  56            push    esi
0055BDC1   .  8B75 08       mov     esi, dword ptr [ebp+8]
0055BDC4   .  57            push    edi
0055BDC5   .  8BC6          mov     eax, esi
0055BDC7   .  83E6 FE       and     esi, FFFFFFFE
0055BDCA   .  8965 F4       mov     dword ptr [ebp-C], esp
0055BDCD   .  83E0 01       and     eax, 1
0055BDD0   .  8B0E          mov     ecx, dword ptr [esi]
0055BDD2   .  C745 F8 D0584>mov     dword ptr [ebp-8], 004058D0
0055BDD9   .  56            push    esi
0055BDDA   .  8945 FC       mov     dword ptr [ebp-4], eax
0055BDDD   .  8975 08       mov     dword ptr [ebp+8], esi
0055BDE0   .  FF51 04       call    dword ptr [ecx+4]
0055BDE3   .  8B16          mov     edx, dword ptr [esi]
0055BDE5   .  33DB          xor     ebx, ebx
0055BDE7   .  56            push    esi
0055BDE8   .  895D E8       mov     dword ptr [ebp-18], ebx
0055BDEB   .  895D E4       mov     dword ptr [ebp-1C], ebx
0055BDEE   .  895D E0       mov     dword ptr [ebp-20], ebx
0055BDF1   .  895D DC       mov     dword ptr [ebp-24], ebx
0055BDF4   .  895D D8       mov     dword ptr [ebp-28], ebx
0055BDF7   .  895D D4       mov     dword ptr [ebp-2C], ebx
0055BDFA   .  895D C4       mov     dword ptr [ebp-3C], ebx
0055BDFD   .  895D B4       mov     dword ptr [ebp-4C], ebx
0055BE00   .  895D A4       mov     dword ptr [ebp-5C], ebx
0055BE03   .  895D 94       mov     dword ptr [ebp-6C], ebx
0055BE06   .  895D 84       mov     dword ptr [ebp-7C], ebx
0055BE09   .  FF92 04030000 call    dword ptr [edx+304]
0055BE0F   .  8B3D 18A65D00 mov     edi, dword ptr [<&MSVBVM50.__v>;  MSVBVM50.__vbaObjSet
0055BE15   .  50            push    eax
0055BE16   .  8D45 D8       lea     eax, dword ptr [ebp-28]
0055BE19   .  50            push    eax
0055BE1A   .  FFD7          call    edi                            ;  <&MSVBVM50.__vbaObjSet>
0055BE1C   .  8B08          mov     ecx, dword ptr [eax]
0055BE1E   .  8D55 E8       lea     edx, dword ptr [ebp-18]
0055BE21   .  52            push    edx
0055BE22   .  50            push    eax
0055BE23   .  8985 50FFFFFF mov     dword ptr [ebp-B0], eax
0055BE29   .  FF91 A0000000 call    dword ptr [ecx+A0]
0055BE2F   .  3BC3          cmp     eax, ebx
0055BE31   .  7D 18         jge     short 0055BE4B
0055BE33   .  8B8D 50FFFFFF mov     ecx, dword ptr [ebp-B0]
0055BE39   .  68 A0000000   push    0A0
0055BE3E   .  68 B49D4200   push    00429DB4
0055BE43   .  51            push    ecx
0055BE44   .  50            push    eax
0055BE45   .  FF15 C0A55D00 call    dword ptr [<&MSVBVM50.__vbaHre>;  MSVBVM50.__vbaHresultCheckObj
0055BE4B   >  8B55 E8       mov     edx, dword ptr [ebp-18]        ;  习惯了,vb的程序一般都是这样出现用户名的
0055BE4E   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0055BE51   .  895D E8       mov     dword ptr [ebp-18], ebx
0055BE54   .  FF15 9CA85D00 call    dword ptr [<&MSVBVM50.__vbaStr>;  MSVBVM50.__vbaStrMove
0055BE5A   .  8B16          mov     edx, dword ptr [esi]
0055BE5C   .  56            push    esi
0055BE5D   .  FF92 08030000 call    dword ptr [edx+308]
0055BE63   .  50            push    eax
0055BE64   .  8D45 D4       lea     eax, dword ptr [ebp-2C]
0055BE67   .  50            push    eax
0055BE68   .  FFD7          call    edi
0055BE6A   .  8B08          mov     ecx, dword ptr [eax]
0055BE6C   .  8D55 E0       lea     edx, dword ptr [ebp-20]
0055BE6F   .  52            push    edx
0055BE70   .  50            push    eax
0055BE71   .  8985 48FFFFFF mov     dword ptr [ebp-B8], eax
0055BE77   .  FF91 A0000000 call    dword ptr [ecx+A0]
0055BE7D   .  3BC3          cmp     eax, ebx
0055BE7F   .  7D 18         jge     short 0055BE99
0055BE81   .  8B8D 48FFFFFF mov     ecx, dword ptr [ebp-B8]
0055BE87   .  68 A0000000   push    0A0
0055BE8C   .  68 B49D4200   push    00429DB4
0055BE91   .  51            push    ecx
0055BE92   .  50            push    eax
0055BE93   .  FF15 C0A55D00 call    dword ptr [<&MSVBVM50.__vbaHre>;  MSVBVM50.__vbaHresultCheckObj
0055BE99   >  8D55 E4       lea     edx, dword ptr [ebp-1C]
0055BE9C   .  52            push    edx
0055BE9D   .  E8 1E0C0000   call    0055CAC0                       ;  这个是算法call。。必须跟进《《《《《《《《《《《《==
0055BEA2   .  8BD0          mov     edx, eax                       ;  这里出现了真正的注册码了。很简单啦
0055BEA4   .  8D4D DC       lea     ecx, dword ptr [ebp-24]
0055BEA7   .  FF15 9CA85D00 call    dword ptr [<&MSVBVM50.__vbaStr>;  MSVBVM50.__vbaStrMove
0055BEAD   .  50            push    eax                            ;  真码入栈
0055BEAE   .  8B45 E0       mov     eax, dword ptr [ebp-20]        ;  取出假码
0055BEB1   .  50            push    eax
0055BEB2   .  FF15 B0A65D00 call    dword ptr [<&MSVBVM50.__vbaStr>;  MSVBVM50.__vbaStrCmp        我们会中断在这里了。
0055BEB8   .  F7D8          neg     eax                            ;  上面的就是比较函数了。
0055BEBA   .  1BC0          sbb     eax, eax
0055BEBC   .  8D4D E0       lea     ecx, dword ptr [ebp-20]
0055BEBF   .  40            inc     eax
0055BEC0   .  8D55 DC       lea     edx, dword ptr [ebp-24]
0055BEC3   .  F7D8          neg     eax
0055BEC5   .  8985 40FFFFFF mov     dword ptr [ebp-C0], eax
0055BECB   .  51            push    ecx
0055BECC   .  8D45 E4       lea     eax, dword ptr [ebp-1C]
0055BECF   .  52            push    edx
0055BED0   .  50            push    eax
0055BED1   .  6A 03         push    3
0055BED3   .  FF15 1CA85D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeStrList
0055BED9   .  83C4 10       add     esp, 10
0055BEDC   .  8D4D D4       lea     ecx, dword ptr [ebp-2C]
0055BEDF   .  8D55 D8       lea     edx, dword ptr [ebp-28]
0055BEE2   .  51            push    ecx
0055BEE3   .  52            push    edx
0055BEE4   .  6A 02         push    2
0055BEE6   .  FF15 54A55D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeObjList
0055BEEC   .  83C4 0C       add     esp, 0C
0055BEEF   .  66:399D 40FFF>cmp     word ptr [ebp-C0], bx
0055BEF6   .  0F84 15020000 je      0055C111                    《《《《《《《《《《《《===这个就不用说了,应该是关键跳了
0055BEFC   .  8B06          mov     eax, dword ptr [esi]

------------------------------------------------------------------------------------------------------------------------


2、一步到位。跟进算法call    0055CAC0 得到下面代码。请看注释,很简单的,适合newbie

0055CAC0   $  55            push    ebp
0055CAC1   .  8BEC          mov     ebp, esp
0055CAC3   .  83EC 0C       sub     esp, 0C
0055CAC6   .  68 56894000   push    <jmp.&MSVBVM50.__vbaExceptHand>;  SE 处理程序安装
0055CACB   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
0055CAD1   .  50            push    eax
0055CAD2   .  64:8925 00000>mov     dword ptr fs:[0], esp
0055CAD9   .  83EC 78       sub     esp, 78
0055CADC   .  53            push    ebx
0055CADD   .  56            push    esi
0055CADE   .  57            push    edi
0055CADF   .  33DB          xor     ebx, ebx
0055CAE1   .  BA 480E4400   mov     edx, 00440E48                  ;  UNICODE "v34"
0055CAE6   .  8D4D D4       lea     ecx, dword ptr [ebp-2C]
0055CAE9   .  8965 F4       mov     dword ptr [ebp-C], esp
0055CAEC   .  C745 F8 48594>mov     dword ptr [ebp-8], 00405948
0055CAF3   .  895D E4       mov     dword ptr [ebp-1C], ebx
0055CAF6   .  895D E0       mov     dword ptr [ebp-20], ebx
0055CAF9   .  895D D8       mov     dword ptr [ebp-28], ebx
0055CAFC   .  895D D4       mov     dword ptr [ebp-2C], ebx
0055CAFF   .  895D D0       mov     dword ptr [ebp-30], ebx
0055CB02   .  895D CC       mov     dword ptr [ebp-34], ebx
0055CB05   .  895D C8       mov     dword ptr [ebp-38], ebx
0055CB08   .  895D B8       mov     dword ptr [ebp-48], ebx
0055CB0B   .  895D A8       mov     dword ptr [ebp-58], ebx
0055CB0E   .  895D 98       mov     dword ptr [ebp-68], ebx
0055CB11   .  FF15 0CA85D00 call    dword ptr [<&MSVBVM50.__vbaStr>;  MSVBVM50.__vbaStrCopy
0055CB17   .  8D45 B8       lea     eax, dword ptr [ebp-48]
0055CB1A   .  C745 C0 40000>mov     dword ptr [ebp-40], 40
0055CB21   .  50            push    eax
0055CB22   .  6A 28         push    28
0055CB24   .  C745 B8 02000>mov     dword ptr [ebp-48], 2
0055CB2B   .  FF15 64A75D00 call    dword ptr [<&MSVBVM50.#606>]   ;  MSVBVM50.rtcStringBstr
0055CB31   .  8B3D 9CA85D00 mov     edi, dword ptr [<&MSVBVM50.__v>;  MSVBVM50.__vbaStrMove
0055CB37   .  8BD0          mov     edx, eax                       ;  一个奇怪的字符串出现了
0055CB39   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0055CB3C   .  FFD7          call    edi                            ;  <&MSVBVM50.__vbaStrMove>
0055CB3E   .  8D4D B8       lea     ecx, dword ptr [ebp-48]
0055CB41   .  FF15 1CA55D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeVar
0055CB47   .  8B55 08       mov     edx, dword ptr [ebp+8]         ;  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
0055CB4A   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
0055CB4D   .  51            push    ecx
0055CB4E   .  6A 01         push    1
0055CB50   .  8B02          mov     eax, dword ptr [edx]           ;  取出用户名
0055CB52   .  68 FFFFFF3F   push    3FFFFFFF
0055CB57   .  50            push    eax                            ;  用户名入栈
0055CB58   .  FF15 9CA65D00 call    dword ptr [<&MSVBVM50.#527>]   ;  MSVBVM50.rtcUpperCaseBstr
0055CB5E   .  8BD0          mov     edx, eax                       ;  转成大写
0055CB60   .  8D4D D0       lea     ecx, dword ptr [ebp-30]
0055CB63   .  FFD7          call    edi
0055CB65   .  8B4D D4       mov     ecx, dword ptr [ebp-2C]        ;  取出固定字符串“v34”
0055CB68   .  50            push    eax
0055CB69   .  51            push    ecx
0055CB6A   .  FF15 90A55D00 call    dword ptr [<&MSVBVM50.__vbaStr>;  MSVBVM50.__vbaStrCat
0055CB70   .  8BD0          mov     edx, eax                       ;  一看就知道是连接函数。得到"BINBINBINv34"
0055CB72   .  8D4D CC       lea     ecx, dword ptr [ebp-34]
0055CB75   .  FFD7          call    edi
0055CB77   .  50            push    eax
0055CB78   .  53            push    ebx
0055CB79   .  FF15 F8A85D00 call    dword ptr [<&MSVBVM50.__vbaMid>;  MSVBVM50.__vbaMidStmtBstr
0055CB7F   .  8D55 CC       lea     edx, dword ptr [ebp-34]
0055CB82   .  8D45 D0       lea     eax, dword ptr [ebp-30]
0055CB85   .  52            push    edx
0055CB86   .  50            push    eax
0055CB87   .  6A 02         push    2
0055CB89   .  FF15 1CA85D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeStrList
0055CB8F   .  8B4D E4       mov     ecx, dword ptr [ebp-1C]        ;   上面搞这么多就是为了得到这个长字符串"BINBINBINv34@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
0055CB92   .  83C4 0C       add     esp, 0C
0055CB95   .  51            push    ecx
0055CB96   .  FF15 24A55D00 call    dword ptr [<&MSVBVM50.__vbaLen>;  MSVBVM50.__vbaLenBstr
0055CB9C   .  8985 7CFFFFFF mov     dword ptr [ebp-84], eax        ;  得到连接后字符串的长度
0055CBA2   .  BE 01000000   mov     esi, 1
0055CBA7   >  3BB5 7CFFFFFF cmp     esi, dword ptr [ebp-84]        ;  循环开始    ebp-84存放的是那个长字符串的长度
0055CBAD   .  7F 61         jg      short 0055CC10
0055CBAF   .  8B45 E4       mov     eax, dword ptr [ebp-1C]        ;  就是这个长字符串了
0055CBB2   .  8D55 B8       lea     edx, dword ptr [ebp-48]
0055CBB5   .  52            push    edx
0055CBB6   .  50            push    eax
0055CBB7   .  C745 C0 01000>mov     dword ptr [ebp-40], 1
0055CBBE   .  C745 B8 02000>mov     dword ptr [ebp-48], 2
0055CBC5   .  FF15 24A55D00 call    dword ptr [<&MSVBVM50.__vbaLen>;  MSVBVM50.__vbaLenBstr
0055CBCB   .  8B55 E4       mov     edx, dword ptr [ebp-1C]
0055CBCE   .  B9 01000000   mov     ecx, 1
0055CBD3   .  2BCE          sub     ecx, esi                       ;  这里相当于每次减掉1
0055CBD5   .  03C1          add     eax, ecx
0055CBD7   .  50            push    eax
0055CBD8   .  52            push    edx
0055CBD9   .  FF15 70A65D00 call    dword ptr [<&MSVBVM50.#631>]   ;  MSVBVM50.rtcMidCharBstr
0055CBDF   .  8BD0          mov     edx, eax
0055CBE1   .  8D4D D0       lea     ecx, dword ptr [ebp-30]
0055CBE4   .  FFD7          call    edi
0055CBE6   .  50            push    eax
0055CBE7   .  FF15 60A55D00 call    dword ptr [<&MSVBVM50.#516>]   ;  MSVBVM50.rtcAnsiValueBstr
0055CBED   .  0FBFC0        movsx   eax, ax                        ;  就是那个“@”的ascii码值
0055CBF0   .  0FAFC6        imul    eax, esi                       ;  乘以循环次数
0055CBF3   .  8D4D D0       lea     ecx, dword ptr [ebp-30]
0055CBF6   .  03D8          add     ebx, eax                       ;  结果累加存放在ebx
0055CBF8   .  FF15 00A95D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeStr
0055CBFE   .  8D4D B8       lea     ecx, dword ptr [ebp-48]
0055CC01   .  FF15 1CA55D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeVar
0055CC07   .  B8 01000000   mov     eax, 1
0055CC0C   .  03F0          add     esi, eax                       ;  这里相当于计算器每次加1
0055CC0E   .^ EB 97         jmp     short 0055CBA7                 ;  往回去循环
0055CC10   >  895D E0       mov     dword ptr [ebp-20], ebx        ;  这里的ebx就是上面的运算结果了
0055CC13   .  8D4D A8       lea     ecx, dword ptr [ebp-58]
0055CC16   .  DB45 E0       fild    dword ptr [ebp-20]             ;  结果成为实数
0055CC19   .  8D55 B8       lea     edx, dword ptr [ebp-48]
0055CC1C   .  51            push    ecx
0055CC1D   .  52            push    edx
0055CC1E   .  C745 B8 05000>mov     dword ptr [ebp-48], 5          ;  【ebp-48】=5
0055CC25   .  DC0D 30594000 fmul    qword ptr [405930]             ;  乘以实数12.34。这个我们可以跟过去看代码405930。是个固定值
0055CC2B   .  DD5D C0       fstp    qword ptr [ebp-40]             ;  存储。st=692027.19999999999200
0055CC2E   .  FF15 E4A65D00 call    dword ptr [<&MSVBVM50.#564>]   ;  然后把后面的小数部分去掉(相当于取整)就是真码的后半部分
0055CC34   .  85C0          test    eax, eax
0055CC36   .  7D 07         jge     short 0055CC3F                 ;  这里这些vb相关的函数可以到我的网络U盘查找相应解析
0055CC38   .  50            push    eax
0055CC39   .  FF15 04A55D00 call    dword ptr [<&MSVBVM50.__vbaHre>;  MSVBVM50.__vbaHresultCheck
0055CC3F   >  8D45 A8       lea     eax, dword ptr [ebp-58]
0055CC42   .  8D4D 98       lea     ecx, dword ptr [ebp-68]
0055CC45   .  50            push    eax
0055CC46   .  51            push    ecx
0055CC47   .  FF15 FCA75D00 call    dword ptr [<&MSVBVM50.__vbaVar>;  MSVBVM50.__vbaVarInt
0055CC4D   .  50            push    eax
0055CC4E   .  FF15 40A85D00 call    dword ptr [<&MSVBVM50.__vbaI4V>;  MSVBVM50.__vbaI4Var
0055CC54   .  8BF0          mov     esi, eax                       ;  这里的eax的10进制就是真码的后面部分了。692027
0055CC56   .  8D55 A8       lea     edx, dword ptr [ebp-58]
0055CC59   .  8D45 B8       lea     eax, dword ptr [ebp-48]
0055CC5C   .  52            push    edx
0055CC5D   .  50            push    eax
0055CC5E   .  6A 02         push    2
0055CC60   .  FF15 3CA55D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeVarList
0055CC66   .  8BC6          mov     eax, esi                       ;  000A8F3B(692027)
0055CC68   .  B9 1A000000   mov     ecx, 1A                        ;  常数1A
0055CC6D   .  99            cdq
0055CC6E   .  F7F9          idiv    ecx                            ;  除以常数1A
0055CC70   .  83C4 0C       add     esp, 0C
0055CC73   .  83C2 41       add     edx, 41                        ;  余数+41H
0055CC76   .  52            push    edx                            ;  这里得到的16进制将装成相应字符,成为真码的前半部分
0055CC77   .  FF15 C4A75D00 call    dword ptr [<&MSVBVM50.#537>]   ;  MSVBVM50.rtcBstrFromAnsi
0055CC7D   .  8BD0          mov     edx, eax
0055CC7F   .  8D4D D0       lea     ecx, dword ptr [ebp-30]
0055CC82   .  FFD7          call    edi
0055CC84   .  8B1D 90A55D00 mov     ebx, dword ptr [<&MSVBVM50.__v>;  MSVBVM50.__vbaStrCat
0055CC8A   .  50            push    eax
0055CC8B   .  68 C8724200   push    004272C8
0055CC90   .  FFD3          call    ebx                            ;  <&MSVBVM50.__vbaStrCat>
0055CC92   .  8BD0          mov     edx, eax                       ;  这里就是真码的前半部分
0055CC94   .  8D4D CC       lea     ecx, dword ptr [ebp-34]
0055CC97   .  FFD7          call    edi
0055CC99   .  50            push    eax
0055CC9A   .  56            push    esi                            ;  真码的后半部分
0055CC9B   .  FF15 08A55D00 call    dword ptr [<&MSVBVM50.__vbaStr>;  MSVBVM50.__vbaStrI4
0055CCA1   .  8BD0          mov     edx, eax                       ;  装成10进制
0055CCA3   .  8D4D C8       lea     ecx, dword ptr [ebp-38]
0055CCA6   .  FFD7          call    edi
0055CCA8   .  50            push    eax
0055CCA9   .  FFD3          call    ebx                            ;  连接函数
0055CCAB   .  8BD0          mov     edx, eax                       ;  最终的真正注册码出现了
0055CCAD   .  8D4D D8       lea     ecx, dword ptr [ebp-28]
0055CCB0   .  FFD7          call    edi
0055CCB2   .  8D55 C8       lea     edx, dword ptr [ebp-38]
0055CCB5   .  8D45 CC       lea     eax, dword ptr [ebp-34]
0055CCB8   .  52            push    edx
0055CCB9   .  8D4D D0       lea     ecx, dword ptr [ebp-30]
0055CCBC   .  50            push    eax
0055CCBD   .  51            push    ecx
0055CCBE   .  6A 03         push    3
0055CCC0   .  FF15 1CA85D00 call    dword ptr [<&MSVBVM50.__vbaFre>;  MSVBVM50.__vbaFreeStrList
0055CCC6   .  83C4 10       add     esp, 10
0055CCC9   .  9B            wait
0055CCCA   .  68 20CD5500   push    0055CD20
0055CCCF   .  EB 3E         jmp     short 0055CD0F






睡觉中~,注册机明天看看

.版本 2

.程序集 窗口程序集1

.子程序 _按钮1_被单击
.局部变量 name, 文本型
.局部变量 str1, 文本型
.局部变量 str2, 文本型
.局部变量 longstr, 文本型
.局部变量 len, 整数型
.局部变量 daostr, 文本型
.局部变量 i, 整数型
.局部变量 ebx, 整数型
.局部变量 sum, 整数型
.局部变量 code2, 整数型
.局部变量 code1, 整数型
.局部变量 tou, 文本型
.局部变量 code, 文本型

name = 到大写 (编辑框1.内容)
str1 = “v34”
str2 = “@@@@@@@@@@@@@@@@@@@@@@@@@@@@”
longstr = name + str1 + str2
len = 取文本长度 (longstr)
daostr = 倒转字符串 (longstr)

.计次循环首 (len, i)
    ebx = 取代码 (daostr, i)
    ebx = ebx × i
    sum = sum + ebx
.计次循环尾 ()

code2 = 取整 (sum × 12.34)
code1 = code2 % 26
code1 = code1 + 65
tou = 字符 (code1)
code = tou + “-” + 到文本 (code2)
编辑框2.内容 = code





.子程序 倒转字符串, 文本型
.参数 string, 文本型
.局部变量 k, 整数型
.局部变量 RChar, 文本型
.局部变量 LChar, 文本型
.局部变量 WChar, 文本型

.判断循环首 (k < 取文本长度 (string))

    LChar = 取文本左边 (string, 取文本长度 (string) - k)
    RChar = 取文本右边 (LChar, 1)
    k = k + 1
    WChar = WChar + RChar
.判断循环尾 ()
返回 (WChar)






【算法总结】
------------------------------------------------------------------------
1、这个算法简直就是一个Crackme。通过对用户名的运算就得到真码。

2、首先将输入的用户名变成大写然后连接两个固定字符串。结果得到类似:BINBINBINv34@@@@@@@@@@@@@@@@@@@@@@@@@@@@

3、循环从后面开始取上面那串字符串的Ascii码值,然后乘以循环次数。最后累加在ebx。返回ebx

4、ebx的值装成10进制实数后和12.34相乘。取结果的整数部分就是真码的后半部分。如我的是:692027(10进制)

5、上面得到的整数部分除以1A。取余数加上41H。得到的值查表装成字符。其实就是要得到大写字母。如我的是:4C(“L”)

6、最后的真码就是连接起来。如我的是:L-692027。