漢語編程教程《易語言軟件加密技術(shù)》8月版_第1頁(yè)
漢語編程教程《易語言軟件加密技術(shù)》8月版_第2頁(yè)
漢語編程教程《易語言軟件加密技術(shù)》8月版_第3頁(yè)
漢語編程教程《易語言軟件加密技術(shù)》8月版_第4頁(yè)
漢語編程教程《易語言軟件加密技術(shù)》8月版_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

?易語言軟件加密技術(shù)?序感謝朋友們的留言,以下排名不分先后。何金:一定程度的防破是必要的。goomoo:收藏,謝謝?。iigo:這么經(jīng)典的文章竟然不署名,佩服!笨笨?。合仁詹?,應(yīng)該是好東西。火兒:花了兩個(gè)多小時(shí)才看完……看完才發(fā)現(xiàn),自己的軟件根本屬于赤裸裸那型。icemanwd:世界上沒有破解不了的軟件,只能延遲破解的時(shí)間而已。走隨小月:易書空前的著作,收藏,消化吸收中……yjls:寫的太好,希望易公司今后發(fā)行易書里綁定。迪克:很好的文章,我已經(jīng)學(xué)了幾招。7620367:這個(gè)要反復(fù)學(xué)習(xí)。bbs171:真的不錯(cuò)。雷鋒的四句名言是:對(duì)待同志要象春天般的溫暖〔我在幫助易友們提高易語言水平〕;對(duì)待工作要象夏天般的熾熱〔我是工作狂看我寫這么多就知道了〕;對(duì)待個(gè)人主義要象秋風(fēng)掃落葉一樣〔對(duì)支持破解的人要堅(jiān)決反對(duì)〕;對(duì)待敵人要象嚴(yán)冬一樣殘酷無情〔打擊盜版是大家共同的責(zé)任〕。友情廣告位全中文全可視跨平臺(tái)編程軟件——中國(guó)共享軟件聯(lián)盟htt易語言學(xué)習(xí)園地QQ:10153314易容大師中時(shí)空網(wǎng)絡(luò)(://3cts)提供優(yōu)質(zhì)的虛擬主機(jī)效勞,杜雪QQ:2331096迪克條碼清心網(wǎng)站BBS171:新網(wǎng)互聯(lián)高級(jí)代理,CN可先注冊(cè)后付款!舍曼妮QQ:366221

前言本文為全中文編寫,不需要有PE文件格式知識(shí),不需要掌握匯編或C語言的編程技巧,一些加密算法直接由易語言提供,特殊的加密算法大家可以翻譯C語言代碼、匯編代碼或VB代碼。本文中將“Cracker〞一詞翻譯為“奸人〞,意為“奸邪小人〞之義。本人對(duì)破解者一向深惡痛絕,有人說中國(guó)的軟件開展中破解者有一份功績(jī),可我說這話不對(duì),看看因盜版而產(chǎn)生的微軟對(duì)操作系統(tǒng)及軟件業(yè)的壟斷,國(guó)內(nèi)軟件業(yè)在盜版的夾縫中生存……,如此下去,軟件作者沒有收益,將不再會(huì)有優(yōu)秀的軟件推出。防止盜版,匹夫有責(zé),我想通過本書的推出可以加強(qiáng)易語言用戶的加密能力,將盜版殺死在大家共同的手中。本書集成了多位作者的公開著述,在此一并表示感謝。其中局部文字內(nèi)容根據(jù)易語言的特性作了修正。文中不署作者姓名,以防止奸人對(duì)他們的軟件的刻意破解。隨著采用易語言編制程序的人們?cè)絹碓蕉啵瑢懸粋€(gè)軟件易被奸人破解的情況也越來越多了,有個(gè)別用戶甚至于疑心易語言是否有平安性。從技術(shù)性上來說,我只能說加密技術(shù)與編程語言無關(guān),一個(gè)編程語言的平安性一般指所生成的機(jī)器碼是否穩(wěn)定、可靠,而不是防破解方面,如果想要很好地防止破解,那么掌握一門加密技術(shù)是非常必要的。本書考慮到使用易語言的用戶大局部對(duì)PE文件結(jié)構(gòu)不太熟悉,因此沒有采用很底層的方法去教學(xué),而是采用與易語言直接表達(dá)的方式試圖說明如何加密。本書根本上是按以下的順序進(jìn)行講解的:破解技術(shù)反破解技術(shù)1反破解技術(shù)2反破解技術(shù)3防改文件文件名驗(yàn)證LOGO圖片驗(yàn)證窗口標(biāo)題驗(yàn)證防改文件大小暴破加殼后數(shù)據(jù)簽名驗(yàn)證加殼后CRC驗(yàn)證文件大小驗(yàn)證防調(diào)試花指令反調(diào)試模塊反調(diào)試支持庫(kù)內(nèi)存注冊(cè)機(jī)不進(jìn)行判斷,用循環(huán)代替字符串打亂器及時(shí)清內(nèi)存算法注冊(cè)機(jī)RSA算法數(shù)值計(jì)算支持庫(kù)其他多處驗(yàn)證點(diǎn)隨機(jī)驗(yàn)證命名刻意隱蔽

目錄TOC\o"1-3"\h\z?易語言軟件加密技術(shù)? 1一.易語言程序加密的目的 51.保持軟件的完整性 52、保護(hù)軟件開發(fā)者的權(quán)益 5二.易語言程序加密的原那么 51.加密前要考慮周到且嚴(yán)密 52.需要加密的內(nèi)容要制定一個(gè)方案 63.加密時(shí)制作好文檔,以備以后的修改 64.發(fā)布前問一下是否可以正式發(fā)布軟件了 6三.防止程序內(nèi)容被更改 71.防止軟件名稱被更改 72.防止窗口標(biāo)題被更改 73.防止LOGO圖片被更改 8四.防止文件被暴破 81.常用加殼軟件介紹 82.加殼后文件大小驗(yàn)證 123.加殼后數(shù)據(jù)簽名驗(yàn)證 124.加殼后CRC驗(yàn)證 13五.防調(diào)試方法 141.易語言的花指令 142.反調(diào)試模塊的使用 153.反調(diào)試支持庫(kù)的使用 154.通過檢查父進(jìn)程得知是否被調(diào)試了 165.使用多線程 17六.注冊(cè)機(jī)制作 171.簡(jiǎn)單注冊(cè)原理 172.RSA算法注冊(cè) 183.?dāng)?shù)值計(jì)算支持庫(kù) 24七.給奸人一些教訓(xùn) 241.給破解者的教訓(xùn) 242.給破解版使用者的教訓(xùn) 273.行為不要過火 27八.網(wǎng)絡(luò)驗(yàn)證法 271.實(shí)現(xiàn)的原理 272.存在的幾個(gè)問題 28九.加密狗加密 281.加密狗的選用 292.加密狗加殼法 303.加密狗寫存儲(chǔ)器法 30十.加密算法策略 311.易數(shù)據(jù)庫(kù)密碼怎么瀉露了 312.利用吳氏加密算法 343.海島挖寶 344.隨機(jī)驗(yàn)證 355.不同權(quán)限驗(yàn)證 366.忽悠型的垃圾驗(yàn)證代碼 377.偽驗(yàn)證技術(shù) 398.定時(shí)驗(yàn)證、延時(shí)驗(yàn)證、客戶數(shù)據(jù)集累驗(yàn)證 409.驗(yàn)證與專業(yè)知識(shí)相結(jié)合技術(shù) 4010.偽裝,用易語言寫自有支持庫(kù) 4011.絕妙的暗樁設(shè)置 4112.發(fā)布不完整版本 4113.自定義算法 4114.加密框圖 42附錄1加密已形成密碼學(xué) 43附錄2?如何用簡(jiǎn)單方法防止破解? 44附錄3代碼與數(shù)據(jù)結(jié)合技術(shù) 45

