?

免費教程_免費網賺教程_破解版軟件-寂涯網絡學習基地

當前位置: 主頁 > 系統綜合 > 軟件破解 > 反程序破解的一種方法

反程序破解的一種方法

時間:2012-03-11 21:56來源:未知 整理:寂涯網絡 點擊:

近來,由于國人知識產權的意識較薄弱,很多高價軟件在網絡上都能找到所謂的破解版,而且這破解版不僅僅被破解了,還可能被修改了一些公司、作者信息之類的,這就會給軟件的制作者或者制作公司帶來極大的困擾,辛辛苦苦開發的產品被破解了,自己一分好處都得不到,反而別人還不知道是你開發的,這直接導致了國內的付費軟件發展不起來,都去使用一些所謂的“免費”的軟件。一些公司或作者為了利益可能會給這些所謂的“免費”的軟件 加上一些各種各樣的后門來保護自己的利益,或使用廣告等手段達到收益的目的。這樣可 能就會給使用者帶來困擾,導致用戶群的減少,從而又影響了整體的利益,直接造成了一個惡性循環。
為了擺脫這種丑陋的循環,筆者正試圖尋找一種能防止程序被破解的途徑。眾所周知, 反破解一般有兩類方法,一是在程序代碼上下功夫,像利用花代碼啊、字符串加密等等;第二種方法是在程序編譯完成后做的,比如像加殼之類的。
相信大家對加殼這種方法也較了解了,但是只要程序可以在系統中運行,那么殼始終都是有脫下來的方法,而脫下來后我們可以輕松修改匯編代碼。因此,我們必須在程序內部中做點手段才能防止程序被破解。
眾所周知,很多破解是從字符串開始著手的,而我們一般在c++中使用字符串是直接寫在函數參數中,而不是使用字符串指針,像這樣:
MessageBoxW(NULL, 1"驗證失敗〃,1〃錯誤〃,MB_OK | MB_ICONERROR);
這樣,如果我們在Ollydbg(OD)中打開,我們一下就可以找到對應的代碼:
這樣,我們可以通過修改匯編代碼輕易的跳過這段代碼,或者修改顯示的內容等等。 假如我們現在使用另一種方法調用函數,通過字符串的函數指針,像這樣(使用了一點 無意義的匯編是為了防止編譯器優化代碼,導致看不出效果):
LPCWSTR text, title;
—asm{
mov text. 0
mov title, 0 };
text = L〃驗證失敗〃; title =L"錯誤";
MessageBoxW(NULL, text, title, MB_OK | MB_ICONERROR);
這時,我們點開od看看:

原來可以直接看到的字符已經消失了。
但是,這種辦法我們只用搜一下字符串對應的二進制數據就可以找到文本從而進行文本
的篡改了。
這時,筆者想到了加密字符串的方法,常用的就是base64的算法了,但是base64就算加密后還是很容易被找到對應的ascii字符的密文和密匙從而進行修改破解。因此,我們需要一個可以便于加密和管理字符串的方法。由此,筆者再次想到了壓縮數據。
不管用zlib或者lzma算法都可以很方便的壓縮和解壓縮字符串,我們只需要建立一張對應的字符串表就行了,同時我們要盡量保證字符串壓縮解壓縮算法不被輕易才出來就行了。詳細過程見附件,這里就不深入了。
但是,問題又來了。我們很好地已經將字符串保護了起來,但是如果破解者在函數處下斷點怎么辦。這時我認為需要在函數前面包裝一下,或者給函數下個鉤子,在執行函數前先 檢查有沒有調試器的存在,如果有,那我們必須做一些偽裝或者干脆不執行這個函數。
但是請注意,檢查是否有調試器存在最好不要直接調用IsDebugPresent,這是一及其愚蠢的做法,我們檢查是否有調試器存在一般有幾種方法:
1)檢查FS寄存器,跳轉到FS[0],再查看FS[30]單元,這個DWORD是一個地址,轉進 去,第三個字節就是指有沒有附加調試器;
2)檢查TIB(Thread Information Block)中的一些相關信息;
3)檢查是否有調試器的進程或窗體,這種方法雖然不怎么準確,但是可以防患于未然。 由于FS寄存器那里的指向地址可以被修改,這種方法也不一定準確。但是如果用檢查
線程信息塊的方法太繁瑣了,很容易就被發現并修改了,檢查進程和窗體雖然有點不靠譜但 是還算是一種通用的方法。看大家的取舍了。
相信看到這里讀者們一定有許多自己的創意吧!趕緊試試吧?

本頁地址 http://www.ionrce.tw/ruanjianpojie/20120311796.html

百度搜索更多

谷歌搜索更多

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
?
評價:
昵稱: 驗證碼:點擊我更換圖片
推薦內容
贊助商
贊助商
?

關于本站免責聲明視頻更新google百度地圖視頻地圖RRS訂閱

如有什么問題請在本站留言,或發郵件到 hxt167#foxmail.com

内蒙古十一选五基本走势图手机版