




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、從應用程序移除sentinel superpro軟件狗暨軟件狗破解方法詳解(圖)譯者:月中人(ptg)原文標removing sentinel superpro dongle from applications題:and details on dongle way of cracking原文作shub-nigurrath arteam者:原文版version 1.0 - september 2006本:關鍵詞:don gle, simula ti on, emu la tion, sen tinel superpro, 軟件狗,模擬,仿真備注:首先感謝arteam的shub-nigurrath
2、寫這個軟件狗教程。以下是翻譯有關的幾個問題:1. 有幾個原圖不易取得,譯者根據原圖重畫。2. '仿真'意指用外部程序掛鉤攔截應用程序與軟件狗之間 的交互;'模擬'意指在應用程序內補丁實現假狗、不需要 外部驅動程序。3. 【字典】圣天諾sentinel,特征文件sig/signature,模 擬 simulation,仿真 emulation,單元 cell,附簽 tag,選 項卡tab,編譯器特性特征文件the compiler specific signatures,軟件狗內部資源 internal dongle resources, 交叉引用xref,重建與
3、替換rearch & replace,中性算法 alogrithm half, sp_success (0)表示 sp_success、其值為 0目錄1. 摘要2. 可能的方法:仿真與模擬2.1. 軟件狗如何工作2.2. 軟件狗的仿真2.3. 仿真器如何工作2. 4.模擬器如何工作3反匯編sentinel保護的程序3.1. 用ida反匯編3. 2.用0ilydbg反匯編4. 關于sentinel應用程序編程接口的一些細節4. 1.什么是 sentinel superpro4. 2.鍵存儲器的結構4.2.1內部級單元與可編程單元4. 2.2訪問碼4. 2. 3單元類型4.3. api函數
4、引用5. 改寫 sentinel api 函數5.1. sproformatpacket5.2. sprofindfirstunit5. 3. sprooverwrite5.4. sprofindnextunit5. 5. sproread5.5.1 sproread approach #25.6. sproquery6. 補充7. 參考&結束語9. 歷史10. 致謝1 摘要歡迎冋到我的另一長篇教程。這次我將專門講解最近花了點吋間研究的sentinel軟件狗。我首先了 解了一些從應用程序去除sentinel保護(以及一般意義的軟件狗保護)的不同方法。冇關這個課題的 教程見到的比較少,見
5、到一些也是過時的、不完整的,大多數難以讀懂或應用到現代的應用程序上。感謝許多人的工作,像goat ass > cyberheg> crackz (這里只列出很少幾個姓名)。特別要感謝toro (我與他就本主題長時間聊過,因此我想在此公開向他表示感謝)。我在本教程所講的東西不完全是新 的。但不管怎么說,我更新了他們的技術,在最新的應用程序上測試過,并且把那些不再工作的例行程 序(你能在別處找到)做了一點點修改,使它們繼續可用。在woodmann網站1上關于本主題的網頁是軟件狗有關資料一個極好的來源。將本教程視為sentinel軟件狗白皮書(不打算而而俱到),我努力把原理解釋清楚,同時
6、做點新的 貢獻。我關注sentinel,因為它是最受歡迎、被使用最多的軟件狗之一。祝你愉快,shub-nigurrath這里描述的技術是通用的,不是特別針對任何商業應用程序。整個文檔必須被當作為一個關于編程 高級技術的文檔,如何使用其中信息則完全是你自己的責任。商業應用程序明確地使用的地方,木文僅就它們的保護而論,不透露任何破解細節。stored data/algorithmprivateveyafttentalroutinea2 可能的方法:仿真與模擬一般而言,對于軟件狗保護的應用程序有兩個可能的方法:仿真或模擬。我將會使用這兩個名詞區 分這兩個方法,其他人可能不同意我這樣使用這兩個詞的含義
7、,但是這樣總比叫它們方法a和方法b好 些;-)我必須首先建立一個共同的理解平臺,以便能夠開始詳細的討論。2. 1軟件狗如何工作我想你應該已經有這方面的知識,而冃這里不解釋特定軟件狗的細節,總之為了理解與軟件狗打交 道的一般方法你需要有點常識。一般來講,用軟件狗保護的應用程序需要幾個組件;我盡量用圖1總結 一下。安全中國終身vip會員 vip.anq 圖1 -應用程序一軟件狗交互的概略圖從圖的底部向上到頂部,重要的組件依次為:被保護的應用程序。應用程序與軟件狗應用程序開發工具箱本地交互,調用它的ape從應用 程序的觀點看,就像調用一個代理對象,向它提出請求并等待冋應或數據。對于知道這些軟件 工程
8、對象的人來說,這是典型的設計模式。應用程序開發庫。這個組件是出api構成,我們口j以假定它們就是代理方式:它們在應用程 序木地運行提供編程接口,而在相反方面它們實現通信協議。它們只是消息調度程序和請求收 集程序(總之像任何其他api樣)。開發庫以一個dll或標準庫(即動態鏈接或靜態鏈接) 和程序相連,并且向應用程序提供我所說的服務(從1到n)。通信協議。這個元件要求在系統中安裝軟件狗驅動程序實現通信。軟件狗處理程序。當軟件狗收到一個請求時,它必須啟用原文invoke一個特定的請求處理 程序。實際的軟件狗邏輯當然比圖1所示更加復朵,但是我們不妨就這么理解。軟件狗處理程 序使用軟件狗內部資源(鍵、
9、算法、數據,最后還冇cpu) hl答應用程序捉出的問題。軟件狗內部資源。軟件狗可能支持鍵、數據庫和運行某些算法的cpu (這也是sentinel的情 況)。通常越難去除保護的軟件狗,它的內部資源就越復雜。跟蹤這些組件運行或者讀出數據 常常是不可能的,或至少很難。仔細一想,顯然,整個通信是基于一個信任機制。我們的攻擊就是要設法推翻這個信任模型(見參 考中類似情況的討論)。你知道,我們可能有兒個辦法在應用程序和軟件狗之間破壞這個信任模型。準確地講有兩種最重要 的辦法,我稱之為仿真和模擬。2.2軟件狗的仿真其實質是編寫一個外部程序在系統上運行,攔截(掛鉤)發送給軟件狗驅動程序的請求,完全按照 與軟件
10、狗相同的方式做出回應。可以用不同的技術來做,但是通常沒有必要弄得復雜,只需要普通掛鉤 那些給軟件狗驅動程序發送請求的系統api就足矣。toro,但不光是他,發布了一些真正好用的仿真器,此外還冇其他一些著名的仿真器(如glasha) o這些程序的問題是它們的使用期限與其所仿真的特定軟件狗緊密相連。另一個重耍限制是,它們至 少需要插入原配軟件狗一次以收集回應數據,用于以后仿真!2. 3仿真器如何工作這里我將使用toro的sentinel仿真器(在一些論壇上發布,如exetools) 和所冇的仿真器一樣, 第一個耍完成的任務耍求你插入原配軟件狗并啟動仿真數據收集程序。這個收集程序本質上是一個軟件狗通
11、信協議記錄器:它監視程序的請求和鍵的m應,并把獲得的所 有信息儲存起來,見圖2。圖2 - sentinel superpro軟件狗監視程序:收集來自應用程序的請求和來自軟件狗的應答其工作機制非常簡單我們用來捕獲消息的兩個著名鉤子掛在:應用程序調用的軟件狗api和驅動 程序調用的軟件狗apt。為了冇效率地工作,仿真程序必須在windows將請求傳給ringo級驅動程序之 而成功掛鉤,該程序就是如此。如你所見,應用程序調用的幾個函數屈于sentinel編程接口(見參考3),稍后我們再討論它們。第二個組件我稱之為軟件狗通信協議播放器,它播放前面一步所收集的信息。使用同樣的掛鉤技術, 當然消息傳遞方向
12、與第一個是和反的。你能看到這項技術的好處,它不修改應用程序僅僅把問題私下解決了。另一方面它也冇一些限制: 你至少需耍插入原配軟件狗一次,而且被仿真的數據將會包含你的軟件狗數據,甚至于序列號。總z不 是太好 壷豐你可以使用兩個更高級的技術編寫仿真器。那就是編寫一個ringo級驅動程序仿真器,仿真所有的 驅動程序功能,并且再編寫一個ringo級的驅動程序過濾器,攔截對真正的軟件狗驅動程序的調用的。 不管怎樣,其潛在的邏輯總是一樣的,攔截對軟件狗(在ring3或ringo)的調用并且應答,使用事先 儲存的、真止軟件狗會回答的數據。你可能發現有些應用程序增加復雜化:軟件狗公司開始把應用 程序和軟件狗之
13、間的通信數據包加密/解密。數據包在發送給軟件狗之前被應用程序加密,返冋給應用 程序的冋應也是如此。編寫這些軟件狗的仿真器,即是仿真這些加解密算法。因此唯一有效的方法是對算法及有關數據包 進行逆向工程,或者從應用程序中剝離加密/解密算法。2. 4模擬器如何工作模擬一個軟件狗意味著需要在被保護應用程序中加入一些代碼,它們模擬軟件狗對應用程序請求做 出的回應,如此使得應用程序不需耍任何外部模塊:軟件狗、驅動 器、仿真器。補丁的應用程序又將 是一個正常的應用程序。為此,我們將需要修正那些在應用程序內實現保護設計的代碼片(見圖1)。在圖3我概略描述這個方法。圖3 -在應用程序之內模擬軟件狗圖3清楚地顯示
14、我們需耍在補丁的應用程序內安排一個模擬的軟件狗存儲器,并且用一些例行程序 模擬原始的服務處理程序:很大不同在丁原始回應讀自模擬的存儲器而非讀自軟件狗。應用程序屮不與 軟件狗交互的部份保持原狀。我在木教程主要集屮討論后一種方式。3 反匯編sentinel保護的程序我使用一個商業應用程序(任何來自freedomscientific4的應用程序也都可以)的一部份作為例 子,它是用sentinel superpro軟件狗保護。在這里我們不關心整個應用程序,我們需要的是它那個獨 立的軟件狗許可證確認程序,我在本教程發行物中帶了。這個程序對我們來說僅僅像一個crackmeo最適合用來分析軟件狗程序的工具是
15、ida和ollydbg加上一些特定軟件狗庫的特征文件(你可以從 各論壇上免費得到,在本教程發行物中也有這些),它們能告訴程序在哪里調用軟件狗服務代理。的確耍感謝那些0 llydbg插件,我們稍后將會使用。它們能夠讀.sig文件,因此這里不是必需要ida。不管怎樣, 0d優越的代碼分析功能很是方便。3. 1用ida反匯編花點時間熟悉一下ida和代碼結構,下面我們將集中精力展示以上講述的基木原理。原始程序和補丁程序如圖4所示。圖 4 - 原始的 dongleviewer 和補丁的 dong 1 eviewer注意如果在你的ida安裝文件夾屮還沒有那些*. sig文件,啟動前先從木教程發 行物中拷貝
16、這些文件。不管你用什么辦法得到ida 5.0版(幸運的話用官方版,否則從軟件下載區分享),發動你的本地 拷貝:拖放原始的dongleviewer, exe至iida主窗口并按ok鈕。ida就開始分析該程序。請小憩片刻, 等待它完成。-旦ida準備好,你就打開ida的libraries文件夾,見如下快照:如果沒有libraries附簽,也可以用花按鈕® 打開它。選擇該選項卡并按鼠標加鍵(或者ins鍵),添加你先前所拷貝的新特征文件。我建議把它們全 部添加以確保萬一,因為你還完全不知道應用程序是使用哪個版本的sdk創建的。你應該看到類似于圖 5的東西,根據匹配的最高版本號可知,應用程序似
17、乎是使用6.x版(非6. 2版)的sentinel sdk編譯 的。而且,沒有外部的動態鏈接庫,因此所使用的sdk是與應用程序靜態鏈接的。filestate#funcubraty name3vc32rtfapplied1095microsoft visualc 2-8/net runtimeijpivc32rnfcapplied895mfc 3.1 /4.0/42/8.0 32bit4>sspro62applied0sentinel superpro 6.2 lib (sope)-pssproapplied12sentinel supepro lib - killer_3k3sspro_
18、v6applied258sentinel supepro (v6.0 lib) by cyberheg<lssprocapplied29sentinel supepro c/c+ library by prt (rev4)4>supcapplied0sentinel ultraro c/c+ library by prt (rev3)jw32mcdllapplied0sentinel dll lib安全中國終身vip會員vip .anqn. com圖5 -已應用的ida特征文件l i386spro500msoftcif(kx)l l386spro500msoftcig(xx)004
19、76b60 i00476dc0|h s p ro fo rm atpscket00476ef0現在,應用名稱以后你可以在名稱選項卡上看到結果:ida只是把庫函數名稱相應地賦予代碼中的 函數。l sprofindnextunit00476f50l sprogetversion00477030l l386spro500msoftcih(xx)00-177100l sprofindfirstunit00477130l l386spro500msoftcii(x,>)004771 doi rnroanrnfindnpxtunitm 00477220妥荃申囪終貝vip會員vipanqncorr依照
20、ida幫助文件,以下是各函數名稱的圖注:l (深藍)庫函數f (深藍)普通函數c (淺藍)指令a (深綠)ascii碼字符串d (淺綠)數據1 (紫色)輸入函數的名稱預期我們將在后續章節重點介紹sentinel api zsprorcad。現在主要講一下調用圖。你應該在strings “叫'選項卡中尋找那個被有效包含的驅動程序:. wsentinel. vxd.text:0047680000000011 c在它上面雙擊鼠標左鍵,按x鍵查找關于那個符號的引用,然后你將會到達函數 i386spr0500ms0ftcia(x),特征文件幫我們識別出這個函數(見圖6)。ieeih安全中終身vi
21、p會員 v;attributes: library function static;_stdcall i38gspro500msoftcia(x)_i386spro50omsoftcia4 proc near打 g_0=dword ptr 4push0 ;htemplatefilepush0 ;dwflagsandattributespush3;dwcreationdispositionpush0 ;ipsecurityattributespush0 ;dwsharemodepush0 ;dwdesiredaccesspushoffset a_sentirwl._uxd ;,.sentinel
22、.uxdiicallcreatefileamouecx, esp+ar9_0cmpeax, offffffffhmouecx, eaxjnzshort loc_47g8m8r:圖 6 i386spr0500ms0ftcia(x)的圖解現在只耍按 勢鈕生成對i386spr0500ms0ftcia(x)函數的引用圖。生成一個相當大的圖,但我只耍 你注意圖表的底部:ida把來自特征文件的函數用彩色標明(淺藍色),那么由于我們只應用了 sentinel 特征文件,所以這些是sentinel軟件狗的庫函數,被程序使用或僅僅鏈接它(記得靜態鏈接一個*. lib 文件可能鏈接它所有的函數,這取決于鏈接程序選
23、項)。你也必須確知一件事:如果ida報告某個函數不被引用,這不一定表示它在運行時間不會被調用, 因為可能有動態消息、改變的代碼以及ida解析引擎出錯。總z,我們需耍對這個結杲進行判斷,或者 說它是我們開始探究的岀發點。圖7顯示這個圖表的底部:注意,i386spr0500ms0ftcia被其他內部函數調用,然后有導入庫函數 如sproextendedreadc這個函數不被程序使用,但是它在里面做個多余的代碼)和sproquery或sproread (這個函數則和反,頻繁地被調用,而且沒它不行)。圖7 - i386spr0500ms0ftcia(x)的交叉引用圖底部這類分析對我們大有幫助,因為它告
24、訴我們必須調查哪些庫函數調用。監視程序也能捉供相同的信 息,如第2. 3小節所示。但是,你必須明口,一個監視程序只監視被程序有效執行的調用,而非所有可 能的調用。如果在你的模擬屮漏掉什么東西(某個函數沒有被調用,或某個菜單沒有被激活),它很可 能是不完全補丁。聯合使用這兩種方法比較安全,而11讓你更右機會做一個完全補丁。注意你能夠理解一個模擬器如何可能掛鉤系統,攔截對createfilea的調用。3.2用0 ilydbg反匯編既使沒有ida,也可能使用0ilydbg反匯編該程序。你會發現godup插件(包含在這個文檔之內) 極為冇用,見圖8。goduppoon安全中國終身vip會員vip.an
25、qr圖8 - godup插件細節這個插件能夠讀ida的.sig文件并且把函數名稱輸入反匯編的程序之內,見圖90的確,它不支持所有可能的類型,但它支持這里使用的sentinel特征文件。你必須手動插入特征文件路徑。ifatixt oty dcbtiqgcr ui)ivcrs<il pfugin godupbsq| setting! | helpapp typesffit console orapihc &exedlldrv sinclefireadedmuuneireaded 16bit 32ditfile types fffffeff dosexe(old) doscom(old
26、) bin dosdrv ne intelhex moshe:-: lx le nlm coff pe omf srec zip omflib ar loader elf w32run aout pilot dosexe doscom ae<ardumping succesfvlly finished allaying signaturesc 丄 t - * .、. . a - * "匚 - i 安全中國終身vip會員v圖9 - godup應用一個特征文件如前述,應用所有的特征文件,然后按ctrl-n鍵查看oi ly已經為當前程序定義的名稱,搜索“spro” 開頭的名稱(所有的
27、sentinel高層函數以這些字母開頭),你會從其他函數中找出下列各項:記得去選中uoverwrite existing labels”欄重寫現有標簽0o476f5o textusersprofindnextllnit1 arg00476ef0 textusersproformatpacket00477030.textusersprogetuersion00477510.textusersproouerwrite安全中國終身vip會員vip.anq 如你所見,godup識別出的這幾個函數與ida識別的沒有不同:與0lltdbg識別出50次相比,ida 識別出300次左右而勝出。吐 create
28、 asm file. y? create inc ffle.& create lst ffle create exe file create dif fie.create html file.ait+floinclude in the map filesegmentation informotion dymmy names oemongle names空 dump database to idc fie|廠 ,安全中國終身vip會員vip.a nq安全中國終身vip會圖10 - ida輸出map映射文件那么,最好的替代選擇是從ida輸出map文件,然后用這個插件把映像文件輸入到olly
29、dbg,見圖 10o最后這種工作方式竟然產生最好的結果!4 關于sentinel應用程序編程接口的一些細節此吋我們已經差不多,是吋候稍微停頓一下并簡要地了解sentinel的pdk如何工作。我將使用其文 檔中一些信息3,你應該在讀過本教程之后繼續完成你的培訓過程。注意一般來講,果你想要打補丁一個軟件狗保護的應用程序,那么真止首先要 做的是讀開發者手冊,了解應用程序可能使用軟件狗的什么服務及其使用方法。4. 1 什么是 sentinel superpro除了提供一個功能全面、簡單易用的軟件保護系統z外,sentinel superpro還讓你能夠增加示范 產品限制、升級示范產品到完全許可版本并捉
30、供附加功能的使用權,完全不需要再運送一個新的硬體鍵 過去或者訪問客戶位置。sentinel superpro 6. 1還提供了一個附加的能力-允許你的客戶使用一鍵多客戶端。sentinel superpro 6. 1還允許你給你的分發商編排特定的一些鍵,因此你能夠限定他們可以激活和更新多少個產 品鍵。sentinel superpro硬體鍵有兩種形式因素:并行端口或者usb,見圖11。安全中國終身vip會員圖- sentinel superpro 鍵4. 2鍵存儲器的結構每個sentinel superpro鍵包含128字節存儲器,按每個單元16位組成64個單元(字)。單元按十六 進制從位置0
31、到3f編址,見圖12。當你規劃一個單元的吋候,你賦予它各種不同的屬性。這些屬性決定該單元(和它所含的字)該由 你的應用程序如何使用。單元屬性包括單元類型、訪問碼和單元數值。保帶單元一0001020304050607-08090a0b0c0d0e0f101112131415161718191a1b1c1d1eif可用單兀一202122232斗252&2728292a2b2c2d2e2f3031323334353637_38393a3b3c3d3e3f安全中國終身vip會員v通常,每個單元包含下列字類型之一:數據字:一個數據字能儲存數據,如從屬許可證、客戶信息、序列號、口令和校驗數位。你
32、編碼你的應用程序讀某個字,然后鑒定所儲存的數值并做相應行為。一個數據字單元可能被規 劃成只讀或者可讀/寫。計數器字:一個計數器字包含你設定的一個初值然后由你的應用程序減量。計數器字的一種 典型使用是限制一個應用程序的示范品可運行次數。算法:一個算法包含一個位模式,規定硬體鍵應該如何加密你的應用程序所發送的查詢數據。 該鍵使用一個算法一一并且是個內部儲存的專有算法一一轉換查詢數據然后返回一個值給你的 應用程序。你設計讓應用程序發送查詢給該鍵,然后鑒定返m值并且做出相應行為。算法是活動的或不活動的。只有活動的算法能給一個查詢返回有效的回應。算法是否活動由該 單元值中活動的/不活動的位來控制。4.
33、2.1 內部級單元與可編程單元每個鍵的00單元到07單元是內部級單元,它們包含著固定的、預編程的系統信息,見圖13。單元內容可讀否?00鍵序列號;每個鍵按順序分配。*是01開發者id;唯一對應你的公刁/產品。是02-07彩虹技術保留使用。否圖3 - sentinel superpro鍵的內部級單元內容個序列號是16位的,并口不保證它是唯一的)程序可以使用從08單元到3f單元。4. 2. 2 訪問碼每個單元冇一個訪問碼,用它控制該單元能夠被你的應用程序如何使用一一它定義單元的單元類型 屬性。例如,一些單元類型的訪問碼允許單元數值被讀出和被重寫,而另一些單元是只讀的或根本不可 寫入。訪問碼是數字0
34、到數字3,見圖14。訪問 碼描述0可讀/寫的數據字你的應用程序可以讀該單元的這個字,而且,如果給出寫口令,可以修 改它的內容。1只讀(鎖定)數據字你的應用程序可以讀該單元的這個字,但是如果沒有重寫口令,則不能 改變它。2計數器字該單元包含一個字(數值),你的應用程序可以用寫口令減量它。如果 沒冇重寫口令,則不能(用減量之外的方法)改變該單元的值。3鎖定并隱藏的字/算法字你的應用程序不能讀該單元的數值。修改它需要重寫口令。該單元數值 (內容)是隱藏的(不可讀)。圖14 - sentinel supcrpro鍵的單元訪問碼4. 2. 3 單元類型每個單元被賦予一個代碼,定義你想要如何使用此所選單元
35、。這個代碼叫做一個單元類型。單元類 型劃分儲存在m元中的數據類型,繼而影響該單元能被如何使用。每個單元類型用兩個字母的縮寫來識 別;例如,cw標識一個計數器字。某些單元類型被設計成按組使用。例如,算法能與計數器和口令產生 關聯。其他單元類型冇地址限制,意即只冇鍵上特定單元才能指定為這種類型,見圖15ocell ijpeaccess codename*0未放aa3活動的算法ah3中性韓(活動或不活動任選其一)ap3激活口令ca2算粉數辭cw計數器字di1開發者iddl1鎖定的數據字dw0竝字ia3不活動的算法rw3保留字sn1翊號圖15- sentinel superpro鍵的單兀類型4. 3
36、api函數引用圖16中列出sentinel sdk的主要api函數。函數描述sproac ti vate () sprodecrement () sproenumscrvcr() sproextendedread() sprofindfirstunit()激活一個不活動的算法,以便它能被sproquery ()函數 使用。減量一個計數器字或者讀/寫數據字。如果計數器關聯到 一個活動的算法,那么計數器減到零則使該算法不活動。 依照指定的開發者ii),列舉在網絡上運行的服務器個 數。讀鍵的任何非隱藏的存儲器單元的數值和訪問碼。搜索隸屈于一個指定的開發者id的所有鍵。sprofinclnextuni
37、t ()sproformatpacket()sprogetcontactserver()搜索隸屬于同一個開發者1d的下一個鍵。驗證數據包(rxbo_spro_apipacket)的大小并初始化字 段為默認值。在任何其他api函數被調用之前,這個函 數必須先被調用一次。返回為一個指明的api數據包設定的聯系服務器。sprogetfullstatus () sprogethardlimit () sprogetkeylnfo()返回擴充的狀態信息。它只用于支持目的。 檢索碩體鍵所支持的最大許可證數目(碩限制)。 從一個指明的服務器獲得關于鍵的信息。sprogctsubliccnsc() sprog
38、etversiono sproinitialize() sproovcrwritc()取得一個指明的單元中的從屈許可證。返冋sentinel superpro駟動程序版本號。執行驅動程序需要的任何初始化。改變除了保留單元00-07 z外的任何單元的數值和/或者訪問碼。sproquery ()發送一個數據字符串給鍵,用一個指定的算法加密它, 并返回加密的字符吊給應用程序。sproread ()sproreleaselicense()讀鍵的任何非隱藏單元的數值。通過指定單元地址為0而釋放一個許可證,或者通過指 定從屬許可證單元的單元地址和要釋放的從屬許可證個 數而從一個指明的單元釋放一個從屈許可證
39、。sprosctcontactscrvcr()為一個指明的api數據包設定聯系服務器。sprowrite()改變任何訪問碼為0 (可以讀/寫數據)的單-元的數值和 /或它的訪問碼圖6 - 主要的 sentinel superpro api 函數在sdk官方報告中它的api名稱帶前綴“rnbo” ,但是我們通常提及這些api名稱時不帶這個前綴。 從破解角度看最重要的是:sproformatpacket> sprolnitialize> sprofindfirstunit、sproread> sproquery> sprooverwrite。以下是一個典型的調用順序,你經常
40、能在程序中見到:1. sproformatpcicket ()-初始化數據包。2. sproinitializeo -執彳亍必需的初始化。3. sprofindfirstunit ()-建立與鍵的通信并且取得一個許可證。4. sproread ()-讀單元并且返冋它的值。5. sproquery()-發送查詢字符串并且給冋應值指定一個位置。例如,sproread如圖17所示,我們馬上耍編寫一個新的,并將二者做個比較。cd*i .rnbocproptmiuj attribute* library fvnctiottproraad proc nearre r-護 rdword ptr dch wo
41、rd ptr luh dwordptr 1*hpueh push ov“x.ax9hort loe *"31twg.o)mx1oc?313: puh c411ediochxpr#tnx.13 g$pfto«mmsof tcoent3ae$prosoom$ottco( x)c*i.uord ptr ”i. 7«2hchort toe h7?33fiov"2pop»dipop»siratnechn厶u n qouword ptr eaigr &939r«x 4 mbpop皿pop5retioch1oc.mt73®
42、;i5:ovjor<di v <dijnzshort loc7?360loctt33fl tect byt ptr esi*12h. <1 jru:loujnhmsunbcumord ptr*10hxuax. lohpepmixpepir«tnocht1oc.w77360:euou pu«hcull or )nzword ptr (0i<m)hv oahax” i13msi>wwonwtcmam . 13sc$pr050wsoftcw( x)zrt rx.w3s0unl&.ibovax. (w珈)hovhi. ax10c.vt3m;ou
43、 puh e«n”.(eoi<)tax聞stqmorrdm * x 3h$f>ros&om$oftc 11(x) x. xhshort lx e380iflocttmg :m>v pugh chw w w"【“61e«x.im6spro5o0h5oftcie 姑13h1ppcsg0hs0f tcie(x)磯oiochouax, 3pop“ioop” iretnochprorqftd erdp安全中國終身vip會員 v圖7 - sentinel sproread apiapt的返回值才是重要的,即程序要求從一個冇效調用得到什么東西。5 改寫
44、sentinel api函數對于已經熟練掌握該主題的人來說,現在開始木教程真正的部分。為了完全沒有經驗的讀者達到知 識要求,本教程前面部分一直在講授必需的基礎知識。其實補丁從這里才真正開始。5. 1 sproformatpacket和我們下面將要模擬所有其他api 一樣,對于這個api我們通常只關心它總是返冋sp_success (0)。圖18是該原始api在ida中的反匯編結果,圖19是同一個api在ollydbg中的反匯編結果。到n甩:.rnb0sproformatpackgt8;廠ibutos: library functionsproformatpacket proc neararg_
45、0= dword ptr 0ch arg_h= word ptr 10hpushsipushqdimou9axtesp*arg_6oreax,eaxjnzshort loc m?6fg3gn上m«>uax. 2popedipopsiretn8floc76f03:mousi. osp今a廠cmpsi, 8hhjnbshort loc 476f18ttsindmouax. ofhpop©di1oc.h76f18:poposipusheax"tn8call.1386spro500msoftcde»+ ;i386spro500m$oftcd(x)moued
46、i. eaxsubsi. mpushesipush0pushedicalli386spr050ehs0ftcgei 2i386spro500msoftcg(x,x.x)push3pushesipushodicall.i386spr050ems0ftc012i386spr050gms0ftc0(x,x,x)pushleaeax. edi+38hpush©axcalli38gspro500msoftcqs8 :i38gspro500msoftcq(x、x)orword ptr edi+12h. 8subaxv axp°pedipopesirtn8sproformatpacket
47、 endp安全中國終身vip會員 vipanqncom圖 18 -在 ida 里的原女臺 sproformatpacketeeh76efer$ 56push esisproformatpacketee476eflh 57wsfskntdll.7c9ie73800476ef2echou eax.dword ptr $s:(esp*coom7gefg oecoor eax.eax60476ef8計 75 09jnz short <dongl®ui.loc-h7gfe3>09h76efa66:88 0289hou ax.200m76efe 5fpop edikernel32.7
48、c816f07eeh76eff 5epop esikernel327c816fd7oom76foo c2 0800jreth 8eoh76fo3>66;8b7424 10hou si 上ord ptr ss esp+16loc_h76fe3goh76fo866:81fe 9h0hcmp si.hgheom76fod73 89jnb short <don9uui.loc76f18>oom76f0f66:b8 0f60mou ax.qfoom76f13 5fpop edikern»132.7c816fd7oa47gf1m5epop esikornq132 7c816f0
49、?g6h76f15 c2 6800retn 8ee<i76f18> 50push eaxloc_m76f18ggm76f19 e8 92a1ffffcau. <0onguui . 1386spr05eems0ftcd(x) >ooh76f1e 8bf8hou edi.eaxe0476f2066:83ee gmsub si出00476f2m 56push esi88h76f25小一 d f ga ee= push 0 _ 4 anqn .com圖 19 -在 ollydbg 里的原始 sproformatpacket補丁很簡單如圖20所示,它僅僅把eax原本來自esp+c
50、返冋值清零。如你所見,我在第一個跳轉 (0x476ef8)開始重寫原始apt,其目的是用來略過在sentinel apt入口點上的一些基本的反干預檢驗。een7gefe$56push esisproforbtpackotbo476efll 57push edintdll.7c9ie?38tkh應卜2ecmou eax.0uord ptr s5 ilspc00m76ef6 gbceor eax,eax00m76ef333c9xor eax.eax00m76efa 90nop00476efb 90nop0gh76efc90nop00m76efd 90nop00h76efe 5fpop ediker
51、nel32.?c816f070gm76eff 5epop esikerncl32.7c816f0?oom76fo0jl. c2 6806a, j creth 8vip .anqri. com圖 20 - 補丁的 sproformatpacket注意,關于這個api, pdk冇如下說明:這個函數本質上是一個“取得許可證”調用。如果有找到sentinel superpro鍵,rb_spro_apipacket 記錄將會包含有效的許可證數據,否則數據包將被標記為無效的。如果你試圖以一個已有訴可證的 aptpacket作為參數調用這個函數,它返回錯誤sp_ tnvaijd_ opera tion。僅當
52、給定的參數rb_spro_apipacket是無效的時候,它返冋不同于sp_success (0)的一個數值。在 開發階段這類錯謀是典型的,因此對我們來說沒有問題。這意味著通常不必補丁這個api,總z我通常 只是為避免意外而補丁它。5. 2 sprofindfirstuniteoh77138r$ 53ogm77131i 560g477132ec09m77136iobcgo0htt13833c60om7713a| 9080477138 90eeh77i3c; 900oa7713o 9009h7713e 5e00m7713f 5b安全中國終身vip會員vip.a nq sprofindfirstunitkernel32.7c816fd7kgrnel32.7c816fd7同樣地對于這個api,重耍的是耍返回0 (sp_success)。把描述開發者細節的developerld儲存起 來,一定會有用的,如開發者指南所指出的:unsigned short int sprofindfirstunit (rb_spro_apipacket packet,unsigned short int developerld);developerld是由彩蟲技術rainbow technologie
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園里的一次大掃除活動類作文5篇
- 七年級數學下冊9.3用正多邊形鋪設地面
- DB1506-T63-2025政務服務數字政務門牌管理規范
- 電動汽車設計與制造-課件 第7章 電動汽車底盤的性能指標設計要求概述
- 領導力發展路徑與技巧
- 音樂教育中的情感共鳴與審美態度培養研究
- 項目投資決策的數學方法與風險評估
- 顧客畫像在新零售中的應用與價值挖掘
- 音樂產業的新零售發展之路與策略
- 非洲農業領域的投資前景與策略
- 無人機視覺定位誤差分析-洞察分析
- 【MOOC】犯罪心理學-中南財經政法大學 中國大學慕課MOOC答案
- 【MOOC】跨文化交際入門-華中師范大學 中國大學慕課MOOC答案
- 《電子級三氯氫硅的化學氣相沉積評價方法》
- 板式換熱器清洗施工方案
- 智能化工程售后服務體系方案
- 廣東開放大學2024秋《大學英語(B)(本)》形成性考核第一次大作業(主觀題)參考答案
- 體育-初中水平四(七年級)籃球大單元教學計劃表及運球急停急起教學設計、教案
- 三兄弟分田地宅基地協議書范文
- 部編人教版小學4四年級《道德與法治》下冊全冊教案
- cctv檢測合同模板
評論
0/150
提交評論