1-Click PC Tuneup软件-破解实录-[下]

来源:互联网 发布:瘦骨精油副作用知乎 编辑:程序博客网 时间:2024/04/29 11:45
[作者]
网名: 猪头三
站点: http://www.x86asm.com
Email: pliceman_110@163.com
QQ: 643439947
编程生涯: 2001~至今[12年]
职业生涯: 10年
开发语言: C/C++; x86asm; Object Pascal; C#;
开发工具: VC++; Delphi;
研发领域: Windows应用软件安全; Windows系统内核安全; Windows系统磁盘数据安全;
技能种类: 逆向 驱动 磁盘 文件

[序言]
脱离玩破解已经好几年了, 由于前段时间在休息, 闲来玩玩, 随便找了一款国外软件1-click pc tuneup软件下手. 本人玩破解的原则是: 随便玩玩, 不跟经济利益挂钩, 选择无壳软件. 破解的目的是复习和巩固逆向思维, 而不是耗费时间和生命去研究各种刁蛮的加壳, 用自动脱壳工具就Ok了.

[本文介绍]
本文章一共分为10部分, 完全图文并茂, 分享在破解过程中的思维想法, 阅读本文需要一定的汇编语言, C/C++语言, 程序运行原理, 有开发软件实际经验, 熟悉Windows操作系统理论, 有基本的算法理论基础, 技术难度中等偏上.
1> 初步了解破解环境的部署
2> 初步了解1-click pc tuneup软件的主程序基本特征
3> 利用ollydbg定位你的处理注册号的函数
4> 多次陷入困境
5> 通过Qt类库的QString类相关函数找到处理注册号的函数
6> 开始分析处理注册号的函数
7> 不要满足直接获取注册号码
8> 分析注册号的输入规则 
9> 分析注册号码的生成算法
10> 为1-click pc tuneup软件写注册机

[请做好基础知识储备]
上面已经提到需要相关的基础知识, 如果您在阅读文章之前基础不扎实, 有可能你不会明白文章所要表达的含义. 破解领域太广太深, 接触和学习破解之前, 最好都需要会编程, 这是必须要具备的技能. 关于如何学习和提高编程, 我的网站http://www.x86asm.com或者QQ空间已有详细说明.

[阅读顺序]
本篇文章为: “1-click pc tuneup破解实录-[下]”, 您需要按照顺序来进行阅读: "1-click pc tuneup破解实录-[上]""1-click pc tuneup破解实录-[中]"  



>>>>>>>>>>>>>>> 第七部分: 不要满足直接获取注册号码 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

1. 在 >>> 第六部分: 开始分析处理注册号的函数 <<< 我们已经发现了内置注册号"82A63CCD5F3A45AA97DB7A0C”所在的函数, 很明显该函数就是处理注册号的函数, 下面大家可以根据我标注的各种颜色来了解注册号处理的流程

6E3D37D0    55              PUSH EBP
'
'  {中间代码省略}
'
6E3D3810    66:8B08         MOV CX,WORD PTR [EAX]
6E3D3813    83C0 02         ADD EAX,2
6E3D3816    66:3BCB         CMP CX,BX
6E3D3819  ^ 75 F5           JNZ SHORT logiclay.6E3D3810
6E3D381B    2BC2            SUB EAX,EDX
6E3D381D    D1F8            SAR EAX,1
6E3D381F    83F8 18         CMP EAX,18                      ; 判断注册号长度是否为0x18(十进制: 24)

