易語言反破解教程說,對壹個信息框使用自定義窗口,就是自己新建壹個窗口。新窗口如何達到程序等待或者系統等待的效果?
隨機驗證很重要,比如妳的壹個驗證總是存在的,所以叛徒很容易追蹤到地下斷點。所以除了軟件啟動時的壹次正常驗證,其他情況下最好隨機驗證,30分之壹或者50分之壹的幾率,這樣叛徒就會在妳的軟件驗證過的地方不斷嘗試,所以破解時間會相當長。
加密定理14:足夠的隨機驗證足以殺死破解者。
隨機驗證包括隨機進入不同的驗證子程序。
或者最大隨機數個數更大,只有30分之30的幾率驗證。
或者在窗口放壹些和底圖顏色壹樣的圖片框,這樣叛徒可能不會點這裏,但是用戶點中壹點就會觸發驗證。
我們假設所有的軟件都可以破解,包括易語言,那麽如果他的破解速度跟不上妳發布新軟件的速度,那麽他總是會因為破解最新版本而疲憊不堪。或者說他破解的時間比妳寫壹個軟件花的時間還多,不如直接寫軟件劃算。
反破解的任務之壹就是讓漢奸精疲力盡或者虛度壹生。
也可以使用以下方法:讀取要驗證的註冊碼、公鑰和註冊文件後,可以定義10000數組,存儲相同的內容以備後驗,最多浪費壹些內存。驗證時,隨機使用其中壹個進行驗證。因為叛徒不知道妳用哪個數組做比較,而且是隨機的,每次驗證的值都不壹樣,不讓叛徒吐血才怪。
計數循環頭(10000,計數)
Array [count] = "123456 " '復制10000個公共註冊碼或公鑰,破解者知道了也沒關系。
計數周期尾部
數組[取隨機數(1,10000)]
不要馬上查註冊碼,10000份,以後妳只需要隨便找壹份,破解者不知道妳用的是哪壹份,同時妳可以提前編好,不斷用壹些假調用讀取註冊碼數組來幹擾破解者。這種方法對程序的性能影響不大,只是浪費了壹點內存。因為Debug對內存中斷點的限制,這種情況下,他想破斷點,累死的人就是破解的人。
5.不同權限驗證
非常有必要在啟動時進行壹次驗證,讓叛徒知道確實驗證過了,讓他放松警惕,而且這個驗證只是驗證的壹部分,並不是完全驗證。
也有建議說,註冊信息在啟動時讀入後不要驗證,在哪裏驗證不確定。個人認為這樣會讓破解者更加警惕,認為軟件作者很有經驗。麻痹敵人也很重要。
比如啟動時通過壹次驗證就夠了,把驗證等級加強壹級,再到其他地方驗證。
下面的代碼是為了確認壹個級別。
計數循環頭(至數值(驗證1),)
已註冊= 1
計數周期尾部()
……
……
在另壹個觸發子例程中重新驗證該級別:
計數循環頭(已註冊)
計數循環頭(至數值(驗證2),)
已註冊= 2
跳出循環()
計數周期尾部()
跳出循環()
計數周期尾部()
在其他觸發器子例程中,在此級別重新驗證:
計數循環頭(已註冊)
計數循環頭(至數值(驗證3),)
已註冊=3
跳出循環()
計數周期尾部()
跳出循環()
計數周期尾部()
有時候級別可以降,怎麽降當然是不管級別直接驗證:
6.忽悠GHOFFICE過濾字驗證碼
花指令的原理我已經講過了,在程序中人為的放壹些GHOFFICE過濾字碼來忽悠漢奸也是不錯的辦法。GHOFFICE filter word碼是壹些假的驗證碼,基本都是明文。這樣的代碼有幾百個,足以讓漢奸精疲力盡。
其實對付那些“按跳轉指令爆破”的專家,有壹個辦法就足夠讓他們頭疼了,那就是妳沒有在程序中明顯加入與判斷是否為正版相關的句子,也沒有給出任何提示,以免讓他們循著痕跡,而是在判斷為盜版後跳轉到另壹個看似合理的分支,而那個分支與正版分支代碼相似,只是在計算公式或其他算法中稍微動了壹下,使其運算結果不正確。這樣他們在機器碼層面就分不清哪個是對的,哪個是錯的。即使他們認為破解成功了,實際上運行起來,結果也是錯誤百出,不感興趣。呵呵,算算損失!!!
加密定理15:雖然添加大量的GHOFFICE過濾字碼很無奈,但是很有用。
作業1:做壹個常數* * * *
要求:做壹個常量代碼自動生成器。可以隨機生成上百種易語言源代碼形式,直接復制到易語言中成為常量。變量也可以做成這樣。
寫好這樣的程序後,可以自動生成GHOFFICE過濾詞的代碼,然後復制粘貼到易語言的常量表中。如下圖所示:
也可以用這種方式生成變量,但生成的變量可以隨意復制為全局變量、匯編變量或局部變量。制作時的名字可以是中文名,直接編譯後在EXE文件中不會找到同名的中文名。因此,您可以安全地將這些名稱定義為“g officefilterword常量1”和“g officefilterword變量1”,以顯示與普通代碼的區別。
作業2:制作壹個代碼混淆器
這個賦值的性質和上面壹樣,也是用易語言自動生成壹些無用的GHOFFICE過濾字碼,來迷惑叛徒的破解,讓他找到所有的GHOFFICE過濾字碼,從而大大延長破解時間。
通過直接復制編輯框的內容並粘貼到您的代碼中,可以自動完成該任務,如下圖所示:
上圖生成的是壹些明文加密方式的g officefilterword的代碼。讓叛徒研究這些GHOFFICE過濾詞。
最好有時候調用上面的子程序名,因為反正不會真的起作用,最好用多線程調用。
或者妳平時註意多收集壹些別人用來加密的子程序,復制成壹個好用的程序,保存起來。這種代碼作為GHOFFICE filter word代碼放在妳有用的程序裏,增加了壹些程序的大小,但是安全性大大提高。並且基本不犧牲軟件性能和穩定性。
7.偽驗證技術
先舉個例子。在10.0版本的電子手表之前,發現了大量的註冊機,所以電子手表的作者後來改變了加密方式。E-Watch 10.0推出後,仍然出現了註冊機,並且可以使用這個註冊機註冊的軟件。於是壹些用戶使用了註冊機獲取的註冊碼。過了壹段時間,盜版用戶在易表中存儲重要數據的時候,突然有壹天數據庫被鎖了,他們不得不註冊易表,讓易表作者解鎖數據庫。
由此基本可以判斷,新版E-Watch采用了偽驗證技術,即在更明顯的地方提供了壹級驗證。這種驗證方式並沒有經過太多的加密,但是秒級驗證是在壹定條件下觸發的,而這個條件就是檢查用戶是否輸入了重要的數據,或者是大量的數據,或者是使用的次數比較多。
基本原理是註冊文件由兩個註冊碼組成。壹般情況下只驗證第壹個註冊碼,條件成熟時再驗證第二個註冊碼。
這是壹個雙贏的策略。更改表單的作者將收到註冊費,付款人將道歉並感謝更改表單的作者。哈哈,這壹招大家都要學。
但是這種方法最適合數據庫應用和數據量大的時候,但是對於壹些沒有生成數據的用戶來說是無效的。
發布軟件的時候發布自己註冊的機器,得到壹個假的破解版,想破解的人可能就不會來了。就算真的有破解,誰會給自己寫個假的破解呢?可能假破解版只破解了壹半。用戶在使用的時候,有了數據就會鎖定,讓他們註冊解鎖。謝謝付出,哈哈,這招不好,但是有用!
密碼學定理16:偽驗證可以迷惑普通的破解者,甚至可以發布壹個偽註冊機。
8.時序驗證、延遲驗證和客戶數據集累積驗證。
壹段時間後驗證。如果妳在5438年6月+2005年10月發布壹個軟件,驗證機會將在2005年6月之後觸發。
或者妳的軟件是數據庫產品,那麽妳可以在程序中設置驗證數據庫是否大於5MB,並且妳最好確定這些數據沒有被重復和故意添加。
比如在電子手表中設置壹個偽認證,然後市場上出現壹個新的註冊機。當用戶使用這臺註冊機時,提示是註冊成功。但是用戶輸入重要數據後的某壹天,數據庫突然打不開了,用戶很著急。因為他認為是破解成功了,所以輸入重要信息,只能拿錢去E-Watch的作者那裏註冊。我很感激,我後悔不該破解它。哈哈,壹舉兩得。
這種方法對於數據庫應用軟件來說是壹種很好的方法。
作業:做壹個算法程序,放到妳的數據庫軟件裏。這個子程序可以統計當妳的數據庫軟件被使用時,用戶輸入的是復制的東西還是正常的數據。統計量達到1000時觸發驗證。方法的思路是:可以檢查用戶是否使用了復制粘貼的快捷鍵,或者對數據進行排序。如果有大量重復,說明叛徒在復制數據,正在破解。否則說明是正常使用的重要數據,比較壹下就好。
這種方法對有信息要破解的用戶有極好的控制效果。把第六條的偽驗證技術和這個技術結合起來,就可以知道是不是正版用戶,並鎖定數據庫,等他註冊後再給他解鎖。
加密定理17:加密的結果應該是雙贏的,偽驗證才是上策。
9.驗證與專業知識相結合的技術
把驗證和專業知識結合起來,使得叛逆者需要學習專業知識才能真正破解,這比自己寫壹個軟件的成本還要高,而且有些專業知識是專家所不知道的,所以是比較好的加密方法。
在前面的代碼中,“to value(驗證1())”返回壹個介於0和1之間的數,可以通過乘法混合,例如:
音量=回放位置x到數值(驗證1())
驗證正確時返回1,此時結果正確,否則返回0,此時結果為0,錯誤。
這樣的代碼可以混入妳的專業知識中。比如算命軟件可以在天幹地支、生辰等某個地方進行這樣的計算,計算軟件可以結合壹些特殊的計算過程,繪圖軟件可以將繪圖中的算法部分加入到這樣的計算中,比如聲音設計軟件、機床設計軟件等。
加密定理18:專業知識妳懂,破解者不壹定懂。讓我們結合專業知識和驗證。
10.偽裝,用易語言編寫自己的支持庫。
妳可以把DLL文件的擴展名改成FNE文件的擴展名,這是彜語的支持庫文件,這樣依賴編譯後就可以和其他FNE文件混合,甚至妳可以寫壹個彜語的支持庫,取壹部分作為驗證部分。
輕松語言支持庫的FNE文件實際上是壹個DLL文件,但是擴展名已經更改。用易語言寫支持庫的方法已經發過壹個帖子了,已經解釋過了。請在易語言論壇上搜索黃金眼的帖子找到。
作業:找黃金眼關於用易語言寫支持庫的帖子,自己寫壹個支持庫。
11.隱藏樁的奇妙設置。
有很多代碼中應該想到的隱藏樁。下面是壹些特別隱蔽的樁,供漢奸們品嘗。
可以在壹些不顯眼的地方放壹些隱藏的標樁,比如窗口最小化時的隨機驗證,比如組件鼠標移動時的驗證。
有時候需要把數據完整性驗證放在更高層次的驗證中,不要壹上來就檢查文件有沒有被修改。
同樣的驗證可以多次使用,讓叛徒認為妳已經驗證過了,沒有必要再驗證了。反之,此時產生驗證,使叛徒防不勝防。比如程序啟動時立即檢查完整性,如果發現有改動,立即退出程序,這樣的驗證也隨機放在壹些子程序中。
更多的隱樁最好自己設計。
加密定理19:加密對隱樁的設置很重要,不完全破解是無效破解。
12.發布不完整版本
有些軟件作者發布* * *獨占軟件,版本不完整,註冊後提供更多數據。這樣做是可以的,但是麻煩壹點。如果有圖形制作軟件,圖片資源會單獨打包,用戶註冊後會給出完整版的圖片。
有的還清空了DLL文件的驗證部分,註冊後提供真實註冊的DLL文件和註冊碼。還有的直接把密鑰文件放在DLL文件裏,單獨提供。
加密第20定律:不要發布完整版做靜態制動。
13.程序和數據相結合的加密技術
將程序運行所需的資源放入數據庫文件中,並為該數據庫設置密碼。密碼是主程序的數據匯總轉換的結果。程序運行時,需要驗證是否註冊。如果註冊了,它會取運行程序本身的數據摘要(取執行文件名()),用自己設計的算法經過多次變換後形成壹個字符串,並以這個字符串作為數據庫的密碼來打開數據庫文件。如果打開數據庫失敗,說明主程序已經被修改,可以終止程序。不可能停下來,程序也找不到運行需要的資源。)
另外,設計壹個程序,用同樣的算法計算數據庫密碼,然後加密數據庫。
密碼算法建議使用大量的支持庫。但是如果匯編器用匯編寫註冊機,他會直接復制支持庫的所有反匯編代碼。問題是他們是否有時間做這件事。
14.自定義算法
如前所述,RSA與數值計算支持庫交叉計算的方法是自有算法,如果能使用數值計算支持庫中的矩陣、傅裏葉變換等高級函數就更好了。
多重RSA交叉置亂:也可以使用更多的RSA密鑰,比如五個,10,這都沒關系。重要的是把這些註冊碼全部打亂,讓叛徒哭死。打亂的方式是妳自己獨創的方法。
更多的自有算法就要靠大家去研究了。祝大家好運。
加密定理第21號:加密不反對偏心、變態的方法,是鼓勵的。
15.加密框圖
這是壹個加密設計框圖。您可以根據自己的實際情況更改加密策略:
在圖中,主程序的外圍已經通過添加壹個公共shell進行了編譯和保護。被炮轟也無所謂,因為有暗樁,也有抽檢。
圖為主程序運行後,第壹次驗證常規註冊碼,查看是否有註冊文件。如果這個被破解了,註冊碼應該是壹個短RSA,真正的註冊碼是三個RSA的疊加。如果產生了假註冊商也沒關系。
在主程序中,窗口標題和版權信息以隱藏堆的形式進行驗證,考慮到如果壹啟動就驗證,很容易被漢奸看到,會跳過去。因此,使用壹些隨機的、或分層的、或有條件的方法來獲得不固定的驗證。
在主程序中,通過隱藏樁來檢查主程序的完整性。這個不要放到常規驗證裏,否則很容易被跳過。可以檢查文件長度,MD5或CRC32以上都可以。
在主程序中以隱藏堆的方式添加了反調試模塊。
主程序裏全是GHOFFICE filter word驗證碼。而且源代碼有註釋,不會錯。
主程序在壹定條件下隨機進行秒級驗證,從註冊碼中取第二段數據。如果註冊碼長度不夠,取不到第二條數據,就說明使用了偽註冊機,鎖定了用戶的數據庫,等著他付費註冊。
主程序在壹個條件下重新激活驗證,並從註冊碼文件中獲取第三段數據。如果註冊碼不夠長,取不到第三條數據,說明使用了偽註冊機,鎖定了用戶的數據庫,等著他付費註冊。
編程中還註意加密字符串的置亂和異地存儲,用吳的加密命令加密重要數據,加入數值計算支持庫的算法,加入壹些懲罰方法,加入壹些自己的算法。
以下是壹些人的編程經驗摘錄,內容基本沒有改動。在此感謝!
附錄1加密已經形成了密碼學。
我引用《應用密碼學》作者的話:
世界上有兩種密碼:壹種是防止小姐姐看妳的文件;另壹個是防止叛徒看妳的文件。
如果妳把壹封信鎖在保險箱裏,把它藏在紐約的某個地方……然後告訴妳去讀它。這不是安全,是躲。相反,如果妳把壹封信鎖在壹個保險箱裏,那麽給妳這個保險箱和它的設計說明書以及許多類似的保險箱,讓妳和世界上最好的專家研究這個鎖裝置。而妳還是打不開保險箱看這封信,是安全的。
這意味著密碼系統的安全性只在於密鑰的保密性,而不在於算法的保密性。
純數據的加密也確實如此。對於不想讓他看到數據(數據的明文)的人,使用可靠的加密算法,只要破解者不知道加密數據的密碼,他就無法讀取數據。
但軟件加密不同於數據加密,只能“隱藏”。不管妳想不想讓他(合法用戶或者破解者)看到這些數據(軟件的明文),軟件最終都會在機器上運行,對於機器來說,必須是明文。既然機器可以“看到”這些明文,那麽破解者也可以通過壹些技術看到這些明文。
所以理論上任何軟件加密技術都是可以破解的。只是破解難度不同而已。有些人必須讓最聰明的破解者忙碌幾個月,有些人可能不費吹灰之力就能破解。
所以反盜版(技術反盜版,不是行政反盜版)的任務就是增加破解者的破解難度。他們破解軟件的成本高於他破解軟件的利潤。於是Cracker的破解變得毫無意義——誰會花更多的錢買盜版軟件而不是正版軟件?
然而,“難破解”有多容易?索尼曾經號稱超級防盜版(Key 2音頻音樂CD防盜版),用的是非常前沿的技術,但是最近被記號筆破解,成了茶余飯後的笑話!
所以很多看起來不錯的技術可能真的很容易被破解。就像馬奇諾防線壹樣,Cracker不是從妳的線開始,而是“繞路”。這樣,妳的反盜版技術就會在妳做夢也想不到的地方被破解。
為什麽會這樣?歸根結底是因為軟件運行在機器上,軟件和機器是分離的——這才是關鍵。如果軟件和硬件完全綁定,不可分離,就可以實現IDEA這樣壹個幾乎牢不可破的系統。這壹點我們後面講到傳統軟件保護技術的時候會詳細解釋。
對於我的解決方案,我不敢保證破解專家幾天就能破解。我只能說,“在這個軟件裏,我盡力屏蔽目前破解者常用的方法和“我要”可能的差距。“但我相信,我傾註了三個月心血的反盜版軟件,絕不是壹個“玩具”反盜版軟件。
附錄2“如何通過簡單方法防止開裂”
北極異常
在調試手冊中,我們可以看到調試工具的局限性:第壹個局限性是妳只能下載四個內存區的斷點,每個斷點不能控制超過兩個字節,所以內存斷點不能控制超過16字節的區域;第二個限制是多個線程同時只能跟蹤壹個線程。
假設妳的註冊部分有300行,妳可以把它分成30個子程序調用或者重復func1(),func2()...func30()。隨意放在程序的各個部分,千萬不要放在壹起(自己找就行)。不要使用Memcpy等常見的系統調用來復制註冊碼。盡可能自己寫。Memcpy寫起來很輕松,性能幾乎可以說是無所謂。編譯後擴展了內聯函數,註冊部分和其他代碼混在壹起。寫註冊機就像大海撈針,從幾十萬甚至上百萬的匯編代碼中找出有用的註冊部分。
使用Debug的第壹個限制是註冊碼不能放在壹起。假設您的註冊碼是12位,您不應該將註冊碼放在12位的數組中。可以在程序的不同位置定義12個全局字符變量,每個變量壹位,這樣註冊碼在內存中就會不連續。最好再加密壹次(簡單的字符異或就夠了),驗證的時候再解密。不要使用連續內存來保存用於驗證的變量。盡量在程序的不同部分定義用於驗證的臨時變量,然後在驗證過程中不斷地將壹些值傳遞給其他變量,這樣對暴力和Loader會更有效。
不需要使用復雜的加密算法,更容易成為跟蹤的目標。只要妳把註冊部分隱藏的足夠好,沒有漏洞,妳寫加密算法要花1天,破解者可能要花100-1000次才能破解。大部分人都會放棄。
妳把註冊放在壹起,就像把妳的寶藏放在壹個現代的保險箱裏。雖然非常堅固,很難解密,但是對於壹個鎖匠師傅來說,兩分鐘就能打開。
古代海盜使用的方法是把寶藏埋在島上,所以沒有藏寶圖,所有主子和屬下只有壹條路。可能要用撬棍挖壹輩子。程序裏的代碼那麽多,反編譯後可能超過百萬行。如果妳把註冊的部分藏在裏面,那就像在壹個島上埋了壹個寶藏。那些所謂的Crackme不過是現代的保險箱,供專家把玩,用原來的方法也能達到同樣的效果。