• 标 题:[原创]浅谈胜新系列软件的破解
  • 作 者:xy2000
  • 时 间:2004-12-28,13:49
  • 链 接:http://bbs.pediy.com

在脱壳论坛看到有人讨论这个软件,就把我前段时间发在D4E论坛的文章发给大家看看,希望能够让大家对胜新系列软件的破解有所帮助
--------------------------------------------------------------------------------

应一个朋友的要求,说要用胜新生产管理软件网络增强版没有办法,只好再次动手,因为很早以前我就破解过胜新的大多数软件,知道这些软件都是不完整版的你如果想能够正常免费使用,必须要重新编译程序文件.先去下载了胜新的通用生产管理系统7.06网络增强版 ,VFP的程序,没有什么好说的,先拿UNFOXall advance 3.0来反编译程序的主文件sxscgl*.exe,Unfoxall告诉你程序不是一个标准的FOX程序,这些的问题一般都是程序主文件加过壳了,比如说老王的壳和AMING的FOXLOCK(但现在网上好象有通用脱壳机,不过我没有见过,不知道效果怎 么样),拿出我们的工具FOXSPY,将主程序在进程中脱壳的文件抓出来(因为VFP的编译过程是伪编译的,所以主程序脱壳后会在进程中)现在有了在进程中的EXE文件,用FOXSPY反出FOX的APP文件,然后用DM的FOXTOOLS来将APP文件 反编译,这样我们就有了这个软件的源码了,现在用VFP打开你存放反编译文件的文件夹中的SXSCGLZC.SCX然后在正版注册上点一下右键,点代码,就可以看到软件注册的代码.如下

if txxlb=0.or.txxlb=5
=messagebox('您使用的是试用版,请购买后再注册!!!',48,tstitle)
retu
endi 
if dtoc(thisform.zcrq.value)=' . . '
=messagebox('未输入注册日期,不能注册!',48,tstitle)
retu
endi 
if thisform.yhmc.value=""
=messagebox('未输入用户单位名称,不能注册!',48,tstitle)
retu
endi 
if thisform.yhkh.value=0
=messagebox('未输入用户卡好,不能注册!',48,tstitle)
retu
endi 
if empty(thisform.zcm1.value).or.empty(thisform.zcm2.value).or.empty(thisform.zcm3.value)
=messagebox('未输入注册码或注册码输入不全,不能注册!',48,tstitle)
retu
endi 

tzcrq=date()
tdqsyrq=date()
tsycs=1
txlh=0
tbbzt=0
tsfzc=0
txxlb=0

*************xtjc1*********************
dqmmfile=allt(dqpath)+"\czy\"+"a809.ba"
if !file('&dqmmfile')
=messagebox('软件进入异常中断,请向胜新软件发电子邮件求助,本软件技术支持EMAIL:sxsoft@china.com',48,tstitle)
quit
endi 
restore from &dqmmfile addi
dqyhmc=allt(thisform.yhmc.value)
dqyhkh=thisform.yhkh.value
dqzcrq=thisform.zcrq.value
dqzcm=allt(thisform.zcm1.value)+"-"+allt(thisform.zcm2.value)+"-"+allt(thisform.zcm3.value)
tzcmxs1=0
tzcmxs2=0
tzcmxs3=0
dqyhkh=allt(str(dqyhkh))
do case
case tbblb=1
tzcmxs1=47
tzcmxs2=54
tzcmxs3=16
case tbblb=2
tzcmxs1=15
tzcmxs2=45
tzcmxs3=65
case tbblb=3
tzcmxs1=82
tzcmxs2=33
tzcmxs3=67
case tbblb=4
tzcmxs1=74
tzcmxs2=88
tzcmxs3=99
case tbblb=5
tzcmxs1=92
tzcmxs2=39
tzcmxs3=10
case tbblb=6
tzcmxs1=11
tzcmxs2=34
tzcmxs3=66
case tbblb=7
tzcmxs1=17
tzcmxs2=19
tzcmxs3=23
case tbblb=8
tzcmxs1=27
tzcmxs2=28
tzcmxs3=39
case tbblb=9
tzcmxs1=29
tzcmxs2=30
tzcmxs3=13
endc
tzcm1=0
for i=1 to len(dqyhmc)
tzcm1=tzcm1+asc(subs(dqyhmc,i,1))
endf
tzcm1=tzcm1*tzcmxs1
if len(allt(str(tzcm1)))>=4
tzcm1=subs(allt(str(tzcm1)),1,4)
else
tzcm1=allt(str(9999-tzcm1))
endi
tzcm2=0
for i=1 to len(dtoc(dqzcrq))
tzcm2=tzcm2+asc(subs(dtoc(dqzcrq),i,1))
endf
tzcm2=tzcm2*tzcmxs2
if len(allt(str(tzcm2)))>=4
tzcm2=subs(allt(str(tzcm2)),1,4)
else
tzcm2=allt(str(9999-tzcm2))
endi 
tzcm3=0 
for i=1 to len(allt(dqyhkh))
tzcm3=tzcm3+asc(subs(allt(dqyhkh),i,1))
endf
tzcm3=tzcm3*tzcmxs3
if len(allt(str(tzcm3)))>=4
tzcm3=subs(allt(str(tzcm3)),1,4)
else
tzcm3=allt(str(9999-tzcm3))
endi 
cszcm=allt(tzcm1)+"-"+allt(tzcm2)+"-"+allt(tzcm3)

