• 标 题:《32BITFTP的破解实录》==>让程序成为我们的"注册机"-->申请BCG第二篇 (5千字)
  • 作 者:yuppc
  • 时 间:2001-6-29 18:32:0
  • 链 接:http://bbs.pediy.com

《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