pb反編譯破解
① powerbuilder程序防止破解的辦法[1]
鑒於任何程序都運行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寫的 他真可憐 二進制編譯的軟體及a *** 之後也許更容易破解吧 只要調試就搞定了 就像pb一樣 破解得非常快
pb程序其實也占幾個優勢 多是商業軟體 商業用戶還是有購買的習俗 練手者不太容易找pb程序來破解 因為共享軟體很多 一般是你的用戶用得還可以 又不想給錢 就會有破解的念頭 pb做的都是管理軟體 破解高手對商業價值不高的軟體不感興趣 再者pb程序難以調試 知道的人都不想弄 加之sql之類的 顯得異常繁雜 遠沒有破解一個二進制編譯的 通用的 使用量大的軟體有意思
代理商破解的可能性更大
二 我的幾個構想的方法(都只針對增加難度 讓靜態pbd反編譯難度加大 讓pj者知難而退)
能採用machinecode方式的盡量用機器編譯 單一exe文件 用pbkiller和shudepb都無法看到代碼 只能看到變數 pj知難而退
我有幾個項目 代碼超級大 在當初用pb 的時候就沒法編譯成機器碼 現在的pb 因為有string和blob的bug沒法編譯成機器碼 而pb 剛出來 還沒測試 不過代碼太多似乎沒法編譯成單一machinecode的exe 那就只能用p code
所以第二點就是欺騙 在程序下放跟exe同名的假的pbd文件 比如程序為main exe 放一個假的main pbd給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刪除所有文件 包括main exe和所有pbd和dll(如果他做一個假的dll 就會被刪除 而程序啟動時釋放一個新的文件出來 永遠只使用自己的文件 這樣他修改dll和pbd都沒用 )
必須研究和使用pbkiller和shudepb這兩個工具 研究它們的bug 利用bug寫關鍵代碼 至少在它bug沒解決之前是可以保護的 比如pbkiller對dec{ }的解析不出來(*提示 如對不同精度的數做賦值 則丟失精度 或者做數學運算等等 丟失精度後轉為字元串或者blob) 對longlong也解析不出來…都可以利用之 這兩個工具還有很多很多的bug
lishixin/Article/program/PB/201311/24595