首页
社区
课程
招聘
[原创]KeyGen 阳小子emvⅠ[原创]
发表于: 2007-12-24 08:19 7657

[原创]KeyGen 阳小子emvⅠ[原创]

petnt 活跃值
12
2007-12-24 08:19
7657

【文章标题】: KeyGen 阳小子emvⅠ
【文章作者】: petnt
【作者邮箱】: petnt@sohu.com
【下载地址】: 见附件
【保护方式】: 序列号
【使用工具】: OLLYDBG
【操作平台】: XP\SP2
【软件介绍】: 在我看来很不错的一个CrackMe
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【写在前面】

  以下对于函数过程分析中包含了大量的个人猜测成分,仅供参考。
  其实,之所以能够耐心的分析完整个程序,动力来源于对于易语言的渴望了解。从Emv I发布帖的跟帖中有人提到这是易语言的作品,krnln.fnr是易语言的库文件。因为在我的上一篇对小蜜蜂的破文分析中,被这个库文件搞得头晕脑涨。既然知道这是库文件,我想其中函数的功能就不会太复杂。分析完之后也确实如此,由此感叹:经验来源于实践,多动手才是获得知识与经验的最佳途径。
  
【详细过程】
  为了便于总结和以后复习,下面将整个过程分为三部分:下断、分析 和编写注册机。

  第一部分 下断

  首先运行程序,随便输入用户名、注册码,没有反应。(我没有查壳的习惯,因为我对壳也并不了解) 右键OllyDbg载入,程序停在入口,通过对入口点的观察可以发现程序应该是加了壳,不管他,F9,程序在短时间运行之后就挂了,看来是有anti。anti的方式很多,我们先看看有没有可疑的api被载入。下断GetProcAddress,在堆栈窗口进行观察,如果你够耐心的话,你会发现在程序挂掉之前,可疑度非常高的几个函数被载入了,他们是:CreateToolhelp32Snapshot、Process32First、Process32Next。程序用它来干什么?应该是用来做anti。一种方式是从枚举的进程中寻找可疑进程,如包含字符"ollydbg"。另一种方式是对比父进程ID是否是explorer的ID。更改Process32NextW的入口为:xor eax,eax  ret ,程序顺利的运行起来。看来幸运之神照顾了我。(更详细内容请参考《脱壳的艺术》,在此向本文作者及译者表示12分感谢)
  运行起来之后我们就可以用消息断点+内存断点轻松的断下程序。
  
  第二部分 分析
  
  为了节省篇幅,下面的代码中将省略部分同功能代码

