查看單個文章
舊 2006-05-15, 03:26 PM   #1
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9693小時 | 升級還需:104小時級別:96 | 在線時長:9693小時 | 升級還需:104小時級別:96 | 在線時長:9693小時 | 升級還需:104小時級別:96 | 在線時長:9693小時 | 升級還需:104小時級別:96 | 在線時長:9693小時 | 升級還需:104小時級別:96 | 在線時長:9693小時 | 升級還需:104小時
註冊日期: 2002-12-07
文章: 13261
精華: 0
現金: 26261 金幣
資產: 3024071 金幣
預設 如何做出專機程式

什麼是 "專機程式" 是我亂說的啦~
是指 此程式只能於這台電腦安裝執行
拿到別台就不可行了

這裡只是討論一下而已

我想或許有人第一個直覺就是
軟體序號
但這絕對不可造就 "專機程式"
因為資料保護法讓業者不能擷取使用者資料
所以利用網路回傳鎖定某單機(PC)就不可行了
當然更純粹的是
這麼被哥哥的軟體 沒人會想用吧~

那如此之下個人能想到的就是
硬體ID
像是 網路卡、CPU 都可以拿來當硬體ID的參考
只是那怎麼辦到
此程式拿到別的 PC就不能用呢?
除非
每個程式都針對該PC編譯一次 (或軟體資源表是 針對該PC 而建立)
要不然就是建立 資料庫,並崁入軟體內 (但這不是一個好方法)
不論如何這兩種方法
好像都必須您先下訂單
再根據您送的 硬體ID 來製作厚~
那這不就增加了你的負擔
且突變成 "被哥哥軟體"
如何解決呢?

可以設計一個網路端伺服器幫你合成軟體程式
使用者上傳硬體ID後
網路端伺服器就做出你的 專機程式
並show出下載點
那這個程式不論是 使用者透露了載點,或免費上傳
都不再有效了 (因為是由硬體ID 做把關嘛~)

那破解呢?
世界上 專業軟體破解 個人/團體 不勝枚舉
因此不敢打包票破不了
只是把防鎖加多 難度自然就加高 會想破的人就...
比如size防護、資源檔防護、執行期防護(一般都只做啟動期驗證)、身份證字號防護(這樣就不敢拿給別人用,不過太 貝戈戈了 不實際...)...

那如何 設計一個網路端伺服器
方法有
自動編組譯、製作雜點map再替換入資源表 這兩個主要方法
自動編組譯沒什麼好說
來看看 製作雜點map再替換入資源表 的原理
利用
srand(硬體ID); //這裡借用C++語言的亂數種子特性
接著
在一個 128x128 4bit 格式的 BMP圖 上噴上雜點 (以下稱之為 "指紋map")
http://xs200.xs.to/xs200/06201/Snap2.png
最後
將此BMP圖資源崁入軟體即可

那一定會問
如何辦到只修改 指紋map 而不用修改程式碼
就可辦到 專機程式 的實現呢?
重點就在此 指紋map 的製作有脈絡可尋
程式碼不是用 數值核對 或 boolean對錯方式 來認可執行
而是 指紋map 就是組合語言程式碼
128*128*4=65536 那再減一剛好等於 65535= 16進制的 FFFF
這樣足夠記載所有 組合語言code
比如
B80800 是指 MOV AX,0008
(那 00 要怎麼辦呢,當預設值吧,根據人分析 除非出現 指定位址寫法 否則不會有 超過2byte的機碼出現情形)
...
如此
那破解者會被混淆
如果要跳過執行這個執行碼呢?
那他必須破解(也就是更改接下來的不知有多少處的同情況執行碼)
又會問到
如果使用 破解工具 全部取代不就好了
那程式極有可能其正常執行碼會被跟著破壞到
但我們不能抱著這種得過且過的賭博心態
因此
就必須下相關功夫
使當破解後會造成計數失敗
...


其實個人還每將此理論想(規劃)清楚
所以先寫到這
如有新的更正或想法再敘吧

有興趣的讀者
請多多指教

此帖於 2006-05-15 04:58 PM 被 mini 編輯.
mini 目前離線  
送花文章: 2001, 收花文章: 7962 篇, 收花: 26757 次
回覆時引用此帖
向 mini 送花的會員:
jal0707 (2006-11-13)
感謝您發表一篇好文章