【我的算法分析初次文章】

初次写算法分析文章,请大家不要见笑,如有不当之处,还望大家教我!


【文章名称】:三极管查询系统算法分析
【文章作者】:USB-HDD
【作者主页】:*
【作者通讯】:*
【作者邮件】:nxlx-admin@163.com
【组织名称】:*
【软件名称】:世界三极管查询系统V1.5
【下载地址】:
【破解工具】:Peid  Ollydbg
【保护方式】:Key + keyfile
【软件限制】:未注册用户只能用60秒
【破解难度】:易
============================================================
【软件介绍】
世界三极管查询系统一款功能强大的三极管查询软件,此软件最大限
度的搜集了世界各国晶体管生产厂家的产品,其中囊括了200多个生
产厂家近6万个三极管的详细信息
============================================================
【破解分析过程】



1.用PEID扫描,无壳,是VB6.0程序...

2.用Ollydbg 载入程序,按F9运行,首先出现注册对话框,输入用户名usb-hdd,注册码:9958520,按确定,出现"注册码不正确"错误消息.

3.先看看有没有字符串可参考吧!用OD插件查找UNICODE,竟然没有!算了,另想办法吧!

4.下断MSVBVM60.__vbaStrCmp,按确定后断在  005EBFC1 处,在堆栈0012F370处发现  UNICODE "9958520",是我输入的试炼码,看来断的正确喽,呵,按F8往下走到第一个跳转处005EBFEB 记事本记下,接着往下按,没有遇到跳转,到005EC5A2处跳出"注册码错误"消息,看来005EBFEB处是关键跳转,试着将 JE改为JNE后,出现了注册正确提示!看来此处是一个爆破点 (正确的注册码反而不正确了,后来觉得应该改成JMP,其余用NOP填充)

5.保存文件后,运行,随便输入用户名与密码,成功,进去后,没有了倒计时.退出后重新打开,又出来注册对话框,看是很可能是Keyfile或者是注册表保护方式!

6.打开程序所在的文件夹,按照时间进行了一下排序,发现最后修改的是set.qwj文件,用Ultra-Edit32打开,发现文件头是典型的ACCESS数据库文件.用ACCESS2000打开,要密码,用工具算出密码后,发现刚才输入的用户名与试炼码都在表中.

7.看来爆破比较麻烦,试着去追一下算法吧!(听说VB很是麻烦!)

算法分析思路:

1.即然是MSVBVM60.__vbaStrCmp比较,而且,堆栈0012F370处是试炼码,那么它的上两行中有一行应该是真的注册码入栈命令.经过查看,发现 005EBFBE 处是真的注册码,看来是明文比较,但是真的注册码好像是不可见字符.如下:

001A7844  2A 00 2A 00 D9 E7 51 02 D6 E7 31 00 25 00        *.*.夔Q昼1.%.戌   

005EBFBB   >  FF75 B>PUSH    DWORD PTR SS:[EBP-48]                  ;  此处送入的是试练码
005EBFBE   .  FF75 D>PUSH    DWORD PTR SS:[EBP-24]                  ;  些处是真注册码
005EBFC1   .  E8 107>CALL    <JMP.&MSVBVM60.__vbaStrCmp>            ;  断在此处

2.往上看,005EBF79处是一个大的跳转入口,点右键--前往---JG 来自 005EBC01 在此处下断,断在此处后按F8慢慢往下走,到005EBEA6处,发现了取用户名的第一个字母的函数__vbaStrVarVal,再往下,又发现了取机器码的运算.两次取值结果进行 Xor 运算,得出第1位注册码的ASCII码.

3.一直走到005EBF74处,跳回到了005EBBF7处,接着又开始了,看来这是一个循环.出口在005EBC01处.跳出条件是
005EBBFA处.