0040F867  /.  55            push    ebp                              ; 断在此处
0040F868  |.  8BEC          mov     ebp, esp
0040F86A  |.  81EC A8000000 sub     esp, 0A8
0040F870  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
;;;省略部分初始赋值代码
0040F93B  |.  C745 88 00000>mov     dword ptr [ebp-78], 0
0040F942  |.  68 00000000   push    0
0040F947  |.  BB C4060000   mov     ebx, 6C4
0040F94C  |.  E8 DE4B0000   call    0041452F                         ;  获取机器码
0040F951  |.  83C4 04       add     esp, 4
0040F954  |.  68 01030080   push    80000301
0040F959  |.  6A 00         push    0
0040F95B  |.  50            push    eax
0040F95C  |.  68 01000000   push    1
0040F961  |.  BB 68010000   mov     ebx, 168
0040F966  |.  E8 C44B0000   call    0041452F                         ;  机器码转换为十进制 string
0040F96B  |.  83C4 10       add     esp, 10
0040F96E  |.  8945 80       mov     [ebp-80], eax
0040F971  |.  8B45 80       mov     eax, [ebp-80]
0040F974  |.  50            push    eax
0040F975  |.  8B5D FC       mov     ebx, [ebp-4]
0040F978  |.  85DB          test    ebx, ebx
0040F97A  |.  74 09         je      short 0040F985
0040F97C  |.  53            push    ebx
0040F97D  |.  E8 954B0000   call    00414517
0040F982  |.  83C4 04       add     esp, 4
0040F985  |>  58            pop     eax
0040F986  |.  8945 FC       mov     [ebp-4], eax
0040F989  |.  68 04000080   push    80000004
0040F98E  |.  6A 00         push    0
0040F990  |.  8B45 FC       mov     eax, [ebp-4]
0040F993  |.  85C0          test    eax, eax
0040F995  |.  75 05         jnz     short 0040F99C
0040F997  |.  B8 3F314000   mov     eax, 0040313F
0040F99C  |>  50            push    eax
0040F99D  |.  68 01000000   push    1
0040F9A2  |.  BB 30010000   mov     ebx, 130
0040F9A7  |.  E8 834B0000   call    0041452F                         ;  机器码长度
0040F9AC  |.  83C4 10       add     esp, 10
0040F9AF  |.  68 01030080   push    80000301
0040F9B4  |.  6A 00         push    0
0040F9B6  |.  50            push    eax
0040F9B7  |.  68 01000000   push    1
0040F9BC  |.  BB 68010000   mov     ebx, 168
0040F9C1  |.  E8 694B0000   call    0041452F                         ;  长度转换成十进制字符
0040F9C6  |.  83C4 10       add     esp, 10
0040F9C9  |.  8945 80       mov     [ebp-80], eax
0040F9CC  |.  8B45 80       mov     eax, [ebp-80]
0040F9CF  |.  50            push    eax
0040F9D0  |.  8B5D F8       mov     ebx, [ebp-8]
0040F9D3  |.  85DB          test    ebx, ebx
0040F9D5  |.  74 09         je      short 0040F9E0
0040F9D7  |.  53            push    ebx
0040F9D8  |.  E8 3A4B0000   call    00414517
0040F9DD  |.  83C4 04       add     esp, 4
0040F9E0  |>  58            pop     eax
0040F9E1  |.  8945 F8       mov     [ebp-8], eax
0040F9E4  |.  6A FF         push    -1
0040F9E6  |.  6A 08         push    8
0040F9E8  |.  68 02000116   push    16010002
0040F9ED  |.  68 01000152   push    52010001
0040F9F2  |.  E8 3E4B0000   call    00414535                         ;  取得用户名
0040F9F7  |.  83C4 10       add     esp, 10
0040F9FA  |.  8945 84       mov     [ebp-7C], eax
0040F9FD  |.  68 04000080   push    80000004
0040FA02  |.  6A 00         push    0
0040FA04  |.  8B45 84       mov     eax, [ebp-7C]
0040FA07  |.  85C0          test    eax, eax
0040FA09  |.  75 05         jnz     short 0040FA10
0040FA0B  |.  B8 3F314000   mov     eax, 0040313F
0040FA10  |>  50            push    eax
0040FA11  |.  68 01000000   push    1
0040FA16  |.  BB 30010000   mov     ebx, 130
0040FA1B  |.  E8 0F4B0000   call    0041452F                         ;  取得Name longth
0040FA20  |.  83C4 10       add     esp, 10
0040FA23  |.  8945 80       mov     [ebp-80], eax
0040FA26  |.  8B5D 84       mov     ebx, [ebp-7C]
0040FA29  |.  85DB          test    ebx, ebx
0040FA2B  |.  74 09         je      short 0040FA36
0040FA2D  |.  53            push    ebx
0040FA2E  |.  E8 E44A0000   call    00414517                         ;  
0040FA33  |.  83C4 04       add     esp, 4
0040FA36  |>  68 01030080   push    80000301
0040FA3B  |.  6A 00         push    0
0040FA3D  |.  FF75 80       push    dword ptr [ebp-80]
0040FA40  |.  68 01000000   push    1
0040FA45  |.  BB 68010000   mov     ebx, 168
0040FA4A  |.  E8 E04A0000   call    0041452F                         ;  Name longth string D
0040FA4F  |.  83C4 10       add     esp, 10
0040FA52  |.  8985 7CFFFFFF mov     [ebp-84], eax
0040FA58  |.  8B85 7CFFFFFF mov     eax, [ebp-84]
0040FA5E  |.  50            push    eax
0040FA5F  |.  8B5D F4       mov     ebx, [ebp-C]
0040FA62  |.  85DB          test    ebx, ebx
0040FA64  |.  74 09         je      short 0040FA6F
0040FA66  |.  53            push    ebx
0040FA67  |.  E8 AB4A0000   call    00414517
0040FA6C  |.  83C4 04       add     esp, 4
0040FA6F  |>  58            pop     eax
0040FA70  |.  8945 F4       mov     [ebp-C], eax
0040FA73  |.  68 04000080   push    80000004
0040FA78  |.  6A 00         push    0
0040FA7A  |.  8B45 F8       mov     eax, [ebp-8]
0040FA7D  |.  85C0          test    eax, eax
0040FA7F  |.  75 05         jnz     short 0040FA86
0040FA81  |.  B8 3F314000   mov     eax, 0040313F
0040FA86  |>  50            push    eax
0040FA87  |.  68 01000000   push    1
0040FA8C  |.  BB 64010000   mov     ebx, 164
0040FA91  |.  E8 994A0000   call    0041452F                         ; 此函数相当于对字串代表的浮点数进行一次 fstp 下同
0040FA96  |.  83C4 10       add     esp, 10                          ; 也就是将浮点数保存在一个QWORD中。
0040FA99  |.  8945 80       mov     [ebp-80], eax
0040FA9C  |.  8955 84       mov     [ebp-7C], edx
0040FA9F  |.  68 04000080   push    80000004
0040FAA4  |.  6A 00         push    0
0040FAA6  |.  8B45 F4       mov     eax, [ebp-C]
0040FAA9  |.  85C0          test    eax, eax
0040FAAB  |.  75 05         jnz     short 0040FAB2
0040FAAD  |.  B8 3F314000   mov     eax, 0040313F
0040FAB2  |>  50            push    eax
0040FAB3  |.  68 01000000   push    1
0040FAB8  |.  BB 64010000   mov     ebx, 164
0040FABD  |.  E8 6D4A0000   call    0041452F                         ;  fstp name longth
0040FAC2  |.  83C4 10       add     esp, 10
0040FAC5  |.  8985 78FFFFFF mov     [ebp-88], eax
0040FACB  |.  8995 7CFFFFFF mov     [ebp-84], edx
0040FAD1  |.  DD45 80       fld     qword ptr [ebp-80]
0040FAD4  |.  DC85 78FFFFFF fadd    qword ptr [ebp-88]
0040FADA  |.  DD9D 70FFFFFF fstp    qword ptr [ebp-90]               ;  用户名长度+机器码长度
0040FAE0  |.  68 01060080   push    80000601
0040FAE5  |.  FFB5 74FFFFFF push    dword ptr [ebp-8C]
0040FAEB  |.  FFB5 70FFFFFF push    dword ptr [ebp-90]
0040FAF1  |.  68 01000000   push    1
0040FAF6  |.  BB 68010000   mov     ebx, 168
0040FAFB  |.  E8 2F4A0000   call    0041452F                         ;  得到结果字符串
0040FB00  |.  83C4 10       add     esp, 10
0040FB03  |.  8985 6CFFFFFF mov     [ebp-94], eax
0040FB09  |.  8B85 6CFFFFFF mov     eax, [ebp-94]
0040FB0F  |.  50            push    eax
0040FB10  |.  8B5D F0       mov     ebx, [ebp-10]
0040FB13  |.  85DB          test    ebx, ebx
0040FB15  |.  74 09         je      short 0040FB20
0040FB17  |.  53            push    ebx
0040FB18  |.  E8 FA490000   call    00414517
0040FB1D  |.  83C4 04       add     esp, 4
0040FB20  |>  58            pop     eax
0040FB21  |.  8945 F0       mov     [ebp-10], eax
0040FB24  |.  6A FF         push    -1
0040FB26  |.  6A 08         push    8
0040FB28  |.  68 03000116   push    16010003
0040FB2D  |.  68 01000152   push    52010001
0040FB32  |.  E8 FE490000   call    00414535                         ;  取得 sn
0040FB37  |.  83C4 10       add     esp, 10
0040FB3A  |.  8945 84       mov     [ebp-7C], eax
0040FB3D  |.  68 04000080   push    80000004
0040FB42  |.  6A 00         push    0
0040FB44  |.  8B45 84       mov     eax, [ebp-7C]
0040FB47  |.  85C0          test    eax, eax
0040FB49  |.  75 05         jnz     short 0040FB50
0040FB4B  |.  B8 3F314000   mov     eax, 0040313F
0040FB50  |>  50            push    eax
0040FB51  |.  68 01000000   push    1
0040FB56  |.  BB 30010000   mov     ebx, 130
0040FB5B  |.  E8 CF490000   call    0041452F                         ;  长度
0040FB60  |.  83C4 10       add     esp, 10
0040FB63  |.  8945 80       mov     [ebp-80], eax
0040FB66  |.  8B5D 84       mov     ebx, [ebp-7C]
0040FB69  |.  85DB          test    ebx, ebx
0040FB6B  |.  74 09         je      short 0040FB76
0040FB6D  |.  53            push    ebx
0040FB6E  |.  E8 A4490000   call    00414517                         ;  
0040FB73  |.  83C4 04       add     esp, 4
0040FB76  |>  68 01030080   push    80000301
0040FB7B  |.  6A 00         push    0
0040FB7D  |.  FF75 80       push    dword ptr [ebp-80]
0040FB80  |.  68 01000000   push    1
0040FB85  |.  BB 68010000   mov     ebx, 168
0040FB8A  |.  E8 A0490000   call    0041452F                         ;  长度 变进制字串
0040FB8F  |.  83C4 10       add     esp, 10
0040FB92  |.  8985 7CFFFFFF mov     [ebp-84], eax
0040FB98  |.  8B85 7CFFFFFF mov     eax, [ebp-84]
0040FB9E  |.  50            push    eax
0040FB9F  |.  8B5D EC       mov     ebx, [ebp-14]
0040FBA2  |.  85DB          test    ebx, ebx
0040FBA4  |.  74 09         je      short 0040FBAF
0040FBA6  |.  53            push    ebx
0040FBA7  |.  E8 6B490000   call    00414517
0040FBAC  |.  83C4 04       add     esp, 4
0040FBAF  |>  58            pop     eax
0040FBB0  |.  8945 EC       mov     [ebp-14], eax
0040FBB3  |.  6A FF         push    -1
0040FBB5  |.  6A 08         push    8
0040FBB7  |.  68 02000116   push    16010002
0040FBBC  |.  68 01000152   push    52010001
0040FBC1  |.  E8 6F490000   call    00414535                         ;  取用户名
0040FBC6  |.  83C4 10       add     esp, 10
0040FBC9  |.  8945 84       mov     [ebp-7C], eax
0040FBCC  |.  68 01030080   push    80000301
0040FBD1  |.  6A 00         push    0
0040FBD3  |.  68 01000000   push    1
0040FBD8  |.  68 04000080   push    80000004
0040FBDD  |.  6A 00         push    0
0040FBDF  |.  8B45 84       mov     eax, [ebp-7C]
0040FBE2  |.  85C0          test    eax, eax
0040FBE4  |.  75 05         jnz     short 0040FBEB
0040FBE6  |.  B8 3F314000   mov     eax, 0040313F
0040FBEB  |>  50            push    eax
0040FBEC  |.  68 02000000   push    2
0040FBF1  |.  BB 44010000   mov     ebx, 144
0040FBF6  |.  E8 34490000   call    0041452F                         ;  name[1]
0040FBFB  |.  83C4 1C       add     esp, 1C
0040FBFE  |.  8945 80       mov     [ebp-80], eax
0040FC01  |.  8B5D 84       mov     ebx, [ebp-7C]
0040FC04  |.  85DB          test    ebx, ebx
0040FC06  |.  74 09         je      short 0040FC11
0040FC08  |.  53            push    ebx
0040FC09  |.  E8 09490000   call    00414517
0040FC0E  |.  83C4 04       add     esp, 4
0040FC11  |>  68 01030080   push    80000301
0040FC16  |.  6A 00         push    0
0040FC18  |.  FF75 80       push    dword ptr [ebp-80]
0040FC1B  |.  68 01000000   push    1
0040FC20  |.  BB 68010000   mov     ebx, 168
0040FC25  |.  E8 05490000   call    0041452F                         ;  name[1]十进制字串行式
0040FC2A  |.  83C4 10       add     esp, 10
0040FC2D  |.  8985 7CFFFFFF mov     [ebp-84], eax
0040FC33  |.  8B85 7CFFFFFF mov     eax, [ebp-84]
0040FC39  |.  50            push    eax
0040FC3A  |.  8B5D E8       mov     ebx, [ebp-18]
0040FC3D  |.  85DB          test    ebx, ebx
0040FC3F  |.  74 09         je      short 0040FC4A
0040FC41  |.  53            push    ebx
0040FC42  |.  E8 D0480000   call    00414517
0040FC47  |.  83C4 04       add     esp, 4
0040FC4A  |>  58            pop     eax
0040FC4B  |.  8945 E8       mov     [ebp-18], eax

;;;省略部分功能为取用户名第2,3位并转换成十进制字符串

