[原創]淺談勝新系列軟體的破解

看雪資料發表於2004-12-28

在脫殼論壇看到有人討論這個軟體,就把我前段時間發在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)

相關文章