好友
阅读权限 40
听众
最后登录 1970-1-1
ZeNiX
发表于 2009-5-11 15:36
本帖最后由 zenix 于 2009-5-11 15:46 编辑
這是筆者 1998 年, 在台灣旗標的 Run!PC 雜誌裡發表的第八篇文章.
今天整理郵件時, 找到的.
適合送給初學者.
所以, 在這裡和大家分享一下.
附件的 PDF 和底下的內容完全相同.
送給喜歡收藏的朋友.
重新再看這一篇, 許多回憶湧上心頭.
[本文開始]==============================================
#附標=保護與破解 的攻防技巧(八)
#大標=禪式破解
#引言=您知道製作一個牢不可破的軟體保護有多困難嗎?也許您認為自己已經做到滴水不穿的地步了,卻還是有漏洞,到底都是漏洞,光芒就是從這兒射進去的。(引言)
#作者=/楊旭峰
zenix@ms10.hinet.net
(內文)
筆者本身(就是我啦!)這幾年來也花費不少精神在研究軟體保護上面,也曾製做過幾個軟體保護。每次完成一件軟體保護都對它滿懷信心,相信它牢不可破。然而這種心境通常維持不到一個星期,我就開始發現它到處都是弱點。只要腦筋靈活一點,很輕易就可以找到簡單的破解方法了。
今天我要介紹給您的是一種新的概念、新的思考方式,希望您能用心去體會其中的涵意,而不要只看到表面的破解步驟。不論您的目的是破解或是保護,相信都能有新的領悟。請注意,關於我們今天破解了哪些軟體,執行了哪些步驟,使用了哪些破解工具?這些都不重要!!真的,這些都不重要。真正重要的是其中的智慧,也就是上一篇(刊在本雜誌第57期)所提到的『禪』。
#小標=■禪式破解?(小標)
#小小標=
什麼?禪!我又不是和尚尼姑的,為什麼要學禪?
請您先把全部的疑惑放下來,安靜地聽我解釋。這裡說的『禪』是指智慧,也就是說破解時要有智慧,有技巧,不要只懂得使用除錯的方式一步一步慢慢地追蹤。否則您只是在耗盡寶貴的青春以換取痛苦的經驗罷了。相信我,凡流汗撒種的,不一定能歡呼收割。如果方法不對,如果天氣和環境都不配合,您得到的就只是一段失敗的回憶。
假設您正在製作一個軟體保護,您會希望它很輕易就被破解嗎?您是否會為破解者們準備一大堆陷阱讓他們好好享用呢?然而身為一個破解者的您,難道就一定要傻傻地踏上那些陷阱弄得滿身傷痕嗎?又是誰規定破解者一定要被保護方式牽著走呢?
『一定有漏洞,一定有很多漏洞。』當您準備破解保護時,一定要先讓自己相信這句話。然後,靜下來好好地想一想。您會發現破解和保護只不過是一種有趣的『心理戰』。
#小標=■這就是一種禪(小標)
#小小標=
『道可道,非常道。』筆者自認沒那種功力用文字把禪的奧妙明確地表達出來,因此準備了一些例子讓您體驗這禪式破解的思考方式。
前一陣子出了一套遊戲叫做『大富翁四』,筆者的女朋友很喜歡玩。它總共是兩片光碟,每次啟動時都會出現一個小框框叫使用者放入遊戲光碟。美眉的可愛就在這裡,每次玩遊戲她都會從那精美的包裝盒裡把光碟片拿出來給電腦檢查一下,檢查完她又會把光碟片漂亮地放回原來的包裝盒,她說不喜歡看到散落一桌的光碟、手冊以及包裝盒。因此每次玩這遊戲都抱怨這些手續太麻煩,每玩一次她就抱怨一次。
為了解決她的抱怨,我希望讓這個遊戲在不放入遊戲光碟的情形下也能正常執行。那該怎麼做呢?
這時候我們的系統已經先載入Soft-ICE for Win95了。啟動遊戲後在它那個煩人的小框框出現時按下Ctrl+D切入S-ICE,然後追來追去,始終在KERNEL和USER之類的系統模組裡跑來跑去,再怎麼也跑不到我們要的RICH4.EXE裡。有些從DOS轉到WIN95下的破解者都有過這種氣人的錯誤經驗,然後覺得WIN95下的破解好複雜,好困難。
後來聽說破解光碟的檢查保護要攔截GetDriveTypeA這個API,從此破解就簡單多了。因為我只要先在S-ICE裡下一個 BPX GetDriveTypeA 這個指令,然後再執行遊戲。在它檢查光碟時,S-ICE就會把它攔截下來。這時你只要下個P RET指令,即可回到RICH4.EXE的程式碼裡了,然後再慢慢追下去,不久即可找到作檢查判斷的程式碼。找到以後該怎麼做呢?這個就不用我教您了吧!
然而漂亮的美眉可是沒有太多耐心看你慢慢追那一大堆無聊的程式碼啊!她可以花上一整天來打扮自己和逛街,卻不願花幾分鐘看你打電腦。所以我們的動作還要再快一點才行,去練一些神技讓自己一分鐘可以打200個字,一眼可以看完50行程式碼和資料。唉,男人真辛苦!
通常遇到這一類的情形,我不必去管它是光碟檢查、序號驗證還是KEY-PRO保護。因為我知道那個煩人小框框是用 MessageBoxA 做出來的,所以只要在S-ICE裡下一個 BPX MessageBoxA 這個指令,然後再執行遊戲。在它產生那個小框框時,S-ICE就會把它攔截下來。這時再下個P RET指令,回到RICH4.EXE,這時我看到上一行程式碼當然是 Call [User32:MessageBoxA]。然後再往上找幾行就可以看到判斷跳躍指令,在這一個例子它是Test Edx,Edx / Jnz xxxxxxx。最後我把這一部份改掉就行了。還好我的手腳俐落,這一整個破解過程只花了不到兩分鐘,否則我真的非得去練那些神技了。
這樣的破解只是為了讓遊戲不再需要那些煩人的檢查手續,讓使用者可以儘情享用這款遊戲。其實如果您喜歡這個遊戲,就應該花錢去買原版的軟體。因為我們可以看得出來軟體公司並沒有刻意為這款遊戲加上強大的保護,你真的要盜版的話,隨便用一套有光碟對拷功能的燒錄軟體就能把它複製下來了。然而你只要花幾佰塊錢就可以買到一盒包裝精美的遊戲,相信我原版和盜版的軟體拿在手上的感覺絕對是不同的。
#小標=■先看保護作了哪些動作(小標)
#小小標=
上面的例子,我們先看軟體保護作了些哪些動作,然後從這些動作中找出我們想做的,這就是一種『禪』。我們發現它的流程如下:
(1).檢查遊戲光碟,正確則流程跳轉到(3)。
(2).秀出小框框,要求放入遊戲光碟,然後流程再跳回(1)。
(3).繼續進行遊戲。
於是我們發現應該在(2)的地方下中斷點,然後我們想做的是讓流程從(1)直接跳轉到(3)這個步驟。同樣的這種破解方式,您可以去找一些軟體來試試,您會發覺很多的保護都從容易就被您破解了。
#小標=■破解者的天堂(小標)
#小小標=
現在大家的作業平台漸漸由DOS轉向Windows 95, Windows 98 以及 Windows 2000了。很多人都認為在這些視窗平台下破解很難,因為他們看到視窗的作業系統如此龐大。連Windows 95都還沒弄清楚,Windows 98就上市了。一堆奇怪的名詞,似懂非懂的技術。又是什麼ActiveX,什麼又是COM的,每一個新成員的手冊都像電話簿一樣厚。想到以前為了把DOS的每一根骨頭都摸清楚,就花了好幾年。就算現在能夠把視窗有多少根骨頭數清楚,也難保明天不會長出新的骨頭來。
然而,我們的禪來了。為什麼我說現在的視窗作業系統真是破解者的天堂呢?一方面您可以這樣想想看,視窗是個新鮮的環境,沒錯吧!如果破解的人對它很陌生,那麼製作保護的人對它也不會有多麼熟悉了。另一方面我們都知道視窗是個極不穩定又脆弱的作業系統。(雖然廣告中它自誇有多麼穩定,用過的人都有多次當機的經驗,就連比爾蓋茲也不例外。)既然保護的人也是視窗方面的新手,那還有什麼好怕的呢?新手寫的程式一定是中規中矩,深怕亂搞花樣會造成視窗系統出差錯,所以他能玩的把戲就很有限了。也因為他是新手,會叫用的就只有那麼幾個標準的API而已,要破解這樣的保護真是比想像中要簡單多了。
當然功力高強的也大有人在,只是大部份在視窗上的軟體保護都太簡單了。如果您夠幸運,說不定您就有機會碰到高手寫出來的保護。說了這麼多,我等一下再拿一例子來解說我們的『禪』吧!
#小標=■印表埠硬體保護鎖(小標)
#小小標=
有讀者來信問我,在以前的文章中提到的『KEY-PRO』是什麼。筆者才疏學淺,不能為這玩意定出一個正確的中文名稱。在英文裡,最常見的稱呼為『KEY-PRO』和『Dongle』。有些軟體在買來的時候會附一個像接頭的東西,您要把它插在電腦的印表機連接埠[如LPT1:]上面才能使用這些軟體。KEY-PRO就是這個像接頭的東西。最常見的是Sentinel KeyPro和HASP Key-Pro。由於Sentinel Key-Pro是RainBow公司的產品,也有人稱它為RainBow Key-Pro或彩虹鎖。如果有機會,您還可以見到其它數十種的Key-Pro,如WatchDog,DesKey等。
在DOS時代,大家破解KEY-PRO的檢查保護通常都是類似下面的流程:
1. 載入Soft-ICE。
2. 在Soft-ICE底下鍵入BPIO 378指令以攔截所有程式對LPT1:的讀寫動作。
3. 執行被保護的軟體。
當這軟體開始檢查保護鎖時,就會被Soft-ICE攔下來。然後再一步一步慢慢追蹤,並猜測到底保護鎖的檢查判斷程序是在哪裡。運氣好的話,一下子就可以找到判斷程序。運氣不好的話,就會被那些複雜的程序搞得一頭霧水。
#小標=■弱點在哪裡(小標)
#小小標=
以前,很多人都認為Key-Pro保護是最難破解的,連不少高手也一致這樣認為。然而當大家都這樣認為的時候,漏洞一定就會出現在這裡。因為製作保護的人太信任Key-Pro了,所以常會製作出和上面類似的保護。
(1).檢查原版Key-Pro,正確則執行流程跳轉到(3)。
(2).秀出小框框告訴您找不到Key-Pro,然後結束程式。
(3).程式繼續進行。
不要懷疑,筆者見過不下數十套被Key-Pro保護的軟體都是這種樣子的,破解方法就和上面的例子一樣。
到底Key-Pro的保護性強不強?如果讓破解高手來製作保護,Key-Pro的保護可以做到很強。然而為什麼我們還是常見到像上面所說這種不堪一擊的保護呢?我想主要有下列幾個原因:
(1).程式師太相信Key-Pro的廣告詞。
每個軟體保護的套件都自誇是牢不可破,不然就是告訴您用世界上最快的電腦也要花幾仟年幾萬年才能破解成功。各位朋友,您正在看我的文章,我就知道您不怎麼相信電腦軟硬體方面誇大的廣告詞了。每個廣告都說自己的產品有多好用,可以幫您做多少事,可以幫您省掉多少麻煩。我們常說,如果那件產品能達到它廣告上一半的效果,那就算是一件不錯的產品了。
(2).程式師不懂破解。
程式師對它自己的軟體十分了解,各種複雜的運算和結構都難不倒他。但是他並沒有破解的經驗,他甚至不曉得別人可能使用哪些方法來破解他的保護。
(3).程式師沒有花多少心思在保護上。
寫完這一套軟體已經讓他精疲力盡了,他實在沒有時間再去設計各樣的保護。只好從買來的Key-Pro保護套件中,找幾個現成的保護範例來套用了。
如此一來,我們發現Key-Pro保護的弱點就在於軟體本身和Key-Pro保護套件連接的地方。所謂『連接』就代表其中有接縫,而這接縫往往就是漏洞所在之處。
#小標=■一個挫敗的經驗(小標)
#小小標=
底下我拿一個筆者以前挫敗的例子解說一下,並不是所有的Key-Pro保護都那麼地簡單和脆弱。幾個月以前,那時候我還沒真正體會『禪式破解』的奧妙。老實說那時候我對WIN95的破解根本就沒有什麼經驗,有個朋友拿一套叫做Super Scape的軟體給我練功(練習以增進破解的功力)。我不打算告訴您那軟體的版本和用途,因為那不重要,您只要看我是怎麼犯下這種錯誤,以免日後您也和我一樣。它的保護方式是KEY-PRO,很不幸地他沒有給我原版的KEY-PRO,但是我在電腦中可以正常完成安裝。然後我開始執行這軟體,它秀給我兩個開頭畫面後出現一個小視窗,告訴我沒有找到合法的KEY-PRO並給我一個按鈕。在按鈕上點一下就結束程式了。
依循以前在DOS下的破解經驗,我當時採用下列的步驟試圖破解:
1. 載入WIN-ICE來啟動Windows 95。
2. 在WIN-ICE底下鍵入BPIO 378指令以攔截所有程式對LPT1:的讀寫動作。
3. 執行被保護的軟體。
然後情形和上面一樣,程式並沒有成功地被我的WIN-ICE攔下來。查看手冊的結果發現 BPIO 這指令有一個 –H 的新參數可用,於是我重來一次。果然軟體開始檢查保護鎖時,就會被WIN-ICE攔下來了。然後再一步一步慢慢追蹤,並猜測到底保護鎖的檢查判斷程序是在哪裡。哦!運氣真的很不好。追了好久才發覺我迷失在那些複雜的核心程序當中,而這裡根本不是保護的檢查判斷點。理論上這種破解方法是沒錯,然而太累人了。我知道現在還有很多人用這種方法來破解視窗底下的KEY-PRO保護,其中有不少人因為是以前DOS下的破解高手,所以他們就像這樣套用DOS下的破解經驗。不過他們也真的很厲害,他們每次都會掉落在那複雜的核心程序中,而且他們已經對這迷宮非常地熟悉,我相信他們必定花了很多時間在這裡鑽研。
後來對岸的一位朋友告訴我那個小視窗和一個按鈕的錯誤訊息可能是MessageBoxA作出來的對話框,所以我可以用 BPX MessageBoxA 來試試。如果還是不行的話,前兩個開頭畫面只要把中斷點下在ShowWindow即可攔到。於是這個軟體一開始的保護檢查果然很輕易就可以跳過了。(用和上面類似的方法)
然而這一類的軟體通常會在啟動時把KEY-PRO中的一些值讀進記憶體作成一分表格,以後在程式的某些選功能中再度做保護驗證。所以光是破解前面那個保護檢查是沒用的,後面的驗證才是真正難的地方。因為它所要驗證的數值是存在記憶體中,它不再透過I/O PORT來讀取資料,所以在那之前你還必須先把那一份表格的位址先找出來才行。這裡就沒有捷徑了,完全要靠個人功力了。而一個軟體保護能做到這樣,也足以趕跑一大堆半調子的破解者了。
#小標=■讀者回應(小標)
#小小標=
我很高興有那麼多的人寫信來鼓勵我,以及提出那麼多的問題。如果您沒有收到回信,希望您不要生氣,您知道我有一個可愛的美眉,我不願讓她覺得寂寞。底下我就把一些常見的問題列出來,也許您的疑惑也在裡面哦!
Q:
From: Hank Huang
我是 S-ICE 的使用新手,不知在破解時需要做哪些設定??我只裝好了 S-ICE V3.22。拜讀了 RUN PC 第 55 期的大作,有些問題,
1) 當我叫出 S-ICE, 打 bpx MessageBoxA
出現 Symbol not defined (MESSAGEBOXA)
2) 註冊機的多重迴圈的內容 wSum = 0;
for ( i = 0....) {
m = (szCode[i] + i) % 0x0a;
m *= (szCode[i+1] + 1 + i) % 0x0a;
wSum += m;
}
這段的意義是???
A:
我建議您應該先把Soft-ICE的手冊看一看再開始使用,在使用任何軟硬體之前都應該先詳細閱讀說明書的。
1)您要在S-ICE的子目錄下找到一個叫WINICE.DAT的檔案,把裡面每一行的”;LOAD=”和”;EXP=”最前面的分號去掉”;”。如果您只是要MessageBoxA的話,只要修改”EXP=C:\WINDOWS\SYSTEM\USER32.DLL”這一行即可。
2)這是C語言的程式,由於C語言的教學不是我們這一單元的重點,麻煩您隨手拿一本C語言入門的書來看看就可以了解。
Q:
楊先生您好:
我的名字是林清政,是RUN! PC的長期訂戶 ,在連續拜讀您的大作(保護與破解的攻防技巧)以來,由於您的內容介紹詳實,讓我獲益不少。但總是有一點缺憾,就是篇幅太少了,總覺得意猶未盡。
在RUN! PC七月號(第54期)內容中您有提到"破壞鍵盤中斷的程式碼",但要讀者動腦想一想原理,我猜想應是BIOS中"System BIOS Cacheable"的關係,但不知是否正確及其來龍去脈?可否請您抽空來信告知其原理,謝謝!
另外,由於Windows當道,可否在以後的文章內,均有MS-DOS及Windows作法的介紹呢?再者,由於每次皆要一個月才能見到您的大作實在太漫長了,您是否有出書或有相關書籍可介紹予我呢?
讀者 林清政 敬上
A:
是啊!篇幅真的太少,而且自從您那封信以後,我就常缺稿,真是抱歉。以後我會儘量多花一點時間把自己的心得寫出來和大家分享。
理論上ROM區是不能被寫入的,所以就算您去修改它,它還是不會被更動的。您想到了Cache,但有沒有想到Shadow呢?一切理論都不如實際去體驗,您實際去寫入BIOS ROM區,然後再去驗證它試試吧!
您會發現最近我介紹Windows的部份較多了,日後我會想辦法兩者兼顧的。如果您有什麼主題希望我先介紹的,也不妨來信給我意見。
至於要我出書,幾年前是有那樣打算過,現在我可不敢這麼想了。一來因為我的時間不多,二來您應該也注意到我的每一篇文章之間似乎都沒什麼關連性。也許以後會把我的每一篇文章整理一下再出書也不一定,所以目前還是請您每個月耐心等待吧!
Q:
你好,我是一個剛剛學軟體破解的新手看到作者在 RUN PC 所寫的文章感到興趣所以想請教 soft-ice for windows95 哪裡可以下載或者應該如何得到?
新手 ASKA 敬上
A:
這是要花錢買的,不過以前他們有出14天的試用版,您可以到他們的網頁www.numega.com 去問他們看看。聽說在很多網站也可以找到,可是我先聲明,那樣做是違法的哦!
Q:
From: Randy Johnson
你好楊先生,我是一個debug的初學者,想向你請教兩個有問於debug的問題,
Q1:
就是我每次在debug PE格式的執行檔在debug到 int21
時就出現下列訊息,之後就無法debug下去了
D:\tr>tr d:\wincv.exe
This program cannot be run in DOS mode.
Q2:
PE格式執行檔的真正程式碼是從那開始呢??
以上問題想請楊先生抽空回個信幫我解答一下
忠實的讀者上
A:
這兩個問題是同一個問題。TR只能追蹤DOS的軟體,您要追PE格式的軟體就要用PE格式專用的追蹤工具,像是Soft-ICE for Win95或是TRW。
Q:
From: Dream Sam
經由RUN!PC雜誌上閱讀到您的文章, 由於自己對破解方面十分有興趣, 然而自己只是剛入門而已, 承蒙閱讀作者的文章, 穫益不少, 記得在文中作者有提到EXE檔案的重定位表, 想請問作者可否介紹關於這方面較詳細的書籍, 以及是否有中文書; 若無中文書籍, 是否可以介紹原文書, 以及在那裡可以買到, 若有不便只處, 敬請見諒.
A:
這一點我也很傷腦筋,因為我也沒有看到哪一本書把可執行檔的重定位表介紹得很詳細的,也許是我讀的書不夠多吧!不過您可以參考碁峰資訊所出的『軟硬體保護技術手冊』的第二十三章還還原程式主檔,作者是筆者的好朋友洪文隆先生,早期他也在本雜誌寫了幾篇很有份量的文章。
Q:
From: Gordon Huang
你好!!看了你在Run Pc!的大作覺蠻易懂的!!也試了TR感覺真的蠻好用的...不過Windows和有保護模式的program不能用..那不是有TRW嗎??可否 ATTACHMENT一份給我呢???若有困難也沒關係啦......還有爾後有這類問題時可否和你一起討論呢??謝謝..擔誤你時間了....
A:
您看到這裡的時候,到Run!PC的網站去找找,TRW已經在那裡等您了。還有,有任何問題都可以提出來討論,只是我不一定能幫得上忙就是了。
我實在沒有想到上一篇『強力的破解工具』刊出來之後,各位的反應竟然如此熱列。所以特別再次徵得作者同意,免費提供WIN95版的TRW給各位讀者使用。有需要的人可以到Run!PC的網站下載。
Q:
From: CoCo Lin
Zenix 你好 :
拜讀您在 RUN PC ! 的大作, 內容非常精采,希望你能再接再勵持續下去,造福受益的讀者! 晚輩對 DOS 模式 CRACK 有概念且有實務經驗,目前想朝 Win 95 方面學習,請前輩指點一條學習方向 . THANX !!
A:
通常在DOS模式的破解高手,在WIN95底下有時候會像上面的例子一樣碰壁,那是因為對WIN95不熟。其實道理是相通的,您在DOS下會攔INT,在WIN95底下您就要習慣攔API,所以建議您先瞭解一下WIN32的API會比較好。再來就是多練習!!
Q:
From:Cracker Lin
我破解PKZIP 2.50 for WIN95時輸入一個錯誤的註冊碼,然後他出現一個錯誤訊息的視窗。可是我在WIN-ICE裡下 BPX MessageBoxA 為什麼攔不到它?
A:
練習破解不能老是依樣畫葫蘆,人家用哪個API,您就每次都跟著用。當您攔不到它時,您有沒有想過這個視窗可能不是用MessageBoxA作出來的?您查看一下那個執行檔就會發現它用的API是CreateDialogIndirectParamA(微軟的人還真是閒,有事沒事就把名字取那麼長。)。還有,您這版PKZIP是什麼時候下載的,該去更新了。
#小標=■又到尾聲了(小標)
#小小標=
在整個逆向工程中,破解只是一小部份而已。破解只是一種消遣,在其中所得到的經驗和樂趣才是我們的目的,希望不會有人拿它來從事不法的行為。要知道,擁有一身好武藝是令人讚賞的,然而這並不代表您就可以使用這一身武藝來傷害別人。
============================================= [本文結束]
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。