0040FD84  |.  FF75 E0       push    dword ptr [ebp-20]               ; /Arg3
0040FD87  |.  FF75 E4       push    dword ptr [ebp-1C]               ; |Arg2
0040FD8A  |.  FF75 E8       push    dword ptr [ebp-18]               ; |Arg1
0040FD8D  |.  B9 03000000   mov     ecx, 3                           ; |
0040FD92  |.  E8 D7F9FFFF   call    0040F76E                         ; \合并以上3个  string
0040FD97  |.  83C4 0C       add     esp, 0C
0040FD9A  |.  8945 84       mov     [ebp-7C], eax
0040FD9D  |.  8B45 84       mov     eax, [ebp-7C]
0040FDA0  |.  50            push    eax
0040FDA1  |.  8B5D DC       mov     ebx, [ebp-24]
0040FDA4  |.  85DB          test    ebx, ebx
0040FDA6  |.  74 09         je      short 0040FDB1
0040FDA8  |.  53            push    ebx
0040FDA9  |.  E8 69470000   call    00414517
0040FDAE  |.  83C4 04       add     esp, 4
0040FDB1  |>  58            pop     eax
0040FDB2  |.  8945 DC       mov     [ebp-24], eax
0040FDB5  |.  68 04000080   push    80000004
0040FDBA  |.  6A 00         push    0
0040FDBC  |.  8B45 E8       mov     eax, [ebp-18]
0040FDBF  |.  85C0          test    eax, eax
0040FDC1  |.  75 05         jnz     short 0040FDC8
0040FDC3  |.  B8 3F314000   mov     eax, 0040313F
0040FDC8  |>  50            push    eax
0040FDC9  |.  68 01000000   push    1
0040FDCE  |.  BB 64010000   mov     ebx, 164
0040FDD3  |.  E8 57470000   call    0041452F                         ;  fstp name[1]
0040FDD8  |.  83C4 10       add     esp, 10
0040FDDB  |.  8945 80       mov     [ebp-80], eax
0040FDDE  |.  8955 84       mov     [ebp-7C], edx
0040FDE1  |.  68 04000080   push    80000004
0040FDE6  |.  6A 00         push    0
0040FDE8  |.  8B45 E4       mov     eax, [ebp-1C]
0040FDEB  |.  85C0          test    eax, eax
0040FDED  |.  75 05         jnz     short 0040FDF4
0040FDEF  |.  B8 3F314000   mov     eax, 0040313F
0040FDF4  |>  50            push    eax
0040FDF5  |.  68 01000000   push    1
0040FDFA  |.  BB 64010000   mov     ebx, 164
0040FDFF  |.  E8 2B470000   call    0041452F                         ;  fstp name[2]
0040FE04  |.  83C4 10       add     esp, 10
0040FE07  |.  8985 78FFFFFF mov     [ebp-88], eax
0040FE0D  |.  8995 7CFFFFFF mov     [ebp-84], edx
0040FE13  |.  68 04000080   push    80000004
0040FE18  |.  6A 00         push    0
0040FE1A  |.  8B45 E0       mov     eax, [ebp-20]
0040FE1D  |.  85C0          test    eax, eax
0040FE1F  |.  75 05         jnz     short 0040FE26
0040FE21  |.  B8 3F314000   mov     eax, 0040313F
0040FE26  |>  50            push    eax
0040FE27  |.  68 01000000   push    1
0040FE2C  |.  BB 64010000   mov     ebx, 164
0040FE31  |.  E8 F9460000   call    0041452F                         ;  fstp name[3]
0040FE36  |.  83C4 10       add     esp, 10
0040FE39  |.  8985 70FFFFFF mov     [ebp-90], eax
0040FE3F  |.  8995 74FFFFFF mov     [ebp-8C], edx
0040FE45  |.  DD45 80       fld     qword ptr [ebp-80]
0040FE48  |.  DC85 78FFFFFF fadd    qword ptr [ebp-88]
0040FE4E  |.  DC85 70FFFFFF fadd    qword ptr [ebp-90]
0040FE54  |.  DD9D 68FFFFFF fstp    qword ptr [ebp-98]
0040FE5A  |.  68 01060080   push    80000601
0040FE5F  |.  FFB5 6CFFFFFF push    dword ptr [ebp-94]
0040FE65  |.  FFB5 68FFFFFF push    dword ptr [ebp-98]
0040FE6B  |.  68 01000000   push    1
0040FE70  |.  BB 68010000   mov     ebx, 168
0040FE75  |.  E8 B5460000   call    0041452F                         ;  三数相加 和转换成字串 
0040FE7A  |.  83C4 10       add     esp, 10
0040FE7D  |.  8985 64FFFFFF mov     [ebp-9C], eax
0040FE83  |.  8B85 64FFFFFF mov     eax, [ebp-9C]
0040FE89  |.  50            push    eax
0040FE8A  |.  8B5D D8       mov     ebx, [ebp-28]
0040FE8D  |.  85DB          test    ebx, ebx
0040FE8F  |.  74 09         je      short 0040FE9A
0040FE91  |.  53            push    ebx
0040FE92  |.  E8 80460000   call    00414517
0040FE97  |.  83C4 04       add     esp, 4

;;;省略过程功能大致同上,将用户名转换成大写,并形成两组字符串

