ZeNiX 发表于 2009-5-11 15:36

保護與破解的攻防技巧(八) by ZeNiX 1998

本帖最后由 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 。然後再往上找幾行就可以看到判斷跳躍指令,在這一個例子它是Test Edx,Edx / Jnzxxxxxxx。最後我把這一部份改掉就行了。還好我的手腳俐落,這一整個破解過程只花了不到兩分鐘,否則我真的非得去練那些神技了。
這樣的破解只是為了讓遊戲不再需要那些煩人的檢查手續,讓使用者可以儘情享用這款遊戲。其實如果您喜歡這個遊戲,就應該花錢去買原版的軟體。因為我們可以看得出來軟體公司並沒有刻意為這款遊戲加上強大的保護,你真的要盜版的話,隨便用一套有光碟對拷功能的燒錄軟體就能把它複製下來了。然而你只要花幾佰塊錢就可以買到一盒包裝精美的遊戲,相信我原版和盜版的軟體拿在手上的感覺絕對是不同的。

#小標=■先看保護作了哪些動作(小標)
#小小標=
上面的例子,我們先看軟體保護作了些哪些動作,然後從這些動作中找出我們想做的,這就是一種『禪』。我們發現它的流程如下:
(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) % 0x0a;
    m *= (szCode + 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是什麼時候下載的,該去更新了。

#小標=■又到尾聲了(小標)
#小小標=
在整個逆向工程中,破解只是一小部份而已。破解只是一種消遣,在其中所得到的經驗和樂趣才是我們的目的,希望不會有人拿它來從事不法的行為。要知道,擁有一身好武藝是令人讚賞的,然而這並不代表您就可以使用這一身武藝來傷害別人。
============================================= [本文結束]

ZeNiX 发表于 2009-5-11 15:58

簡体版
保护与破解的攻防技巧(八) by ZeNiX 1998
这是笔者 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 。然后再往上找几行就可以看到判断跳跃指令,在这一个例子它是Test Edx,Edx / Jnzxxxxxxx。最后我把这一部份改掉就行了。还好我的手脚俐落,这一整个破解过程只花了不到两分钟,否则我真的非得去练那些神技了。
这样的破解只是为了让游戏不再需要那些烦人的检查手续,让使用者可以尽情享用这款游戏。其实如果您喜欢这个游戏,就应该花钱去买原版的软体。因为我们可以看得出来软体公司并没有刻意为这款游戏加上强大的保护,你真的要盗版的话,随便用一套有光碟对拷功能的烧录软体就能把它复制下来了。然而你只要花几佰块钱就可以买到一盒包装精美的游戏,相信我原版和盗版的软体拿在手上的感觉绝对是不同的。

#小标=■先看保护作了哪些动作(小标)
#小小标=
上面的例子,我们先看软体保护作了些哪些动作,然后从这些动作中找出我们想做的,这就是一种‘禅’。我们发现它的流程如下:
(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) % 0x0a;
    m *= (szCode + 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是什么时候下载的,该去更新了。

#小标=■又到尾声了(小标)
#小小标=
在整个逆向工程中,破解只是一小部份而已。破解只是一种消遣,在其中所得到的经验和乐趣才是我们的目的,希望不会有人拿它来从事不法的行为。要知道,拥有一身好武艺是令人赞赏的,然而这并不代表您就可以使用这一身武艺来伤害别人。
============================================= [本文结束]

zapline 发表于 2009-5-11 16:43

小z前来膜拜大Z

305 发表于 2009-5-11 17:24

好深奥哦:L

0027 发表于 2009-5-11 19:03

太高深了啊

hj_18 发表于 2009-6-12 21:03

拜见大侠。

z312170878 发表于 2009-6-12 21:07

太猛了,1998就懂怎么多,现在是2009

tysan 发表于 2010-9-30 22:48

膜拜大z牛!

ps520 发表于 2010-10-2 13:07

楊先生,我想問下那個你的襪子是哪兒買的。可否郵寄送我一雙。。。

languageme 发表于 2011-12-12 14:18

{:1_921:}
页: [1]
查看完整版本: 保護與破解的攻防技巧(八) by ZeNiX 1998