6E3D3822    75 47           JNZ SHORT logiclay.6E3D386B
6E3D3824    B9 18683E6E     MOV ECX,logiclay.6E3E6818       ; 跟内置"82A63CCD5F3A45AA97DB7A0C"注册号比较
6E3D3829    8BC6            MOV EAX,ESI
6E3D382B    EB 03           JMP SHORT logiclay.6E3D3830
6E3D382D    8D49 00         LEA ECX,DWORD PTR [ECX]
6E3D3830    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3833    66:3B11         CMP DX,WORD PTR [ECX]
6E3D3836    75 1E           JNZ SHORT logiclay.6E3D3856
6E3D3838    66:3BD3         CMP DX,BX
6E3D383B    74 15           JE SHORT logiclay.6E3D3852
6E3D383D    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3841    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D3845    75 0F           JNZ SHORT logiclay.6E3D3856
6E3D3847    83C0 04         ADD EAX,4
6E3D384A    83C1 04         ADD ECX,4
6E3D384D    66:3BD3         CMP DX,BX
6E3D3850  ^ 75 DE           JNZ SHORT logiclay.6E3D3830
6E3D3852    33C0            XOR EAX,EAX
6E3D3854    EB 05           JMP SHORT logiclay.6E3D385B
6E3D3856    1BC0            SBB EAX,EAX
6E3D3858    83D8 FF         SBB EAX,-1
6E3D385B    3BC3            CMP EAX,EBX
6E3D385D    75 2B           JNZ SHORT logiclay.6E3D388A
'
'  {中间代码省略}
'
6E3D389B    E8 00040000     CALL logiclay.6E3D3CA0      ; 把注册号所有字符串转换为大写
'
'  {中间代码省略}
'
6E3D38FF    A1 0CD33E6E     MOV EAX,DWORD PTR [6E3ED30C] ; 判断注册码的特征头是否为: E985
6E3D3904    8BCE            MOV ECX,ESI
6E3D3906    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3909    66:3B11         CMP DX,WORD PTR [ECX]
6E3D390C    75 1E           JNZ SHORT logiclay.6E3D392C
6E3D390E    66:3BD3         CMP DX,BX
6E3D3911    74 15           JE SHORT logiclay.6E3D3928
6E3D3913    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3917    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D391B    75 0F           JNZ SHORT logiclay.6E3D392C
6E3D391D    83C0 04         ADD EAX,4
6E3D3920    83C1 04         ADD ECX,4
6E3D3923    66:3BD3         CMP DX,BX
6E3D3926  ^ 75 DE           JNZ SHORT logiclay.6E3D3906
6E3D3928    33C0            XOR EAX,EAX
6E3D392A    EB 05           JMP SHORT logiclay.6E3D3931
6E3D392C    1BC0            SBB EAX,EAX
6E3D392E    83D8 FF         SBB EAX,-1
6E3D3931    3BC3            CMP EAX,EBX
6E3D3933    0F84 84010000   JE logiclay.6E3D3ABD
6E3D3939    A1 10D33E6E     MOV EAX,DWORD PTR [6E3ED310] ; 判断注册码的特征头是否为: 84E4
6E3D393E    8BCE            MOV ECX,ESI
6E3D3940    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3943    66:3B11         CMP DX,WORD PTR [ECX]
6E3D3946    75 1E           JNZ SHORT logiclay.6E3D3966
6E3D3948    66:3BD3         CMP DX,BX
6E3D394B    74 15           JE SHORT logiclay.6E3D3962
6E3D394D    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3951    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D3955    75 0F           JNZ SHORT logiclay.6E3D3966
6E3D3957    83C0 04         ADD EAX,4
6E3D395A    83C1 04         ADD ECX,4
6E3D395D    66:3BD3         CMP DX,BX
6E3D3960  ^ 75 DE           JNZ SHORT logiclay.6E3D3940
6E3D3962    33C0            XOR EAX,EAX
6E3D3964    EB 05           JMP SHORT logiclay.6E3D396B
6E3D3966    1BC0            SBB EAX,EAX
6E3D3968    83D8 FF         SBB EAX,-1
6E3D396B    3BC3            CMP EAX,EBX
6E3D396D    0F84 4A010000   JE logiclay.6E3D3ABD
6E3D3973    A1 14D33E6E     MOV EAX,DWORD PTR [6E3ED314] ; 判断注册码的特征头是否为: 75E2
6E3D3978    8BCE            MOV ECX,ESI
6E3D397A    8D9B 00000000   LEA EBX,DWORD PTR [EBX]
6E3D3980    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3983    66:3B11         CMP DX,WORD PTR [ECX]
6E3D3986    75 1E           JNZ SHORT logiclay.6E3D39A6
6E3D3988    66:3BD3         CMP DX,BX
6E3D398B    74 15           JE SHORT logiclay.6E3D39A2
6E3D398D    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3991    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D3995    75 0F           JNZ SHORT logiclay.6E3D39A6
6E3D3997    83C0 04         ADD EAX,4
6E3D399A    83C1 04         ADD ECX,4
6E3D399D    66:3BD3         CMP DX,BX
6E3D39A0  ^ 75 DE           JNZ SHORT logiclay.6E3D3980
6E3D39A2    33C0            XOR EAX,EAX
6E3D39A4    EB 05           JMP SHORT logiclay.6E3D39AB
6E3D39A6    1BC0            SBB EAX,EAX
6E3D39A8    83D8 FF         SBB EAX,-1
6E3D39AB    3BC3            CMP EAX,EBX
6E3D39AD    0F84 0A010000   JE logiclay.6E3D3ABD
6E3D39B3    A1 18D33E6E     MOV EAX,DWORD PTR [6E3ED318] ; 判断注册码的特征头是否为: 84DE
6E3D39B8    8BCE            MOV ECX,ESI
6E3D39BA    8D9B 00000000   LEA EBX,DWORD PTR [EBX]
6E3D39C0    66:8B10         MOV DX,WORD PTR [EAX]
6E3D39C3    66:3B11         CMP DX,WORD PTR [ECX]
6E3D39C6    75 1E           JNZ SHORT logiclay.6E3D39E6
6E3D39C8    66:3BD3         CMP DX,BX
6E3D39CB    74 15           JE SHORT logiclay.6E3D39E2
6E3D39CD    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D39D1    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D39D5    75 0F           JNZ SHORT logiclay.6E3D39E6
6E3D39D7    83C0 04         ADD EAX,4
6E3D39DA    83C1 04         ADD ECX,4
6E3D39DD    66:3BD3         CMP DX,BX
6E3D39E0  ^ 75 DE           JNZ SHORT logiclay.6E3D39C0
6E3D39E2    33C0            XOR EAX,EAX
6E3D39E4    EB 05           JMP SHORT logiclay.6E3D39EB
6E3D39E6    1BC0            SBB EAX,EAX
6E3D39E8    83D8 FF         SBB EAX,-1
6E3D39EB    3BC3            CMP EAX,EBX
6E3D39ED    0F84 CA000000   JE logiclay.6E3D3ABD
6E3D39F3    A1 1CD33E6E     MOV EAX,DWORD PTR [6E3ED31C] ; 判断注册码的特征头是否为: 82DA
6E3D39F8    8BCE            MOV ECX,ESI
6E3D39FA    8D9B 00000000   LEA EBX,DWORD PTR [EBX]
6E3D3A00    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3A03    66:3B11         CMP DX,WORD PTR [ECX]
6E3D3A06    75 1E           JNZ SHORT logiclay.6E3D3A26
6E3D3A08    66:3BD3         CMP DX,BX
6E3D3A0B    74 15           JE SHORT logiclay.6E3D3A22
6E3D3A0D    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3A11    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D3A15    75 0F           JNZ SHORT logiclay.6E3D3A26
6E3D3A17    83C0 04         ADD EAX,4
6E3D3A1A    83C1 04         ADD ECX,4
6E3D3A1D    66:3BD3         CMP DX,BX
6E3D3A20  ^ 75 DE           JNZ SHORT logiclay.6E3D3A00
6E3D3A22    33C0            XOR EAX,EAX
6E3D3A24    EB 05           JMP SHORT logiclay.6E3D3A2B
6E3D3A26    1BC0            SBB EAX,EAX
6E3D3A28    83D8 FF         SBB EAX,-1
6E3D3A2B    3BC3            CMP EAX,EBX
6E3D3A2D    0F84 8A000000   JE logiclay.6E3D3ABD
6E3D3A33    A1 20D33E6E     MOV EAX,DWORD PTR [6E3ED320] ; 判断注册码的特征头是否为: 6DFD
6E3D3A38    8BCE            MOV ECX,ESI
6E3D3A3A    8D9B 00000000   LEA EBX,DWORD PTR [EBX]
6E3D3A40    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3A43    66:3B11         CMP DX,WORD PTR [ECX]
6E3D3A46    75 1E           JNZ SHORT logiclay.6E3D3A66
6E3D3A48    66:3BD3         CMP DX,BX
6E3D3A4B    74 15           JE SHORT logiclay.6E3D3A62
6E3D3A4D    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3A51    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D3A55    75 0F           JNZ SHORT logiclay.6E3D3A66
6E3D3A57    83C0 04         ADD EAX,4
6E3D3A5A    83C1 04         ADD ECX,4
6E3D3A5D    66:3BD3         CMP DX,BX
6E3D3A60  ^ 75 DE           JNZ SHORT logiclay.6E3D3A40
6E3D3A62    33C0            XOR EAX,EAX
6E3D3A64    EB 05           JMP SHORT logiclay.6E3D3A6B
6E3D3A66    1BC0            SBB EAX,EAX
6E3D3A68    83D8 FF         SBB EAX,-1
6E3D3A6B    3BC3            CMP EAX,EBX
6E3D3A6D    74 4E           JE SHORT logiclay.6E3D3ABD
6E3D3A6F    A1 24D33E6E     MOV EAX,DWORD PTR [6E3ED324] ; 判断注册码的特征头是否为: 8A77
6E3D3A74    8BCE            MOV ECX,ESI
6E3D3A76    66:8B10         MOV DX,WORD PTR [EAX]
6E3D3A79    66:3B11         CMP DX,WORD PTR [ECX]
6E3D3A7C    75 1E           JNZ SHORT logiclay.6E3D3A9C
6E3D3A7E    66:3BD3         CMP DX,BX
6E3D3A81    74 15           JE SHORT logiclay.6E3D3A98
6E3D3A83    66:8B50 02      MOV DX,WORD PTR [EAX+2]
6E3D3A87    66:3B51 02      CMP DX,WORD PTR [ECX+2]
6E3D3A8B    75 0F           JNZ SHORT logiclay.6E3D3A9C
6E3D3A8D    83C0 04         ADD EAX,4
6E3D3A90    83C1 04         ADD ECX,4
6E3D3A93    66:3BD3         CMP DX,BX
6E3D3A96  ^ 75 DE           JNZ SHORT logiclay.6E3D3A76
6E3D3A98    33C0            XOR EAX,EAX
6E3D3A9A    EB 05           JMP SHORT logiclay.6E3D3AA1
6E3D3A9C    1BC0            SBB EAX,EAX
6E3D3A9E    83D8 FF         SBB EAX,-1
6E3D3AA1    3BC3            CMP EAX,EBX
6E3D3AA3    74 18           JE SHORT logiclay.6E3D3ABD
'
'  {中间代码省略}
'
6E3D3ABD    6A 5C           PUSH 5C
6E3D3ABF    8D4D 94         LEA ECX,DWORD PTR [EBP-6C]
6E3D3AC2    53              PUSH EBX
6E3D3AC3    51              PUSH ECX
6E3D3AC4    E8 05A00000     CALL <JMP.&MSVCR100.memset>
6E3D3AC9    8B7D 88         MOV EDI,DWORD PTR [EBP-78]
6E3D3ACC    83C4 0C         ADD ESP,0C
6E3D3ACF    33C0            XOR EAX,EAX
6E3D3AD1    3BC3            CMP EAX,EBX
6E3D3AD3    0F8C E8000000   JL logiclay.6E3D3BC1
6E3D3AD9    3B47 F4         CMP EAX,DWORD PTR [EDI-C]
6E3D3ADC    0F8F DF000000   JG logiclay.6E3D3BC1             ; 判断注册号的每个字符是否在 0~9 或者 A~F 范围
6E3D3AE2    0FB70C47        MOVZX ECX,WORD PTR [EDI+EAX*2]
6E3D3AE6    8D51 D0         LEA EDX,DWORD PTR [ECX-30]
6E3D3AE9    83FA 09         CMP EDX,9
6E3D3AEC    77 04           JA SHORT logiclay.6E3D3AF2
6E3D3AEE    895485 90       MOV DWORD PTR [EBP+EAX*4-70],EDX
6E3D3AF2    8D51 BF         LEA EDX,DWORD PTR [ECX-41]
6E3D3AF5    83FA 05         CMP EDX,5
6E3D3AF8    77 07           JA SHORT logiclay.6E3D3B01
6E3D3AFA    83C1 C9         ADD ECX,-37
6E3D3AFD    894C85 90       MOV DWORD PTR [EBP+EAX*4-70],ECX
6E3D3B01    40              INC EAX
6E3D3B02    83F8 18         CMP EAX,18
6E3D3B05  ^ 7C CA           JL SHORT logiclay.6E3D3AD1