00410246  |.  68 04000080   push    80000004
0041024B  |.  6A 00         push    0
0041024D  |.  8B45 F8       mov     eax, [ebp-8]
00410250  |.  85C0          test    eax, eax
00410252  |.  75 05         jnz     short 00410259
00410254  |.  B8 3F314000   mov     eax, 0040313F
00410259  |>  50            push    eax
0041025A  |.  68 01000000   push    1
0041025F  |.  BB 64010000   mov     ebx, 164
00410264  |.  E8 C6420000   call    0041452F                         ;  fstp 机器码长度
00410269  |.  83C4 10       add     esp, 10
0041026C  |.  8945 80       mov     [ebp-80], eax
0041026F  |.  8955 84       mov     [ebp-7C], edx
00410272  |.  68 04000080   push    80000004
00410277  |.  6A 00         push    0
00410279  |.  8B45 F4       mov     eax, [ebp-C]
0041027C  |.  85C0          test    eax, eax
0041027E  |.  75 05         jnz     short 00410285
00410280  |.  B8 3F314000   mov     eax, 0040313F
00410285  |>  50            push    eax
00410286  |.  68 01000000   push    1
0041028B  |.  BB 64010000   mov     ebx, 164
00410290  |.  E8 9A420000   call    0041452F                         ;  fstp 用户名长度
00410295  |.  83C4 10       add     esp, 10
00410298  |.  8985 78FFFFFF mov     [ebp-88], eax
0041029E  |.  8995 7CFFFFFF mov     [ebp-84], edx
004102A4  |.  6A FF         push    -1
004102A6  |.  6A 08         push    8
004102A8  |.  68 03000116   push    16010003
004102AD  |.  68 01000152   push    52010001
004102B2  |.  E8 7E420000   call    00414535                         ;  sn
004102B7  |.  83C4 10       add     esp, 10
004102BA  |.  8985 74FFFFFF mov     [ebp-8C], eax
004102C0  |.  68 04000080   push    80000004
004102C5  |.  6A 00         push    0
004102C7  |.  8B85 74FFFFFF mov     eax, [ebp-8C]
004102CD  |.  85C0          test    eax, eax
004102CF  |.  75 05         jnz     short 004102D6
004102D1  |.  B8 3F314000   mov     eax, 0040313F
004102D6  |>  50            push    eax
004102D7  |.  68 01000000   push    1
004102DC  |.  BB 30010000   mov     ebx, 130
004102E1  |.  E8 49420000   call    0041452F                         ;  length of sn H
004102E6  |.  83C4 10       add     esp, 10
004102E9  |.  8985 70FFFFFF mov     [ebp-90], eax
004102EF  |.  8B9D 74FFFFFF mov     ebx, [ebp-8C]
004102F5  |.  85DB          test    ebx, ebx
004102F7  |.  74 09         je      short 00410302
004102F9  |.  53            push    ebx
004102FA  |.  E8 18420000   call    00414517
004102FF  |.  83C4 04       add     esp, 4
00410302  |>  68 01030080   push    80000301
00410307  |.  6A 00         push    0
00410309  |.  FFB5 70FFFFFF push    dword ptr [ebp-90]
0041030F  |.  68 01000000   push    1
00410314  |.  BB 68010000   mov     ebx, 168
00410319  |.  E8 11420000   call    0041452F                         ;  10 string length
0041031E  |.  83C4 10       add     esp, 10
00410321  |.  8985 6CFFFFFF mov     [ebp-94], eax
00410327  |.  68 04000080   push    80000004
0041032C  |.  6A 00         push    0
0041032E  |.  8B85 6CFFFFFF mov     eax, [ebp-94]
00410334  |.  85C0          test    eax, eax
00410336  |.  75 05         jnz     short 0041033D
00410338  |.  B8 3F314000   mov     eax, 0040313F
0041033D  |>  50            push    eax
0041033E  |.  68 01000000   push    1
00410343  |.  BB 64010000   mov     ebx, 164
00410348  |.  E8 E2410000   call    0041452F                         ;  fstp longth of sn 
0041034D  |.  83C4 10       add     esp, 10
00410350  |.  8985 64FFFFFF mov     [ebp-9C], eax
00410356  |.  8995 68FFFFFF mov     [ebp-98], edx
0041035C  |.  8B9D 6CFFFFFF mov     ebx, [ebp-94]
00410362  |.  85DB          test    ebx, ebx
00410364  |.  74 09         je      short 0041036F
00410366  |.  53            push    ebx
00410367  |.  E8 AB410000   call    00414517
0041036C  |.  83C4 04       add     esp, 4
0041036F  |>  DD45 80       fld     qword ptr [ebp-80]
00410372  |.  DC85 78FFFFFF fadd    qword ptr [ebp-88]
00410378  |.  DC85 64FFFFFF fadd    qword ptr [ebp-9C]
0041037E  |.  DD9D 5CFFFFFF fstp    qword ptr [ebp-A4]
00410384  |.  68 01060080   push    80000601
00410389  |.  FFB5 60FFFFFF push    dword ptr [ebp-A0]
0041038F  |.  FFB5 5CFFFFFF push    dword ptr [ebp-A4]
00410395  |.  68 01000000   push    1
0041039A  |.  BB 68010000   mov     ebx, 168
0041039F  |.  E8 8B410000   call    0041452F                         ;  三长度相加  sn+机器码+用户名
004103A4  |.  83C4 10       add     esp, 10
004103A7  |.  8985 58FFFFFF mov     [ebp-A8], eax
004103AD  |.  8B85 58FFFFFF mov     eax, [ebp-A8]
004103B3  |.  50            push    eax
004103B4  |.  8B5D C0       mov     ebx, [ebp-40]
004103B7  |.  85DB          test    ebx, ebx
004103B9  |.  74 09         je      short 004103C4
004103BB  |.  53            push    ebx
004103BC  |.  E8 56410000   call    00414517
004103C1  |.  83C4 04       add     esp, 4
004103C4  |>  58            pop     eax
004103C5  |.  8945 C0       mov     [ebp-40], eax
004103C8  |.  FF75 EC       push    dword ptr [ebp-14]               ; /Arg3
004103CB  |.  FF75 F4       push    dword ptr [ebp-C]                ; |Arg2
004103CE  |.  FF75 FC       push    dword ptr [ebp-4]                ; |Arg1
004103D1  |.  B9 03000000   mov     ecx, 3                           ; |
004103D6  |.  E8 93F3FFFF   call    0040F76E                         ; \变换 机器码 + 用户名长度 + 注册码长度
004103DB  |.  83C4 0C       add     esp, 0C
004103DE  |.  8945 84       mov     [ebp-7C], eax
004103E1  |.  68 04000080   push    80000004
004103E6  |.  6A 00         push    0
004103E8  |.  8B45 84       mov     eax, [ebp-7C]
004103EB  |.  85C0          test    eax, eax
004103ED  |.  75 05         jnz     short 004103F4
004103EF  |.  B8 3F314000   mov     eax, 0040313F
004103F4  |>  50            push    eax
004103F5  |.  68 01000000   push    1
004103FA  |.  BB 64010000   mov     ebx, 164
004103FF  |.  E8 2B410000   call    0041452F                         ;  fstp 变换机器码
00410404  |.  83C4 10       add     esp, 10
00410407  |.  8985 7CFFFFFF mov     [ebp-84], eax
0041040D  |.  8955 80       mov     [ebp-80], edx
00410410  |.  8B5D 84       mov     ebx, [ebp-7C]
00410413  |.  85DB          test    ebx, ebx
00410415  |.  74 09         je      short 00410420
00410417  |.  53            push    ebx
00410418  |.  E8 FA400000   call    00414517
0041041D  |.  83C4 04       add     esp, 4
00410420  |>  68 01060080   push    80000601
00410425  |.  FF75 80       push    dword ptr [ebp-80]
00410428  |.  FFB5 7CFFFFFF push    dword ptr [ebp-84]
0041042E  |.  68 01000000   push    1
00410433  |.  BB 68010000   mov     ebx, 168
00410438  |.  E8 F2400000   call    0041452F
0041043D  |.  83C4 10       add     esp, 10                          ; 
00410440  |.  8985 78FFFFFF mov     [ebp-88], eax
00410446  |.  8B85 78FFFFFF mov     eax, [ebp-88]
0041044C  |.  50            push    eax
0041044D  |.  8B5D BC       mov     ebx, [ebp-44]
00410450  |.  85DB          test    ebx, ebx
00410452  |.  74 09         je      short 0041045D
00410454  |.  53            push    ebx
00410455  |.  E8 BD400000   call    00414517
0041045A  |.  83C4 04       add     esp, 4
0041045D  |>  58            pop     eax
0041045E  |.  8945 BC       mov     [ebp-44], eax                    ; 
00410461  |.  68 04000080   push    80000004
00410466  |.  6A 00         push    0
00410468  |.  8B45 BC       mov     eax, [ebp-44]
0041046B  |.  85C0          test    eax, eax
0041046D  |.  75 05         jnz     short 00410474
0041046F  |.  B8 3F314000   mov     eax, 0040313F
00410474  |>  50            push    eax
00410475  |.  68 01000000   push    1
0041047A  |.  BB 64010000   mov     ebx, 164
0041047F  |.  E8 AB400000   call    0041452F
00410484  |.  83C4 10       add     esp, 10
00410487  |.  8945 80       mov     [ebp-80], eax
0041048A  |.  8955 84       mov     [ebp-7C], edx
0041048D  |.  FF75 C4       push    dword ptr [ebp-3C]               ; /Arg2
00410490  |.  FF75 D8       push    dword ptr [ebp-28]               ; |Arg1
00410493  |.  B9 02000000   mov     ecx, 2                           ; |
00410498  |.  E8 D1F2FFFF   call    0040F76E                         ; \合并 上面计算的有关用户名的两个和值
0041049D  |.  83C4 08       add     esp, 8
004104A0  |.  8985 7CFFFFFF mov     [ebp-84], eax
004104A6  |.  68 04000080   push    80000004
004104AB  |.  6A 00         push    0
004104AD  |.  8B85 7CFFFFFF mov     eax, [ebp-84]
004104B3  |.  85C0          test    eax, eax
004104B5  |.  75 05         jnz     short 004104BC
004104B7  |.  B8 3F314000   mov     eax, 0040313F
004104BC  |>  50            push    eax
004104BD  |.  68 01000000   push    1
004104C2  |.  BB 64010000   mov     ebx, 164
004104C7  |.  E8 63400000   call    0041452F                         ;  fstp 合并和值
004104CC  |.  83C4 10       add     esp, 10
004104CF  |.  8985 74FFFFFF mov     [ebp-8C], eax
004104D5  |.  8995 78FFFFFF mov     [ebp-88], edx
004104DB  |.  8B9D 7CFFFFFF mov     ebx, [ebp-84]
004104E1  |.  85DB          test    ebx, ebx
004104E3  |.  74 09         je      short 004104EE
004104E5  |.  53            push    ebx
004104E6  |.  E8 2C400000   call    00414517
004104EB  |.  83C4 04       add     esp, 4
004104EE  |>  DD45 80       fld     qword ptr [ebp-80]
004104F1  |.  DCB5 74FFFFFF fdiv    qword ptr [ebp-8C]
004104F7  |.  DD9D 6CFFFFFF fstp    qword ptr [ebp-94]
004104FD  |.  68 01060080   push    80000601
00410502  |.  FFB5 70FFFFFF push    dword ptr [ebp-90]
00410508  |.  FFB5 6CFFFFFF push    dword ptr [ebp-94]
0041050E  |.  68 01000000   push    1
00410513  |.  BB 68010000   mov     ebx, 168
00410518  |.  E8 12400000   call    0041452F                         ;  取相除结果的十进制(13位有效数字)
0041051D  |.  83C4 10       add     esp, 10
00410520  |.  8985 68FFFFFF mov     [ebp-98], eax
00410526  |.  68 01030080   push    80000301
0041052B  |.  6A 00         push    0
0041052D  |.  68 01000000   push    1
00410532  |.  68 04000080   push    80000004
00410537  |.  6A 00         push    0
00410539  |.  8B85 68FFFFFF mov     eax, [ebp-98]
0041053F  |.  85C0          test    eax, eax
00410541  |.  75 05         jnz     short 00410548
00410543  |.  B8 3F314000   mov     eax, 0040313F
00410548  |>  50            push    eax
00410549  |.  68 02000000   push    2
0041054E  |.  BB 34010000   mov     ebx, 134
00410553  |.  E8 D73F0000   call    0041452F                         ;  产生注册码(取字符串的第一位)
00410558  |.  83C4 1C       add     esp, 1C
0041055B  |.  8985 64FFFFFF mov     [ebp-9C], eax
00410561  |.  8B9D 68FFFFFF mov     ebx, [ebp-98]
00410567  |.  85DB          test    ebx, ebx
00410569  |.  74 09         je      short 00410574
0041056B  |.  53            push    ebx
0041056C  |.  E8 A63F0000   call    00414517
00410571  |.  83C4 04       add     esp, 4
00410574  |>  8B85 64FFFFFF mov     eax, [ebp-9C]
0041057A  |.  50            push    eax
0041057B  |.  8B5D B8       mov     ebx, [ebp-48]
0041057E  |.  85DB          test    ebx, ebx
00410580  |.  74 09         je      short 0041058B
00410582  |.  53            push    ebx
00410583  |.  E8 8F3F0000   call    00414517
00410588  |.  83C4 04       add     esp, 4
0041058B  |>  58            pop     eax
0041058C  |.  8945 B8       mov     [ebp-48], eax                    ;  将产生的字符保存
0041058F  |.  68 04000080   push    80000004
00410594  |.  6A 00         push    0
00410596  |.  8B45 BC       mov     eax, [ebp-44]
00410599  |.  85C0          test    eax, eax
0041059B  |.  75 05         jnz     short 004105A2
0041059D  |.  B8 3F314000   mov     eax, 0040313F
004105A2  |>  50            push    eax
004105A3  |.  68 01000000   push    1
004105A8  |.  BB 64010000   mov     ebx, 164
004105AD  |.  E8 7D3F0000   call    0041452F                         ;  fstp 变换机器码
004105B2  |.  83C4 10       add     esp, 10
004105B5  |.  8945 80       mov     [ebp-80], eax
004105B8  |.  8955 84       mov     [ebp-7C], edx
004105BB  |.  68 04000080   push    80000004
004105C0  |.  6A 00         push    0
004105C2  |.  8B45 D4       mov     eax, [ebp-2C]
004105C5  |.  85C0          test    eax, eax
004105C7  |.  75 05         jnz     short 004105CE
004105C9  |.  B8 3F314000   mov     eax, 0040313F
004105CE  |>  50            push    eax
004105CF  |.  68 01000000   push    1
004105D4  |.  BB 64010000   mov     ebx, 164
004105D9  |.  E8 513F0000   call    0041452F                         ;  fstp name[1]
004105DE  |.  83C4 10       add     esp, 10
004105E1  |.  8985 78FFFFFF mov     [ebp-88], eax
004105E7  |.  8995 7CFFFFFF mov     [ebp-84], edx
004105ED  |.  DD45 80       fld     qword ptr [ebp-80]
004105F0  |.  DCB5 78FFFFFF fdiv    qword ptr [ebp-88]
004105F6  |.  DD9D 70FFFFFF fstp    qword ptr [ebp-90]
004105FC  |.  68 01060080   push    80000601
00410601  |.  FFB5 74FFFFFF push    dword ptr [ebp-8C]
00410607  |.  FFB5 70FFFFFF push    dword ptr [ebp-90]
0041060D  |.  68 01000000   push    1
00410612  |.  BB 68010000   mov     ebx, 168
00410617  |.  E8 133F0000   call    0041452F                         ;  相除结果十进制字符串
0041061C  |.  83C4 10       add     esp, 10
0041061F  |.  8985 6CFFFFFF mov     [ebp-94], eax
00410625  |.  68 01030080   push    80000301
0041062A  |.  6A 00         push    0
0041062C  |.  68 01000000   push    1
00410631  |.  68 04000080   push    80000004
00410636  |.  6A 00         push    0
00410638  |.  8B85 6CFFFFFF mov     eax, [ebp-94]
0041063E  |.  85C0          test    eax, eax
00410640  |.  75 05         jnz     short 00410647
00410642  |.  B8 3F314000   mov     eax, 0040313F
00410647  |>  50            push    eax
00410648  |.  68 02000000   push    2
0041064D  |.  BB 38010000   mov     ebx, 138
00410652  |.  E8 D83E0000   call    0041452F                         ;  取字符串最后一位
00410657  |.  83C4 1C       add     esp, 1C
0041065A  |.  8985 68FFFFFF mov     [ebp-98], eax
00410660  |.  8B9D 6CFFFFFF mov     ebx, [ebp-94]
00410666  |.  85DB          test    ebx, ebx
00410668  |.  74 09         je      short 00410673
0041066A  |.  53            push    ebx
0041066B  |.  E8 A73E0000   call    00414517
00410670  |.  83C4 04       add     esp, 4
00410673  |>  8B85 68FFFFFF mov     eax, [ebp-98]
00410679  |.  50            push    eax
0041067A  |.  8B5D B4       mov     ebx, [ebp-4C]
0041067D  |.  85DB          test    ebx, ebx
0041067F  |.  74 09         je      short 0041068A
00410681  |.  53            push    ebx
00410682  |.  E8 903E0000   call    00414517
00410687  |.  83C4 04       add     esp, 4
0041068A  |>  58            pop     eax
0041068B  |.  8945 B4       mov     [ebp-4C], eax                    ;  保存

