《32BITFTP的破解实录》===>让程序成为我们的"注册机"
破解作者:yuppc
破解时间:2001年6月29日
破解难度:易
注:(转载希望保持完整,文章归CCG、BCG、FCG所有)
软件概述:
1>软件名:32bitFTP(V p9.30.06)
2>软件作用(摘):介绍:这是一个强大的Internet工具,有着小巧的身体,但同样有着完美的功能,是上传/下载的FTP好工具.(支持命令模式,有丰富的状态显示)
3>评:这是一个非常好的网络软件,
4>未注册软件只有三十天的使用期,但它也是共享版中较友善的软件之一(启动时有NAG框).
5>主页:http://www.ElectraSoft.com/ or http://www.blkbox.com/~jonk/
email: FaxMail@ElectraSoft.com or jonk@blkbox.com
破解原因:昨天BCG老大要求我上传两个(关于"推箱子"游戏)的文件,我用IE传着传着就死机了(不明身份的原因:-).接着开始寻找上传FTP软件,得到了它,可是太可恶了,好象有人动过这个软件(启动时便显示注册码,并注册成功,但第二次启动时又要求注册,显示注册码错误),好到软件主页去DOWNLOAD一个原版的,……!!
破解目的:为加入CCG奋斗!(其实很多自我验证的软件都可以成为自身的注册机,只是看如何找到切入点了)
破解工具:
1>w32asm大老专版 ====>反汇编工具
2>SOFTice4.0 =====>动态调试工具
3>Hex shop =====>十六进制编辑器
4>Find 、Note =====>WINDOWS自带的查找工具
6>眼镜一副 =====>(原因:程序的字太小,保护眼睛) (有人向我扔番茄,接住----吃)^>^
破解方法:静态查找、动态分析!(让自我验证的软件都可以成为自身的注册机)
破解开始:
1>用W32asm打开32bitFTP.exe,发现其调用文件32bitftp.ini;
2>查找文件32bitftp.ini,并且发现了(它保存了你使用时要登陆的FTP地址和……):
32bitftp.ini文件部分内容(文件位置C:\WINDOWS\):
[Configure] =======>主要的设置段
CurrentRegisterName=yuppc =====>注册名
CurrentRegisterEmailAddr=one@one.net =====>注册E-MAIL
CurrentEmailAddress=one@one.one =====>当前E-MAIL地址
CurrentUserStatus=3033353C3B3E =====>最近输入的注册码(正确注册后注册码存放位,可是明码存放呀,不注册可没有呀)
CurrentUserTmpReg=06060417 =====>假注册码(未注册时显示的临时注册码)
CurrentSession=ftp://202.xxx.xxx.xxx =====>最近连接的站点(绝密,哈)
CurrentViewer=
ThisProgramDir=D:\32BITFTP\ =======>安装目录
3>好很明显了,打开Loader,开始动态跟踪;
4>输入注册名\假E-MAIL地址\假注册码,设断hmemcpy进行跟踪;
5>跟踪到下面:
:004030F7 BF54154800 mov edi,
00481554 ======>真确注册码
:004030FC BE541E4800 mov esi,
00481E54 ======>假注册码
注:在这打命令---d edi,发现正确注册码3033353C3B3E;
6>其实到这就可以看到真假注册码了,但是……(我还要加入BCG呢,不能停)
接着看下面源码分析:
:00403101 33D2
xor edx, edx
:00403103 F3A6
repz cmpsb ======>循环比较
:00403105 0F85B2000000 jne 004031BD
=======>关键跳(1),不对就跳
:0040310B BF54154800 mov edi,
00481554 ======>正确注册码地址
:00403110 83C9FF
or ecx, FFFFFFFF
:00403113 F2
repnz
:00403114 AE
scasb
:00403115 F7D1
not ecx
:00403117 49
dec ecx ======>ECX是真确注册码字符个数
:00403118 BF541E4800 mov edi,
00481E54 =======>假注册码地址(重点A)
^^^^^^^^
:0040311D 8BD1
mov edx, ecx ====>真注册码字符个数传到EDX中
:0040311F 83C9FF
or ecx, FFFFFFFF
:00403122 F2
repnz
:00403123 AE
scasb
:00403124 F7D1
not ecx
:00403126 49
dec ecx ========>ECX中是假注册码字符个数
:00403127 3BCA
cmp ecx, edx =====>假真注册码字符个数比较
:00403129 0F858E000000 jne 004031BD
====>关键跳(2),不对就跳
:0040312F BF541E4800 mov edi,
00481E54 ====>将输入(假)注册码地址传给EDI(重点B)
^^^^^^^^
:
:
7>接下来软件开始调用文件32BITFTP.INI,并且把输入(假)注册码写入文件32BITFTP.INI(开始面有分析地址),以方便软件启动时的CRC校验(关键呀).
:
:
* Possible StringData Ref from Data Obj ->"32BITFTP.INI" ===>磁盘文件(C:\WINDOWS\32BITFTP.INI)
|
:0040313D 680CF94500 push 0045F90C
:
:
* Possible StringData Ref from Data Obj ->"CurrentUserStatus" ====>存放CODE的地方(上面提到过)
|
:00403157 68B0F94500 push 0045F9B0
:0040315C 83E103
and ecx, 00000003
* Possible StringData Ref from Data Obj ->"Configure" =====>(分支目的地)
|
:0040315F 6854F94500 push 0045F954
:00403164 F3
repz
:00403165 A4
movsb
:00403166 C705C03A480001000000 mov dword ptr [00483AC0], 00000001
* Reference To: KERNEL32.WritePrivateProfileStringA, Ord:02E5h =====>写入调用
^^^^^^^^^^|^^^^^^^^^^^^^^^
:00403170 FF1524324400 Call dword ptr
[00443224]
* Possible StringData Ref from Data Obj ->"32bit FTP"
|
:00403176 683CFE4500 push 0045FE3C
* Possible StringData Ref from Data Obj ->"Thank you for registering "
====>成功注册提示(+我们的目的地+)
|
:0040317B 68F0E64400 push 0044E6F0
8>知道我要做什麽了吧(想一下,如果软件自动将正确的注册码写如文件32BITFTP.INI那有多棒);
9>动手(你的最爱):改动“关键跳(1)”、“重点A”、“重点B”
地址403105的0F85B2000000改为909090909090
===>不许跳
地址403118的BF541E4800改为BF54154800
====>改成真正注册码地址
地址40312F的BF541E4800改为BF54154800
====>改成真正注册码地址
10>运行程序进行注册,成功注册后打开C:\WINDOWS\32bitFTP.ini文件,看看[Configure]中的CurrentRegisterName和CurrentUserStatus,是不是注册名和注册吗!
:-)
11>总结:如此以来,我们就可以用软件自身作为注册机,任选注册名了!!(其实很多自我验证的软件都可以成为自身的注册机,只是看如何找到切入点了)
12>收工.
--------------作者:yuppc----------2001.6.29
- 标 题:《32BITFTP的破解实录》==>让程序成为我们的"注册机"-->申请BCG第二篇 (5千字)
- 作 者:yuppc
- 时 间:2001-6-29 18:32:0
- 链 接:http://bbs.pediy.com