〔正文〕一.易語言程序加密的目的在此有必要說明一下為何要為自己的程序進(jìn)行加密,初步認(rèn)為有以下兩點(diǎn):1.保持軟件的完整性這里包括了文件名不被更改,文件版權(quán)信息不被更改,文件尺寸不被更改。很多時(shí)候有的奸人拿到您的軟件,他可以將文件名更改,將文件版權(quán)信息的字符串或圖片更改,然后放上自己的東西,如放上病毒可以對(duì)其他電腦造成破壞,如果放奸人的彈出廣告收益的是奸人,而不是作者。相反,使用這些軟件的用戶反而將作者痛罵一通,造成聲譽(yù)上的損失。因此處于保護(hù)自己的完整權(quán)益來說,也是有必要保護(hù)軟件的完整性。例如QQ軟件,曾出現(xiàn)過多款個(gè)人行為的補(bǔ)丁版,更改了QQ的一些信息與界面,為此QQ公司十分頭痛,以后的一些事大家也知道,現(xiàn)在看是破解QQ的很少了,而且在安裝QQ新版本時(shí),它會(huì)檢查是否有破解補(bǔ)丁存在,如果存在就不運(yùn)行。2、保護(hù)軟件開發(fā)者的權(quán)益也許你會(huì)說,一個(gè)不被破解的軟件一定是一個(gè)沒有加密的軟件,那么看看下文您就會(huì)知道,那只是一個(gè)理想中的事情,除非您是有錢了沒有事干的人,否那么您開發(fā)軟件的目的是什么我是很難知道的。無論是個(gè)人還是公司,如果生產(chǎn)一個(gè)軟件得不到收益,以及后繼開發(fā)資金的鼓勵(lì),那么無疑這個(gè)軟件是很難再開發(fā)下去的。這樣的例子很多很多,我不想舉例,國(guó)內(nèi)已出現(xiàn)了很多軟件的破解版,而一旦出現(xiàn)了破解,那么所造成的損失是非常大的。二.易語言程序加密的原那么早先人們的加密方法是通過在軟盤上格式化一些非標(biāo)準(zhǔn)磁道,在這些磁道上寫入一些數(shù)據(jù),如軟件的解密密鑰等等。這種軟盤成為“鑰匙盤〞。軟件運(yùn)行時(shí)用戶將軟盤插入,軟件讀取這些磁道中的數(shù)據(jù),判斷是否合法的“鑰匙盤〞。軟盤加密還有其它一些技術(shù),如弱位加密等等。隨著近年來軟盤的沒落,這種方法根本上退出了歷史舞臺(tái)。新的軟件加密技術(shù)也越來越多了。1.加密前要考慮周到且嚴(yán)密說實(shí)話,有很多人在易語言論壇上發(fā)貼,說自己用易語言編寫的軟件有了破解,還非??鞓罚腥擞貌艜?huì)被破解,但我想,如果是很快樂的這樣子,除非你的軟件技術(shù)含量很低,或你是微軟,想被別人破解,您不應(yīng)該快樂,這有點(diǎn)象別人打了你一耳光,你還很快樂,你的知識(shí)產(chǎn)權(quán)或著作權(quán)已被奸人侵犯了,性質(zhì)很惡劣,后果很嚴(yán)重。除了拿起法律武器,勞命傷財(cái),還有就是加強(qiáng)加密方式。如果被制作出注冊(cè)機(jī),情況是最糟糕的,作者需要全部更換全部用戶的注冊(cè)KEY文件,工作量相當(dāng)?shù)叵喈?dāng)?shù)卮?。因此一個(gè)好的軟件保護(hù)發(fā)布前必須考慮周到,而且是面面俱到,否那么出一個(gè)新版,發(fā)現(xiàn)一個(gè)破解,再出一個(gè)新版去修正,那樣的事情是極其弱智的。2.需要加密的內(nèi)容要制定一個(gè)方案一開始不明白如何加密的易語言用戶,一般就找一下論壇上關(guān)于注冊(cè)的例程套用到自己的程序中,認(rèn)為這樣就是加密了,實(shí)際上本節(jié)所要講的是制作一個(gè)學(xué)習(xí)方案,將所有需要用到的知識(shí)與軟件都收集到,這個(gè)方案就是一個(gè)加密方案,也是本書所要講述的。3.加密時(shí)制作好文檔,以備以后的修改在加密中有可能使用了多處加密,因此需要將文檔寫好,以防止以后忘記,實(shí)際上您可以在易語言中使用備注的方式作以說明,這些備注在編譯時(shí)是不會(huì)被編譯進(jìn)目標(biāo)EXE文件中的。節(jié)省了寫外部文檔的時(shí)間。4.發(fā)布前問一下是否可以正式發(fā)布軟件了制定一個(gè)風(fēng)險(xiǎn)評(píng)估標(biāo)準(zhǔn),以考驗(yàn)一下程序的風(fēng)險(xiǎn)性,被破解的可能性,如果你是破解者,在不知道如何加密的情況下會(huì)如何去破解這個(gè)軟件。有一個(gè)參考的評(píng)估標(biāo)準(zhǔn)在下面。共享軟件注冊(cè)加密自我評(píng)測(cè)表評(píng)測(cè)方法:以下問題,假設(shè)答案為是加1分。是否加殼?是否采用兩種以上的不同的工具來對(duì)程序進(jìn)行加殼/壓縮?是否有軟件自身的完整性檢查功能?〔CRC校驗(yàn)或其他〕與軟件保護(hù)相關(guān)的字符串是否有進(jìn)行加密處理?是否采用了比擬成熟的密碼學(xué)算法?是否有多處驗(yàn)證點(diǎn),調(diào)用多個(gè)不同函數(shù)或判斷多個(gè)不同全局標(biāo)志進(jìn)行注冊(cè)驗(yàn)證?是否有隨機(jī)驗(yàn)證的功能?是否采用了在線驗(yàn)證功能?注冊(cè)過程中是否盡量少地給用戶提示信息?是否不依賴于GetLocalTime()、GetSystemTime()這樣眾所周知的函數(shù)來獲取系統(tǒng)時(shí)間?是否有偽破解功能?是否在軟件中嵌入了反跟蹤的代碼?是否對(duì)校驗(yàn)函數(shù)命名做了刻意隱蔽?是否將注冊(cè)碼、安裝時(shí)間記錄在多個(gè)不同的地方?是否在校驗(yàn)時(shí)成心參加冗余干擾代碼來誤導(dǎo)解密者?是否有自己獨(dú)特的防破解措施?建議:得分在6分以上才可以正式發(fā)布軟件!制中國(guó)共享軟件聯(lián)盟·lcraz三.防止程序內(nèi)容被更改從本節(jié)開始,已進(jìn)入講解加密的正題,但可能章節(jié)不必這樣劃分,即按加密/破解的方法來劃分,如防反調(diào)試,反跟蹤,反……。但筆者覺得,從一個(gè)一個(gè)小的知識(shí)點(diǎn)的進(jìn)入是非常重要的。下面的有些內(nèi)容是我請(qǐng)教了酒桶醉死的經(jīng)驗(yàn)后總結(jié)的,在此表示感謝。1.防止軟件名稱被更改這里是極為簡(jiǎn)單的方法:判斷〔到大寫〔取執(zhí)行文件名〔〕=“我的程序.EXE〞〕在上述中,為何使用到“判斷〞命令,而不是“如果〞命令呢,大家可以想一下,“判斷〞命令的代碼平安性要比“如果〞命令高,這里不會(huì)舉出一個(gè)匯編的例子,只要說明一下即可。即“判斷〞命令是多重分支結(jié)構(gòu),這樣就增加了被破解的難度,因此,大家一定要注意這樣一件事情,就是在進(jìn)行加密比擬時(shí)一定不要使用比擬的語句,那樣很容易被奸人使用破解工具下斷點(diǎn),那么正確的做法應(yīng)該是如何的呢,請(qǐng)看下面代碼:計(jì)次循環(huán)首〔到數(shù)值〔是否注冊(cè)成功〔〕〕,〕全局_注冊(cè)成功=1計(jì)次循環(huán)尾〔〕通過上面的代碼可以看出,這里沒有使用判斷語句,而采用了一個(gè)循環(huán)命令去參與。其中“是否注冊(cè)成功〔〕〞確實(shí)是返回了一個(gè)邏輯值,但通過“到數(shù)值〔〕〞命令后就會(huì)被為0或1之間的一個(gè)數(shù)字,會(huì)用易語言的人都知道,一個(gè)循環(huán)命令中,如果循環(huán)數(shù)為1,會(huì)執(zhí)行循環(huán)中的命令,否那么為0不進(jìn)入循環(huán)。生成機(jī)器碼后,奸人會(huì)很難找到判斷的匯編碼,大大加強(qiáng)了保護(hù)性。上述的根本方法是有了,但請(qǐng)您將這個(gè)方法隱藏于您的程序代碼行的某一深處,實(shí)際上加密是各種方法的綜合,現(xiàn)在所教的只是其中的一種,大家要將多種加密方式用于一個(gè)軟件之中。這需要大量的時(shí)間學(xué)習(xí)與體會(huì)。加密第1定理:“如果〔〕〞語句一定不要出現(xiàn)在加密算法中。加密第2定理:用“循環(huán)〞類命令代替判斷語句。2.防止窗口標(biāo)題被更改窗口標(biāo)題是否被別人更改這個(gè)也可以通過與上述同樣的方法實(shí)現(xiàn)驗(yàn)證。判斷〔_啟動(dòng)窗口.標(biāo)題=“我的程序.EXE〞〕大家也許會(huì)說,這些好象沒有必要吧,誰會(huì)這么無聊,將軟件的名稱與窗口標(biāo)題更改呢,大家看這樣一個(gè)例子吧:有一個(gè)電腦培訓(xùn)班,采用了明倫五筆練習(xí)打字軟件進(jìn)行電腦培訓(xùn)班,他們破解了,且修改了明倫打字軟件的版權(quán)信息,改為自己電腦培訓(xùn)班的標(biāo)志,產(chǎn)生的教學(xué)效果即:學(xué)生認(rèn)為這家培訓(xùn)班的技術(shù)實(shí)力很強(qiáng),自己可以開發(fā)打字軟件,而且經(jīng)常彈出電腦培訓(xùn)班的標(biāo)志與廣告,產(chǎn)生了很好的廣告效果,學(xué)生介紹學(xué)生,更多的學(xué)生參與進(jìn)來了。從上述事件看,很顯然明倫打字軟件的作者一點(diǎn)好處也沒有,全部被破解者侵占了。因此一個(gè)好的軟件保護(hù)必須是全面而且周到的。另外,我要提醒大家的是,這樣的語句也是非常不保險(xiǎn)的,這樣的話很容易被奸人改了字符串,以致于字符串也被更改了,或很快能找到比擬的地方,從而輕松跳過去。較為理想的是將字符串打亂,即將“我的程序.EXE〞以“字符〔〕〞、“取代碼〔〕〞、“取反〔〕〞、“異或〔〕〞等命令用字符串相加的方法加在一起成為一個(gè)字串后再比擬。判斷〔取數(shù)據(jù)簽名〔_啟動(dòng)窗口.標(biāo)題〕=取數(shù)據(jù)簽名〔“我的程序.EXE〞〕〕3.防止LOGO圖片被更改有的人怕程序信息被更改,采用了圖片顯示程序標(biāo)題的方式,這樣這種圖片較不易被奸人修改,但可能也有個(gè)別高手進(jìn)行修改,因此圖片的大小是知道的,這樣可以用以下語句進(jìn)行判斷:計(jì)次循環(huán)首〔到數(shù)值〔取字節(jié)集長(zhǎng)度〔_啟動(dòng)窗口。底圖〕=342488〕〕,〕其中上述的數(shù)字是您的圖片大小尺寸字節(jié)數(shù),而不是亂寫得來的。也可以將圖片放在易語言的資源中,直接進(jìn)行比擬。計(jì)次循環(huán)首〔到數(shù)值〔_啟動(dòng)窗口。底圖〕=#圖片1〕,〕以上方法雖然軟件的體積大了一些,但帶來的直接好處是,程序量一大,為破解帶來了更大的困難,雖然損失了體積,但保證了平安。你的關(guān)于窗口也要這樣保護(hù)起來哦。使用數(shù)據(jù)操作支持庫(kù)中的“加密數(shù)據(jù)〔〕〞、“解密數(shù)據(jù)〔〕〞命令加密圖片后存放在圖片資源中,用時(shí)再解密顯示出來。例如您的一些口令就直接用這個(gè)加密就可以了。解密時(shí)注意直接放在一行代碼中比擬,不要存到一個(gè)變量中,這樣在內(nèi)存中是找不到明文的。四.防止文件被暴破暴破是指破解者在模擬算法失敗的情況下,惱羞成怒,狗急跳墻,一氣之下暴力破解,將軟件的殼脫掉,將要求注冊(cè)的局部直接跳過去,這樣直接產(chǎn)生的后果是文件大小被改變了。在此,先介紹一下常用的加殼軟件。1.常用加殼軟件介紹加殼軟件分為普通殼與加密殼。加殼可壓縮文件大小,并且將一些本來清晰的字串進(jìn)行了打亂的效果。普通殼的作用是壓縮資源,使文件尺寸變小,一般可使易語言縮小一半以上的尺寸,有的還可以減少系統(tǒng)資源占用。其他編程語言生成的EXE文件加殼后有可能變大,例如C語言生成的程序本來就小,壓縮不了尺寸,這時(shí)再加上一個(gè)殼,尺寸反而會(huì)變大。普通殼有:UPX,ASPACK,ASProtect,PKLITE,PECompact等。加密的殼有:幻影,軟件保護(hù)神等。加密的殼可以提供直接的注冊(cè)碼功能。加密的殼由于是公用殼,很多人都去購(gòu)置使用,一般容易被奸人看中脫殼,靈活性也差。如果被破解了,那么后果是十分嚴(yán)重的。下列圖是UPXShellv3.10軟件的運(yùn)行界面:下列圖是ASPACK軟件的運(yùn)行界面:下列圖是PKLITE軟件的運(yùn)行界面:下列圖是PECompact軟件的運(yùn)行界面:下列圖是“幻影〞加殼軟件的運(yùn)行界面:下列圖是“軟件保護(hù)神〞加殼軟件的運(yùn)行界面:殼加完后,余下的工作就是防止脫殼了,一般來說,很多人都想要一個(gè)很強(qiáng)的殼,但一方面任何殼都有可能被破解,另一方面殼的兼容性就有很大的問題。如采用強(qiáng)殼的?系統(tǒng)管理?采用了一個(gè)國(guó)外出品的強(qiáng)殼,確實(shí)是很難脫掉的,但由于破解版的原因,在WIN98下運(yùn)行時(shí)經(jīng)常會(huì)死機(jī)。正式版的價(jià)格也非常高,根本上要1000元RMB左右。而常用的普通殼雖然強(qiáng)度并不高,但通過易語言編程進(jìn)行校驗(yàn),可以保護(hù)您的殼不被輕易脫掉。加密第3定理:用最普通的殼,讓弱手們?nèi)ッ撁摽?!我還有校驗(yàn)等著呢。2.加殼后文件大小驗(yàn)證加殼后一些數(shù)據(jù)平安得到了保證。這包括一些沒有加工過的字符串,例如:數(shù)據(jù)庫(kù)密碼,加密算法密碼。加壓縮殼后,易語言的EXE文件尺寸一般會(huì)變小,一般1.5MB的軟件會(huì)變小為800KB左右。那么最常用的文件大小驗(yàn)證可以用如下易語言代碼:判斷〔取文件尺寸〔取執(zhí)行文件名〔〕〕=843674〕上述代碼中的數(shù)值是經(jīng)過查看編譯及加殼后文件屬性大小生成的,但由此造成兩種不方便的地方:一是由于易語言造成每次編譯后的文件大小是不一樣的,因此很難將這個(gè)數(shù)值取對(duì),二是這個(gè)值放在哪里好,如果放在主程序中的話,那么每次生成的文件大小不一樣,就會(huì)造成取不準(zhǔn),比擬不了的現(xiàn)象。建議大家在比擬時(shí)可以將代碼寫成以下形式:判斷〔取文件尺寸〔取執(zhí)行文件名〔〕〕≥900000〕通過以上運(yùn)算符的改變后,根本上可以知道是否被脫了殼了,因?yàn)槊摿藲ず蟪绦虻捏w積會(huì)增加很多。3.加殼后數(shù)據(jù)簽名驗(yàn)證易語言自帶一個(gè)“數(shù)據(jù)操作支持庫(kù)〞,根本可以滿足平安加密的需要。如下列圖所示:這里較為常用的命令是“取數(shù)據(jù)摘要〔〕〞,這個(gè)命令是采用了MD5算法,不同數(shù)據(jù)的MD5碼都不一樣,因此本命令可以用作保證重要數(shù)據(jù)不會(huì)被篡改。對(duì)于不同的數(shù)據(jù),其得出的結(jié)果是不一樣的。如果奸人將您的軟件脫殼了、改動(dòng)了,那么前后所取得的結(jié)果也是不一樣的?!叭?shù)據(jù)摘要〔〕〞得出的結(jié)果是返回一段字節(jié)集數(shù)據(jù)的MD5數(shù)據(jù)摘要編碼文本。一般是32位字節(jié)的數(shù)據(jù)。但這樣帶來了這樣一個(gè)問題:即我們?nèi)〉昧思託ず筌浖臄?shù)據(jù)摘要,但是放在軟件中后再編譯再加殼再取數(shù)據(jù)摘要后,本次取值與前面所取的值是不一致的。采取的方法一般是將數(shù)據(jù)摘要文本存放在外部。一般會(huì)采用以下的方式:第一種方式:加密后存放在一個(gè)文件中。第二種方式:加密后存放在DLL中。第一種方式可以直接存在一個(gè)文件中,也可以?shī)A存在其他文件中,如圖片文件中,或音樂文件中,或DLL文件中〔硬寫在DLL段中〕。第二種方式可取得主程序的數(shù)據(jù)摘要后,直接在DLL程序的源程序中寫比擬代碼。然后編譯為DLL文件,由主程序調(diào)用此比擬DLL。這樣保證了主程序的數(shù)據(jù)摘要與主程序別離從而加強(qiáng)了主程序的平安性。4.加殼后CRC驗(yàn)證我們很有必要給自己的軟件加上更好的保護(hù)。CRC校驗(yàn)就是其中的一種不錯(cuò)的方法。CRC是什么東西呢?其實(shí)我們大家都不應(yīng)該會(huì)對(duì)它陌生,回憶一下?你用過RAR和ZIP等壓縮軟件嗎?它們是不是常常會(huì)給你一個(gè)惱人的“CRC校驗(yàn)錯(cuò)誤〞信息呢?我想你應(yīng)該明白了吧,CRC就是塊數(shù)據(jù)的計(jì)算值,它的全稱是“CyclicRedundancyCheck〞,中文名是“循環(huán)冗余碼〞,“CRC校驗(yàn)〞就是“循環(huán)冗余校驗(yàn)〞。CRC有什么用呢?它的應(yīng)用范圍很廣泛,最常見的就是在網(wǎng)絡(luò)傳輸中進(jìn)行信息的校對(duì)。其實(shí)我們大可以把它應(yīng)用到軟件保護(hù)中去,因?yàn)樗挠?jì)算是非常非常非常嚴(yán)格的。嚴(yán)格到什么程度呢?你的程序只要被改動(dòng)了一個(gè)字節(jié)〔甚至只是大小寫的改動(dòng)〕,它的值就會(huì)跟原來的不同。呵呵,是不是很厲害呢?所以只要給你的“原〞程序計(jì)算好CRC值,儲(chǔ)存在某個(gè)地方,然后在程序中隨機(jī)地再對(duì)文件進(jìn)行CRC校驗(yàn),接著跟第一次生成并保存好的CRC值進(jìn)行比擬,如果相等的話就說明你的程序沒有被修改/破解過,如果不等的話,那么很可能你的程序遭到了病毒的感染,或者被奸人用16進(jìn)制工具暴力破解過了。CRC的本質(zhì)是進(jìn)行XOR運(yùn)算,運(yùn)算的過程我們不用管它,因?yàn)檫\(yùn)算過程對(duì)最后的結(jié)果沒有意義;我們真正感興趣的只是最終得到的余數(shù),這個(gè)余數(shù)就是CRC值。易語言用戶林子深提供了一個(gè)CRC32.EC的易模塊,這個(gè)模塊可以在論壇上或資源網(wǎng)上搜索到。大家可以直接拿過來用,導(dǎo)入易語言后如下列圖所示:調(diào)用方式可為如下代碼:其中上述的數(shù)字為主程序的CRC碼值。大家可以利用上述特性,即結(jié)果是數(shù)值的特性,不用進(jìn)行比擬,而是用加減法的方法得出前后兩個(gè)CRC驗(yàn)的差值,如果為0,那說明兩個(gè)數(shù)字是相等的,主程序沒有被改動(dòng)過。否那么就是被改正的。例如下述代碼:程序被改=1程序被改=0-跳出循環(huán)〔〕計(jì)次循環(huán)尾〔〕返回〔程序被改〕上述代碼中,“取絕對(duì)值〔〕〞是將負(fù)數(shù)也轉(zhuǎn)換為正數(shù),以方便進(jìn)行計(jì)次循環(huán)。上述代碼中,數(shù)值型變量“程序被改〞為1表示沒有被改動(dòng)過,如果為0表示被改動(dòng)過。返回的數(shù)值就可以進(jìn)行一些陷阱的計(jì)算了。我的方案的缺點(diǎn)分析:CRC-32的值其實(shí)可以由奸人自行計(jì)算得出后,重新寫入到程序驗(yàn)證處。這樣的話,我們做的工作豈不是沒有意義了?其實(shí)解決的方法還是有的,我們可以在計(jì)算CRC-32值之前,對(duì)參與轉(zhuǎn)換的字符串加點(diǎn)手腳,例如對(duì)這個(gè)字符串進(jìn)行移位、xor等操作,或者把自己的生日等信息參加到字符串中,隨你的便什么都行,總之不是單純的文件的內(nèi)容就行了,然后在最后比擬的時(shí)候,也用同樣的方法反計(jì)算出CRC-32值。這樣得到的CRC-32就不是由文件的內(nèi)容計(jì)算出來的,相信對(duì)破解者的阻力也會(huì)加大不少??偨Y(jié):以上的方法大家都可以在軟件中采用,最好寫到一個(gè)DLL文件中,然后多放幾個(gè)需要驗(yàn)證的子程序,隨時(shí)以備調(diào)用即可。五.防調(diào)試方法1.易語言的花指令加花指令的方法有通用性,即所有的反匯編器都可以用這種方法來抵擋。這種方法主要是利用不同的機(jī)器指令包含的字節(jié)數(shù)并不相同,有的是單字節(jié)指令,有的是多字節(jié)指令。對(duì)于多字節(jié)指令來說,反匯編軟件需要確定指令的第一個(gè)字節(jié)的起始位置,也就是操作碼的位置,這樣才能正確地反匯編這條指令,否那么它就可能反匯編成另外一條指令了。并且,多字節(jié),指令長(zhǎng)度不定,使得反匯編器在錯(cuò)誤譯碼一條指令后,接下來的許多條指令都會(huì)被錯(cuò)誤譯碼。所以,這種方法是很有效的。易語言新版本中增加了自動(dòng)插入花指令的功能,并且插入后雖然文件體積大了一些,但不會(huì)造成運(yùn)行錯(cuò)誤。大家可以點(diǎn)擊菜單“工具〞→“系統(tǒng)配置〞。彈出的窗口如下列圖所示。不采用花指令時(shí),反編譯出來的代碼幾乎是跟源代碼一一對(duì)應(yīng)的,這樣一來我們的程序還有什么秘密可言呢?完全可以從反編譯的結(jié)果中理解程序的功能。其實(shí)花指令就是人為地構(gòu)造一些“陷阱〞和一些無用的字節(jié),起到迷惑破解者和隱藏信息的作用。在這里,易語言為你構(gòu)造了這些“陷阱〞。大家只要將上述配置項(xiàng)翻開就可以了。同時(shí)也提醒大家,在發(fā)布新版本時(shí)采用以下的方式:第一周發(fā)布的是花指令級(jí)別為1,第二周發(fā)布的是花指令級(jí)別為2,第三周發(fā)布的是花指令級(jí)別為3,第四周發(fā)布的是花指令級(jí)別為1……,周而復(fù)始,這樣破解者根本跟不上你變換的速度。加密第4定理:每周發(fā)布一個(gè)新版本,讓破解的速度趕不上發(fā)布的速度。2.反調(diào)試模塊的使用目前易語言論壇上出現(xiàn)了一些模塊或支持庫(kù),帶有反調(diào)試的功能,當(dāng)啟用后,就會(huì)查看進(jìn)程中有無調(diào)試器,如SOFTICE等調(diào)試工具,對(duì)易語言的調(diào)試也同樣有效。由林子深提供的另一個(gè)模塊:“星光滅絕〞模塊大家也可以嘗試用一下,為何說是嘗試呢,這些模塊并不穩(wěn)定,并且極易造成WIN98下程序死機(jī)。并且翻開易語言也會(huì)認(rèn)為是調(diào)試器,從而會(huì)自動(dòng)退出。大家自己在易語言論壇上搜索吧。不推薦大家使用。3.反調(diào)試支持庫(kù)的使用海洋的支持庫(kù)也提供了反調(diào)試的功能,具體是海洋增強(qiáng)支持庫(kù)。但要注意兼容性問題,一定要在多個(gè)操作系統(tǒng)下進(jìn)行嚴(yán)格的測(cè)試后才能發(fā)布。4.通過檢查父進(jìn)程得知是否被調(diào)試了一般情況下,運(yùn)行的程序的父進(jìn)程是EXPLOER,在易語言中調(diào)試運(yùn)行的父進(jìn)度是易語言,而在破解人手中運(yùn)行的父進(jìn)程是用于破解的調(diào)試軟件。因此我們就有必要判斷程序的你進(jìn)程是否是EXPLOER或易語言,如果不是,非常有很大的可能是在奸人的調(diào)試軟件中被調(diào)用了,這時(shí)就好辦了。哈哈。易語言論壇的用戶“笨笨啊〞提供了一個(gè)取進(jìn)程與父進(jìn)程的模塊,并且有模塊源代碼,程序主要是由API取得進(jìn)程內(nèi)容。大家可以搜索易語言論壇,用戶名為“笨笨啊〞,或關(guān)鍵字為“父進(jìn)程〞可以找到這個(gè)源代碼。下列圖是在易語言中調(diào)試程序時(shí),父進(jìn)程為易語言:下列圖是易語言編譯后運(yùn)行,其父進(jìn)程是EXPLORER.EXE,編號(hào)為860:加密第5定理:一個(gè)正常EXE的父進(jìn)程是EXPLORER.EXE不過這里要注意的是:奸人有可能將調(diào)試程序的名稱改為EXPLORER.EXE,這樣可以偽裝一下嗎?不可以,你需要檢查一下名稱為EXPLORER.EXE的進(jìn)程有幾個(gè),進(jìn)程ID是不是一樣的?如果有兩個(gè)不同的進(jìn)程ID,那么這時(shí)再判定就可以知道是不是被奸人調(diào)試了。5.使用多線程在Debug的手冊(cè)里可以看到Debug工具的局限:第一個(gè)局限是只能下4個(gè)內(nèi)存區(qū)域的斷點(diǎn),每個(gè)斷點(diǎn)不能控制超過兩個(gè)字節(jié),這樣內(nèi)存斷點(diǎn)不能控制超過16個(gè)字節(jié)的區(qū)域;第二個(gè)局限是對(duì)多線程只能同時(shí)跟蹤一個(gè)線程。因此利用其的第二個(gè)弱點(diǎn),大家可以多開幾個(gè)線程進(jìn)行來回驗(yàn)證。多線程的編程方法參看易語言。一般開5-8個(gè)線程就夠奸人忙活的了。加密第6定理:使用5個(gè)以上多線程來回驗(yàn)證注冊(cè)。六.注冊(cè)機(jī)制作1.簡(jiǎn)單注冊(cè)原理在易語言安裝后的程序“\e\lib\krnln\samples\軟件注冊(cè).e〞就是演示了軟件注冊(cè)的原理。其中有一個(gè)子程序是重復(fù)取硬件碼的,存在取硬件碼失敗的情況,因此要重復(fù)多取幾次,如果取失敗就用一個(gè)默認(rèn)的硬件碼代替。這個(gè)大家一定要看一看,注冊(cè)機(jī)的原理就是:用戶在使用過軟件一段時(shí)間后,認(rèn)為軟件較為理想,要求向作者注冊(cè),而此軟件中提供了用戶本機(jī)上的硬件號(hào),用戶將此硬件號(hào)發(fā)給作者,作者給出一個(gè)注冊(cè)碼,用戶拿到此注冊(cè)碼后填寫,軟件就注冊(cè)成功。注冊(cè)碼的計(jì)算是由硬件號(hào)產(chǎn)生的,計(jì)算過程只有作者知道。例如:用戶機(jī)器上的硬件號(hào)為34,作者返回的注冊(cè)碼為1904。用戶在注冊(cè)碼輸入欄中輸入1904,那么注冊(cè)成功。作者是這樣計(jì)算的,34X56=1904。那么軟件中也是這樣計(jì)算的。以上介紹的只是例子,大家也許會(huì)說,從1輸?shù)?999,總有一個(gè)會(huì)遇上的,但事實(shí)是硬件碼不會(huì)這樣簡(jiǎn)單,可以是16進(jìn)制的,而計(jì)算也不會(huì)這么簡(jiǎn)單,可能會(huì)用上矩陣也說不定,因此相比擬而言,靠猜想的方法去破解是愚蠢的。下面看一下易語言自帶例程中的程序代碼,此為要求用戶輸入注冊(cè)碼時(shí)的判斷語句:此為判斷語句調(diào)用的返回注冊(cè)碼的子程序:通過以上檢查是否輸入的硬件碼與注冊(cè)碼對(duì)映。而軟件作者手上有一個(gè)注冊(cè)機(jī),可以生成此硬件代碼,大家可以在此例程上加一個(gè)按鈕,此按鈕的代碼如下:這樣作者就可以很輕松地得到注冊(cè)碼,然后將這個(gè)注冊(cè)碼發(fā)給用戶用于注冊(cè)了。上述只是在一個(gè)理想的狀態(tài)中實(shí)現(xiàn)的,即沒有奸人對(duì)你的軟件進(jìn)行破解。如果奸人看上了你的軟件,只靠這么簡(jiǎn)單的方法,那么一定會(huì)吃大虧的。因此大家在注冊(cè)碼生成的計(jì)算上要想盡一切方法使之復(fù)雜化,如:采用位異,采用加上計(jì)算數(shù)值,采用……有些方法將在后面章節(jié)中進(jìn)行介紹。2.RSA算法注冊(cè)①RSA簡(jiǎn)介使用RSA非對(duì)稱密鑰算法對(duì)指定字節(jié)集數(shù)據(jù)進(jìn)行簽署,支持32到4096之間任意合法的RSA位數(shù),返回簽署后的結(jié)果文本。說明一,電子簽名系統(tǒng)簡(jiǎn)要實(shí)現(xiàn)方法:首先給所有具有簽署權(quán)利的人員授予不同的RSA鑰匙,RSA鑰匙由“公鑰〞、“私鑰〞、“公共模數(shù)〞三局部組成,為了生成符合要求的隨機(jī)密鑰,可以下載使用://dywt/RSATool2v14.rar第三方工具軟件〔內(nèi)有操作說明〕。然后將所有人員的“公鑰〞和“公共模數(shù)〞成對(duì)向外公布,“私鑰〞由被授予人員自行妥善保管。被授權(quán)人員使用“私鑰〞和“公共模數(shù)〞對(duì)指定數(shù)據(jù)進(jìn)行簽署,然后將簽署后的結(jié)果文本隨同被簽署數(shù)據(jù)一起發(fā)送,接收者收到后,使用該簽署者公開的“公鑰〞和“公共模數(shù)〞及簽署結(jié)果文本對(duì)被簽署數(shù)據(jù)進(jìn)行驗(yàn)證,如驗(yàn)證通過那么說明該數(shù)據(jù)必定是此簽署者所認(rèn)可的,且沒有經(jīng)過任何篡改。說明二,數(shù)字簽名用作軟件注冊(cè)系統(tǒng)的實(shí)現(xiàn)步驟:1、欲注冊(cè)用戶提供注冊(cè)信息〔如硬件代碼、用戶姓名等〕;2、軟件作者使用自己的私鑰對(duì)該注冊(cè)信息進(jìn)行數(shù)字簽署得到簽署結(jié)果文本;3、將此簽署結(jié)果文本作為注冊(cè)鑰匙文件發(fā)送給用戶;4、在用戶端的軟件使用相同的用戶信息、注冊(cè)鑰匙文件及軟件作者的公鑰進(jìn)行簽名驗(yàn)證,如果通過說明已經(jīng)注冊(cè),否那么表示未注冊(cè)。使用本方法在私鑰未泄露的前提下,可以絕對(duì)防止破解者做出軟件的注冊(cè)機(jī)。②RSA工具使用簡(jiǎn)介RSATool工具運(yùn)行界面如下列圖所示:有很多人說RSA工具不會(huì)用,其實(shí)RSA工具的使用方法吳濤已說明得非常清楚了。下面引用吳濤說明書的原文:吳濤寫的RSATool工具使用說明書如下:RSATool2.14工具軟件使用指南:〔軟件下載地址:://eyuyan/RSATool2v14.rar〕為了生成符合要求的隨機(jī)RSA密鑰,請(qǐng)類似如下操作:1、在“NumberBase〞組合框中選擇進(jìn)制為10;2、單擊“Start〞按鈕,然后隨意移動(dòng)鼠標(biāo)直到提示信息框出現(xiàn),以獲取一個(gè)隨機(jī)數(shù)種子;3、在“KeySize(Bits)〞編輯框中輸入32;4、單擊“Generate〞按鈕生成;5、復(fù)制“Prime(P)〞編輯框中的內(nèi)容到“PublicExp.(E)〞編輯框;6、在“NumberBase〞組合框中選擇進(jìn)制為16;7、記錄下“Prime(P)〞編輯框中的十六進(jìn)制文本內(nèi)容。8、再次重復(fù)第2步;9、在“KeySize(Bits)〞編輯框中輸入您所希望的密鑰位數(shù),從32到4096,位數(shù)越多平安性也高,但運(yùn)算速度越慢,一般選擇1024位足夠了;10、單擊“Generate〞按鈕生成;11、單擊“Test〞按鈕測(cè)試,在“Messagetoencrypt〞編輯框中隨意輸入一段文本,然后單擊“Encrypt〞按鈕加密,再單擊“Decrypt〞按鈕解密,看解密后的結(jié)果是否和所輸入的一致,如果一致表示所生成的RSA密鑰可用,否那么需要重新生成;12、到此生成完成,“PrivateExp.(D)〞編輯框中的內(nèi)容為私鑰,第7步所記錄的內(nèi)容為公鑰,“Modulus(N)〞編輯框中的內(nèi)容為公共模數(shù),請(qǐng)將上述三段十六進(jìn)制文本保存起來即可。③一個(gè)簡(jiǎn)單的RSA注冊(cè)機(jī)例如:我們已通過上述RSA工具得到以下三個(gè)變量:公鑰:20063私鑰:7FC4638275AF6B27AFD040FED32A941D227154ECDE37ABFF73D72DB50F9FC70C75BC3AF0EC26016BC706D953A9C5D6831E0DDD27B42A182CB92A6E426693511E42EB0BF9D64459809D5EC305E13B2A85BA004BA934232305D3DA1205E7AD1D01744BBCF286B23D64CC68371FDD39DAA43861920DA3DE5F9335A77983BFD08A83公共模數(shù):CEB774FCCE9DB84A4452A0774264FC55F35A8D8AA9D1FC5EBD3E0880B7B62A4EF834FD6E855CD84A4D04F3BBDE32180FC3EE45AB5582C2320A6575C6ECF923A24EAF59F22F930631347E0E3B0477A89FCE22FE741F5053EC5320AAF6489CC407056361F01E031A02DB52CB0CBDFBB11F72C340354C6CAB78D97630EB8A6A5431初始化代碼如下:注冊(cè)窗口設(shè)計(jì)界面如下:注冊(cè)按鈕代碼如下:上面的程序窗口插在用戶的程序中,當(dāng)需要注冊(cè)時(shí)即彈出注冊(cè)。作者手中的注冊(cè)機(jī)軟件界面如下:〔注意保密〕生成按鈕代碼如下:〔注意保密〕上述程序已在易語言4.0中運(yùn)行通過。運(yùn)行抓圖如下所示:加密第7定理:RSA算法雖然很強(qiáng),但弱在鑰匙文件如何保密上。④算法實(shí)現(xiàn)中的考前須知上述代碼中取硬件碼的命令沒有采用重復(fù)取,而只取了一次,在實(shí)際操作中需要正規(guī)地多取幾次,獲取硬件碼失敗也要作相應(yīng)的默認(rèn)處理。并且硬件碼好要轉(zhuǎn)換為另一串字符串。上述代碼中所有字串均未作分解處理,實(shí)際編程中需要分解,且分別隱藏到程序各處。最好也加上密。上述代碼中注冊(cè)碼文本較長(zhǎng),可直接讀取一個(gè)文本文件進(jìn)行比擬。即生成的注冊(cè)碼存在一個(gè)文本文件中,在點(diǎn)擊注冊(cè)按鈕后,直接找這個(gè)文本文件的內(nèi)容進(jìn)行比照。文本文件的文件名可以是硬件號(hào)的名稱。上述是根本算法演示,其中的注冊(cè)算法還可以再進(jìn)行加工,變得更復(fù)雜一些。上述中注有〔注意保密〕字樣的代碼與程序需要軟件作者嚴(yán)格保密,不對(duì)外公開。大家再看一個(gè)易語言大獎(jiǎng)賽獲獎(jiǎng)作品:“家電維修〞的例子,大家也可以在易語言新建窗口中找到這個(gè)程序,看看注冊(cè)窗口的代碼吧,如果您按這樣的做法去發(fā)布軟件,會(huì)有什么平安性可言呢。⑤設(shè)計(jì)RSA的變形算法重要提示:上述是對(duì)RSA整體進(jìn)行一次性驗(yàn)證,雖說RSA是一個(gè)非常強(qiáng)的加密算法,但是這樣的算法太簡(jiǎn)單,很容易被破解,那么需要通過以下的方法進(jìn)行變形。以下所舉的例子只是一個(gè)參考,你自己的方法越乖僻越變態(tài)越好。例如,可以采用分解RSA算法,每次只驗(yàn)證一小局部,以保證在程序的各個(gè)地方進(jìn)行不同種類的驗(yàn)證,返回的值有的可設(shè)計(jì)為數(shù)值型,有的可設(shè)計(jì)為邏輯形,以利于在程序中不同地方調(diào)用,調(diào)用后可以根據(jù)數(shù)據(jù)進(jìn)行運(yùn)算,如果是破解版,那么使用破解版的人得出的結(jié)果一定是錯(cuò)誤的。采用雙RSA密匙、多RSA碼也是個(gè)好方法,但最好兩者之間再混合一下,采用RSA與數(shù)值計(jì)算支持庫(kù)混合的方法可以加強(qiáng)加密強(qiáng)度。另外,密匙字串需要分開存放,全局變量中放一些,程序集變最中放一些,局部變量中放一些,常量中放一些,字符串一定要打亂,不可存為一個(gè)變量中,還可以RSA之上再加密,如RSA密鑰是加密格式的,驗(yàn)證完后立即清變量……要注意的事項(xiàng)還是很多,一定要考慮周密一些,即要到達(dá)加密的目的,也不要太復(fù)雜了,以免自己也被搞糊涂了。如果有錯(cuò)誤,誤將正版用戶當(dāng)盜版用戶對(duì)待就不太好了。⑥⑦⑧⑨⑩3.?dāng)?shù)值計(jì)算支持庫(kù)易語言提供的數(shù)值計(jì)算支持庫(kù)很有特色,其特點(diǎn)就是可以計(jì)算任意位數(shù),因此大家可以根據(jù)這個(gè)特性來制作加密算法,考慮到奸人如果制作一個(gè)注冊(cè)機(jī)就必須去研究易語言,及易語言的數(shù)值計(jì)算支持庫(kù)才能去破解,但即使這樣,也不能輕松就能寫出注冊(cè)機(jī),試想一下,數(shù)值計(jì)算支持庫(kù)本身就花了很長(zhǎng)時(shí)間寫出,因此奸人們是無論如何也是制造不出注冊(cè)機(jī)的。并且一般來說,奸人如果出注冊(cè)機(jī),一般都希望文件小一些,從而也不會(huì)用易語言寫注冊(cè)機(jī)程序,一般采用C語言寫,即使寫了也要帶上很大的系統(tǒng)支持庫(kù)與數(shù)值計(jì)算支持庫(kù),太累了吧,哈哈。在此建議的是將RSA算法與數(shù)值計(jì)算支持庫(kù)相結(jié)合的方法,這樣的注冊(cè)機(jī)根本上就不會(huì)再有了,只要防止內(nèi)存注冊(cè)機(jī)出現(xiàn)即可。內(nèi)存注冊(cè)機(jī)的防止可以通過不進(jìn)行判斷的方式解決。而防止暴力破解是通過對(duì)軟件加殼后,在外部CRC驗(yàn)證保證程序完整性,程序內(nèi)部再多重檢查,加上幾個(gè)暗樁,這樣通過層層把關(guān),最終就可以確保萬無一失了。由于PE文件格式的局限性,任何加密程序都有可能被破解,我們所要做的僅僅是加強(qiáng)加密的復(fù)雜度,讓奸人知難而退,消耗他們的時(shí)間與精力,浪費(fèi)他的時(shí)間就是在殺他。七.給奸人一些教訓(xùn)實(shí)際上,我們的用戶已區(qū)分為以下四種人:共享試用者、正版注冊(cè)者、破解使用者、破解版使用者。當(dāng)我們需要給破解者一些教訓(xùn)時(shí),一定要將正常用戶區(qū)分開,否那么正常用戶有所損失,那么就根本不會(huì)來購(gòu)置您的軟件,您的聲譽(yù)也會(huì)下降的。1.給破解者的教訓(xùn)有句名言:“軟件很生氣,后果很嚴(yán)重!〞。給破解者的教訓(xùn)要深刻一些,最好讓他刻骨銘心,永世不忘。對(duì)于一個(gè)破解新手來說,很草率地去破解一個(gè)成熟的軟件,對(duì)他來說是災(zāi)難的開始,給破解者制造麻煩,讓破解者知難而退是一件有樂趣的事。這事一定不要忘記做哦,否那么我這文章就白寫了。一個(gè)通常的教訓(xùn)如下:但如果你想變態(tài)地去教訓(xùn)奸人,那么我也沒有方法阻止你了,畢竟你已在授權(quán)文件中警告過他不要?jiǎng)幽愕臇|西了。哈哈。下面是將文件刪除到回收站,及清空回收站的代碼:2.給破解版使用者的教訓(xùn)上面是對(duì)于奸人的教訓(xùn),但對(duì)于一般破解使用者來說,也要給予配當(dāng)?shù)膽土P,但不能太過嚴(yán)厲,不能對(duì)他們的機(jī)器造成嚴(yán)重破壞。一般來說給予一次廣告時(shí)機(jī),或設(shè)置一些小損失即可。常見的有以下,其他的請(qǐng)你根據(jù)你自己軟件的內(nèi)容進(jìn)行適當(dāng)?shù)膭?chuàng)意吧。第1種:建議發(fā)現(xiàn)是破解版使用者在用時(shí),可為你的軟件加一些貼面廣告,這樣您會(huì)有一些收益,以補(bǔ)充你的一些損失。第2種:建議一段時(shí)間讓他正常用,這破解版使用者如果較多的內(nèi)容,說明他很在乎你這個(gè)軟件,并且認(rèn)為破解正常,已可以正常使用了,這時(shí)等他的數(shù)據(jù)量大時(shí),將數(shù)據(jù)庫(kù)鎖定,他一定欲哭無淚,只好請(qǐng)你幫他解鎖,購(gòu)置您的軟件了。易表的作者就是用這種方法實(shí)際上這是一種暗樁操作,即在發(fā)布幾個(gè)月后再檢查是否是正版,或在數(shù)據(jù)庫(kù)存儲(chǔ)到一定時(shí)間后再檢查是否是正版用戶,這樣的加密方法值得大家學(xué)習(xí)??赡苣苌鷼?,想讓破解版使用者得不到好的下場(chǎng),最好不要?jiǎng)h除重要數(shù)據(jù)。且我個(gè)人是不建議大家這樣做的。加密第8定理:加密的結(jié)果是雙贏才行,用戶真正認(rèn)識(shí)到了來注冊(cè),同時(shí)也能用上正版了。3.行為不要過火作者給奸人一些教訓(xùn)是正當(dāng)?shù)?,可是軟件?huì)存在BUG,寫加密程序也會(huì)有BUG存在。如果將正版用戶的數(shù)據(jù)損壞了就不太好了,畢竟大家還是要靠口碑生存的。即使您是對(duì)的,但如果盜版用戶多,那么如果太嚴(yán)厲了,就沒有人更敢用你的軟件了。如江民事件,就是前車〔JU〕之鑒。如果您能搞出一個(gè)即讓破解者假象破解,為你作宜傳,而又能爭(zhēng)取到用戶,那樣是最皆大歡喜的了。易表就是一個(gè)例子,他的軟件外表上被破解了,但實(shí)際上還存在暗樁,結(jié)果用了一段時(shí)間后,用戶的重要數(shù)據(jù)被鎖定了,只能乖乖注冊(cè)。加密第9定理:口碑好的軟件才能傳播得更廣。八.網(wǎng)絡(luò)驗(yàn)證法現(xiàn)在有的人說網(wǎng)絡(luò)驗(yàn)證法是最可靠,且是從未被破解過的加密方法。確實(shí)這種方法很難破解,因?yàn)樽?cè)碼始終是在作者手上的,這樣怎么去破解呀。加密第10定理:一個(gè)好的網(wǎng)絡(luò)驗(yàn)證法至今沒有人能破解。1.實(shí)現(xiàn)的原理網(wǎng)絡(luò)驗(yàn)證法有些類似于網(wǎng)絡(luò)游戲中的驗(yàn)證。網(wǎng)絡(luò)驗(yàn)證方法,即建立一個(gè)網(wǎng)絡(luò)效勞器程序,由軟件作者自己保管,運(yùn)行于效勞器端,客戶端通過編程放在共享軟件中。客戶所拿到的共享軟件程序中帶有客戶端程序,當(dāng)需要驗(yàn)證時(shí),客戶端的硬件碼通過網(wǎng)絡(luò)傳送到效勞器中,效勞端程序?qū)⒓用芎蟮淖?cè)碼通過網(wǎng)絡(luò)傳回給客戶,客戶軟件中的客戶端組件接收到后,在內(nèi)存中解密進(jìn)行判定,如果注冊(cè)了就通過,否那么就失敗。作者的效勞器端上保存了用戶的注冊(cè)碼數(shù)據(jù)庫(kù),隨時(shí)供驗(yàn)證之用。在此可以防止以下被破解的事況:首先,通過網(wǎng)絡(luò)驗(yàn)證即使奸人攔截到了注冊(cè)碼,也是加密過的,如果去解密也很困難,并且效勞器是由軟件作者保管的,這樣奸人可能始終接觸不到注冊(cè)碼?;蛘咚W(xué)習(xí)網(wǎng)絡(luò)攔截也說不定。其次可以預(yù)防暴力破解,軟件作者可將重要數(shù)據(jù)直接放在效勞器中,通過不停驗(yàn)證取得數(shù)據(jù),從而被破解的客戶端被暴力破解后立即成為無效軟件。再次,即使軟件被破解了,軟件的作者也可以較輕松地升級(jí)客戶端程序,及升級(jí)效勞器端的注冊(cè)碼數(shù)據(jù)庫(kù),從而減少破解造成的損失,讓破解者陰謀失敗。最后,軟件作者可以輕松看到監(jiān)視客戶端的使用情,如果發(fā)現(xiàn)有重復(fù)名稱的驗(yàn)證,或不正常地取數(shù)據(jù),就可以立即停止客戶的使用。2.存在的幾個(gè)問題1.用戶的程序必須是需要通過上網(wǎng)才能使用的,不上網(wǎng),將不能驗(yàn)證,也不能使用。2.軟件作者必須要保證效勞器的穩(wěn)定,如果效勞器死機(jī)或掉線,那么客戶機(jī)將不能使用,因此也要具備一定的防攻擊能力。效勞器維護(hù)人員技術(shù)要求較高,要有一定的效勞器反黑經(jīng)驗(yàn)。3.網(wǎng)絡(luò)驗(yàn)證也不能一次全部驗(yàn)證,這樣并不保險(xiǎn),需要分段進(jìn)行驗(yàn)證。并且給予暗樁的設(shè)計(jì)。4.可能存在客戶太多,一個(gè)效勞器接收不過來,需要兩個(gè)以上效勞器的情況,或就直接架設(shè)兩個(gè)以上效勞器,用于備用?,F(xiàn)在的電信與網(wǎng)通經(jīng)常打架,可考慮一個(gè)接電信網(wǎng),一個(gè)架網(wǎng)通網(wǎng),以備不時(shí)之需。九.加密狗加密本文的目的是讓大家了解加密狗,它并不是那樣神密而可怕,大家一定要克服恐懼感哦。加密狗是個(gè)極其好用的工具,根本上如果用上一個(gè)好的型號(hào)的加密狗,可以為您省不少心,想想看吧,有一個(gè)技術(shù)團(tuán)隊(duì)在身后做支持呢。易語言論壇上有人說:“不要花太多心思到加密上,而是要完善軟件功能!〞當(dāng)然將心思放在加密上我也不想,這都是拜小人所賜呀。因此如果您想節(jié)約時(shí)間的話,只要買個(gè)好狗,加一個(gè)殼就可以了。加密第11定理:如果您想不要花太多心思到加密上而想要一個(gè)很強(qiáng)的加密,加密狗是最好的選擇。說老實(shí)話,現(xiàn)在的狗都比以前好多了,以前還聽說有狗被防制或模擬了,現(xiàn)在的狗呀,越做越好了。總之,大家放心用吧。軟件狗是一種智能型加密工具。它是一個(gè)安裝在并口、串口等接口上的硬件電路,同時(shí)有一套使用于各種語言的接口軟件和工具軟件。當(dāng)被狗保護(hù)的軟件運(yùn)行時(shí),程序向插在計(jì)算機(jī)上的軟件狗發(fā)出查詢命令,軟件狗迅速計(jì)算查詢并給出響應(yīng),正確的響應(yīng)保證軟件繼續(xù)運(yùn)行。如果沒有軟件狗,程序?qū)⒉荒苓\(yùn)行,復(fù)雜的軟硬件技術(shù)結(jié)合在一起防止軟件盜版。真正有商業(yè)價(jià)值得軟件一般都用軟件狗來保護(hù)。平時(shí)常見的狗主要有“洋狗〞〔國(guó)外狗〕和“土狗〞〔國(guó)產(chǎn)狗〕。這里國(guó)外狗主要指美國(guó)的彩虹和以色列的HASP,國(guó)產(chǎn)狗主要有金天地〔現(xiàn)在與美國(guó)彩虹合資,叫“彩虹天地〞〕、深思、尖石??偟恼f來,加密狗在軟件接口、加殼、反跟蹤等方面技術(shù)較好,根本上復(fù)制很困難。1.加密狗的選用加密狗一般分為串口狗與USB加密狗。串口即打印口,為16針口可以同進(jìn)串接多個(gè)串口型加密狗。如下列圖所示:現(xiàn)在也已有一種微型加密狗的推出:USB口為直接插入U(xiǎn)SB接口,每個(gè)接口只能插一個(gè)。如下列圖所示:從目前的資料來看,一般加密狗產(chǎn)商都想淘汰并口型的加密狗,而主推USB口的加密狗。一只USB加密狗的批發(fā)價(jià)現(xiàn)在大50元左右。USB設(shè)備是專門為多設(shè)備連接而設(shè)計(jì),有著嚴(yán)格的標(biāo)準(zhǔn),從接口本身就防止了設(shè)備間的沖突。所以USB狗不會(huì)與遵守USB標(biāo)準(zhǔn)的設(shè)備有任何沖突。而因?yàn)椴⒖谥皇菫閱卧O(shè)備工作設(shè)計(jì)的,很多并口設(shè)備并沒有考慮與其它外設(shè)公用并口的情況,為降低本錢,往往獨(dú)占了并口資源,使得并口的其它設(shè)備不能正常工作。因此建議使用USB狗較好。USB接口本身具有電源線,可為外設(shè)提供穩(wěn)定的工作電源,從而對(duì)USB狗的工作電壓、功耗等要求大大降低,加密狗的工作條件得到很大改善。而并口本身沒有電源線,并口狗要依靠并口的信號(hào)線或數(shù)據(jù)線提供電源,所以在因并口負(fù)載能力低等情況下,并口狗的芯片因得不到正常供電很難保證正常工作。因此建議使用USB狗較好。2.加密狗加殼法一般的加密狗軟件都提供傻瓜加密工具:加殼工具。這種殼是針對(duì)加密狗進(jìn)行的。加密狗有內(nèi)嵌和外殼兩種加密方式。外殼加密就是對(duì)exe、exp、數(shù)據(jù)文件直接進(jìn)行加密的方式;內(nèi)嵌加密是在各個(gè)語言環(huán)境中直接以函數(shù)調(diào)用形式出現(xiàn)的加密方式。操作系統(tǒng)支持Dos16/32、Windows3x/9x/ME/NT/2000/XP的各種版本,如有的狗提供有37種內(nèi)嵌語言加密模塊,四種外殼加密工具。加殼式加密的軟件運(yùn)行界面與前述的普通殼的加密界面是類似的,也是要提交需要加密的原文件,然后會(huì)生成加密后的新文件,這個(gè)大家不認(rèn)為太神密了。內(nèi)嵌一般采用供貨商提供DLL,就是API調(diào)用,以到達(dá)調(diào)用加密模塊的目的。各個(gè)狗的調(diào)用都不相同,一般會(huì)提供C語言或VB語言調(diào)用的實(shí)例,大家模仿這類程序即可。有論壇人士說:“心思放太多到反破解上也不是一件好事?。〃?,我覺得給別人破解了更不好,是吧!如果不想放太多心思在反破解上,建議還是采取加密狗加殼的方法,方便、快捷,其他時(shí)間就可以研究如何將軟件完善就行了。因?yàn)橛幸粋€(gè)加密的團(tuán)隊(duì)在支持你呀。3.加密狗寫存儲(chǔ)器法有的加密狗帶有存儲(chǔ)器,大小不一,有的是1024字節(jié),這樣大家也可以將一些重要的信息放在這里面。實(shí)際上您也可以將RSA的一些數(shù)據(jù)放在這里,以供程序雙重檢查。同樣也是通過DLL調(diào)用的。十.加密算法策略本章所要講述的是:加密不要拘泥于一種形式,要懂得變化之道,這樣才能讓破解者無從下手,這是我的軟件加密之最精髓的一點(diǎn)。前文所說只是一些最根底的知識(shí),大家還需要一點(diǎn)變通之法,加密方法越奇怪越好,變態(tài)一些也沒有關(guān)系??催^?倚天屠龍記?的話,可以想想張三豐教張無忌太極拳時(shí)的那段對(duì)話,哈哈。1.易數(shù)據(jù)庫(kù)密碼怎么瀉露了易語言論壇上個(gè)別用戶說自己的數(shù)據(jù)庫(kù)密碼被別人知道了,那么我們看一下他是如何加數(shù)據(jù)庫(kù)密碼的,代碼如下:翻開(取運(yùn)行目錄()+“\工資庫(kù).edb〞,,,,,“K39DKEKD944〞,)好了,我們編譯一下,編譯成一個(gè)EXE文件,然后改文件后綴為TXT,這樣我們就可以不用PE專業(yè)工具,而是直接用記事本翻開了。然后在記事本中搜索這個(gè)密碼,大家看到了什么?看下列圖中反白的局部:暈死,你這樣編程,當(dāng)然數(shù)據(jù)庫(kù)密碼會(huì)被別人知道了。將前述代碼改動(dòng)一下,將密碼分解為假設(shè)干單個(gè)字符串,然后分別放于全局變量中定義一局部,再在程序集變量中放一局部,這樣就不會(huì)有問題了。如下面的試驗(yàn),只改動(dòng)一小局部:口令=“K〞+到文本(13×3)+字符(68)+“K〞+“E〞+“K〞+“D〞+到文本(18÷2)+到文本(22+22)翻開(取運(yùn)行目錄()+“\工資庫(kù).edb〞,,,,,口令,)再按前述的查看方法,可以看到,數(shù)據(jù)庫(kù)前后的密碼被處理過的局部都看不到了,如下列圖所示:大家應(yīng)該明白了吧,如果上述代碼全部處理好的話,一定不會(huì)讓別人找到口令的。實(shí)際上,對(duì)于重要的加密口令來說,都需要分開存放,并且用取字符,位移或取反的方法,以及加減乘除的方法都可以得到一個(gè)隱藏很深的字符串。加密第12定理:相關(guān)加密的字符串一定要打亂加密。作業(yè)1:制作一個(gè)“字符串?dāng)噥y器〞,要求如下:輸入一字符串或其他類型的內(nèi)容,輸出為經(jīng)過“字符,取代碼,取反,位或,位與,加減乘除,平方,開方〞等命令隨機(jī)配合相加的易語言源代碼。界面根本如下:作業(yè)2:制作一個(gè)內(nèi)窺器,將你的密碼或加密字存入,它可以自動(dòng)分解,在編譯好的EXE文件中查找是否有相同字符串。這是自己用易語言制作的一個(gè)工具,怎么樣,比專用的工具還要好用吧。作業(yè)3:為了不給奸人創(chuàng)造溫馨舒適的破解環(huán)境,我們要混亂我們的代碼,將軟件中所有的子程序名全部替換成隨機(jī)生成的子程序名然后加上正常的備注。例如Func_3dfsa_fs32zlfv()這個(gè)函數(shù)是什么意思?恐怕只有天知道了??梢杂靡渍Z言寫一個(gè)易語言“名稱混亂器〞,根本思路為:將易語言源代碼復(fù)制為文本,然后用混亂器將名稱一一對(duì)應(yīng)進(jìn)行混亂,然后粘貼回易語言中,這樣子程序名稱和變量名稱等都變?yōu)椴豢深A(yù)知的字符了,因此加強(qiáng)了保密性。但注意,只有當(dāng)你要發(fā)布軟件時(shí)才使用之,而且一定注意備份源代碼。否那么當(dāng)你看不懂你自己的代碼時(shí)可別怪我呀!字符串位置內(nèi)容是否在EXE中找到是否在資源駭客中找到組件名稱屬性可看到組件標(biāo)記屬性組件內(nèi)容屬性組件標(biāo)題屬性菜單名稱組件列表工程屬性可看到全局變量名稱看不到全局變量值內(nèi)容程序集變量名稱程序集變量值內(nèi)容局部變量名稱局部變量值內(nèi)容常量名稱常量值內(nèi)容可看到自定義數(shù)據(jù)類型名稱DLL命令名稱可看到DLL庫(kù)文件名在DLL庫(kù)中對(duì)應(yīng)命令名DLL參數(shù)名圖片資源名稱聲音資源名稱程序集名稱子程序名稱子程序參數(shù)名稱子程序變量名稱模塊引用名稱過濾器內(nèi)容可看到信息框文本可看到2.利用吳氏加密算法我們將吳濤在易語言中提供的自有加密算法稱之為吳氏算法。吳濤提供了兩種加自有加密算法:一種是易數(shù)據(jù)庫(kù)的加密。還有一種是配置菜單中的易語言源代碼口令保護(hù)。易語言的易用性就在這里了,大家一定要充分利用這些現(xiàn)成的東西。使用易語言自帶的易數(shù)據(jù)庫(kù)的加密功能目前是非常可靠的,這是吳濤研制的自有算法,目前還沒有破解易數(shù)據(jù)庫(kù)的工具推出。這樣就使得一些重要的東西存放在加密后的易數(shù)據(jù)庫(kù)中十分平安。易語言源代碼口令保護(hù)也是一個(gè)吳濤自有算法,加密后的源代碼連易語言公司也不能解密。因此我一般用它保護(hù)注冊(cè)機(jī)和商業(yè)程序,所以我的注冊(cè)機(jī)和商業(yè)程序的源代碼在我用過的每臺(tái)電腦中都有,但口令只有我知道,沒有口令保證打不開,哈哈。下列圖為使用配置菜單后彈出的窗口,大家可以為易語言源代碼加上保護(hù)口令。3.海島挖寶聽過海盜船長(zhǎng)的故事吧,故事中海盜將寶物分開存放,這樣即使找到一處其他地方也沒有損失,而且不僅如此,他們也將藏寶圖也分成一塊一塊的存放。金鹿鼎記的小說總看過吧,皇帝將藏寶圖分八冊(cè)存放,一一找到是非常困難的哦。韋小寶這個(gè)天才也花了兩三年的時(shí)間才找到全部哦。軟件中一些比擬重要的文本型字符的保護(hù)也是這樣,你可以分開位置存放,分段、分開類型存放,用時(shí)再轉(zhuǎn)換數(shù)據(jù)類型。分開存放是指分不同的全局變量、程序集變量與局部變量存放。加密第13定理:相關(guān)加密的局部一定要分開存放。對(duì)于RSA驗(yàn)證也要這樣不要一次性地全部驗(yàn)證了,這樣一點(diǎn)意義也沒有。應(yīng)該是軟件啟動(dòng)時(shí)驗(yàn)證一局部,在軟件運(yùn)行中驗(yàn)證一局部。在Debug的手冊(cè)里可以看到Debug工具的局限:第一個(gè)局限是只能下4個(gè)內(nèi)存區(qū)域的斷點(diǎn),每個(gè)斷點(diǎn)不能控制超過兩個(gè)字節(jié),這樣內(nèi)存斷點(diǎn)不能控制超過16個(gè)字節(jié)的區(qū)域。假設(shè)你的注冊(cè)局部有300行,你可以分成30個(gè)子程序調(diào)用或重復(fù)的子程序。放一些垃圾代碼也不會(huì)損失什么。作業(yè):將RSA驗(yàn)證的一次性驗(yàn)證改為分三次驗(yàn)證,并且每次返回不同的數(shù)據(jù)類型。4.隨機(jī)驗(yàn)證隨機(jī)驗(yàn)證很重要,例如你的一處驗(yàn)證是一直存在的,奸人就很容易地下斷點(diǎn)跟蹤了。因此在軟件啟動(dòng)時(shí)進(jìn)行一次正常驗(yàn)證外,其他情況下的驗(yàn)證最好是隨機(jī)的,在30分之一或50分之一的時(shí)機(jī)進(jìn)行驗(yàn)證,這樣奸人會(huì)不停地試你的軟件在哪一處進(jìn)行了驗(yàn)證,因此破解的時(shí)間會(huì)相當(dāng)?shù)亻L(zhǎng)。加密第14定理:足夠多的隨機(jī)驗(yàn)證足以上破解者累死。隨機(jī)驗(yàn)證包括隨機(jī)進(jìn)入不同的驗(yàn)證子程序?;螂S機(jī)最大數(shù)大一些,只有30分之一的時(shí)機(jī)驗(yàn)證?;蛟诖翱谥蟹派弦恍╊伾c底圖一樣的圖片框,這樣奸人不一定會(huì)點(diǎn)擊這里,但用戶萬一點(diǎn)中了,就會(huì)觸發(fā)驗(yàn)證。我們假設(shè)所有軟件都能被破解,包括易語言在內(nèi),那么如果他破解的速度跟不上你發(fā)布新軟件的速度,那么他永遠(yuǎn)在破最新版而累死。或者說他破解的時(shí)間比你寫一個(gè)軟件的代價(jià)大,這時(shí)還不如他直接寫這個(gè)軟件來得合算。反破解的任務(wù)之一就是讓奸人累死,或浪費(fèi)他的生命。下面的方法也可以使用:你可以在讀到待驗(yàn)證的注冊(cè)碼、公鑰、注冊(cè)文件后,通過定義10000個(gè)數(shù)組,存入上述同樣的內(nèi)容以備以后進(jìn)行驗(yàn)證,這最多浪費(fèi)一些內(nèi)存。驗(yàn)證時(shí)隨機(jī)使用其中的一個(gè)進(jìn)行驗(yàn)證,由于奸人不知你用的是數(shù)組中的哪一個(gè)進(jìn)行的比對(duì),而且是隨機(jī)的,每次驗(yàn)證的值都不一樣,不讓奸人吐血才怪呢。計(jì)次循環(huán)首〔10000,計(jì)次〕數(shù)組[計(jì)次]=“123456〞’復(fù)制一萬個(gè)公開注冊(cè)碼或公鑰,破解者知道也無所謂。計(jì)次循環(huán)尾數(shù)組[取隨機(jī)數(shù)〔1,10000〕]你不要立刻檢查注冊(cè)碼,10000份拷貝你只要以后隨機(jī)找一份用就行了,破解的人不知道你正在用的是那一個(gè),同時(shí)你可以事先編好且運(yùn)行時(shí)不斷使用一些假的讀取注冊(cè)碼數(shù)組的調(diào)用干擾破解者。這種方法對(duì)程序的性能影響微缺乏到,只是浪費(fèi)一點(diǎn)內(nèi)存。因?yàn)镈ebug對(duì)內(nèi)存下斷點(diǎn)的局限,這種情況他要下斷點(diǎn),累死的就是破解的人了。5.不同權(quán)限驗(yàn)證在啟動(dòng)時(shí)進(jìn)行一次驗(yàn)證是非常必要的,這樣讓奸人知道確實(shí)是驗(yàn)證了,以讓他心理放松警惕,而這次的驗(yàn)證只是一局部驗(yàn)證,并沒有完全驗(yàn)證。還有的建議在啟動(dòng)時(shí)將注冊(cè)信息讀入后不要進(jìn)行驗(yàn)證,保不定在哪里進(jìn)行驗(yàn)證,個(gè)人認(rèn)為這樣讓破解者提高了警惕性,會(huì)認(rèn)為軟件作者很有經(jīng)驗(yàn)。麻痹敵人也很重要呀。例如,在啟動(dòng)時(shí)驗(yàn)證通過一次,驗(yàn)證級(jí)別加強(qiáng)一級(jí),然后再在其他的地方再進(jìn)行驗(yàn)證就可以了。下面代碼是確認(rèn)了一個(gè)級(jí)別計(jì)次循環(huán)首(到數(shù)值〔驗(yàn)證1〕,)已注冊(cè)=1計(jì)次循環(huán)尾〔〕…………在另一個(gè)觸發(fā)子程序中再通過這個(gè)級(jí)別再驗(yàn)證:計(jì)次循環(huán)首〔已注冊(cè)〕計(jì)次循環(huán)首(到數(shù)值〔驗(yàn)證2〕,)已注冊(cè)=2跳出循環(huán)〔〕計(jì)次循環(huán)尾〔〕跳出循環(huán)〔〕計(jì)次循環(huán)尾〔〕在其他觸發(fā)子程序中再通過這個(gè)級(jí)別再驗(yàn)證:計(jì)次循環(huán)首〔已注冊(cè)〕計(jì)次循環(huán)首(到數(shù)值〔驗(yàn)證3〕,)已注冊(cè)=3跳出循環(huán)〔〕計(jì)次循環(huán)尾〔〕跳出循環(huán)〔〕計(jì)次循環(huán)尾〔〕有時(shí)也可以將級(jí)別降一降,怎么降,當(dāng)然是不考慮級(jí)別直接驗(yàn)證了:6.忽悠型的垃圾驗(yàn)證代碼前面已講過花指令的原理,在程序中人為地再放一些垃圾代碼以忽悠奸人也是一個(gè)好方法。垃圾代碼就是一些假的驗(yàn)證代碼,根本上是明文的,這樣的代碼上百上千,足以讓奸人累死。加密第15定理:大量添加垃圾代碼雖然是無奈之舉,但很管用。作業(yè)1:制作一個(gè)常量迷幻器要求:制作一個(gè)常量代碼自動(dòng)生成器??呻S機(jī)生成成百上千個(gè)易語言源代碼形式,可直接拷貝到易語言中成為常量。變量也可以這樣制作。寫好這樣一個(gè)程序后,就可以自動(dòng)生成垃圾代碼,然后復(fù)制,粘貼到易語言的常量表中即可。如下列圖所示:變量也可以這樣生成,不過生成的變量可以任意拷貝為全局變量,或程序集變量,或局部變量。制作時(shí)的名稱可以為中文名稱,直接編譯后不會(huì)在EXE文件中找到同名的中文名稱。因此您可以放心地將這些名稱定義為:“垃圾常量1〞、“垃圾變量1〞等等以示與正常代碼進(jìn)行區(qū)別。作業(yè)2:制作一個(gè)代碼迷亂器本次作業(yè)性質(zhì)同上,也是自動(dòng)生成易語言的一些無用垃圾代碼,以迷亂奸人的破解,讓他找到的全是垃圾代碼,從而大大延長(zhǎng)了破解時(shí)間。通過直接拷貝編輯框中的內(nèi)容,粘貼到您的代碼中,可自動(dòng)完成任務(wù),如下列圖所示:上圖所生成的是一些明文的加密方法的垃圾代碼,讓奸人去研究這些垃圾吧。上述子程序名稱最好也有時(shí)調(diào)用一下,反正不會(huì)真正產(chǎn)生作用的,用多線程調(diào)用最好?;蛘吣綍r(shí)注意多收集一些別人用于加密時(shí)的子程序,拷貝到一個(gè)易語言程序中,保存,這樣的代碼作為垃圾代碼放在你有用的程序中,雖然增加了一些程序的體積,但平安性是大大提高了。并且根本上沒有犧牲軟件性能與穩(wěn)定性。7.偽驗(yàn)證技術(shù)還是先舉一個(gè)例子說明吧,易表軟件在10.0版本前已發(fā)現(xiàn)有大量的注冊(cè)機(jī)存在,于是易表作者其后改變了加密方式,易表10.0推出后還是出現(xiàn)了注冊(cè)機(jī),并且這種注冊(cè)機(jī)注冊(cè)過的軟件可以使用。于是有些用戶用注冊(cè)機(jī)取得的注冊(cè)碼使用了,過了一段時(shí)間,當(dāng)盜版用戶將重要數(shù)據(jù)存入易表后,突然有一天數(shù)據(jù)庫(kù)被鎖定了,于是只好注冊(cè)易表,并且讓易表作者為數(shù)據(jù)庫(kù)解鎖。從這里可以根本上判定易表新版本采用了偽驗(yàn)證技術(shù),即在較為明顯的地方提供了一級(jí)驗(yàn)證,這種驗(yàn)證方式?jīng)]有經(jīng)過太強(qiáng)的加密,而二級(jí)驗(yàn)證在一定的條件下才觸發(fā),而這個(gè)條件是檢查到了用戶輸入了重要的數(shù)據(jù),或大量的數(shù)據(jù),或使用次數(shù)較多。根本原理是注冊(cè)文件由前后兩個(gè)注冊(cè)碼拼接而成。一般情況下只進(jìn)行第一個(gè)注冊(cè)碼的驗(yàn)證,而當(dāng)條件成熟時(shí)進(jìn)行第二個(gè)注冊(cè)碼驗(yàn)證。這是一種雙贏的策略,易表作者即收到了注冊(cè)費(fèi),付費(fèi)的人還會(huì)抱歉,并且感謝易表作者。哈哈,大家要學(xué)習(xí)這招哦。但本方法對(duì)于數(shù)據(jù)庫(kù)應(yīng)用及數(shù)據(jù)量大時(shí)檢查最好,而對(duì)于一些沒有生成數(shù)據(jù)的用戶無效。加密第16定理:偽驗(yàn)證可以迷惑一般破解者,甚至自己發(fā)布一個(gè)偽注冊(cè)機(jī)。8.定時(shí)驗(yàn)證、延時(shí)驗(yàn)證、客戶數(shù)據(jù)集累驗(yàn)證過一段時(shí)間后再驗(yàn)證,如你在2005年1月發(fā)布一個(gè)軟件,那么就內(nèi)定2005年6月后觸發(fā)驗(yàn)證時(shí)機(jī)?;蚰能浖且粋€(gè)數(shù)據(jù)庫(kù)產(chǎn)品,那么您可以在程序中設(shè)置如果數(shù)據(jù)庫(kù)大于5MB時(shí)就進(jìn)行驗(yàn)證,并且最好您能確定這些數(shù)據(jù)是不重復(fù)的,刻意參加的。如易表設(shè)置了偽驗(yàn)證,這時(shí)市場(chǎng)上出現(xiàn)了新的注冊(cè)機(jī),當(dāng)用戶用這個(gè)注冊(cè)機(jī)后,提示是注冊(cè)成功了,但當(dāng)用戶輸入重要數(shù)據(jù)后的某個(gè)日子,突然打不開數(shù)據(jù)庫(kù)了,用戶很著急,因?yàn)橐詾槭瞧平獬晒α?,所以將重要的資料輸入了,只能拿錢向易表作者進(jìn)行注冊(cè)了。而且還千恩萬謝,懊悔自己不該用破解。哈哈,一舉兩得呀。這個(gè)方法對(duì)于數(shù)據(jù)庫(kù)應(yīng)用軟件來說是絕好的方法。作業(yè):制作一個(gè)算法程序放在你的數(shù)據(jù)庫(kù)軟件中,這個(gè)子程序可以統(tǒng)計(jì)你的數(shù)據(jù)庫(kù)軟件使用時(shí),用戶輸入的是否是拷貝的東西,還是正常的數(shù)據(jù)。當(dāng)統(tǒng)計(jì)到1000時(shí)觸發(fā)驗(yàn)證。方法思路為:可以通過查看用戶有沒有使用復(fù)制與粘貼快捷鍵,或資料進(jìn)行排序,如果有大量重復(fù)的,就說明是奸人在拷貝數(shù)據(jù)破解,否那么是一個(gè)資料一個(gè)資料的輸入的,說明是正常使用的重要資料,這時(shí)進(jìn)行比照就好了。本方法對(duì)有資料的破解使用者有極好的控制作用,通過第6條的偽驗(yàn)證技術(shù)與本技術(shù)結(jié)合,那么就可以知道是不是正版用戶,并且可以鎖定數(shù)據(jù)庫(kù),等他注冊(cè)后再給他解鎖。加密第17定理:加密的結(jié)果應(yīng)該是雙贏,偽驗(yàn)證是一個(gè)上策。9.驗(yàn)證與專業(yè)知識(shí)相結(jié)合技術(shù)將驗(yàn)證與專業(yè)知識(shí)相結(jié)合,讓奸人必須學(xué)習(xí)專業(yè)知識(shí)后才能真正去破解,這樣所花的功夫比自己寫一個(gè)軟件的代價(jià)還要大,而有的專業(yè)知識(shí)不是專家是不知道的,因此是一個(gè)較好的加密方法。前述中采用了“到數(shù)值〔驗(yàn)證1〔〕〕〞這樣的代碼返回的是0或1兩者之間的一個(gè)數(shù),可以用乘法進(jìn)行混合計(jì)算,如:音量=播放位置X到數(shù)值〔驗(yàn)證1〔〕〕當(dāng)驗(yàn)證正確時(shí)返回的是1,這時(shí)的結(jié)果是正確的,否那么返回0,這時(shí)的結(jié)果為0,是錯(cuò)誤的。這樣的代碼可以混合到您的專業(yè)知識(shí)中,如:算命軟件可將天干地支、生辰八字中的某個(gè)地方進(jìn)行此類計(jì)算,計(jì)算類軟件可以將某種特殊的計(jì)算過程如此結(jié)合計(jì)算,繪圖類軟件可將繪圖中的算法局部參加此類計(jì)算,音響設(shè)計(jì)類、機(jī)床設(shè)計(jì)軟件……加密第18定理:你知道的專業(yè)知識(shí),破解者不一定了解哦。讓專業(yè)知識(shí)與驗(yàn)證相結(jié)合吧。10.偽裝,用易語言寫自有支持庫(kù)大家可以將DLL文件的擴(kuò)展名改為易語言的支持庫(kù)文件FNE擴(kuò)展名,這樣進(jìn)行非獨(dú)立編譯后,與其他FNE文件混合在一起,甚至您可以用易語言寫一個(gè)支持庫(kù),將其中一局部作為驗(yàn)證局部。易語言的支持庫(kù)文件FNE文件其實(shí)就是一個(gè)DLL文件,只不過擴(kuò)展名改變了而已,用易語言寫支持庫(kù)的方法金眼睛已發(fā)過一篇貼子,進(jìn)行過說明,請(qǐng)大家在易語言論壇上搜索金眼睛的貼子就可以找到了。作業(yè):找到金眼睛關(guān)于用易語言寫支持庫(kù)的貼子,并且自己寫一個(gè)支持庫(kù)。11.絕妙的暗樁設(shè)置應(yīng)該想到的用代碼實(shí)現(xiàn)的暗樁前面都講了不少,下面是一些特別的暗樁供奸人品味的。大家可以在一些不起眼的地方再放一些暗樁,如:在窗口最小化事件中隨機(jī)驗(yàn)證,如在某個(gè)組件鼠標(biāo)被移動(dòng)事件中驗(yàn)證,有時(shí)需要將數(shù)據(jù)完整性驗(yàn)證放在更高一級(jí)的驗(yàn)證中,不要一上來就檢查文件是否被更改。同一驗(yàn)證可以使用屢次,這樣奸人認(rèn)為你已經(jīng)驗(yàn)證過了,沒有必要會(huì)再驗(yàn)證一次,而相反這時(shí)又產(chǎn)生了驗(yàn)證,讓奸人防不勝防。如啟動(dòng)時(shí)就立即檢查程序完整性,如果發(fā)現(xiàn)被更改,那就立即退出程序,而在一些子程序中也隨機(jī)放這樣的驗(yàn)證。更多的暗樁大家自己設(shè)計(jì)最好。加密第19定理:加密重要的是暗樁的設(shè)置,破解不完全就是一個(gè)無效破解。12.發(fā)布不完整版本有的軟件作者在發(fā)布共享軟件時(shí),放在外面的是不完整版本,將更多的數(shù)據(jù)資料在注冊(cè)后提供。這樣做也可以,只是麻煩一些而已。如有的圖形制作軟件,將圖片資源另外打包,用戶注冊(cè)后再給完全版的圖片。也有的將DLL文件中的驗(yàn)證局部作了空處理,而在注冊(cè)后提供真正的注冊(cè)DLL文件及注冊(cè)碼。還有的直接將KEY文件放在了DLL文件中另外提供。加密第20定理:不要發(fā)布完整版本,以靜制動(dòng)。13.自定義算法前面講過采用RSA與數(shù)值計(jì)算支持庫(kù)交叉計(jì)算的方法,這就是一種自有的算法,如果能用上數(shù)值計(jì)算支持庫(kù)中的矩陣、等高級(jí)功能就更好了。多重RSA交叉打亂:大家也可以多用一些RSA密鑰,如用5個(gè),10個(gè)都無所謂,重要的是將這些注冊(cè)碼都

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論