;;;省略部分是产生其他位注册码的过程,大致过程均为 通过合并字串获取除数,被除数统一为变换机器码
;;;取相除结果的第2\3\4\5\6\7\8\9\10\11\12位字符为结果进行保存

004113B2  |.  6A FF         push    -1
004113B4  |.  6A 08         push    8
004113B6  |.  68 02000116   push    16010002
004113BB  |.  68 01000152   push    52010001
004113C0  |.  E8 70310000   call    00414535                         ;  取用户名
004113C5  |.  83C4 10       add     esp, 10
004113C8  |.  8945 84       mov     [ebp-7C], eax
004113CB  |.  68 3F314000   push    0040313F
004113D0  |.  FF75 84       push    dword ptr [ebp-7C]
004113D3  |.  E8 F2E3FFFF   call    0040F7CA                         ;  用户名是否为空
004113D8  |.  83C4 08       add     esp, 8
004113DB  |.  83F8 00       cmp     eax, 0
004113DE  |.  B8 00000000   mov     eax, 0
004113E3  |.  0F95C0        setne   al
004113E6  |.  8945 80       mov     [ebp-80], eax
004113E9  |.  8B5D 84       mov     ebx, [ebp-7C]
004113EC  |.  85DB          test    ebx, ebx
004113EE  |.  74 09         je      short 004113F9
004113F0  |.  53            push    ebx
004113F1  |.  E8 21310000   call    00414517
004113F6  |.  83C4 04       add     esp, 4
004113F9  |>  837D 80 00    cmp     dword ptr [ebp-80], 0            ;  这种语言的比较形式大部分如此
004113FD  |.  0F84 E41E0000 je      004132E7
00411403  |.  6A FF         push    -1
00411405  |.  6A 08         push    8
00411407  |.  68 02000116   push    16010002
0041140C  |.  68 01000152   push    52010001
00411411  |.  E8 1F310000   call    00414535
00411416  |.  83C4 10       add     esp, 10
00411419  |.  8945 84       mov     [ebp-7C], eax
0041141C  |.  68 04000080   push    80000004
00411421  |.  6A 00         push    0
00411423  |.  8B45 84       mov     eax, [ebp-7C]
00411426  |.  85C0          test    eax, eax
00411428  |.  75 05         jnz     short 0041142F
0041142A  |.  B8 3F314000   mov     eax, 0040313F
0041142F  |>  50            push    eax
00411430  |.  68 01000000   push    1
00411435  |.  BB 30010000   mov     ebx, 130
0041143A  |.  E8 F0300000   call    0041452F                         ;  用户名长度
0041143F  |.  83C4 10       add     esp, 10
00411442  |.  8945 80       mov     [ebp-80], eax
00411445  |.  8B5D 84       mov     ebx, [ebp-7C]
00411448  |.  85DB          test    ebx, ebx
0041144A  |.  74 09         je      short 00411455
0041144C  |.  53            push    ebx
0041144D  |.  E8 C5300000   call    00414517
00411452  |.  83C4 04       add     esp, 4
00411455  |>  837D 80 0A    cmp     dword ptr [ebp-80], 0A           ;  不能大于10
00411459  |.  0F8D 831E0000 jge     004132E2
0041145F  |.  68 3F314000   push    0040313F
00411464  |.  FF75 EC       push    dword ptr [ebp-14]               ;  注册码长度
00411467  |.  E8 5EE3FFFF   call    0040F7CA
0041146C  |.  83C4 08       add     esp, 8
0041146F  |.  83F8 00       cmp     eax, 0
00411472  |.  0F84 6A1E0000 je      004132E2                         ;  长度不能=0
00411478  |.  6A FF         push    -1
0041147A  |.  6A 08         push    8
0041147C  |.  68 03000116   push    16010003
00411481  |.  68 01000152   push    52010001
00411486  |.  E8 AA300000   call    00414535                         ;  取注册码
0041148B  |.  83C4 10       add     esp, 10
0041148E  |.  8945 84       mov     [ebp-7C], eax
00411491  |.  68 04000080   push    80000004
00411496  |.  6A 00         push    0
00411498  |.  8B45 84       mov     eax, [ebp-7C]
0041149B  |.  85C0          test    eax, eax
0041149D  |.  75 05         jnz     short 004114A4
0041149F  |.  B8 3F314000   mov     eax, 0040313F
004114A4  |>  50            push    eax
004114A5  |.  68 01000000   push    1
004114AA  |.  BB 30010000   mov     ebx, 130
004114AF  |.  E8 7B300000   call    0041452F                         ;  注册码 长度
004114B4  |.  83C4 10       add     esp, 10
004114B7  |.  8945 80       mov     [ebp-80], eax
004114BA  |.  8B5D 84       mov     ebx, [ebp-7C]
004114BD  |.  85DB          test    ebx, ebx
004114BF  |.  74 09         je      short 004114CA
004114C1  |.  53            push    ebx
004114C2  |.  E8 50300000   call    00414517
004114C7  |.  83C4 04       add     esp, 4
004114CA  |>  837D 80 06    cmp     dword ptr [ebp-80], 6            ;  码长不能小于6
004114CE  |.  0F8E 5E1B0000 jle     00413032
004114D4  |.  8B45 EC       mov     eax, [ebp-14]
004114D7  |.  50            push    eax                              ;  假注册码长度
004114D8  |.  FF75 F0       push    dword ptr [ebp-10]               ;  真实注册码长度(机器码长度+用户名长度)
004114DB  |.  E8 EAE2FFFF   call    0040F7CA                         ;  比较
004114E0  |.  83C4 08       add     esp, 8
004114E3  |.  83F8 00       cmp     eax, 0
004114E6  |.  0F85 461B0000 jnz     00413032                         ;  不同则退出
004114EC  |.  6A FF         push    -1
004114EE  |.  6A 08         push    8
004114F0  |.  68 03000116   push    16010003
004114F5  |.  68 01000152   push    52010001
004114FA  |.  E8 36300000   call    00414535
004114FF  |.  83C4 10       add     esp, 10
00411502  |.  8945 84       mov     [ebp-7C], eax
00411505  |.  68 01030080   push    80000301
0041150A  |.  6A 00         push    0
0041150C  |.  68 01000000   push    1
00411511  |.  68 04000080   push    80000004
00411516  |.  6A 00         push    0
00411518  |.  8B45 84       mov     eax, [ebp-7C]
0041151B  |.  85C0          test    eax, eax
0041151D  |.  75 05         jnz     short 00411524
0041151F  |.  B8 3F314000   mov     eax, 0040313F
00411524  |>  50            push    eax
00411525  |.  68 02000000   push    2
0041152A  |.  BB 38010000   mov     ebx, 138
0041152F  |.  E8 FB2F0000   call    0041452F                         ;  注册码最后一位
00411534  |.  83C4 1C       add     esp, 1C
00411537  |.  8945 80       mov     [ebp-80], eax
0041153A  |.  8B5D 84       mov     ebx, [ebp-7C]
0041153D  |.  85DB          test    ebx, ebx
0041153F  |.  74 09         je      short 0041154A
00411541  |.  53            push    ebx
00411542  |.  E8 D02F0000   call    00414517
00411547  |.  83C4 04       add     esp, 4
0041154A  |>  8B45 B8       mov     eax, [ebp-48]
0041154D  |.  50            push    eax                              ;  上面计算保存值
0041154E  |.  FF75 80       push    dword ptr [ebp-80]               ;  注册码最后一位
00411551  |.  E8 74E2FFFF   call    0040F7CA                         ;  比较
00411556  |.  83C4 08       add     esp, 8
00411559  |.  83F8 00       cmp     eax, 0
0041155C  |.  B8 00000000   mov     eax, 0
00411561  |.  0F94C0        sete    al
00411564  |.  8985 7CFFFFFF mov     [ebp-84], eax
0041156A  |.  8B5D 80       mov     ebx, [ebp-80]
0041156D  |.  85DB          test    ebx, ebx
0041156F  |.  74 09         je      short 0041157A
00411571  |.  53            push    ebx
00411572  |.  E8 A02F0000   call    00414517
00411577  |.  83C4 04       add     esp, 4
0041157A  |>  83BD 7CFFFFFF>cmp     dword ptr [ebp-84], 0
00411581  |.  0F84 A61A0000 je      0041302D                        ;  等则继续,不等则跳出

