?? not_cre.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>防 破 解 問 答 集</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<style type="text/css">
.9pt24pt { FONT-FAMILY: "宋體"; FONT-SIZE: 9pt; LINE-HEIGHT: 24pt}
.9pt { FONT-FAMILY: "宋體"; FONT-SIZE: 9pt}
BODY { COLOR: #000000; FONT-FAMILY: "宋體"; FONT-SIZE: 9pt; TEXT-DECORATION: none}
TD { COLOR: #000000; FONT-FAMILY: "宋體"; FONT-SIZE: 9pt; TEXT-DECORATION: none}
A:link { COLOR: #0000ff; TEXT-DECORATION: none}
A:hover { COLOR: #ff0000; TEXT-DECORATION: underline}
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center"><center>
<table border="0" width="800" cellpadding="0">
<tr>
<td width="800" align="center" bgcolor="#CCD8EE"><b><font FACE="宋體" SIZE="5"><p
ALIGN="center"></font><font face="宋體" size="3" color="#FF0000">防 破 解 問 答 集</font><br>
</b><font FACE="宋體">----如何使破解你程序的人感到頭疼一點</font></td>
</tr>
<tr>
<td width="100%"><br>
<br>
<font FACE="宋體">感謝 <a href="mailto:cjcjc@online.sh.cn">CJ</a> 翻譯</font><br>
<br>
當發現自己為之工作了好幾個月,甚至幾年的程序被人破解的時候,所受的傷害是難以形容的。<br>
我作為一個共享軟件作者,并不是因為我在乎那幾塊錢而已(我不想在這里做具體的計算,那會使我更加難過...),不,我總是使我的程序盡可能的便宜,使包括學生和自由軟件作者在內的每個人都能用得起。<br>
然而,我知道破解軟件的魅力(如果你對程序破解者(Cracker)和黑客(Hacker)抱絕對的不寬容態度,那么請原諒。但是我的一位同學是心理學家,我們一直在尋找其原因)。破解一個受限制的軟件程序就像解一個(有時是很狡猾)的謎語,而你可能沉迷于這種解迷的感覺(當我發現我祖母在幾個月里整天沉迷在玩字謎游戲時想起這些的)。問題是(我們現在涉及到這種“游戲”的非法部分):程序破解者不會僅僅滿足于只讓自己了解他的“天賦”。他必須傳播消息,發布他的“破解”
(Cracker)(看一下破解包,多數是由以下部分組成:1、破解工具;2、簡短的說明;3、一個巨大的文件,包含有似乎作者不亞于世界上任何偉人,或者被破解的程序像所有其它程序一樣無法用那脆弱的保護方式來阻止破解者破解程序的進程的信息)。<br>
但是現在,玩笑徹底結束了。發布這些破解包(讓我們公正些:“研究其可能性“)給其他人,散布到網站上,新聞組,郵件列表,匿名FTP,光盤,"abonnements"以及任何其它地方,他們明顯地破壞了所有那些花時間和精力在他們軟件產品上的收益。雖然沒有人可以說,所有收到或者下載破解程序的人永遠也不會購買。但是散布破解程序的確是犯罪,就像有人在商場分發你車鑰匙的拷貝——他是否以此賺錢又有何分別呢?<br>
早些日子,我沒有真正去花時間保護我的產品以防止被破解,但發現周圍有它們的數個破解之后。我對自己說:為什么讓它如此簡單?
作為一個程序員,我當然知道,不,決不!——程序不可能是破解不了的,而且我知道,每個有吸引力的程序都遲早會有破解(至少是盜版或非法復制品)出現,但至少,我可以避免最糟糕的錯誤。<br>
多數的高級語言程序員不再懂得匯編語言了,所以,他們使用的“保護措施“多數是很脆弱的。我對匯編懂得也不多,所以我決定開始仔細收集防破解(Anti-Crack)的技巧。我也努力“從另一方面努力學習”,你在這里看到的許多技巧我都是從典型的破解技術中捉摸出來的,包括網上各種各樣的破解指南和閱讀甚至是由專業破解者給出程序保護技巧(他們給我們這些技巧以給自己更大的挑戰),我希望自己學得足夠好,也想把我的經驗在此與大家分享,有些技巧可能已經在其它文章中有所提及,但在此列出的最為完整。許多技巧都是針對Windows的,但他們可以被移植到其它操作系統中去。<br>
這篇問答集是全新的,如果你覺得我遺漏了一些要點或者有用的、一個典型的Delphi程序員可以簡單的加入其程序,以加強對程序保護的技巧,請告訴我,如果你允許,我會把它加到這里,否則我會告訴你我對它的體驗。<br>
<br>
不要問我問題,我可能無法回答:<br>
1) 我已經提到,我對底層的東西沒有什么研究;<br>
2)
我不會把范例文件發給你,因為我沒有準備過發布任何東西,如果我有一些,那么都在這里了;<br>
3)
最后,我不會提供任何人我發現這些技巧的連接,請記注,這是一個專注于編程的站點,而非提供可利用的破解程序。需要更多的保護程序的信息,可以看我的DELPHI技巧頁。<br>
--------------------------------------------------------------------------------<br>
最后,這里是:<br>
<strong>如何使破解你程序的人感到頭疼</strong><br>
(技巧未按其重要性排列)<br>
--------------------------------------------------------------------------------<br>
<strong>不要用有意義的過程名字</strong>,例如: function RegistrationOK:
Boolean;//譯者按:注冊確認<br>
無論你在函數中編碼多么奧妙和復雜,無論你相信于否一個有經驗的破解者都會在10-20秒內刪除之。<br>
作為一種選擇,你可以把程序中需要的一部分代碼置入其內,如果破解者禁止了這個函數,你的程序將產生錯誤的結果。<br>
<br>
<strong>不要用有意義的文件名</strong>比如License.Dat.。<br>
<br>
<strong>用類似Asymetric(美國軟件公司,代表軟件Toolbook)的加密</strong>.
僅僅不尋常的文件名常常是不夠的,好的加密(編碼)可以讓破解者忙幾個月(如果他愿意)<br>
<br>
<strong>加上長時間延遲</strong>,當發現被自身被損壞時,不要發出警告,隨后開始等待,也許是一或兩天(破解者討厭者東西)。<br>
<br>
<strong>加入短暫延遲</strong>,當輸入口令或做其它檢測時,停一到兩秒鐘,使窮舉無法繼續。簡單易行,但用處不大。<br>
<br>
<strong>使用相互檢查</strong>,在DLL和EXE中互相檢查,這遠談不上安全,但可以使破解變得更困難。<br>
<br>
<strong>在軟件中使用自我修復</strong>,你知道就像糾錯Modem和容錯硬盤,這技術已經有許多年了,怎么沒人用在保護軟件上?這方法最大的優點是:如果破解者使用反編譯工具,它會見到一串無用的列表。<br>
<br>
<strong>修補你的軟件</strong>!把代碼變為每次調用不同的確認程序段,用“其人之道還治其人之身”。<br>
<br>
<strong>把序列號放在不尋常的地方</strong>,比如數據庫字段的屬性中,經常聽到或讀到,“用一個DLL的名字,然后把它放到系統目錄里”,聽的太多了,不要用哦:)<br>
<br>
把序列號放到不同的地方。<br>
<br>
<strong>不要依靠系統時間</strong>,從一些文件取得時間,比如SYSTEM.DAT,SYSTEM.DA0和BOOTLOG.TXT,把它們和系統時間進行比較,要求它們比上次運行的時間晚(但是記住,許多用戶近來在捉千年蟲)。<br>
<br>
<strong>不要用明文字符串</strong>告訴用戶:"對不起,不過...(或類似的東西)"這些是首先尋找的目標,動態建立字符串或者加密它們。<br>
<br>
<strong>用偽造的程序調用和字符串</strong>來灌水。<br>
<br>
<strong>不要使用一個確認函數</strong>,每次你確認用戶,把確認代碼寫在當前過程中。這樣只是讓破解者做更多的破解工作。<br>
<br>
<strong>使用“保留字”</strong>,當使用硬密鑰或口令時,使它們看來像程序代碼或者函數調用
(比如., "73AF" 或 "GetWindowText")。這確實工作的很不錯,可以迷惑一些反編譯工具。<br>
<br>
<strong>沒有“禁止”特征</strong>,如果你的程序有不保存數據版本(Crapware
Version),不要包含“灰”色菜單項。沒有保存項等于沒有保存,就那么簡單。<br>
<br>
<strong>避免不必要的提示信息</strong>,唯一提醒用戶他尚未注冊的只是“關于”對話盒,此對話盒要動態建立,以便保密。這有兩個原因:許多程序員有這樣的觀點:多余的提示信息會在他們的顧客中產生敵人,這是愚蠢的。一個可能是更重要的原因是:多余提示信息會引導對你代碼的反向工程而且經常直接引導至你的程序保護代碼。<br>
<br>
<strong>經常更新</strong>,頻繁的更新指:經常更換代碼,典型(簡單)的破解只修改你的硬字節代碼位置,這可能當它還未面市已經過期了。并且保證上載到公共服務器,使你可以更好的控制程序,人們無法找到破解所針對的舊版本。是的,這樣無法防止包括舊版本和破解包盜版,如果他們那么做了,你至少可以為把他們的硬盤擠滿而做點貢獻。<br>
<br>
最后,花點時間考慮保護你自己的軟件。它是否值得保護?它是否更應該改進你的軟件?如果沒人用你的軟件,保護也就沒有意義了,不要過高估計你軟件“對世界的重要性”。<br>
<br>
--------------------------------------------------------------------------------<br>
你可以考慮到的更多技巧<br>
--------------------------------------------------------------------------------<br>
用一個連續的幾KB長的數學公式使任何想破解它的人精神崩潰。這使用一個密碼生成器幾乎無效——阻止窮舉攻擊也是有效的。<br>
<br>
小心運行時刻庫!當寫BETA版時,完全使用之,在正式版中重寫部分函數,這至少可以使破解者的生活更艱苦些。<br>
<br>
毀壞結果,毀壞結果有時是保護程序的有效措施。<br>
例如:想象一個圖表程序,或者類似的程序,只是禁止打印然后根據一些注冊碼恢復打印是最常見的毀壞結果的程序。允許你打印。當產生要打印數據結構時,用某種方式破壞之,在打印前根據注冊碼或其它東西恢復。甚至,讓破壞更奧妙,假設你有一個餅形圖要打印,不改變任何東西,但加入一些不大的隨機數值在你的數據中——這樣就破壞了。圖表看上去“不是很糟”,但是無論如何將無法使用(比如,如果是按20%的隨機次序改變的)發現這樣的保護,如果這和注冊碼相關聯,無疑會使破解需要更對的時間,一是必須深入你內部的數據結構并找到可怕的破壞和恢復數據代碼。<br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -