吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 24290|回复: 102
收起左侧

[转贴] 破解入门(八)-----算法分析与注册机编写

    [复制链接]
涛之雨 发表于 2018-7-28 22:40
本帖最后由 涛之雨 于 2019-4-10 10:40 编辑

上一篇:传送门




《《《《《《《《《《《《《《《《《《《《《《《《《《《原文开始》》》》》》》》》》》》》》》》》》》》》》》》》》》

【文章标题】:算法分析与注册机编写
【文章作者】:hahaya
【软件名称】:Free Internet Window Washer
【软件大小】:1177KB
【保护方式】:注册码
【软件介绍】:无
【下载地址】:http://download.csdn.net/detail/qiurisuixiang/4378781  
【加壳方式】:无壳
【编写工具】:Borland Delphi 6.0 - 7.0
破解工具】:PEIDOD
【操作平台】:Win7
【作者声明】:只是感兴趣,没有其他目的

一 详细破解过程

1 安装

程序需要安装,一直下一步就OK


2 查壳

打开安装目录,将Clearpch.exe放入OD查壳,发现程序时无壳的

1.png

3 尝试注册

打开软件,会提示注册,随便输入授权人和注册码,会提示如下错误

2.png

注:对英文不熟悉的朋友,可以将软件语言改成中文,注册时直接点击Skip,然后点击Help栏目下的Language,选择其中的Chinese即可

4 爆破

(1)既然程序没有加壳,那么直接用OD载入,然后使用OD的插件查找,由于软件是用Delphi编写的,则搜索的时候选择ACSII方式查询

(2)在查询的时候遇到困难,并没有找到“Registration is not valid,please try agin。”这样的注册失败信息

(3)由于该程序支持多国语言,来到安装目录下发现一个名为WLan_English.ini的文件,打开得知这是英文显示语言包,尝试在该文件中搜索注册失败信息,结果如下图

3.png

4.png

(4)在WLan_English.ini中查找到“RES_Registration_Error = Registration is not valid, please try again.”这样一条信息,于是尝试在OD中查找RES_Registration_Error,果然找到了 一处,如下图所示

5.png

(5)双击RES_Registration_Error信息,来到反汇编窗口进行爆破

6.png

(6)为了简单,一般会在这个函数的头部下断点来进行调试,根据OD中函数头部的提示,函数头部在004D3464处,按F2下断点,然后进行动态调试

7.png

注:当类似mov edx,[local.4]这种看不懂的代码时,在反汇编窗口中点击鼠标右键,选择“分析”,最后选择“从模块中删除分析”就可以转换成熟知的代码了

8.png

9.png

(7)下好断点之后就可以运行程序进行动态调试了,按F9运行程序,程序运行后继续用假注册码进行注册,输入完成后,点击OK按钮,那么程序就会停止在我们下的断  点处,如下图所示,那么就可以进行动态调试了

10.png

11.png

(8)开始单步调试,按F8进行单步调试,每一次按F8后注意寄存器和缓冲区值的变化,尤其是要关注注册码信息是否出现,当执行到004D348E时,出现假注册码

12.png

(9)出现我们输入的假注册码,此时要特别留意,一般注册算法会在这个附近出现。根据经验来看,一般注册算法会出现在004D348E后的第一个call指令处,而关键跳则是  出现在004D348E后的跳向注册失败信息的的跳转。为了验证这个想法,修改004D3498  处的跳转使其实现,跳过注册失败的信息,修改如下图所示

13.png

(10)保存修改后的文件,然后打开注册,发现可以注册成功,则爆破成功

  二 算法分析

1 在关键call上按F7单步步入开始跟踪注册算法

14.png

2 来到004D8300后进行F8单步调试,当程序运行到004D832B时出现了一个cmp指令进行比较,然后一个jne跳转,一般遇到这样的比较,后面接跳转的地方要特别注意,因为这很有可能是和注册算法有关的地方

15.png

3 在注释窗口或者寄存器窗口中可以看到eax中的值是十六进制的3,转成十进制也是3, 正好是我们输入假注册码的位数,通过下面的跳转发现这里判断输入的注册码是不是9位,如果是的话就继续注册,如果不是则跳转到下面,然后通过retn跳出子程序

16.png

4 ctrl + F2重新载入程序进行调试,这次输入9位数的注册码。当再次运行到004D832B时,由于eax的值是9则相等,ZF标志位为1jne跳转没有实现,则继续执行注册算法

17.png

18.png

5 算法注释如下,通过这段可以知道第一位和第四位之和要大于8,输入的假注册码“123456789”不满足要求,重新载入程序后输入满足要求的注册码继续分析

19.png

6 最后完整的注释如下图

20.png

7 通过对注册算法的反汇编代码的分析,可以得出以下结论:

(1)注册码为9
(2)注册码的第1位和第4之和要大于8
(3)注册码的第134之和的结果除以10的余数必须和注册码的第6位相等
(4)注册码的第2位必须大于5
(5)注册码的第5位必须小于3
(6)除了上面的注册码位数,注册码的其他位没有限制  