;;; 省略部分位注册码其余部分的比较,大致过程均为:取用户名的第N位,与我们计算出来的保存值
;;; 进行比较,相同则继续,不同则跳出。注:此过程中有无效比较,可根据跳转位置判断出来。具体
;;; 如下:

;;; 第N次比较  01 02 03             | 08 09 10 11 12                | 18 19 20 21 22    未标注者代表无效比较
;;; 保存位置   48 4c 50 50 58 68 6c | 54 5c 58 68 6c 6c 6c 74 60 6c | 60 74 70 64 78    xx == [ebp-xx]
;;; 对应位数   Lt 01 02             | 03 04 05 06 07                | 08 09 10 11 12    对应注册码位数 Lt=last

00412294  |.  6A FF         push    -1
00412296  |.  6A 08         push    8
00412298  |.  68 03000116   push    16010003
0041229D  |.  68 01000152   push    52010001
004122A2  |.  E8 8E220000   call    00414535
004122A7  |.  83C4 10       add     esp, 10
004122AA  |.  8945 84       mov     [ebp-7C], eax
004122AD  |.  68 01030080   push    80000301
004122B2  |.  6A 00         push    0
004122B4  |.  68 01000000   push    1
004122B9  |.  68 01030080   push    80000301
004122BE  |.  6A 00         push    0
004122C0  |.  68 0C000000   push    0C
004122C5  |.  68 04000080   push    80000004
004122CA  |.  6A 00         push    0
004122CC  |.  8B45 84       mov     eax, [ebp-7C]
004122CF  |.  85C0          test    eax, eax
004122D1  |.  75 05         jnz     short 004122D8
004122D3  |.  B8 3F314000   mov     eax, 0040313F
004122D8  |>  50            push    eax
004122D9  |.  68 03000000   push    3
004122DE  |.  BB 3C010000   mov     ebx, 13C
004122E3  |.  E8 47220000   call    0041452F                         ;取注册码第12位
004122E8  |.  83C4 28       add     esp, 28
004122EB  |.  8945 80       mov     [ebp-80], eax
004122EE  |.  8B5D 84       mov     ebx, [ebp-7C]
004122F1  |.  85DB          test    ebx, ebx
004122F3  |.  74 09         je      short 004122FE
004122F5  |.  53            push    ebx
004122F6  |.  E8 1C220000   call    00414517
004122FB  |.  83C4 04       add     esp, 4
004122FE  |>  8B45 88       mov     eax, [ebp-78]
00412301  |.  50            push    eax
00412302  |.  FF75 80       push    dword ptr [ebp-80]
00412305  |.  E8 C0D4FFFF   call    0040F7CA                         ; 与[ebp-78]相比较
0041230A  |.  83C4 08       add     esp, 8
0041230D  |.  83F8 00       cmp     eax, 0
00412310  |.  B8 00000000   mov     eax, 0
00412315  |.  0F94C0        sete    al
00412318  |.  8985 7CFFFFFF mov     [ebp-84], eax
0041231E  |.  8B5D 80       mov     ebx, [ebp-80]
00412321  |.  85DB          test    ebx, ebx
00412323  |.  74 09         je      short 0041232E
00412325  |.  53            push    ebx
00412326  |.  E8 EC210000   call    00414517
0041232B  |.  83C4 04       add     esp, 4
0041232E  |>  83BD 7CFFFFFF>cmp     dword ptr [ebp-84], 0
00412335  |.  0F84 33000000 je      0041236E                         ; 不同则跳走
0041233B  |.  68 02000080   push    80000002
00412340  |.  6A 00         push    0
00412342  |.  68 01000000   push    1
00412347  |.  6A 00         push    0
00412349  |.  6A 00         push    0
0041234B  |.  6A 00         push    0
0041234D  |.  68 01000100   push    10001
00412352  |.  68 24010106   push    6010124
00412357  |.  68 25010152   push    52010125
0041235C  |.  68 03000000   push    3
00412361  |.  BB 20030000   mov     ebx, 320
00412366  |.  E8 C4210000   call    0041452F                         ;  提示注册成功
0041236B  |.  83C4 28       add     esp, 28

;;;此处省略大量比较,似乎均无意义。可能是作者为制造障碍而加入的代码,只可惜汇编时放在了
;;;提示成功的后边。如要仍然混在前面的比较中,可能更容易打击我等人的信心。

004132E7  |>  8B5D FC       mov     ebx, [ebp-4]                     ;  以下是清理工作
004132EA  |.  85DB          test    ebx, ebx
004132EC  |.  74 09         je      short 004132F7
004132EE  |.  53            push    ebx
004132EF  |.  E8 23120000   call    00414517
004132F4  |.  83C4 04       add     esp, 4

;;;此处省略大量清理工作

004134C7  |>  8BE5          mov     esp, ebp
004134C9  |.  5D            pop     ebp
004134CA  \.  C3            retn                                     ;   返回

  整个分析过程差点让我把鼠标的滚轮磨平,程序真的是有些长了。一个在于krnln.fnr中的函数参数过多,从另一个方面说翻译的也可能确实不够简洁。不评论易语言的好坏,我们继续关心我们的程序,过程已经注释的比较清楚了,下面将每一位注册码产生算法列出:

  其中:S[i]=注册码第i位 ,N[i]=用户名第i位 ,CN[i]=大写用户名第i位 ,M=变换机器码(机器码 add 用户名长度 add 注册码长度) ,add=十进制字符串的合并 

  S[last] =   M/[(N[1]+N[2]+N[3]) add (CN[1]+CN[2]+CN[3])]                    取结果中的第1位
  S[1]    =   M/CN[1]                                                         取结果中的最后一位
  S[2]    =   M/[(N[1]+N[2]+N[3]) add (CN[1]+CN[2]+CN[3]) add S[last] ]       取结果中的第2位
  S[3]    =   M/N[1]                                                          取结果中的第3位
  S[4]    =   M/(S[3] add S[2] add S[1])                                      取结果中的第4位
  S[5]    =   M/N[2]                                                          取结果中的第5位
  S[6]    =   M/CN[2]                                                         取结果中的第6位
  S[7]    =   M/(CN[1] add N[1] add N[2] add CN[2])                           取结果中的第7位
  S[8]    =   M/N[3]                                                          取结果中的第8位
  S[9]    =   M/CN[3]                                                         取结果中的第9位
  S[10]   =   M/(CN[3] add N[3] add N[2] add CN[2])                           取结果中的第10位
  S[11]   =   M/(N[1] add N[2] add N[3] add CN[1] add CN[2] add CN[3])        取结果中的第11位
  S[12]   =   M/(S[2] add S[4] add S[6] add S[8] add S[10])                   取结果中的第12位

  1.从算法中我们可以看出,相同的机器上得出的序列号与用户名的前三位和用户名长度相关。意即用户名前三位相同,长度相同则产生同样的序列号。

  2.程序中虽然只比较了用户名是否为空,实际上用户名长度小于3时都不会产生正确的序列号,也就是无法注册成功。

  3.程序中有可能出现取位超过结果总长度,如整除的情况。(我测试过,如果整除,结果只取整数,而不会补零)

  第三部分  编写注册机

  有了算法分析,应该说写注册机应该比较简单。但那可能只是对于高级语言来说,用汇编编写却用了我很长的时间,最主要的原因就是因为其中涉及到了浮点数操作。也就是因为这个程序,让我对浮点数操作有了更进一步的理解。由于源程序过长,下面将提及重点注意事项和部分源代码。

  1.跟踪机器码产生过程,得代码如下:

szFileName db "\\.\PhysicalDrive0",0
szBufferIn db 00h,02h,00h,00h,\
              00h,01h,01h,00h,\
              00h,0a0h,0ech,00h,\
              00h,00h,00h,00h,\
              00h,00h,00h,00h,\
              00h,00h,00h,00h,\
              00h,00h,00h,00h,\
              00h,00h,00h,00h,\
              00h

