辛苦寫的程式一下被破解了,那種感覺真的是很XXX....
目前有很多加殼程式,但只要遇到低階語言高手,還是會被破解,只是多花點時間而已,所以我花了幾天,設法在高階語言上造成破解障礙。
一般來說破解者常用的方是就是修改程式內的日期,讓程式以為還沒到期,或是用跳躍的方式,讓程式跳過驗證序號或是日期的那一段函數,所以不管設多少關卡,只要破解者有耐心一一跳過,還是可以破解成功的,況且設太多關卡,對撰寫者來說也是一種困擾。
程式的執行是具有連續性的,某個動作後發生某個事件,這也讓破解人只要依著順序去找出關鍵位置就能輕易跳過,所以這個位置就是雙方鬥智的關鍵。
我想到的方法必須依賴到網路伺服器做驗證,一旦驗證端是在程式內,無論如何都會被跳過,所以改由伺服器來做驗證,以日期來說,程式先送軟體過期日給伺服器,這時第一個問題來了,破解者可以輕易的變造這個日期,所以日期在傳送之前必須先經過加密,例如
myDate:= 'alsdkfjsks233+==';
SendmyDate(myDate); ////傳送到伺服器
伺服器收到後做解密的動作然後進行驗證,關鍵就在此處,如果伺服器驗證後傳回布林值或是其他帶碼,程式收到後勢必還需要再做判斷,例如
if serverBack = true then 驗證過關 else 驗證失敗
像這樣判斷,一下子就被破解了,破解者只要直接跳到驗證成功,程式就會正常的執行下去,所以在程式中不可出現像這樣的判斷,我的作法是伺服器直接傳回Event名稱。
舉例來說,假設程式是寫在一個Timer的onTimer上,那麼這個Timer的EventName就由伺服器回傳,也就是說必須在程式中有兩個onTimer事件,一個是驗證過關 onGoodTimer ,一個是驗證失敗 onBadTimer ,而Timer在初始狀態下是不賦予任何事件的(也可以先賦予失敗事件),當伺服器驗證失敗後,直接傳 "onBadTimer" 回來,然後直接將這個字串所代表的事件賦予Timer,注意,千萬不要寫成
if serverBack = 'onBadTimer' then xxx (這跟前面沒兩樣)
必須直接賦予,代碼如下
procedure TmainForm.ExecMethod(OnObject: TObject; MethodName: string) ;
var
Routine: TMethod;
begin
//事件所在位置是mainForm,所以OnObject指定為mainForm
myTimer.OnTimer:= nil;
Routine.Data := Pointer(OnObject);
Routine.Code := OnObject.MethodAddress(MethodName) ; //由mainForm調出事件的指標位置
myTimer.OnTimer:= TNotifyEvent(Routine);
end;
執行:
ExecMethod(mainForm, ServerBack);
這樣一來,即使破解者跳過驗證這一段,Timer也無法得到正確的Event而變成沒有作用,即使破解者知道這個作法,也必須從你的程式碼中找出正確的事件來,這會讓他們很頭痛,況且他不一定會朝這方面去想,更增加了破解難度,如果再加上CodeVisual或Themida這種難纏的殼,軟體被破解的機率就比較小了。
由於Pascal跟C++是屬於編譯型程式,所以無法把ASC碼當作機械碼用,如果是直譯型程式(如Flash, JavaScript),用這方式就更方便了,甚至可以將整個Function放在Server,回傳時只要調用Eval函數轉換即可。
2008年8月19日 星期二
該逃的時後要快逃
就在打完上一篇文後,跟我表妹在MSN起了一番不小的爭論,似乎是讓她覺得有(受傷)的感覺,她最後說:「男人買單付帳是一種禮貌」,我說:「那女人讓男人娶二房納小妾,也該算是一種傳統禮貌嘍?」,她無話可駁的怒氣似乎從電腦裡飄出來,其實這個爭論一開始時我就有想結束逃開的念頭,但終究還是被那時的情緒淹沒,"爭論"某方面就代表著敵對,實際上除了破壞感情外,並沒有實質的好處。
沒有人能從爭論中改變對方,這是早有科學根據的事,儘管其中一方論點正確且發自善意,也不可能有好結果,試想,去跟一個每天泡在麥當勞的小五生爭論,麥當勞吃多了到底怎麼不好,就算你的舉證再有理,他也會誓死捍衛麥當勞甚至不惜跟你翻臉,其實他心理知道你是對的,但絕不會在當下有任何妥協,即使吃到得心臟病,他也不會想聽到你講:「你看吧...當初告訴你...」。
有些事情必須隨著時間的消逝才能有所體會,工地裡打零工的老工人,或許某天醒來,才真正體會到母親為何叫他好好唸書。
每個人都有自己的人生體驗,聰明的人之所以愛看書,是因為在書中可以縱情想像並體驗別人的人生,胸中的體驗多了,對於人生的視野自然更加遼闊。
然而要將別人的經驗融化成自我的氣質卻不是容易的事,只有不斷的自我檢視與思考,否則,書仍就是書,別人終究是別人。
我想,明天,我會去跟我那氣呼呼的表妹道歉,把 "請對自己沒意思(又不算朋友)的女人吃飯是冤大頭行為" ,改為 "沒事請妳吃飯的一定不安好心",她或許就接受了。
這個爭論,我有所得,希望她也是....
沒有人能從爭論中改變對方,這是早有科學根據的事,儘管其中一方論點正確且發自善意,也不可能有好結果,試想,去跟一個每天泡在麥當勞的小五生爭論,麥當勞吃多了到底怎麼不好,就算你的舉證再有理,他也會誓死捍衛麥當勞甚至不惜跟你翻臉,其實他心理知道你是對的,但絕不會在當下有任何妥協,即使吃到得心臟病,他也不會想聽到你講:「你看吧...當初告訴你...」。
有些事情必須隨著時間的消逝才能有所體會,工地裡打零工的老工人,或許某天醒來,才真正體會到母親為何叫他好好唸書。
每個人都有自己的人生體驗,聰明的人之所以愛看書,是因為在書中可以縱情想像並體驗別人的人生,胸中的體驗多了,對於人生的視野自然更加遼闊。
然而要將別人的經驗融化成自我的氣質卻不是容易的事,只有不斷的自我檢視與思考,否則,書仍就是書,別人終究是別人。
我想,明天,我會去跟我那氣呼呼的表妹道歉,把 "請對自己沒意思(又不算朋友)的女人吃飯是冤大頭行為" ,改為 "沒事請妳吃飯的一定不安好心",她或許就接受了。
這個爭論,我有所得,希望她也是....
"性"是起點還是終點
在台灣,如果一個女子跟認識兩天的人上床(兩頓晚餐...或一頓),可能會被說成隨便或不檢點(到底要多久,目前還沒一個說法)。
不過以數學的角度來看的話,求出結果的空間才會更大,根據統計,一個人要遇到完全適合自己的另一半,其機率是五十萬分之一(偏偏台灣偶像劇裡的都能註死遇到),也就是說,倒楣一點的人,必須跟四九萬九千九百九十九人約會後,才會遇到。
什麼叫完全適合呢?可粗分兩種,生理跟心理,心裡的契合決不是兩頓晚餐可以知道的(有些人一輩子都不知道),但生理的契合呢,二十分鐘就知道了。
洋片常見的橋段是前一幕還在說Hello...下一幕就到了床上(慾望城市這種橋段最多),如果對方有怪癖,例如性虐待,男方不舉,或女方沒感覺,隔天大家就ByeBye了,雖然看起來很濫情,但卻絕對有利於雙方(運動嘛..),因為如果進入了心靈層次,那麼生理上的不契合就會產生痛苦(為了愛情、其他都可以忍..)...
台灣(中國)男人,常把性當作終點,好像跟他上過床,就變成"他的人",漸漸的形象沒了、禮貌沒了、幽默風趣也沒了,根據專家統計,台灣失戀被甩的男人其痛苦指數非常高,因失戀而做出蠢事的比例更是高過於女性,其實造成這樣的痛苦,跟本與愛情無關,其痛苦的根源來自於自己的財產被奪,甚至幻想出別人正在"享用"他財產的畫面,熟可忍,熟不可忍啊,古今中外皆然...
把性當作起點來認識對方,在東方的道德裡似乎很難被接受,但在問題的解決上卻是合理的,生理與心靈,對雙方而言,本身就是存在的未知數,就程式來說叫變數,能夠儘速求出值的變數,何必拖時間呢。
台灣(中國)的女性較注重階段性,認為每一階段都有其必要性,從牽手的臉紅心跳到床上的底死纏綿,不能太快,需得細火慢熬才能領會箇中滋味,但就我個人覺得28歲以後的女性就不適合這一套了,如果花了半年享受這種感覺,最後發現男方的"那個"只有兩公分,保證什麼臉紅心跳都想不起來了...
當然...妳可以用"愛情"去克服,但如果花了一年發現克服不了....那個時後就是29歲半,然後還要承受心靈上的痛苦...因為妳們是真的有"愛情"嘛
男性的佔有慾從某方面來講可說是由女性的衿持所培養出來的,女人在"做"完後,會有一種自己獻身給對方的感覺,接著自願成為他人的財產(當真是甜蜜無限),男人更可憐了,此後為這"財產"所做的一切都是應該的。
曾聽一個老外講過,台灣女人很好騙,只要跟她上床,她就可以當女朋友,而且可以"非常"的包容自己的缺點,在歐美,上床跟男女朋友之間還差了一大截呢,更遑論結婚。
"性"可以不是起點,但絕不是終點...
不過以數學的角度來看的話,求出結果的空間才會更大,根據統計,一個人要遇到完全適合自己的另一半,其機率是五十萬分之一(偏偏台灣偶像劇裡的都能註死遇到),也就是說,倒楣一點的人,必須跟四九萬九千九百九十九人約會後,才會遇到。
什麼叫完全適合呢?可粗分兩種,生理跟心理,心裡的契合決不是兩頓晚餐可以知道的(有些人一輩子都不知道),但生理的契合呢,二十分鐘就知道了。
洋片常見的橋段是前一幕還在說Hello...下一幕就到了床上(慾望城市這種橋段最多),如果對方有怪癖,例如性虐待,男方不舉,或女方沒感覺,隔天大家就ByeBye了,雖然看起來很濫情,但卻絕對有利於雙方(運動嘛..),因為如果進入了心靈層次,那麼生理上的不契合就會產生痛苦(為了愛情、其他都可以忍..)...
台灣(中國)男人,常把性當作終點,好像跟他上過床,就變成"他的人",漸漸的形象沒了、禮貌沒了、幽默風趣也沒了,根據專家統計,台灣失戀被甩的男人其痛苦指數非常高,因失戀而做出蠢事的比例更是高過於女性,其實造成這樣的痛苦,跟本與愛情無關,其痛苦的根源來自於自己的財產被奪,甚至幻想出別人正在"享用"他財產的畫面,熟可忍,熟不可忍啊,古今中外皆然...
把性當作起點來認識對方,在東方的道德裡似乎很難被接受,但在問題的解決上卻是合理的,生理與心靈,對雙方而言,本身就是存在的未知數,就程式來說叫變數,能夠儘速求出值的變數,何必拖時間呢。
台灣(中國)的女性較注重階段性,認為每一階段都有其必要性,從牽手的臉紅心跳到床上的底死纏綿,不能太快,需得細火慢熬才能領會箇中滋味,但就我個人覺得28歲以後的女性就不適合這一套了,如果花了半年享受這種感覺,最後發現男方的"那個"只有兩公分,保證什麼臉紅心跳都想不起來了...
當然...妳可以用"愛情"去克服,但如果花了一年發現克服不了....那個時後就是29歲半,然後還要承受心靈上的痛苦...因為妳們是真的有"愛情"嘛
男性的佔有慾從某方面來講可說是由女性的衿持所培養出來的,女人在"做"完後,會有一種自己獻身給對方的感覺,接著自願成為他人的財產(當真是甜蜜無限),男人更可憐了,此後為這"財產"所做的一切都是應該的。
曾聽一個老外講過,台灣女人很好騙,只要跟她上床,她就可以當女朋友,而且可以"非常"的包容自己的缺點,在歐美,上床跟男女朋友之間還差了一大截呢,更遑論結婚。
"性"可以不是起點,但絕不是終點...
訂閱:
文章 (Atom)