老文章档案 · 2003 年

小护士 V1.52简单算法分析

破解教程 · 算法分析 · 2003-09-19 · 作者:人气: · 出处:赢政天下整理收藏)

软件名称:

小护士 V1.52简单算法分析

软件简介:

软件大小: 759 KB

软件语言: 简体中文

软件类别: 国产软件 / 共享版 / 开关定时

应用平台: WinNT/2000/XP

界面预览: 无

加入时间: 2003-04-03 10:23:23

下载次数: 1117

推荐等级:

联 系 人: yyllyy@sohu.com

开 发 商: http://yhh365.3322.net/

软件介绍:

本软件主要为那些一坐在电脑前就不要命的人设计。主要功能为每半小时就关闭屏幕、锁定键盘3分

钟,促使你休息。关闭前10-120秒提醒你,可提醒两次。工作期间有5分钟不用电脑视为已休息,重新计

时。注册用户可以调整工作和休息时间长短,并且以后自动按你的设定运行。目前,在WINDOWSNT/2000/

XP上稳定运行,在WINDOWS9X上可提醒你休息,没锁定键盘

下载地址:

http://www.skycn.com/soft/11505.html

------------------------------------------------------------

破解作者:

yzez[DFCG]

破解工具:

regsnap(filemon)、ollydbg1.09b、破解环境:WINXP系统

破解目的:

初学破解,交流经验。

------------------------------------------------------------

[破解过程]

详细过程:

1、我原不知道这个软件,一个朋友下载了一个,要我帮他看一看能否注册,我就试了一试,这个软件的

算法超级简单,难在如何找到关键断点,因为该软件输入注册信息后,没有任何提示信息,软件直接退出

,用W32DASM找有用信息,看来是不行了。

2、先运行regsnap新建一个快照,保存。点开小护士 V1.52,输入注册信息,点确定程序自动退出,再运

行regsnap新建一个快照,然后将两个快照比较,我们可以发现新增了一个键值:HKEY_USERS\S-1-5-21-79

6845957-1364589140-725345543-1003\Software\Microsoft\MS Setup (ACME)\User Info\DefName

打开注册表编辑器,找到这个键值:DefCompany"="yzez[DFCG]"

"DefName"="911000888",由此可见,不管软件正确注册与否,都会在注册表中写进信息,如果注册失败,会在

注册表中写进"DefName"="911000888",如果软件正确注册,会在注册表中写入什么信息呢?暂时不管,但是

我们已经找到了破解的思路,就是要在软件对注册表进行操作时设下断点。

3、好了,我们已经找到了门路,开工吧!运行ollydbg1.09b,点File---open,载入小护士V1.52,现在程

序已被ollydbg载入了吧,现在我们要设置好断点,如何设?跟我来,右键在ollydbg左上窗口右键单击,

就会出现一个窗口,我们选:Seach for---Name(label) in current module(快捷键是:Ctrl+N),又会出

现一个窗口:Names in Nurse,在这里我们往下找,要找到这一行:RegopenkeyExA---在这里会打开注册

表进行读写操作。在这一行上我们点一下,这一行的颜色变了吧!变了我们就直接按Enter键,又会弹出

一个窗口:References in Nurse:.text to ADVAPI32.RegOpenkeyExA,

0040460A CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyExA>] ADVAPI32.RegOpenKeyExA

00404B8F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyExA>] ADVAPI32.RegOpenKeyExA

00405BCF CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyExA>] ADVAPI32.RegOpenKeyExA

0040637B CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyExA>] ADVAPI32.RegOpenKeyExA

00406A27 CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyExA>] ADVAPI32.RegOpenKeyExA

我们要在这里全部设下断点,如何设?我们在这个窗口右键单击,会出现一个信息框,选中:Set break

point on every command,单击,这五个CALL就全设断了,然后回到ollydbg的主界面,按F9程序运行,第一

次中断,没有出现注册窗口,按F2取消这个断点,继续按F9,第二次还是没有出现注册窗口,再按F2取消

这个断点,继续按F9,第三次终于出现了注册窗口,输入注册信息,点确定,程序会被中断下来:

00405AFF 90 NOP

00405B00 . 6A FF PUSH -1

00405B02 . 68 66824000 PUSH Nurse.00408266 ; SE handler installation

00405B07 . 64:A1 0000000>MOV EAX, DWORD PTR FS:[0]

00405B0D . 50 PUSH EAX

00405B0E . 64:8925 00000>MOV DWORD PTR FS:[0], ESP

00405B15 . 81EC 0C010000 SUB ESP, 10C

00405B1B . 53 PUSH EBX

00405B1C . 56 PUSH ESI

00405B1D . 57 PUSH EDI

00405B1E . 8BF1 MOV ESI, ECX

00405B20 . 6A 01 PUSH 1

00405B22 . E8 BB1B0000 CALL <JMP.&MFC42.#6334>-------找注册算法在此设断!

00405B27 . 8B56 60 MOV EDX, DWORD PTR DS:[ESI+60]