invoke CreateFile,offset szFileName,GENERIC_READ or GENERIC_WRITE,\
        FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL
  mov edx,eax
  invoke DeviceIoControl,edx,0007c088h,offset szBufferIn,32,addr szBuffer,210h,addr BufferW,NULL 
  lea eax,szBufferOut
  lea ecx,szBuffer
  add ecx,10h
@@:                                              ;;;;;;;;;;;;;;;;;转移
  xor edx,edx
  add eax,4
  mov dx,[ecx]
  add ecx,2
  mov [eax-4],edx
  cmp eax,offset szBufferOut+1024
  jl @B
                                       ;;;;;;;;;;;;;;;;;;;;;计算
  lea edi,szBufferOut
  xor ecx,ecx
  xor eax,eax  
  .while ecx<24
    mov edx,[edi+05Ch+ecx*4]
    add eax,edx
    inc ecx
  .endw
  lea edi,szBufferOut
  xor ecx,ecx
  .while ecx<10
    mov edx,[edi+28h+ecx*4]
    add eax,edx
    inc ecx
  .endw
  lea edi,szBufferOut
  xor edx,edx
  add edx,[edi+4h]
  add edx,[edi+0ch]
  add edx,[edi+18h]
  add edx,[edi+54h]
  shl edx,10h
  add edx,eax
;;;;;;;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;edx中即为机器码16进制
   
  2.用到的重要浮点操作函数
    FpuAtoFL,addr sz ,0,DEST_FPU              将十进制字串转换成浮点数并入栈
    FpuFLtoA,0,15,addr szBuffer,SRC1_FPU      将St(0)转换成十进制字符串,15为小数后精度,字符串会有前导空格

  3.要注意精度问题,源程序中精度为有效数字13位,整数则取整。要考虑进位、截取、取整等问题。

  附:汇编语言注册机(反汇编汇编语言的注册机,相当于读源程序:P)
  
  以上分析如有不当之处,敬请各位大侠批评指正,在此先表示感谢。收工!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年12月24日 01:47:30


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
看来这个CM还不够猛,代码分析起来也有点长,下次要构造个好一点的才行了。
2007-12-24 11:44
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
3
分析得不错,学习。
2007-12-24 18:38
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
4
相当于读源程序
2007-12-25 13:26
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
5
谢谢版主及各位捧场!
2007-12-25 19:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
“消息断点+内存断点轻松的断下程序”
程序加壳 如何用消息断点 程序一运行就异常,  内存断点不知道是根据什么来下段的
请楼主指教
另:我的方法是到oep处  然后用ece附加进程    没有通用性  壳难点就没系了  还请指点谢谢
ps:如果楼主把keygen的源码放出来就最好不过了(奸笑)
2007-12-28 02:35
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
7
呵呵,我再仔细看看. 考虑你的问题.....
2007-12-28 08:26
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
8
厉害厉害……当时我下载回去调试的时候发现OD根本就没法搞,一打开就给我关了,一直没搞……现在明白了……谢谢petnt ,呵呵……
2007-12-28 19:30
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
9
我所谓的消息断点+内存断点 其过程为:
  程序运行后,ALT+W 在Button 按钮上设消息断点,LBUTTONUP。输入用户名,注册码后点击确定会被断下。
  此时 ALT+M 在程序代码段设内存访问断点,F9,程序就会被断在关键处。

  之所以没有把序列号产生源码贴上来,其一是因为我分析的程序代码较长,再加上我的源码也较长,整个破文篇幅过长会影响大家心情,同时又易造成鼠标滚轮损坏.其二是因为我的汇编真的马马虎虎,能写出来就费了我很大的功夫,其中肯定会有不简洁或令大侠们雅然失笑之处,所以也不太敢贴出.但有人提议贴出,同时也本着交流有益的想法,现厚着脸皮贴出,有令高手发笑之处,还请不吝指教.

D13g proc ;;;;;;;;;;;;;;;;esi为参数
    ;;;;;;;;;;此函数功能为 将esi指向的数字字符串转换成13位有效数字格式,是整数的话取整。注:esi带前导空格
        movzx edx,byte ptr [esi+15]
        mov byte ptr [esi+15],0
        .if edx>34h && edx<40h
                movzx edx,byte ptr [esi+14]       
                .if edx==2eh
                        movzx edx,byte ptr [esi+13]
                        inc edx
                        mov byte ptr [esi+13],dl
                .else
                        inc edx
                        mov byte ptr [esi+14],dl
                .endif
                        mov ecx,14
                        .while ecx>0  
                                movzx edx,byte ptr [esi+ecx]
                                        .if edx==3ah
                                                movzx edx,byte ptr [esi+ecx-1]       
                                                .if edx==2eh
                                                        movzx edx,byte ptr [esi+ecx-2]
                                                        inc edx
                                                        mov byte ptr [esi+ecx-2],dl
                                                .elseif edx==20h
                                                        mov byte ptr [esi+ecx],30h
                                                        mov byte ptr [esi+ecx-1],31h
                                                .else
                                                       
                                                        inc edx
                                                        mov byte ptr [esi+ecx-1],dl
                                                .endif
                                                mov byte ptr [esi+ecx],30h
                                                dec ecx
                                        .elseif edx==2eh
                                                dec ecx
                                                .continue
                                        .else
                                                .break
                                        .endif
                        .endw
        .elseif edx==30h
                mov ecx,14
                .while ecx>0
                        movzx edx,byte ptr [esi+ecx]
                        .if edx==2eh
                                mov byte ptr [esi+ecx],0
                                dec ecx
                                .continue
                        .elseif edx==30h
                                dec ecx
                                .continue
                        .else
                                .break
                        .endif
                .endw
                       
        .endif

        ret
D13g endp

GenKey proc uses edi, lpUserName:DWORD,nU:DWORD,lpMashine:DWORD,nM:DWORD,hDlg:DWORD

        ;生成序列号函数,参数分别为:指向用户名的指针,用户名字符数,指向机器码指针,机器码字符数
        ;此函数中只用到了 lpUserName 和 nU

        local szBuffer[600]:BYTE , BufferW:DWORD
        local Jqm[32]:BYTE          ;;;存放机器码 string
        local LofJqmS[6]:Byte       ;;;机器码长度 string
        local LofJqmN:DWORD         ;;;机器码长度
        local TempS[16]:Byte        ;;;中间变量
        local LofUserS[32]:Byte     ;;;用户名长度 string
        local nUaddLofJqmNS[4]:Byte ;;;用户名长度+机器码长度 string
        local LofSn:DWORD           ;;;注册码长度
        local LofSnS:DWORD          ;;;注册码长度 string
        local Name1:DWORD           ;;;用户名第1位
        local Name2:DWORD           ;;;用户名第2位
        local Name3:DWORD           ;;;用户名第3位
        local Name1S:DWORD          ;;;用户名第1位D String
        local Name2S:DWORD          ;;;用户名第2位D String
        local Name3S:DWORD          ;;;用户名第3位D String
        local CName1:DWORD          ;;;用户名第1位C
        local CName2:DWORD          ;;;用户名第2位C
        local CName3:DWORD          ;;;用户名第3位C
        local CName1S:DWORD         ;;;用户名第1位CD String
        local CName2S:DWORD         ;;;用户名第2位CD String
        local CName3S:DWORD         ;;;用户名第3位CD String
        local Nf3S[16]:Byte         ;;;用户名123 之和 S
        local CNf3S[6]:Byte         ;;;用户名大写123 之和 S
        local USJ:DWORD             ;;;用户名 注册码 机器码 各长度之和
        local Snlast:DWORD          ;;;注册码最后一位
        local Sn1:DWORD             ;;;注册码第1位
        local Sn2:DWORD             ;;;注册码第2位
        local Sn3:DWORD             ;;;注册码第3位
        local Sn4:DWORD             ;;;注册码第4位
        local Sn5:DWORD             ;;;注册码第5位
        local Sn6:DWORD             ;;;注册码第6位
        local Sn7:DWORD             ;;;注册码第7位
        local Sn8:DWORD             ;;;注册码第8位
        local Sn9:DWORD             ;;;注册码第9位
        local Sn10:DWORD            ;;;注册码第10位
        local Sn11:DWORD            ;;;注册码第11位
        local Sn12:DWORD            ;;;注册码第12位
       
        .if nU>2 && nU<10
        .else
                invoke MessageBox,NULL,addr szErrUsername,addr szCaption,MB_OK
                xor eax,eax
                ret
        .endif
       
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清空序列号;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        lea edi,szSerial
        xor ecx,ecx
   
        .while ecx<32
                mov byte ptr [edi+ecx],2ah
                inc ecx
        .endw
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;生成机器码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        invoke CreateFile,offset szFileName,GENERIC_READ or GENERIC_WRITE,\
                                FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL
        mov edx,eax
        invoke DeviceIoControl,edx,0007c088h,offset szBufferIn,32,addr szBuffer,210h,addr BufferW,NULL
        lea eax,szBufferOut
        lea ecx,szBuffer
        add ecx,10h