if allt(cszcm)<>allt(dqzcm)
=messagebox('您录入的注册信息与注册码不对应,不能注册成功,只有只有严格按胜新软件提供的注册信息及注册码录入才能注册成功!',48,tstitle)
retu
endi 
******xtjc2****************************
hyfile=dqpath+"\czy\0830.dat"
if !file('&hyfile')
=messagebox('软件进入异常中断,请向胜新软件发电子邮件求助,本软件技术支持EMAIL:sxsoft@china.com',48,tstitle)
quit
endi 
sele 80
zhmuf=rat('',hyfile)
file_Temp=iif(zhmuf<>0,subs(hyfile,zhmuf+1),hyfile)
path_temp=iif(zhmuf<>0,subs(hyfile,1,zhmuf),hyfile)
thisform.Vfpjmdbf1.jiemi_file=file_Temp
thisform.Vfpjmdbf1.path_ml=path_temp 
set excl off
Thisform.Vfpjmdbf1.mtablealias=""
thisform.vfpjmdbf1.pass_kl=dqzcmm
thisform.Vfpjmdbf1.jiEmi
if thisform.Vfpjmdbf1.jmcgyf
hydbf=Alias()
sele &hydbf
copy to defg.dbf
sele yhxx
repl yhmc with allt(dqyhmc)
sele 110 
use defg.dbf 
repl yhmc with dqyhmc
repl zcrq with dqzcrq
repl yhkh with val(dqyhkh)
repl zcm with dqzcm
jmfile=allt(dqpath)+"\defg.dbf"
zhmuf=rat('',jmfile)
path_temp=iif(zhmuf<>0,subs(jmfile,1,zhmuf),jmfile) 
thisform.Vfpjmdbf1.path_ml=path_temp
thisform.Vfpjmdbf1.jiami_file='' 
use (jmfile)
Thisform.Vfpjmdbf1.mtablealias=""
thisform.vfpjmdbf1.pass_kl=dqzcmm
thisform.Vfpjmdbf1.jiami 
use
jmfile1=allt(dqpath)+"\defg.dat"
copy file &jmfile1 to &hyfile 
dele file &jmfile 
dele file &jmfile1 
use
else
=messagebox('软件进入异常中断,请向胜新软件发电子邮件求助,本软件技术支持EMAIL:sxsoft@china.com',48,tstitle)
quit
endi 
=messagebox('软件注册成功,软件将自动关闭,请重新登录软件!',48,tstitle)
quit
看到这里时你可能会以为只要按照上面的注册算法,就可以算出自己的注册码,那你就错了,因为在网上下载的是试用版,在注册代码第一行说明了tsxlb这个变量是0或者5的时候,程序在注册页面不论你输入正确还是不正确的注册码都会跳出你使用的是试用版,请 购买后再注册,这样我们是不是就没有办法了呢,也不是的,我们可以把最上面的一段IF语句去掉后,再用算出的注册码来注册就会显示注册成功,但我想想反正在网上下载的是试用版,这个注册过程直接就给去掉了,换成一句messagebox(软件已经注册,请 使用吧.',48,tstitle)让这个注册页面根本没有什么作用,但这样你在使用的时候还需要将软件中其它的一些单据输入的表单全部都要做一些改动的,因为你可以用VFP打开例如入库单,出库单时都可以看到这样的代码,如下:
if jccs>100
ts100="您使用的是试用版软件,最多可以保存100张单据,您已超过试用张数,如需要长期 使用本软件请赶快购买并注册本软件,购买办法请查阅软件注册窗口!"
=messagebox('&ts100',48,tstitle)
retu
else
ts100="您使用的是试用版软件,最多可以保存100张单据,您现在保存的是第"+allt(str(jccs))+"张单据,如需要长期使用本软件请赶快购买并注册本软件,购买办法请查阅软件注册窗口!"
=messagebox('&ts100',48,tstitle) 
endi
if tsycs>20
=messagebox("本软件最多可以免费试用20天次,您已经超过本软件免费试用期。请赶快购买并注册本软件,注册后您可以长期使用本软件。购买及注册办法详见软件注册功能。",48,tstitle)
RETU
ENDI

这里会让你在使用中还是会跳出要注册的东西,为了不让他跳出来,我们把上面的JSSC>100改为JSSC>1000000,tsycs>20改为tsycs>20000(当然你也可以改成更大的数字,看你喜欢吧)
在将所有有这样的代码的表单全部改过后,再重新编译(记得FOXTOOLS有一个选项是重新REBUILD.PRG文件吗?就是编译这个,具体的VFP编译方法我就不在这里解释了,有不懂的朋友可以在论坛PM我,还有在编译时会出现一些错误提示,这是因为 你所编译的文件和程序原始所编译的文件不在同样的目录中,只要你将存放反编译出为的文件的目录和盘符和出错提示中的改为一致就没有这些错误了(当然这是在我的机器上,如果在你的机器有什么错误提示没有解决,大家可以发给我,我来帮你解决).这里只是对VF P程序的破解做个抛砖引玉,希望大家能够有更好的办法.
上文提到的工具大家可以到看雪论坛的主页去下载(看雪论坛http://www.pediy.com)