三 编写注册机

1 注册机可以用任何一种计算机语言编写,这里就以Microsoft Visual Studio 2005为例2 打开Microsoft Visual Studio 2005,新建一个MFC应用程序

21.png

3 注册机界面如下图

22.png

4 注册机关键代码
[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//定义个变量用于保存注册码的每一位的值
int one, two, three, four, five, six, seven, eight, nine;
 
//给注册码的第位去一个随机值
one = rand() % 10;
//竟然注册码的第位和第位之和大于,那么就取
four = 9 - one;
 
//注册码的第位必须大于,可以就取值为
two = 6;
//注册码的第位必须小于
five = rand() % 3;
 
//注册码的第、、之和的结果除以的余数必须和注册码的第位相等
//先给第位取一个随机
three = rand() % 10;
six = (one + three + four) % 10;
 
//注册码其余位的取值没有限制,取随机值
 seven = rand() % 10;
 eight = rand() % 10;
 nine = rand() % 10;
 
 
CString result;
//格式化字符串
result.Format(_T("%d%d%d%d%d%d%d%d%d"), one, two, three, four, five, six, seven, eight, nine);
 
//将注册码设置到文本框中显示
 m_code.SetWindowTextW(result);


《《《《《《《《《《《《《《《《《《《《《《《《《《《原文结束》》》》》》》》》》》》》》》》》》》》》》》》》》》




ps:原地址:https://blog.csdn.net/qiurisuixiang/article/details/7674463

下一篇




免费评分

参与人数 28吾爱币 +25 热心值 +28 收起 理由
bigbensb + 1 + 1 谢谢@Thanks!
wei5383079 + 1 + 1 我很赞同!
IlMareLJ + 1 谢谢@Thanks!
lx1995 + 1 我很赞同!
叶pp123 + 1 + 1 我很赞同!
Adrian_07 + 1 + 1 谢谢@Thanks!
sunnylds7 + 1 + 1 热心回复!
木木头上 + 3 + 1 这个系列挺好的。已在CSDN关注收藏。谢谢分享。
决心是1231 + 1 + 1 谢谢@Thanks!
xtkj4382 + 1 + 1 我很赞同!
小小小英雄啦 + 1 + 1 谢谢@Thanks!
sjyl1986 + 1 + 1 热心回复!
a13737446797 + 1 + 1 我很赞同!
夜曲 + 1 + 1 热心回复!
高苗苗 + 1 谢谢@Thanks!
九星辰楪 + 1 + 1 谢谢@Thanks!
烈火Leo + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
dazhang357 + 1 + 1 用心讨论,共获提升!
破小白 + 1 + 1 我很赞同!
lookerJ + 1 + 1 谢谢@Thanks!
码怪 + 1 + 1 热心回复!
x34178148 + 1 我穷,但是我还有热心,给你
阿狸的桃子90 + 1 用心讨论,共获提升!
freesoft00 + 1 + 1 我很赞同!
chenjingyes + 1 + 1 谢谢楼主。 能不能来个系列整理贴:lol
成森之林 + 1 + 1 我很赞同!
午夜冲浪 + 1 + 1 热心回复!
Invisiblez + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 涛之雨 发表于 2020-6-14 22:48
为妮儿狂 发表于 2020-6-14 22:01
感觉又是新的一课,大神能否出一期教学呢?我可以提供我单位的软件

delphi的话我也不是很会,勇哥比较擅长
https://www.52pojie.cn/thread-1101407-1-1.html
https://www.52pojie.cn/thread-615448-1-1.html
论坛搜索Delphi的话还是有教程的。。不过貌似没看到有系统的教程。
@冥界3大法王 勇哥不考虑出一个相对通用Delphi的教程?
 楼主| 涛之雨 发表于 2018-7-29 16:52
yy5201314 发表于 2018-7-29 16:42
学习了  希望能继续更新下去

这篇是这个系列的最后一章。
以后看到好的会分享到论坛的。。。
只是不一定什么时候。。。
毕竟这些好一点的帖子
要么就是论坛首发;要么就是已经被转过了。。。
不好找啊
谢谢支持。。有好的帖子一定会拿来分享的
posystorage 发表于 2018-7-28 22:55
soyelgie 发表于 2018-7-28 23:01
我要支持一下,但是还是要好好学学
MIVIP 发表于 2018-7-28 23:01 来自手机
楼主,系列1怎么没有!!
饮①壶浊酒 发表于 2018-7-28 23:22 来自手机
感谢大佬分享
Invisiblez 发表于 2018-7-28 23:31
谢谢楼主。怎么没找到1啊。
tweethu 发表于 2018-7-28 23:35
学个基础,混个眼熟
chenjingyes 发表于 2018-7-29 01:03
谢谢楼主。  能不能来个系列整理贴
吕鼎 发表于 2018-7-29 05:54
谢谢分享 感谢了
yonsen 发表于 2018-7-29 06:04
好文章,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-18 21:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表