00405B2A . 8D4C24 0C LEA ECX, DWORD PTR SS:[ESP+C]

00405B2E . 81F2 3412AB78 XOR EDX, 78AB1234

00405B34 . 8956 60 MOV DWORD PTR DS:[ESI+60], EDX

00405B37 . E8 941B0000 CALL <JMP.&MFC42.#540>

00405B3C . 8B46 64 MOV EAX, DWORD PTR DS:[ESI+64]

00405B3F . 8B4E 60 MOV ECX, DWORD PTR DS:[ESI+60]

00405B42 . 33DB XOR EBX, EBX

00405B44 . 3BC1 CMP EAX, ECX

00405B46 . 899C24 200100>MOV DWORD PTR SS:[ESP+120], EBX

00405B4D . 75 11 JNZ SHORT Nurse.00405B60-------此处修改可暴破!

00405B4F . 68 F84FB527 PUSH 27B54FF8--------十进制值是:666193912,把此值写入注册表,注册成功!

00405B54 . 8D4C24 10 LEA ECX, DWORD PTR SS:[ESP+10]

00405B58 . 68 10C44000 PUSH Nurse.0040C410 ; ASCII "%d"

00405B5D . 51 PUSH ECX

00405B5E . EB 0F JMP SHORT Nurse.00405B6F

00405B60 > 68 38C54C36 PUSH 364CC538

00405B65 . 8D5424 10 LEA EDX, DWORD PTR SS:[ESP+10]

00405B69 . 68 10C44000 PUSH Nurse.0040C410 ; ASCII "%d"

00405B6E . 52 PUSH EDX

00405B6F > E8 FE1B0000 CALL <JMP.&MFC42.#2818>

00405B74 . 8B4424 18 MOV EAX, DWORD PTR SS:[ESP+18] ; Nurse.00409FE8

00405B78 . 83C4 0C ADD ESP, 0C

00405B7B . 8D4C24 18 LEA ECX, DWORD PTR SS:[ESP+18]

00405B7F . 50 PUSH EAX ; /<%s> = 00000009 ???

00405B80 . 68 F8C44000 PUSH Nurse.0040C4F8 ; |format = "%s"

00405B85 . 51 PUSH ECX ; |s = 003E40B8

00405B86 . FF15 B4944000 CALL DWORD PTR DS:[<&MSVCRT.sprintf>] ; \sprintf

00405B8C . 83C4 0C ADD ESP, 0C

00405B8F . E8 7A1C0000 CALL <JMP.&MFC42.#1158>

00405B94 . 8B10 MOV EDX, DWORD PTR DS:[EAX]

00405B96 . 8D4424 18 LEA EAX, DWORD PTR SS:[ESP+18]

00405B9A . 50 PUSH EAX

00405B9B . 8D4C24 14 LEA ECX, DWORD PTR SS:[ESP+14]

00405B9F . 895424 14 MOV DWORD PTR SS:[ESP+14], EDX

00405BA3 . E8 221B0000 CALL <JMP.&MFC42.#860>

00405BA8 . 8B4C24 10 MOV ECX, DWORD PTR SS:[ESP+10]

00405BAC . 8D5424 14 LEA EDX, DWORD PTR SS:[ESP+14]

00405BB0 . 52 PUSH EDX ; /pHandle = 0012E7A0

00405BB1 . 68 06000200 PUSH 20006 ; |Access = KEY_WRITE

00405BB6 . 8B41 F8 MOV EAX, DWORD PTR DS:[ECX-8] ; |

00405BB9 . 53 PUSH EBX ; |Reserved = 0

00405BBA . 68 E0C34000 PUSH Nurse.0040C3E0 ; |Subkey = "Software\\Microsoft\\MS Setup (ACME)\\User Info"

00405BBF . 68 01000080 PUSH 80000001 ; |hKey = HKEY_CURRENT_USER

00405BC4 . C68424 340100>MOV BYTE PTR SS:[ESP+134], 1 ; |

00405BCC . 8D78 01 LEA EDI, DWORD PTR DS:[EAX+1] ; |