@@:                                          ;;;;;;;;;;;;;;;;;转移
        xor edx,edx
        add eax,4
        mov dx,[ecx]
        add ecx,2
        mov [eax-4],edx
        cmp eax,offset szBufferOut+1024
        jl @B
                                            ;;;;;;;;;;;;;;;;;;;计算
        lea edi,szBufferOut
        xor ecx,ecx
        xor eax,eax       
        .while ecx<24
                mov edx,[edi+05Ch+ecx*4]
                add eax,edx
                inc ecx
        .endw
        lea edi,szBufferOut
        xor ecx,ecx
        .while ecx<10
                mov edx,[edi+28h+ecx*4]
                add eax,edx
                inc ecx
        .endw
        lea edi,szBufferOut
        xor edx,edx
        add edx,[edi+4h]
        add edx,[edi+0ch]
        add edx,[edi+18h]
        add edx,[edi+54h]
        shl edx,10h
        add edx,eax
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;edx中即为机器码16进制;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        invoke wsprintf,addr Jqm, addr szFormat2,edx
        invoke lstrlen,addr Jqm
        mov LofJqmN,eax                              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;机器码长度
   
        add eax,nU
        lea edi,szSerial
        mov byte ptr [edi+eax],0
        mov LofSn,eax                               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;确定序列号长度
        invoke wsprintf,addr LofSnS,addr szFormat2,LofSn
       
        invoke wsprintf,addr LofJqmS,addr szFormat2,LofJqmN  ;;;;;;;;;;;;;机器码长度字符型
        invoke wsprintf,addr LofUserS,addr szFormat2,nU      ;;;;;;;;;;;;;用户名长度字符型
        mov edx,nU
        add edx,LofJqmN
        invoke wsprintf,addr nUaddLofJqmNS,addr szFormat2,edx ;;;;;机器码长度与用户名长度之和字符型
        mov edi,lpUserName
        movzx eax,byte ptr [edi]            ;;;保存name[1]
        mov Name1,eax
        movzx eax,byte ptr [edi+1]          ;;;保存name[2]
        mov Name2,eax
        movzx eax,byte ptr [edi+2]          ;;;保存name[3]
        mov Name3,eax
        invoke wsprintf,addr Name1S,addr szFormat2,Name1   ;;;保存name[1] string
        invoke wsprintf,addr Name2S,addr szFormat2,Name2   ;;;保存name[2] string
        invoke wsprintf,addr Name3S,addr szFormat2,Name3   ;;;保存name[3] string
        xor edx,edx
        add edx,Name1
        add edx,Name2
        add edx,Name3
        invoke wsprintf,addr Nf3S,addr szFormat2,edx     ;;;;保存用户名前三之和 string
       
        invoke CharUpper,lpUserName                      ;;;;转换成大写
        mov edi,lpUserName
        movzx eax,byte ptr [edi]            ;;;保存Cname[1]
        mov CName1,eax
        movzx eax,byte ptr [edi+1]          ;;;保存Cname[2]
        mov CName2,eax
        movzx eax,byte ptr [edi+2]          ;;;保存Cname[3]
        mov CName3,eax
        invoke wsprintf,addr CName1S,addr szFormat2,CName1   ;;;保存Cname[1] string
        invoke wsprintf,addr CName2S,addr szFormat2,CName2   ;;;保存Cname[2] string
        invoke wsprintf,addr CName3S,addr szFormat2,CName3   ;;;保存Cname[3] string
        xor edx,edx
        add edx,CName1
        add edx,CName2
        add edx,CName3
        invoke wsprintf,addr CNf3S,addr szFormat2,edx     ;;;;保存用户名前三之和 string
       
        xor edx,edx
        add edx,nU
        add edx,LofJqmN
        add edx,LofSn
        mov USJ,edx                                 ;;;保存用户名 注册码 机器码 长度 之和
       
        invoke lstrcat,addr Jqm,addr LofUserS
        invoke lstrcat,addr Jqm,addr LofSnS         ;;;转换机器码
       
        invoke lstrcat,addr Nf3S,addr CNf3S
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr Nf3S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+1]
        mov Snlast,edx                         ;;;;;产生注册码      最后一位
        lea edi,szSerial
        mov eax,LofSn
        mov byte ptr [edi+eax-1],dl
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr CName1S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15,addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        invoke lstrlen,esi
        movzx edx,byte ptr [esi+eax-1]
        mov Sn1,edx                            ;;;;;产生注册码      第1位
        lea edi,szSerial
        mov byte ptr [edi],dl

        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke lstrcat,addr Nf3S,addr Snlast
        invoke FpuAtoFL,addr Nf3S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+2]
        mov Sn2,edx                            ;;;;;产生注册码      第2位
        lea edi,szSerial
        mov byte ptr [edi+1],dl
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr Name1S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+3]
        mov Sn3,edx                            ;;;;;产生注册码      第3位
        lea edi,szSerial
        mov byte ptr [edi+2],dl
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        mov dword ptr TempS,0
        mov dword ptr TempS+4,0
        mov dword ptr TempS+8,0
        mov dword ptr TempS+12,0
        invoke lstrcat,addr TempS,addr Sn1
        invoke lstrcat,addr TempS,addr Sn2
        invoke lstrcat,addr TempS,addr Sn3
        invoke FpuAtoFL,addr TempS,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+4]
        mov Sn4,edx                            ;;;;;产生注册码      第4位
        lea edi,szSerial
        mov byte ptr [edi+3],dl
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr Name2S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+5]
        mov Sn5,edx                            ;;;;;产生注册码      第5位
        lea edi,szSerial
        mov byte ptr [edi+4],dl
       
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr CName2S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+6]
        mov Sn6,edx                            ;;;;;产生注册码      第6位
        lea edi,szSerial
        mov byte ptr [edi+5],dl

        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        mov dword ptr TempS,0
        mov dword ptr TempS+4,0
        mov dword ptr TempS+8,0
        mov dword ptr TempS+12,0
        invoke lstrcat,addr TempS,addr CName1S
        invoke lstrcat,addr TempS,addr Name1S
        invoke lstrcat,addr TempS,addr Name2S
        invoke lstrcat,addr TempS,addr CName2S
        invoke FpuAtoFL,addr TempS,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+7]
        mov Sn7,edx                            ;;;;;产生注册码      第7位       
        lea edi,szSerial
        mov byte ptr [edi+6],dl
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr Name3S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+8]
        mov Sn8,edx                            ;;;;;产生注册码      第8位
        lea edi,szSerial
        mov byte ptr [edi+7],dl

        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        invoke FpuAtoFL,addr CName3S,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+9]
        mov Sn9,edx                            ;;;;;产生注册码      第9位
        lea edi,szSerial
        mov byte ptr [edi+8],dl

        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        mov dword ptr TempS,0
        mov dword ptr TempS+4,0
        mov dword ptr TempS+8,0
        mov dword ptr TempS+12,0
        invoke lstrcat,addr TempS,addr CName3S
        invoke lstrcat,addr TempS,addr Name3S
        invoke lstrcat,addr TempS,addr Name2S
        invoke lstrcat,addr TempS,addr CName2S
        invoke FpuAtoFL,addr TempS,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+10]
        mov Sn10,edx                            ;;;;;产生注册码      第10位       
        lea edi,szSerial
        mov byte ptr [edi+9],dl

        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        mov dword ptr TempS,0
        mov dword ptr TempS+4,0
        mov dword ptr TempS+8,0
        mov dword ptr TempS+12,0
        invoke lstrcat,addr TempS,addr Name1S
        invoke lstrcat,addr TempS,addr Name2S
        invoke lstrcat,addr TempS,addr Name3S
        invoke lstrcat,addr TempS,addr CName1S
        invoke lstrcat,addr TempS,addr CName2S
        invoke lstrcat,addr TempS,addr CName3S
        invoke FpuAtoFL,addr TempS,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+11]
        mov Sn11,edx                            ;;;;;产生注册码      第11位
        lea edi,szSerial
        mov byte ptr [edi+10],dl
       
       
        invoke FpuAtoFL,addr Jqm,0,DEST_FPU
        mov dword ptr TempS,0
        mov dword ptr TempS+4,0
        mov dword ptr TempS+8,0
        mov dword ptr TempS+12,0
        invoke lstrcat,addr TempS,addr Sn2
        invoke lstrcat,addr TempS,addr Sn4
        invoke lstrcat,addr TempS,addr Sn6
        invoke lstrcat,addr TempS,addr Sn8
        invoke lstrcat,addr TempS,addr Sn10
        invoke FpuAtoFL,addr TempS,0,DEST_FPU
        fdiv
        invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
        lea esi , szBuffer
        invoke D13g
        movzx edx,byte ptr [esi+12]
        mov Sn12,edx                            ;;;;;产生注册码      第12位
        lea edi,szSerial
        mov byte ptr [edi+11],dl
       

        mov eax,offset szSerial
        ret
GenKey endp
2007-12-29 07:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢petnt大侠的指点
源码收藏(偶汇编很烂  学习。。。。)
2007-12-31 05:13
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
收藏下,学习!!!
2008-1-5 15:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
太强了,甘拜下风
2008-1-6 20:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
小弟还是不太明白 消息断点+内存断点 的设置 我在这贴中发了提问,12楼 请 petnt 看一眼 谢谢

贴子在下面这里 12 楼的 希望 petnt 大虾能给吾等小辈指点一二,谢谢.
http://bbs.pediy.com/showthread.php?t=55525
2008-2-17 02:45
0
游客
登录 | 注册 方可回帖
返回
//