熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PB編程 >> 正文

powerbuilder程序防止破解的辦法[2]

2013-11-23 17:26:44  來源: PB編程 

  分析發現一個pb的bug可以使得pbkiller無法得到任何代碼

  

  //global function integer lf_count ()

  int  li_i

  ……一直到

  int  li_i

  int  li_i

  int  li_i

  int  li_i

  int  li_i

  return

  

  本想測試一下pbkiller對代碼行數有沒有限制發現pb在變量數超過行後保存就會出錯但是重啟IDE又能插入一個可以保存但是插入第二個變量就不行了我用這種方法最大可以插入到int  li_i現在我們先寫編譯和調用這個函數都沒錯然後多申明一個比如int  li_i采用增量編譯後主調用程序中返回(注意不能進行全編譯否則報內存只讀錯誤)這倒沒什麼價值價值在於這樣編譯後的pbdpbkiller無法反編譯出任何代碼大家可以測試一下如果用作關鍵點計算或者返回幾個關鍵參數倒是蠻好的!不過工程project也只能用增量編譯否則IDE報錯退出

  pbNI的運用使得關鍵代碼可以融入pbd但是pbkiller又反不到其他調式工具也單獨調試不到具體未測試過見黃國疇的blog有實例

  編譯後的文件假設包括一個mainexe和mainpbdsecondpbd用ue打開mainexe在最後部分RTL標志以上有一個dat*標志找到其中的pbd列表修改一下mypicjpg然後把相應的pbd文件改改名字效果也挺搞笑的

  個exe(不是主程序)其作用只是依次調用比如exe調用exeexe又去調exe最後調用mainexe各步驟的調用都帶參數並且這個exe還執行部分文件操作和數據處理或者部分認證和文件校驗等然後最後調用mainexe而且帶參數這些參數隱蔽地作為一些地方的數據也可以在exe執行過程中將一些數據寫入sql中或者文件中如此使用倍增難度的方式來為難pj者

  還是那句話不要讓pbkiller直接看到你的源碼(給破解者一個假的pbd是個好辦法)保護自己的軟件一年以上給客戶一個必須要掏錢的理由!

  只要能防止靜態下反編譯到你的pbd(一般破解者就是直接找跟主文件同名的pbd來編譯看看是否能找到注冊算法根本不會在意你的pbd到底是不是正確的!!!也不會在意你對他的欺騙)你就有%的希望保護到自己的軟件如果你的軟件受眾很少的話

  有興趣可以參考《加密與解密》P頁的幾個對軟件保護的建議(*見網上有就摘抄過來)

  本節將給出關於軟件保護的一般性建議這些都是無數人經驗的總結程序員在設計自己的保護方式時最好能夠遵守這裡給出的准則這樣會提高軟件的保護強度

  ()軟件最終發行之前一定要將可執行程序進行加殼/壓縮使得解密者無法直接修改程序如果時間允許並且有相應的技術能力最好是設計自己的加殼/壓縮方法如果采用現成的加殼工具最好不要選擇流行的工具因為這些工具已被廣泛深入地加以研究有了通用的脫殼/解壓辦法另外最好采用兩種以上的不同的工具來對程序進行加殼/壓縮並盡可能地利用這些工具提供的反跟蹤特性

  ()增加對軟件自身的完整性檢查這包括對磁盤文件和內存映像的檢查以防止有人未經允許修改程序以達到破解的目的DLL和EXE之間可以互相檢查完整性

  ()不要采用一目了然的名字來命名函數和文件如IsLicensedVersion()keydat等所有與軟件保護相關的字符串都不能以明文形式直接存放在可執行文件中這些字符串最好是動態生成

  ()盡可能少地給用戶提示信息因為這些蛛絲馬跡都可能導致解密者直接深入到保護的核心比如當檢測到破解企圖之後不要立即給用戶提示信息而是在系統的某個地方做一個記號隨機地過一段時間後使軟件停止工作或者裝作正常工作但實際上卻在所處理的數據中加入了一些垃圾

  ()將注冊碼安裝時間記錄在多個不同的地方

  ()檢查注冊信息和時間的代碼越分散越好不要調用同一個函數或判斷同一個全局標志因為這樣做的話只要修改了一個地方則全部都被破解了

  ()不要依賴於GetLocalTime( )GetSystemTime( )這樣眾所周知的函數來獲取系統時間可以通過讀取關鍵的系統文件的修改時間來得到系統時間的信息

  ()如果有可能的話可以采用聯網檢查注冊碼的方法且數據在網上傳輸時要加密

  ()除了加殼/壓縮之外還需要自己編程在軟件中嵌入反跟蹤的代碼以增加安全性

  ()在檢查注冊信息的時候插入大量無用的運算以誤導解密者並在檢查出錯誤的注冊信息之後加入延時

  ()給軟件保護加入一定的隨機性比如除了啟動時檢查注冊碼之外還可以在軟件運行的某個時刻隨機地檢查注冊碼隨機值還可以很好地防止那些模擬工具如軟件狗模擬程序

  ()如果采用注冊碼的保護方式最好是一機一碼即注冊碼與機器特征相關這樣一台機器上的注冊碼就無法在另外一台機器上使用可以防止有人散播注冊碼並且機器號的算法不要太迷信硬盤序列號因用相關工具可以修改其值

  ()如果試用版與正式版是分開的兩個版本且試用版的軟件沒有某項功能則不要僅僅使相關的菜單變灰而是徹底刪除相關的代碼使得編譯後的程序中根本沒有相關的功能代碼

  ()如果軟件中包含驅動程序則最好將保護判斷加在驅動程序中因為驅動程序在訪問系統資源時受到的限制比普通應用程序少得多這也給了軟件設計者發揮的余地

  ()如果采用keyfile的保護方式則keyfile的尺寸不能太小可將其結構設計得比較復雜在程序中不同的地方對keyfile的不同部分進行復雜的運算和檢查

  ()自己設計的檢查注冊信息的算法不能過於簡單最好是采用比較成熟的密碼學算法可以在網上找到大量的源碼

      編輯推薦

       ASP NET開發培訓視頻教程

       Microsoft NET框架程序設計視頻教程

[]  []  


From:http://tw.wingwit.com/Article/program/PB/201311/24596.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.