6E3D3B07    8B4D AC         MOV ECX,DWORD PTR [EBP-54]     ; 校验1
6E3D3B0A    034D A8         ADD ECX,DWORD PTR [EBP-58]
6E3D3B0D    8B55 A4         MOV EDX,DWORD PTR [EBP-5C]
6E3D3B10    8D4411 01       LEA EAX,DWORD PTR [ECX+EDX+1]
6E3D3B14    25 0F000080     AND EAX,8000000F
6E3D3B19    79 05           JNS SHORT logiclay.6E3D3B20
6E3D3B1B    48              DEC EAX
6E3D3B1C    83C8 F0         OR EAX,FFFFFFF0
6E3D3B1F    40              INC EAX
6E3D3B20    3945 A0         CMP DWORD PTR [EBP-60],EAX
6E3D3B23    0F85 A2000000   JNZ logiclay.6E3D3BCB
6E3D3B29    8B55 BC         MOV EDX,DWORD PTR [EBP-44]    ; 校验2
6E3D3B2C    0355 B8         ADD EDX,DWORD PTR [EBP-48]
6E3D3B2F    8B45 B4         MOV EAX,DWORD PTR [EBP-4C]
6E3D3B32    8D4C02 02       LEA ECX,DWORD PTR [EDX+EAX+2]
6E3D3B36    81E1 0F000080   AND ECX,8000000F
6E3D3B3C    79 05           JNS SHORT logiclay.6E3D3B43
6E3D3B3E    49              DEC ECX
6E3D3B3F    83C9 F0         OR ECX,FFFFFFF0
6E3D3B42    41              INC ECX
6E3D3B43    394D B0         CMP DWORD PTR [EBP-50],ECX
6E3D3B46    0F85 7F000000   JNZ logiclay.6E3D3BCB
6E3D3B4C    8B45 CC         MOV EAX,DWORD PTR [EBP-34]   ; 校验3
6E3D3B4F    0345 C8         ADD EAX,DWORD PTR [EBP-38]
6E3D3B52    8B4D C4         MOV ECX,DWORD PTR [EBP-3C]
6E3D3B55    8D5408 03       LEA EDX,DWORD PTR [EAX+ECX+3]
6E3D3B59    81E2 0F000080   AND EDX,8000000F
6E3D3B5F    79 05           JNS SHORT logiclay.6E3D3B66
6E3D3B61    4A              DEC EDX
6E3D3B62    83CA F0         OR EDX,FFFFFFF0
6E3D3B65    42              INC EDX
6E3D3B66    3955 C0         CMP DWORD PTR [EBP-40],EDX
6E3D3B69    75 60           JNZ SHORT logiclay.6E3D3BCB
6E3D3B6B    8B4D DC         MOV ECX,DWORD PTR [EBP-24]   ; 校验4
6E3D3B6E    034D D8         ADD ECX,DWORD PTR [EBP-28]
6E3D3B71    8B55 D4         MOV EDX,DWORD PTR [EBP-2C]
6E3D3B74    8D4411 04       LEA EAX,DWORD PTR [ECX+EDX+4]
6E3D3B78    25 0F000080     AND EAX,8000000F
6E3D3B7D    79 05           JNS SHORT logiclay.6E3D3B84
6E3D3B7F    48              DEC EAX
6E3D3B80    83C8 F0         OR EAX,FFFFFFF0
6E3D3B83    40              INC EAX
6E3D3B84    3945 D0         CMP DWORD PTR [EBP-30],EAX
6E3D3B87    75 42           JNZ SHORT logiclay.6E3D3BCB
6E3D3B89    8B55 EC         MOV EDX,DWORD PTR [EBP-14]   ; 校验5
6E3D3B8C    0355 E8         ADD EDX,DWORD PTR [EBP-18]
6E3D3B8F    8B45 E4         MOV EAX,DWORD PTR [EBP-1C]
6E3D3B92    8D4C02 05       LEA ECX,DWORD PTR [EDX+EAX+5]
6E3D3B96    81E1 0F000080   AND ECX,8000000F
6E3D3B9C    79 05           JNS SHORT logiclay.6E3D3BA3
6E3D3B9E    49              DEC ECX
6E3D3B9F    83C9 F0         OR ECX,FFFFFFF0
6E3D3BA2    41              INC ECX
6E3D3BA3    394D E0         CMP DWORD PTR [EBP-20],ECX
6E3D3BA6    75 23           JNZ SHORT logiclay.6E3D3BCB
'
'  {中间代码省略}
'
6E3D3C14  ^ E9 52FCFFFF     JMP logiclay.6E3D386B


