鑒於任何程序都運行cpu指令並可被反編譯成匯編碼也就是說理論上程序都是在裸奔所以天下無不可破之程序所以這裡討論的防止只是一定程度上的比如提高破解難度拖延時間讓破解者挫折感增加等等
一pb的現狀
pb從其pbd文件和dll文件格式的版本都為(pb尚不知曉還沒找到pb的程序)結構大致一樣所以pbkiller的作者只要還有時間他可以在一到三個月就做出最新的版本這個軟件比起shudepb來說更滅絕人性因為作者將其免費(最初好像也是要賣錢的無奈沒有采用shudepb那樣的網絡計算使得其被破解了從這一點看也蠻有意思)從而使得無數的好事者參與到破解的學習中因為我們寫的程序眾多高手只對商業價值高的軟件感興趣而且以它為職業糊口而初學者只是隨便找個軟件練手我朋友有個軟件被初學者拿來在裡面放了一些新文件其實根本沒破解到但是宣稱為破解版破解方法寫到輸入隨便的注冊碼提示出錯然後就得到真正的注冊碼了…如果不出錯多試幾次即可結果呢?程序根本就不在輸入注冊碼的地方判斷正確以否你說搞笑不搞笑pbkiller目前最高版只支持我看過代碼反編譯比較漂亮錯誤肯定存在但已經很完美了
錯誤只有對自己的項目反向時才會頭痛對破解者而言他們只想看注冊部分的算法
shudepb是商業版而且幾千塊一套這一定程度對pb有利畢竟初學者是不會去買一套沒用的工具來學習破解的而且demo版它限制代碼的長度非注冊版看不全代碼還真是厚道所以如果你不打算應對反編譯軟件的話那請把代碼寫在行之後(具體是不是行限制自己測試看看)這是最簡單辦法(pb以上)
至於pbd還原器原理是用pb本身的方法得到dw的反編譯代碼這個不叫做破解pbd中的dw本來就可以直接用而pb又有函數可以得到語法這就沒什麼新鮮的了pb的本身函數是不會提供功能給你能反編譯得到源碼的是絕對不可能的
在網上搜索破解pb程序的帖子通用的說法是程序沒法用OD來調而且pbvm裡也不好跟都是要用到pbkiller這個利器這在一定程度上說明對付菜鳥使得其反編譯成功的幾率小一些就能更好的保護自己辛苦勞動的軟件
目前幾種破解的方法
a 看程序算法和思路直接破解算法公布算法或者寫注冊機(如果代碼一覽無遺這個方法其實最簡單但是也有很多菜鳥看不懂pb代碼還在網上到處問可笑)
b 有人嘗試搜索pbd中的關鍵代碼用ue修改pbd中的字節(這個有難度做的人不多而且多數菜鳥只限於pbkiller會用而已對pbd文件不了解據我自己觀察對pbd有了解的話很多地方可以用ue直接改)比如修改一個字節可以把+變成把=變成<>有點恐怖
c 對於外部dll的調用有破解者提議寫假的dll來爆破之讓其返回一個已經注冊過的序號的依據如磁盤號有所謂的免狗程序應該屏蔽了對狗的調用或者搞了假的dll所以有必要多處驗證文件的md值只要他沒法修改pbd文件
以下是我猜想的一些做法是否切實可行待大家提意見一個軟件總是新出時容易被破解如果一年都沒被破解以後版本升級變來變去的破解也就更少了
我曉得一個朋友的軟件他一年連出十多個版本新版一出兩三天之內就被破他用的是delphi寫的他真可憐二進制編譯的軟件及asm之後也許更容易破解吧只要調試就搞定了就像pb一樣破解得非常快
pb程序其實也占幾個優勢多是商業軟件商業用戶還是有購買的習俗練手者不太容易找pb程序來破解因為共享軟件很多一般是你的用戶用得還可以又不想給錢就會有破解的念頭pb做的都是管理軟件破解高手對商業價值不高的軟件不感興趣再者pb程序難以調試知道的人都不想弄加之sql之類的顯得異常繁雜遠沒有破解一個二進制編譯的通用的使用量大的軟件有意思
代理商破解的可能性更大
二我的幾個構想的方法(都只針對增加難度讓靜態pbd反編譯難度加大讓pj者知難而退)
能采用machinecode方式的盡量用機器編譯單一exe文件用pbkiller和shudepb都無法看到代碼只能看到變量pj知難而退
我有幾個項目代碼超級大在當初用pb的時候就沒法編譯成機器碼現在的pb因為有string和blob的bug沒法編譯成機器碼而pb剛出來還沒測試不過代碼太多似乎沒法編譯成單一machinecode的exe那就只能用pcode
所以第二點就是欺騙在程序下放跟exe同名的假的pbd文件比如程序為mainexe放一個假的mainpbd給pj者去調試當然不一定是假的pbd你隨便找一個pbd用ue刪除一些二進制數字即可做的跟真的一樣
pbd可以放在在window系統目錄下或者path定義的任何地方或者之前文章也提到寫他幾十個注冊函數放在不同的pbd裡到底是哪一個只有你曉得搞死他librarylist也可以做做文章因為同名對象都依照lib順序來查找
程序啟動時抓一個時間啟動結束後抓一個時間如果中途有停頓是否可以判定在被調試我想你可以刪除他電腦上任何東西反正都是破壞別讓他悠閒的調試程序我作為一個寫代碼的人我認為有必要這麼做他要QJ你自然也允許你反抗某個殺毒軟件當年就這樣把破解版搞得吐血
注冊碼輸入時不做任何提示和判斷只是寫一個標志程序啟動時在title那裡顯示為正式版或者注冊版但是實際上我可以延期驗證或者隨機驗證呵呵這樣也許把破解者都搞得沒辦法因為他只要輸入一次注冊碼不管是什麼字符都成了正式版而至於什麼時間驗證除非他有那個耐心否則也覺得破解麻煩對破解者而言抓個特征值是個小case而要一行一行地看代碼估計吐血而死
ini中的注冊碼調入內存和真實注冊碼對比時我認為將其復雜化後放入一個數組或者blob中注冊碼不是在程序啟動時而是在多時多點多處重復的校驗我的想法在個地方校驗其程序破解的難度就可能讓pj者早退卻了
而且把注冊碼和系列號都跟程序的變量或者功能或者數據返回條數等掛鉤做的非常隱蔽不再是體現在一個if比較的地方那就能大大減少破解的可能因為我們知道破解者無法修改pbd而且不熟悉pb代碼如果搞得太復雜可能他早就不干了
我以後發行程序准備放個或者個pbd在程序下破解者要反編譯就去反吧看到個pbd就算我搞pb幾年我也知難而退了看到個pbd立即倒地吐血而死
如果主程序不能編譯成單一machinecode的exe則某些關鍵功能可以用run外部程序方式來運行而外部程序用pb單獨編寫一個小的程序小的程序是完全能編譯成功的
費解算法和寫法比如把一個數放入數組然後在其他地方其他時候有意無意去改變或者復制移動再到某些時間去執行某些操作或者引發一些限制破解變成去看你的代碼我想沒人願意繼續下去
如果代理商破解你的軟件你就讓客戶對他產生不信任即可買他的破解版就會被騙錢!做到這個足矣而且你得一棍子把他敲死
發若干個自己做的破解版其實都是測試版這樣使用者找遍網上也下載不到真正的破解版很多國內網站轉載時都是煞有介事地稱其為破解版綠色版完全版其實都是測試版搞笑!
暗樁檢測用戶越過注冊部分不動聲色地做限制或者在多處多時深層次的地方或者細節的地方做限制比如數據匯總等於或者是其他單據隱蔽的錯誤等
攻擊生成病毒特征體致使殺毒軟件介入或者刪除自己或者重啟因為重啟不可阻止而且破壞調試過程
程序運行完調用一個外部exe刪除所有文件包括mainexe和所有pbd和dll(如果他做一個假的dll就會被刪除而程序啟動時釋放一個新的文件出來永遠只使用自己的文件這樣他修改dll和pbd都沒用)
必須研究和使用pbkiller和shudepb這兩個工具研究它們的bug利用bug寫關鍵代碼至少在它bug沒解決之前是可以保護的比如pbkiller對dec{}的解析不出來(*提示如對不同精度的數做賦值則丟失精度或者做數學運算等等丟失精度後轉為字符串或者blob)對longlong也解析不出來…都可以利用之這兩個工具還有很多很多的bug
[] []
From:http://tw.wingwit.com/Article/program/PB/201311/24595.html