005EBBEF   .  E8 707>CALL    <JMP.&MSVBVM60.__vbaFreeVarList>
005EBBF4   .  83C4 0>ADD     ESP,0C
005EBBF7   >  8B45 E>MOV     EAX,SS:[EBP-18]
005EBBFA   .  66:3B8>CMP     AX,SS:[EBP-160]            ;  SS:[EBP-160]处是长度,AX为计数器
005EBC01   .  0F8F 7>JG      TranSear.005EBF79          ;  如果超过机器码的长度,则不计算,结束运算
005EBC07   .  8945 E>MOV     SS:[EBP-1C],EAX
005EBC0A   .  66:898>MOV     SS:[EBP-F0],AX
005EBC11   .  8B06   MOV     EAX,DS:[ESI]
005EBC13   .  56     PUSH    ESI
005EBC14   .  C785 0>MOV     DWORD PTR SS:[EBP-F8],8002
005EBC1E   .  FF90 0>CALL    DS:[EAX+30C]
005EBC24   .  50     PUSH    EAX
005EBC25   .  8D45 A>LEA     EAX,SS:[EBP-58]
005EBC28   .  50     PUSH    EAX
005EBC29   .  E8 0E8>CALL    <JMP.&MSVBVM60.__vbaObjSet>
005EBC2E   .  8B08   MOV     ECX,DS:[EAX]
005EBC30   .  8D55 B>LEA     EDX,SS:[EBP-48]
005EBC33   .  52     PUSH    EDX
005EBC34   .  50     PUSH    EAX
005EBC35   .  8985 C>MOV     SS:[EBP-13C],EAX
005EBC3B   .  FF91 A>CALL    DS:[ECX+A0]
005EBC41   .  DBE2   FCLEX
005EBC43   .  3BC7   CMP     EAX,EDI
005EBC45   .  7D 16  JGE     SHORT TranSear.005EBC5D
005EBC47   .  68 A00>PUSH    0A0
005EBC4C   .  68 485>PUSH    TranSear.00415348
005EBC51   .  FFB5 C>PUSH    DWORD PTR SS:[EBP-13C]
005EBC57   .  50     PUSH    EAX
005EBC58   .  E8 E97>CALL    <JMP.&MSVBVM60.__vbaHresultCheckObj>
005EBC5D   >  8B45 B>MOV     EAX,SS:[EBP-48]                       ;此处出现了用户名
005EBC60   .  8945 9>MOV     SS:[EBP-70],EAX
005EBC63   .  8D45 8>LEA     EAX,SS:[EBP-78]
005EBC66   .  50     PUSH    EAX
005EBC67   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBC6D   .  50     PUSH    EAX
005EBC6E   .  897D B>MOV     SS:[EBP-48],EDI
005EBC71   .  895D 8>MOV     SS:[EBP-78],EBX
005EBC74   .  E8 538>CALL    <JMP.&MSVBVM60.#520>
005EBC79   .  8D85 0>LEA     EAX,SS:[EBP-F8]
005EBC7F   .  50     PUSH    EAX
005EBC80   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBC86   .  50     PUSH    EAX
005EBC87   .  8D85 6>LEA     EAX,SS:[EBP-98]
005EBC8D   .  50     PUSH    EAX
005EBC8E   .  E8 C38>CALL    <JMP.&MSVBVM60.__vbaLenVar>           ;获得用户名的长度
005EBC93   .  50     PUSH    EAX
005EBC94   .  E8 B78>CALL    <JMP.&MSVBVM60.__vbaVarTstGt>
005EBC99   .  8D4D A>LEA     ECX,SS:[EBP-58]
005EBC9C   .  66:898>MOV     SS:[EBP-144],AX
005EBCA3   .  E8 8E7>CALL    <JMP.&MSVBVM60.__vbaFreeObj>
005EBCA8   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBCAE   .  50     PUSH    EAX
005EBCAF   .  8D45 8>LEA     EAX,SS:[EBP-78]
005EBCB2   .  50     PUSH    EAX
005EBCB3   .  6A 02  PUSH    2
005EBCB5   .  E8 AA7>CALL    <JMP.&MSVBVM60.__vbaFreeVarList>
005EBCBA   .  83C4 0>ADD     ESP,0C
005EBCBD   .  66:39B>CMP     SS:[EBP-144],DI
005EBCC4   .  0F84 C>JE      TranSear.005EBD8A
005EBCCA   .  66:8B4>MOV     AX,SS:[EBP-18]
005EBCCE   .  66:898>MOV     SS:[EBP-F0],AX
005EBCD5   .  8B06   MOV     EAX,DS:[ESI]
005EBCD7   .  56     PUSH    ESI
005EBCD8   .  C785 0>MOV     DWORD PTR SS:[EBP-F8],2
005EBCE2   .  FF90 0>CALL    DS:[EAX+30C]
005EBCE8   .  50     PUSH    EAX
005EBCE9   .  8D45 A>LEA     EAX,SS:[EBP-58]
005EBCEC   .  50     PUSH    EAX
005EBCED   .  E8 4A7>CALL    <JMP.&MSVBVM60.__vbaObjSet>
005EBCF2   .  8B08   MOV     ECX,DS:[EAX]
005EBCF4   .  8D55 B>LEA     EDX,SS:[EBP-48]
005EBCF7   .  52     PUSH    EDX
005EBCF8   .  50     PUSH    EAX
005EBCF9   .  8985 C>MOV     SS:[EBP-13C],EAX
005EBCFF   .  FF91 A>CALL    DS:[ECX+A0]
005EBD05   .  DBE2   FCLEX
005EBD07   .  3BC7   CMP     EAX,EDI
005EBD09   .  7D 16  JGE     SHORT TranSear.005EBD21
005EBD0B   .  68 A00>PUSH    0A0
005EBD10   .  68 485>PUSH    TranSear.00415348
005EBD15   .  FFB5 C>PUSH    DWORD PTR SS:[EBP-13C]
005EBD1B   .  50     PUSH    EAX
005EBD1C   .  E8 257>CALL    <JMP.&MSVBVM60.__vbaHresultCheckObj>
005EBD21   >  8B45 B>MOV     EAX,SS:[EBP-48]
005EBD24   .  8945 9>MOV     SS:[EBP-70],EAX
005EBD27   .  8D45 8>LEA     EAX,SS:[EBP-78]
005EBD2A   .  50     PUSH    EAX
005EBD2B   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBD31   .  50     PUSH    EAX
005EBD32   .  897D B>MOV     SS:[EBP-48],EDI
005EBD35   .  895D 8>MOV     SS:[EBP-78],EBX
005EBD38   .  E8 8F7>CALL    <JMP.&MSVBVM60.#520>
005EBD3D   .  8D85 0>LEA     EAX,SS:[EBP-F8]
005EBD43   .  50     PUSH    EAX
005EBD44   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBD4A   .  50     PUSH    EAX
005EBD4B   .  8D85 6>LEA     EAX,SS:[EBP-98]
005EBD51   .  50     PUSH    EAX
005EBD52   .  E8 FF7>CALL    <JMP.&MSVBVM60.__vbaLenVar>           ;获得一个字符串的长度
005EBD57   .  50     PUSH    EAX
005EBD58   .  8D85 5>LEA     EAX,SS:[EBP-A8]
005EBD5E   .  50     PUSH    EAX
005EBD5F   .  E8 E67>CALL    <JMP.&MSVBVM60.__vbaVarMod>
005EBD64   .  50     PUSH    EAX
005EBD65   .  E8 FC7>CALL    <JMP.&MSVBVM60.__vbaI2Var>
005EBD6A   .  8D4D A>LEA     ECX,SS:[EBP-58]
005EBD6D   .  8945 E>MOV     SS:[EBP-1C],EAX
005EBD70   .  E8 C17>CALL    <JMP.&MSVBVM60.__vbaFreeObj>
005EBD75   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBD7B   .  50     PUSH    EAX
005EBD7C   .  8D45 8>LEA     EAX,SS:[EBP-78]
005EBD7F   .  50     PUSH    EAX
005EBD80   .  6A 02  PUSH    2
005EBD82   .  E8 DD7>CALL    <JMP.&MSVBVM60.__vbaFreeVarList>
005EBD87   .  83C4 0>ADD     ESP,0C
005EBD8A   >  8B06   MOV     EAX,DS:[ESI]
005EBD8C   .  56     PUSH    ESI
005EBD8D   .  FF90 1>CALL    DS:[EAX+310]
005EBD93   .  50     PUSH    EAX
005EBD94   .  8D45 A>LEA     EAX,SS:[EBP-58]
005EBD97   .  50     PUSH    EAX
005EBD98   .  E8 9F7>CALL    <JMP.&MSVBVM60.__vbaObjSet>
005EBD9D   .  8B08   MOV     ECX,DS:[EAX]
005EBD9F   .  8D55 B>LEA     EDX,SS:[EBP-48]
005EBDA2   .  52     PUSH    EDX
005EBDA3   .  50     PUSH    EAX
005EBDA4   .  8985 C>MOV     SS:[EBP-13C],EAX
005EBDAA   .  FF91 A>CALL    DS:[ECX+A0]
005EBDB0   .  DBE2   FCLEX
005EBDB2   .  3BC7   CMP     EAX,EDI
005EBDB4   .  7D 16  JGE     SHORT TranSear.005EBDCC
005EBDB6   .  68 A00>PUSH    0A0
005EBDBB   .  68 485>PUSH    TranSear.00415348
005EBDC0   .  FFB5 C>PUSH    DWORD PTR SS:[EBP-13C]
005EBDC6   .  50     PUSH    EAX
005EBDC7   .  E8 7A7>CALL    <JMP.&MSVBVM60.__vbaHresultCheckObj>
005EBDCC   >  8B06   MOV     EAX,DS:[ESI]
005EBDCE   .  56     PUSH    ESI
005EBDCF   .  FF90 0>CALL    DS:[EAX+30C]
005EBDD5   .  50     PUSH    EAX
005EBDD6   .  8D45 A>LEA     EAX,SS:[EBP-5C]
005EBDD9   .  50     PUSH    EAX
005EBDDA   .  E8 5D7>CALL    <JMP.&MSVBVM60.__vbaObjSet>
005EBDDF   .  8B08   MOV     ECX,DS:[EAX]
005EBDE1   .  8D55 B>LEA     EDX,SS:[EBP-50]
005EBDE4   .  52     PUSH    EDX
005EBDE5   .  50     PUSH    EAX
005EBDE6   .  8985 B>MOV     SS:[EBP-144],EAX
005EBDEC   .  FF91 A>CALL    DS:[ECX+A0]
005EBDF2   .  DBE2   FCLEX
005EBDF4   .  3BC7   CMP     EAX,EDI
005EBDF6   .  7D 16  JGE     SHORT TranSear.005EBE0E
005EBDF8   .  68 A00>PUSH    0A0
005EBDFD   .  68 485>PUSH    TranSear.00415348
005EBE02   .  FFB5 B>PUSH    DWORD PTR SS:[EBP-144]
005EBE08   .  50     PUSH    EAX
005EBE09   .  E8 387>CALL    <JMP.&MSVBVM60.__vbaHresultCheckObj>
005EBE0E   >  8B45 D>MOV     EAX,SS:[EBP-24]
005EBE11   .  8985 F>MOV     SS:[EBP-110],EAX
005EBE17   .  8B45 B>MOV     EAX,SS:[EBP-48]
005EBE1A   .  8945 9>MOV     SS:[EBP-70],EAX
005EBE1D   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBE23   .  50     PUSH    EAX
005EBE24   .  0FBF45>MOVSX   EAX,WORD PTR SS:[EBP-18]
005EBE28   .  50     PUSH    EAX
005EBE29   .  8D45 8>LEA     EAX,SS:[EBP-78]
005EBE2C   .  50     PUSH    EAX
005EBE2D   .  8D85 6>LEA     EAX,SS:[EBP-98]
005EBE33   .  50     PUSH    EAX
005EBE34   .  899D E>MOV     SS:[EBP-118],EBX
005EBE3A   .  C745 8>MOV     DWORD PTR SS:[EBP-80],1
005EBE41   .  C785 7>MOV     DWORD PTR SS:[EBP-88],2
005EBE4B   .  897D B>MOV     SS:[EBP-48],EDI
005EBE4E   .  895D 8>MOV     SS:[EBP-78],EBX
005EBE51   .  E8 3E7>CALL    <JMP.&MSVBVM60.#632>
005EBE56   .  8B45 B>MOV     EAX,SS:[EBP-50]
005EBE59   .  8985 6>MOV     SS:[EBP-A0],EAX
005EBE5F   .  8D85 4>LEA     EAX,SS:[EBP-B8]
005EBE65   .  50     PUSH    EAX
005EBE66   .  0FBF45>MOVSX   EAX,WORD PTR SS:[EBP-1C]
005EBE6A   .  50     PUSH    EAX
005EBE6B   .  8D85 5>LEA     EAX,SS:[EBP-A8]
005EBE71   .  50     PUSH    EAX
005EBE72   .  8D85 3>LEA     EAX,SS:[EBP-C8]
005EBE78   .  50     PUSH    EAX
005EBE79   .  C785 5>MOV     DWORD PTR SS:[EBP-B0],1
005EBE83   .  C785 4>MOV     DWORD PTR SS:[EBP-B8],2
005EBE8D   .  897D B>MOV     SS:[EBP-50],EDI
005EBE90   .  899D 5>MOV     SS:[EBP-A8],EBX
005EBE96   .  E8 F97>CALL    <JMP.&MSVBVM60.#632>
005EBE9B   .  8D85 3>LEA     EAX,SS:[EBP-C8]
005EBEA1   .  50     PUSH    EAX
005EBEA2   .  8D45 A>LEA     EAX,SS:[EBP-54]
005EBEA5   .  50     PUSH    EAX
005EBEA6   .  E8 AF7>CALL    <JMP.&MSVBVM60.__vbaStrVarVal>         ;  取用户名的第n位字母
005EBEAB   .  50     PUSH    EAX                                    ;  
005EBEAC   .  E8 4B7>CALL    <JMP.&MSVBVM60.#516>                   ;  取ASCII码值
005EBEB1   .  0FBFF8 MOVSX   EDI,AX                                 ;  EDI为用户名的ASCII码值
005EBEB4   .  8D85 6>LEA     EAX,SS:[EBP-98]
005EBEBA   .  50     PUSH    EAX
005EBEBB   .  8D45 B>LEA     EAX,SS:[EBP-4C]
005EBEBE   .  50     PUSH    EAX
005EBEBF   .  E8 967>CALL    <JMP.&MSVBVM60.__vbaStrVarVal>         ;  取机器码的第n位字母
005EBEC4   .  50     PUSH    EAX
005EBEC5   .  E8 327>CALL    <JMP.&MSVBVM60.#516>                   ;  取ASCII码值
005EBECA   .  0FBFC0 MOVSX   EAX,AX                                 ;  EAX为机器码的ASCII码值
005EBECD   .  33F8   XOR     EDI,EAX                    ;  进行Xor运算后,得出第n位注册码ASCII码值
005EBECF   .  57     PUSH    EDI
005EBED0   .  8D85 2>LEA     EAX,SS:[EBP-D8]
005EBED6   .  50     PUSH    EAX
005EBED7   .  E8 687>CALL    <JMP.&MSVBVM60.#608>
005EBEDC   .  8D85 E>LEA     EAX,SS:[EBP-118]                       
005EBEE2   .  50     PUSH    EAX
005EBEE3   .  8D85 2>LEA     EAX,SS:[EBP-D8]
005EBEE9   .  50     PUSH    EAX
005EBEEA   .  8D85 1>LEA     EAX,SS:[EBP-E8]
005EBEF0   .  50     PUSH    EAX
005EBEF1   .  E8 A07>CALL    <JMP.&MSVBVM60.__vbaVarAdd>            ;  存放注册码
005EBEF6   .  50     PUSH    EAX                                    ;  存入注册码的地方
005EBEF7   .  E8 047>CALL    <JMP.&MSVBVM60.__vbaStrVarMove>        ;  换个位置存放
005EBEFC   .  8BD0   MOV     EDX,EAX
005EBEFE   .  8D4D D>LEA     ECX,SS:[EBP-24]
005EBF01   .  E8 007>CALL    <JMP.&MSVBVM60.__vbaStrMove>
005EBF06   .  8D45 A>LEA     EAX,SS:[EBP-54]
005EBF09   .  50     PUSH    EAX
005EBF0A   .  8D45 B>LEA     EAX,SS:[EBP-4C]
005EBF0D   .  50     PUSH    EAX
005EBF0E   .  6A 02  PUSH    2
005EBF10   .  E8 CD7>CALL    <JMP.&MSVBVM60.__vbaFreeStrList>
005EBF15   .  8D45 A>LEA     EAX,SS:[EBP-5C]
005EBF18   .  50     PUSH    EAX
005EBF19   .  8D45 A>LEA     EAX,SS:[EBP-58]
005EBF1C   .  50     PUSH    EAX
005EBF1D   .  6A 02  PUSH    2
005EBF1F   .  E8 0C7>CALL    <JMP.&MSVBVM60.__vbaFreeObjList>
005EBF24   .  8D85 1>LEA     EAX,SS:[EBP-E8]
005EBF2A   .  50     PUSH    EAX
005EBF2B   .  8D85 2>LEA     EAX,SS:[EBP-D8]
005EBF31   .  50     PUSH    EAX
005EBF32   .  8D85 3>LEA     EAX,SS:[EBP-C8]
005EBF38   .  50     PUSH    EAX
005EBF39   .  8D85 4>LEA     EAX,SS:[EBP-B8]
005EBF3F   .  50     PUSH    EAX
005EBF40   .  8D85 5>LEA     EAX,SS:[EBP-A8]
005EBF46   .  50     PUSH    EAX
005EBF47   .  8D85 6>LEA     EAX,SS:[EBP-98]
005EBF4D   .  50     PUSH    EAX
005EBF4E   .  8D85 7>LEA     EAX,SS:[EBP-88]
005EBF54   .  50     PUSH    EAX
005EBF55   .  8D45 8>LEA     EAX,SS:[EBP-78]
005EBF58   .  50     PUSH    EAX
005EBF59   .  53     PUSH    EBX
005EBF5A   .  E8 057>CALL    <JMP.&MSVBVM60.__vbaFreeVarList>
005EBF5F   .  83C4 3>ADD     ESP,3C
005EBF62   .  6A 01  PUSH    1
005EBF64   .  58     POP     EAX
005EBF65   .  66:034>ADD     AX,SS:[EBP-18]
005EBF69   .  0F80 8>JO      TranSear.005EC6FE
005EBF6F   .  33FF   XOR     EDI,EDI
005EBF71   .  8945 E>MOV     SS:[EBP-18],EAX
005EBF74   .^ E9 7EF>JMP     TranSear.005EBBF7                      ;往回跳
005EBF79   >  8B06   MOV     EAX,DS:[ESI]                           ;如果跳到此处,则表示运算完了
005EBF7B   .  56     PUSH    ESI
005EBF7C   .  FF90 0>CALL    DS:[EAX+308]
005EBF82   .  50     PUSH    EAX
005EBF83   .  8D45 A>LEA     EAX,SS:[EBP-58]
005EBF86   .  50     PUSH    EAX
005EBF87   .  E8 B07>CALL    <JMP.&MSVBVM60.__vbaObjSet>
005EBF8C   .  8B08   MOV     ECX,DS:[EAX]
005EBF8E   .  8D55 B>LEA     EDX,SS:[EBP-48]
005EBF91   .  52     PUSH    EDX
005EBF92   .  50     PUSH    EAX
005EBF93   .  8985 C>MOV     SS:[EBP-13C],EAX
005EBF99   .  FF91 A>CALL    DS:[ECX+A0]
005EBF9F   .  DBE2   FCLEX
005EBFA1   .  3BC7   CMP     EAX,EDI
005EBFA3   .  7D 16  JGE     SHORT TranSear.005EBFBB
005EBFA5   .  68 A00>PUSH    0A0
005EBFAA   .  68 485>PUSH    TranSear.00415348
005EBFAF   .  FFB5 C>PUSH    DWORD PTR SS:[EBP-13C]
005EBFB5   .  50     PUSH    EAX
005EBFB6   .  E8 8B7>CALL    <JMP.&MSVBVM60.__vbaHresultCheckObj>
005EBFBB   >  FF75 B>PUSH    DWORD PTR SS:[EBP-48]                  ;  此处送入的是假注册码
005EBFBE   .  FF75 D>PUSH    DWORD PTR SS:[EBP-24]                  ;  些处是真注册码
005EBFC1   .  E8 107>CALL    <JMP.&MSVBVM60.__vbaStrCmp>            ;  断在此处了
005EBFC6   .  F7D8   NEG     EAX
005EBFC8   .  1BC0   SBB     EAX,EAX
005EBFCA   .  40     INC     EAX
005EBFCB   .  F7D8   NEG     EAX
005EBFCD   .  8D4D B>LEA     ECX,SS:[EBP-48]
005EBFD0   .  66:898>MOV     SS:[EBP-144],AX
005EBFD7   .  E8 187>CALL    <JMP.&MSVBVM60.__vbaFreeStr>
005EBFDC   .  8D4D A>LEA     ECX,SS:[EBP-58]
005EBFDF   .  E8 527>CALL    <JMP.&MSVBVM60.__vbaFreeObj>
005EBFE4   .  66:39B>CMP     SS:[EBP-144],DI
005EBFEB      0F84 2>JE      TranSear.005EC519                      ;  关键跳转
005EBFF1   .  B9 040>MOV     ECX,80020004




============================================================
【算法总结】
依次取机器码与注册名的ASCII码进行Xor运算得出注册码.(条件:注册名长度不能少于7位,如果注册名少于机器码,则重新依次取注册名)

最后写了个小注册机,呵呵~~