软件加密技巧分析
最近兩周一直忙于項目中一項數據加密.其中涉及到軟件加密部分很具有技巧特點.覺得很有意思,今天拿來分析一下.
其實在這所談的軟件加密我們無需把這個范圍定義太過廣泛. 簡單著重一個點來看. 行業里軟件經過多個版本更迭已經趨于一個成熟的產品在流入市場時,?? 這時我們就面對一個問題:版權和核心數據保護. 目前國內關于軟件版權意識依然不是特別濃厚, 因為只有在牽扯到實際利益時有些人才意識到版權和核心數據保護重要性.
本篇的目的本來是想談談在加密算法設計中涉及多重策略使用, 大多是算法在保密性設計上多重規則. 但這個需要一定密碼學基礎才能直接能看懂.所以本篇暫且來先講講軟件加密過程中使用各種實用的技巧. 如下我會演示目前在軟件加密中所采用各種技巧和原理. 而一個好的加密算法和加密策略的設計也是因為適用場景,范圍不同而不同. 當然這也是仁者見仁智者見智.
<1>軟件保護加密技巧
對與軟件的加密保護,有些加密技巧的實現并不需要你了解太多的匯編和系統底層的知識也能做到. 其實無論你的軟件采用何種方式來加密.大多是情況下都會歸結為某些條件判定.在各種條件下觸發不同內部數據操作,當然如果加密程度較高軟件產品, 條件發生變化后他們就不直接動的是判定數據,而是下一個條件判定策略的改變. 這意味解密過程的因素是依賴多方面的.
當然定義這些固定行為操作依然依賴的是不同語言的Code來實現. 我們在此不必考慮如何消除這些代碼Code,這些執行代碼必然會以各種形式存在不同地方正確執行. 我們把核心轉向如何有效隱藏和保護這些代碼.
<1.1>技巧一:有迷惑性的代碼
通常來說,開發人員和解密者都具有很好邏輯思維能力.其實一般情況下大多是同行. 開發人員為了執行代碼的效率和空間會不同重構剔除無用代碼和邏輯. 是執行這段代碼看起來簡潔. 其實解密者也是這么理解開發人員的. 他可以通過分析程序中每一段指令來追索編程人員的保護思路. 也就是我們常說各種”逆向工程”方式獲取加密邏輯. 如果開發人員在編寫這段邏輯是加入大量無用代碼. 故意把程序復雜化. 畢竟開發人員使用都是第四代高級語言.而解密者能看到的是匯編代碼. 想搞清楚那些代碼使用的,那些代碼是無用的 并不是意見簡單的事情.啊
<1.2>技巧二: 虛假的檢查
上面方式其實只是在量上加大解析的難度. 其實有時還是難免被機器程序模擬通信過程. 那么對于已經入侵進來的人. 虛假判斷可以抓到他們訪問記錄.
在程序中故意把返回結果和一些錯誤的答案進行比較. 比較結果肯定是錯誤的. 如果發現在通信過程中這個比較結果是正確的, 則這個時候可以證明有人在模擬我們檢查邏輯. 正在試圖破解軟件. 反擊的手段可以有多重選擇.
<1.3>技巧三: 設置輸入和輸出迷宮
類似我們常在某些關鍵設備中設定USBKey身份識別系統驗證,它內部原理.就是在一定程度上增加了輸入和輸出的迷宮.
?
?
?
?
?
?
?
現在USBKey在于設備進行通信時采用密文數據方式. 即使有設備能夠模擬USB通信方式截取到通信數據,依然是密文形式. 同時作為軟件開發商為了安全起見定義一套自己的加密的規則和算法,對數據輸入輸出進行再次加密.這樣即使USBKey 丟失數據依然不會外流.
<1.4>技巧四: —計時功能
對于這個計時功能, 特別是在商業軟件中使用最為廣泛.? 因為這里面涉及到一個試用期限問題. 我還記得在04年破解一個軟件時只需要修改一下XP系統時間既可以在安裝時自動破解成功.? 后來才發現原來這款軟件設置的加密規則時間戳的設置時即時的.
開發商可以在第一次運行,把系統時間記下來.創建一個起始時間文件存儲.類似軟件試用期 為30天. 在起始時間上加上30天期限 作為結束時間存儲為文件格式.
當下一次用戶使用軟件時判斷,如果兩個數據時間文件都不存在進行創建. 第一次創建成功后, 下一次用戶再來使用軟件.時則 起始時間數據文件更新成當前系統時間,這時要比較新的時間是否比開始時間文件中時間要早,. 防止用戶修改系統時間.然后再與結束時間比較. 看是否在范圍內.這樣就完整實現時鐘功能.
轉載于:https://www.cnblogs.com/chenkai/archive/2010/12/29/1920759.html
總結
- 上一篇: 研究UEVENT相关东西,看到2篇优秀的
- 下一篇: List转DataTable(反射)