>>>>>>>>>>>>>>> 第八部分: 分析注册号的输入规则 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

1. 在 >>> 第七部分: 不要满足直接获取注册号码 <<< 的一大段汇编代码中, 已经按照颜色区别标准了各种处理注册号的逻辑功能.

XXX色块汇编代码: 判断注册号长度是否为0x18(十进制: 24)
XXX色块汇编代码: 把注册号转化为大写
XXX色块汇编代码: 判断注册号前4个字符是否为: 8A77 或 6DFD 或 82DA 或 B4DE 或 75E2 或 84E4 或 E985
XXX色块汇编代码: 判断注册号的每个字符是否在 0~9 或者 A~F 范围

2. Ok, 通过上面分析出的破解规则我们可以尝试输入一个符合规则的测试注册号, 比如“E98556789abcdef123456789”, 这样做的目的是为了更好的进入处理注册号的核心算法. 下面我们重新返回1-click pc tuneup软件的注册对话框, 并输入“E98556789abcdef123456789”, 再次按下"Activate Now",此时我们会再次进入内置"82A63CCD5F3A45AA97DB7A0C"注册号所在的函数, 然后再按下F8(步过), 会来到红颜色块的汇编代码, 这里就是注册号的核心算法了.



>>>>>>>>>>>>>>> 第九部分: 分析注册号码的生成算法 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

1. 通过分析颜色块的汇编代码, 可以知道, 注册码核心算法流程如下:
   1.1 把长度为0x18(十进制: 24)的注册码划分为6段, 每段4个字符.
   1.2 头段就是注册号码的特征头: 8A77 或 6DFD 或 82DA 或 B4DE 或 75E2 或 84E4 或 E985
   1.3 后面5段的计算方式如下:
        1.3.1 每段索引值分别为 1 2 3 4 5
1.3.2 当计算依次计算每段的4个字符时,会先把当前段后面的3个字符当作16进制相加, 然后在加上当前段的索引值.
1.3.3 通过1.3.2的方式计算出来值, 再进行计算出当前段的第1个字符.
    假设1.3.2的方式计算出来值为X,当前段的第1个字符为Y, 那么X和Y之间的关系如下:
Y = X and 0x8000000F ;
if (Y < 0)
{
Y := Y - 1 ;
Y := Y or 0xFFFFFFF0 ;
Y := Y + 1 ;
}
2. 经过上面分析,就可以理清整个注册号的生成规则, 并写出1-click pc tuneup软件的注册机了.