00405BCF . FF15 10904000 CALL DWORD PTR DS:[<&ADVAPI32.RegOpen>; \RegOpenKeyExA--中断在此

00405BD5 . 3BC3 CMP EAX, EBX------这里是一个比较

00405BD7 . 74 10 JE SHORT Nurse.00405BE9----相等就跳,跳就成功,试改一下,je

00405BD9 . 53 PUSH EBX 改JNZ,按F8几下,程序运行,没有注册界面!

00405BDA . 53 PUSH EBX

00405BDB . 68 D8C44000 PUSH Nurse.0040C4D8

00405BE0 . 8BCE MOV ECX, ESI

00405BE2 . E8 571C0000 CALL <JMP.&MFC42.#4224>

00405BE7 . EB 44 JMP SHORT Nurse.00405C2D

00405BE9 > 8B4C24 14 MOV ECX, DWORD PTR SS:[ESP+14]

00405BED . 8D4424 18 LEA EAX, DWORD PTR SS:[ESP+18]

00405BF1 . 57 PUSH EDI ; /BufSize = A (10.)

00405BF2 . 50 PUSH EAX ; |Buffer = 00000009

00405BF3 . 6A 01 PUSH 1 ; |valueType = REG_SZ

00405BF5 . 53 PUSH EBX ; |Reserved = 0

00405BF6 . 68 D0C44000 PUSH Nurse.0040C4D0 ; |valueName = "DefName"

00405BFB . 51 PUSH ECX ; |hKey = 3E40B8---在此把注册信息写入注册表中

00405BFC . FF15 08904000 CALL DWORD PTR DS:[<&ADVAPI32.RegSetV>; \RegSetvalueExA

00405C02 . 3BC3 CMP EAX, EBX

00405C04 . 74 10 JE SHORT Nurse.00405C16

00405C06 . 53 PUSH EBX

00405C07 . 53 PUSH EBX

00405C08 . 68 B0C44000 PUSH Nurse.0040C4B0

00405C0D . 8BCE MOV ECX, ESI

00405C0F . E8 2A1C0000 CALL <JMP.&MFC42.#4224>

00405C14 . EB 17 JMP SHORT Nurse.00405C2D

00405C16 > 8B5424 14 MOV EDX, DWORD PTR SS:[ESP+14]

00405C1A . 52 PUSH EDX ; /hKey = 0012E7A0

00405C1B . FF15 18904000 CALL DWORD PTR DS:[<&ADVAPI32.RegClos>; \RegCloseKey

00405C21 . 395E 64 CMP DWORD PTR DS:[ESI+64], EBX

00405C24 . 74 07 JE SHORT Nurse.00405C2D

00405C26 . 8BCE MOV ECX, ESI

00405C28 . E8 D31A0000 CALL <JMP.&MFC42.#4853>

00405C2D > 8D4C24 10 LEA ECX, DWORD PTR SS:[ESP+10]

00405C31 . 889C24 200100>MOV BYTE PTR SS:[ESP+120], BL

00405C38 . E8 BB190000 CALL <JMP.&MFC42.#800>

00405C3D . 8D4C24 0C LEA ECX, DWORD PTR SS:[ESP+C]

00405C41 . C78424 200100>MOV DWORD PTR SS:[ESP+120], -1

00405C4C . E8 A7190000 CALL <JMP.&MFC42.#800>

00405C51 . 8B8C24 180100>MOV ECX, DWORD PTR SS:[ESP+118]

00405C58 . 5F POP EDI

00405C59 . 5E POP ESI

00405C5A . 5B POP EBX

00405C5B . 64:890D 00000>MOV DWORD PTR FS:[0], ECX

00405C62 . 81C4 18010000 ADD ESP, 118

好爽!我们终于找到了关键断点,现在找一找它的注册算法处:我们往上找,找到这里:

00405B22 . E8 BB1B0000 CALL <JMP.&MFC42.#6334>----------在此CALL设断,再一次调试,输入注册信息:12345678,点确定被中断

00405B27 . 8B56 60 MOV EDX, DWORD PTR DS:[ESI+60]----EDX的值是多少?315357FC,十进制是:827545596这正是我的机器识别码

00405B2A . 8D4C24 0C LEA ECX, DWORD PTR SS:[ESP+C]

00405B2E . 81F2 3412AB78 XOR EDX, 78AB1234-----XOR 常数:78AB1234,EDX的值是:49F845C8,十进制值是:1241007560

00405B34 . 8956 60 MOV DWORD PTR DS:[ESI+60], EDX

00405B37 . E8 941B0000 CALL <JMP.&MFC42.#540>------在这里做内存注册机

00405B3C . 8B46 64 MOV EAX, DWORD PTR DS:[ESI+64]

00405B3F . 8B4E 60 MOV ECX, DWORD PTR DS:[ESI+60]

00405B42 . 33DB XOR EBX, EBX

00405B44 . 3BC1 CMP EAX, ECX-----比较,EAX是:BC614E(12345678我输入的注册假码),EDX的值是:49F845C8

00405B46 . 899C24 200100>MOV DWORD PTR SS:[ESP+120], EBX

00405B4D . 75 11 JNZ SHORT Nurse.00405B60----不相等就跳,跳就失败!

跳到此处:

00405B60 > 68 38C54C36 PUSH 364CC538-----十进制值是:911000888,这个值写入注册表中就失败,那么EDX的值就是我们的注册码了!

00405B65 . 8D5424 10 LEA EDX, DWORD PTR SS:[ESP+10]

00405B69 . 68 10C44000 PUSH Nurse.0040C410 ; ASCII "%d"

00405B6E . 52 PUSH EDX

好了!终于结束!

3、算法总结:注册码=机器识别码的十六进制值 XOR 常数78AB1234转化为十进值就是注册码!

4、内存注册机:中断地址:405B37,中断次数:1,第一字节:E8, 指令长度:2,寄存器方式,EDX,选中十进制。

破解小结:

这个算法超级简单,所以我想重点应该在如何找到关键断点上。

(出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史