[作者]
网名: 猪头三
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-click pc tuneup破解实录-[下]”
>>>>>>>>>>>>>>> 第十部分: 为1-click pc tuneup软件写注册机 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1. 在 >>> 第九部分: 分析注册号码的生成算法 <<< 我们已经总结出注册号的生成算法原理, 那么可以根据这个原理来写出一个针对1-click pc tuneup软件的注册机. 这里我首选使用Delphi开发工具来编写注册机, 因为Delphi的开发效率高, 而且生成的程序小. 下面就贴出注册机核心算法函数: fun_Key_Create() 和 fun_Kye_OneGroup(). 那么我们在使用算法生产的时候, 只需要调用fun_Key_Create()函数就可以了.

// 注册号规则处理
function
fun_Kye_OneGroup
(
str_param_Key_OneGroup
:
string
;
int_param_Key_OneGroupIndex
:
Integer
)
:
string
;
var
dword_key
:
DWORD
;
dword_key_Result
:
array
[
1
..
3
]
of
DWORD
;
int_Index
:
Integer
;
str_Key_OneGroup
:
string
;
begin
Result
:
=
''
;
// 参数校验
if
(
Length
(
str_param_Key_OneGroup
)
<>
3
)
or
((
int_param_Key_OneGroupIndex
<=
0
)
or
(
int_param_Key_OneGroupIndex
>
5
)
)
then
begin
Exit
;
end
;
// 转换为大写
str_Key_OneGroup
:
=
UpperCase
(
str_param_Key_OneGroup
)
;
// 转换为btye数组
for
int_Index
:
=
1
to
Length
(
str_Key_OneGroup
)
do
begin
if
Ord
(
str_Key_OneGroup
[
int_Index
])
>
$46
then
begin
dword_key_Result
[
int_Index
]
:
=
0
;
end
else
if
Ord
(
str_Key_OneGroup
[
int_Index
])
>=
$41
then
begin
dword_key_Result
[
int_Index
]
:
=
DWORD
(
Ord
(
str_Key_OneGroup
[
int_Index
]))
-
$37
;
end
else
if
Ord
(
str_Key_OneGroup
[
int_Index
])
>=
$30
then
begin
dword_key_Result
[
int_Index
]
:
=
DWORD
(
Ord
(
str_Key_OneGroup
[
int_Index
]))
-
$30
;
end
;
end
;
// 计算因子
dword_key
:
=
dword_key_Result
[
3
]
+
dword_key_Result
[
2
]
+
dword_key_Result
[
1
]
+
int_param_Key_OneGroupIndex
;
// 通过 因子 计算另一个 序列号字符
dword_key
:
=
dword_key
and
$8000000F
;
if
dword_key
<
0
then
begin
dword_key
:
=
dword_key
-
1
;
dword_key
:
=
dword_key
or
$FFFFFFF0
;
dword_key
:
=
dword_key
+
1
;
end
;
Result
:
=
IntToHex
(
Ord
(
dword_key
)
,
1
)
+
str_Key_OneGroup
;
end
;
// End fun_Kye_OneGroup()
// 注册号生成
function
fun_Key_Create
(
)
:
string
;
const
// 注册号特征头
str_Key_Head
:
array
[
0
..
6
]
of
string
=
(
'8A77'
,
'6DFD'
,
'82DA'
,
'B4DE'
,
'75E2'
,
'84E4'
,
'E985'
)
;
var
str_Key_Base
:
string
;
begin
// 注册号字符规则
str_Key_Base
:
=
'0123456789ABCDEF'
;
Result
:
=
str_Key_Head
[
RandomRange
(
0
,
6
)]
+
fun_Kye_OneGroup
(
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
,
1
)
+
fun_Kye_OneGroup
(
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
,
2
)
+
fun_Kye_OneGroup
(
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
,
3
)
+
fun_Kye_OneGroup
(
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
,
4
)
+
fun_Kye_OneGroup
(
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
+
str_Key_Base
[
RandomRange
(
1
,
16
)]
,
5
)
;
end
;
// End fun_Key_Create()
结尾: 经过这次的1-click pc tuneup软件的破解, 又让我感觉回到年轻的时候, 是那么的激动. 这种感觉只有真正破解过软件的人才能体会到. 此软件破解分析周期3天, 剩下的时间都是来写这篇破解文章. 希望大家喜欢!