1. 程式人生 > >關於Hasp SRM 二三事

關於Hasp SRM 二三事


以前說到對付hasp srm狗,大家想到的就是模擬,用的最多的就是MultiKey(http://testprotect.com/download)


這是俄國人寫的,不過到了V20.0.0就不再更新了,因為新的Hasp驅動出現--目前到了V7.32
(http://www.safenet-inc.com/sentineldownloads/)它就無法再工作了,許多人誤以為是Windows 7更新到 Windows 8,Windows 8又更新到了 Windows10的關係, 其實這只是其中原因之一,固然Windows每次改版,對於驅動或多或少都會做些新的規範,但最糟的是,Windows強制開啟線上更新,一旦上網際網路,它就會自動更新您的Hasp官方驅動,從 V6.56之後,官方驅動就會偵測MultiKey是否存在,並且拒絕讓MultiKey Hook,於是用MultiKey模擬的方法就被撤底阻斷了



當然這中間是有一些精彩的攻防戰的,曾經我們只要變更MultiKey的名稱,或是更改視窗登錄檔的路徑,不要在:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Multikey\Dumps\ 下,
都可以騙過Hasp官方驅動的偵測,但到了7.32這些後門全都被堵死了,目前俄國那位原作者並沒有找到什麼破解之法,他說是官方用了什麼叫wbaes的保護技術???可能暫時要先放棄模擬這條路子了!!

也許讀者會說,不要讓Windows更新不就好了,讓Hasp官方驅動永遠維持在V6.56版本或之前的版本不就好了嗎?那是我們在實驗室可以這樣做,對於一般User,我們是不可能規定他這樣做的,況且Windows一向漏洞百出,永遠都有抓不完的臭蟲,不讓User開更新,遲早他的作業系統要出事啊


於是,破解hasp srm又回到了原點了,不能靠模擬,那隻能把hasp的殼剝掉了...

本論壇剝hasp 的大神很多,但是問題是hasp其他的狗和hasp srm的狗不盡相同,
再加上hasp srm可以讓大家帶狗練習的例項更是不多,所以今天我發這個例項上來給大家,讓大家有實際的東西可以練手^^

這個範例和多年前lostdongle(http://lostdongle.com/?page_id=146)在網路上發表的unpacking video demo用的程式是一樣的,

是hasp srm sdk裡面的示範秮序,但是hasp srm sdk也歷經多次改版,我這是V5.1版的...

又因lostdongle只有視訊檔,沒有附件程式檔,所以無法跟著一起練習,而且糟糕的是,lostdongle釋出的hasp srm剝殼指令碼,雖然可以Google得到,(我已經有把它放在這次的附件中: 

HASP SRM Envelope Unpacking & IAT Fixer Script for OllyDBG.txt
大家可以先開啟參考看看...),
但是並沒有告訴我們為什麼要這樣寫,我們只知其然,不知其所以然,偏偏不同的版本,

例如:
find prtc_sec, #FFFF82D18BE55DC3# 要修改的retn位置就不一樣,

因為示範的版本不同,導致這個版本的Win32_Bounce.exe脫殼時無法直接套用原指令碼的位址,
需要重新設定,現在po出來,請哪位大神脫殼成功後,可以step by step告訴大家下面的重要資訊: 

如何找新的retn位址(#FFFF82D18BE55DC3#要如何針對不同的Envelope檔做修改?),
以及後面的add endp, 4是否需要調整??

另外
@run:
run
sti                                  // sti的個數需要幾個是不是也要重新調整?
sti
sti
cmp eip, gtc

……

這些關鍵位址解決以後,相信大家對hasp 脫殼就會很容易上手了!
(萬一沒有迴應,請不要問我,我也不會,
我就是跟著lostdongle的視訊做不出來,所以才發上來請教大家的)
 Win32_Bounce DEMO.rar
附件: Win32_Bounce DEMO.rar

(當然一般市面上用hasp srm殼保護的程式,即使剝乾淨了,還是要去找裡面檢查hasp狗的地方,
再一一把它拿掉才真正可以免狗執行,好在殼剝了就可以用IDA Pro來靜態分析,配合hasp 專用
的sigs,很容易就可以抓乾淨了,所以不在本次的討論範圍內囉 )
/////////////////////////////////////////////////////////////////////////////////////////////

附件使用前注意事項:

1. 只支援Win7 32bit版本,如果你是Win8或是Win7 64bit請裝一個虛擬機器(例如VMWare),在裡面跑32bit Win7即可

2. 如果你有成功在你的機器上跑過MultiKey,那本範例的用法和MultiKey一樣,直接用管理員許可權跑install.cmd就可以了,   
它可以和MultiKey並存,   但如果你是第一次使用,請先安裝hasp的
run time:

   請自行上網搜尋下載,例如: http://hasp-srm-run-time.software.informer.com/ 
   (如果你係統原來有裝,那要先確定版本不可大於V6.56,否則要移除後重新安裝較低的版本)
   千萬不要再到官方網站去下載所謂的最新hasp驅動了!!
   安裝完hasp runtime再用管理員許可權跑install.cmd

注:我的原意是 http://hasp-srm-run-time.software.informer.com/ 這個網頁上的驅動可以下載來使用,但Hasp官方網站放的
    則不要下載來用,謝謝壇友 半斤八兩 指正我的語病, 另外如果網頁連結失效,可以到我的百度雲網盤下載舊版驅動來使用
    http://pan.baidu.com/s/1jGgyBf4 密碼:mg6p

3. 第一次安裝會告訴你vdevice.sys沒有合法的數位簽章,不要理會它,繼續安裝.
   並雙撀 Win32_Bounce_3C3925A1.reg 將它匯入系統
   *有時會沒有反應,這時可以再跑一次install.cmd,成功後,系統會開始自動安裝其他驅動!!
    你會發現第二次跑install.cmd系統就不會再出現沒有數位簽章的警告了

4. 安裝成功以後,先去 計算機---右鍵----管理 裝置管理器 看一下系統裝置下是否有Virtual USB device這個專案,  
(如果有安裝MultiKey則會同時出現 Virtual USB MultiKey)

   通用序列匯流排控制器這個大專案下會有
   SafeNetInc. HASP Key
   SafeNetInc. Sentinel HASP Key
   SafeNetInc. USB Key
   這三個專案,(如果有安裝MultiKey則每個專案會同時出現兩個,總共六組)

   以上這些專案一定要出現,且不可以有黃色驚歎號!
   
   裝置管理員詳情.jpg

5. 現在就可以正常執行 加了殼的 Win32_Bounce.exe 如同帶狗一樣了.
    
    執行主畫面.jpg

/////////////////////////////////////////////////////////////////////////////////////////////

後記:

這個vdevice.sys功能和MultiKey.sys是一樣的,但是可以躲過某些針對MultiKey做阻擋的hasp 驅動,(不過到了目前最新的V7.32也無能為力了)同樣也是由寫MultiKey的俄國人寫的,他那時候賣一個產生MultiKey REG File 的套件叫做 MKDevKit,當您買了這個套件,就可以自己產生REG File,並且自己產生 License, 不需要再向這個網站申請 License了
(主要是針對x64平臺,x86平臺是免費的),...


testprotect.com宣佈不再維護MkDevKit了.jpg

但是由於這個套件不是一般人可以上手的,他每賣一套就必需要教老半天,再加上之前我們提到的hasp驅動不斷更新的結果,逼使他在2013.04.30做出停賣的決定 !!!

既然已經停賣了,就沒有版權的問題了,當然可以提供給大家使用才對,無奈他有鎖計算機,已知會去鎖
CPUID(ProcessorID), BIOS ID和HDD SN,其他還有鎖什麼還不清楚???
必需要有大神先將Check ID的機制移除才能使用,因為演演算法他是用
VMProtect保護的,這已經超出我的能力範圍,請大神有興趣的可以試手看看囉

 MkDevKit Check ID.rar
附件:MkDevKit Check ID.rar

開啟這個rar,裡面有兩個程式,我們先看mksID_noVM.exe
這個是跟俄國人購買MkDevKit前,他會先send過來的程式,要我們讀出計算機的ID值給他,他不支援在VM下工作,但在VMware的vmx檔中加入以下的引數,可以騙過它,
讓他誤以為我們不是在VM下工作:

isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"


當然大神們手上的除錯工具也要隱藏好,不要被他發現,否則他就拒絕工作囉^^

當我們可以讀出計算機的ID後,他才會依照這個ID值製作後續的工具給我們
這是我讀出的結果:

ID = 5E765912434CBBCE2744B2A42C43167A

mksID必需是這個結果才會工作.JPG

想必演演算法也藏在這個程式中,可以追追看...

*****************************************************************
在這邊我先提供我計算機中一些重要的數值:

(以下資料來自EVEREST ULTIMATE EDITION) 

BIOS Version : E16F1IMS.306    07/06/2010
EC   Version : E16F1EMS1 V4.13 04/29/2010

主機板 ID         63-0100-000001-00101111-062009-Chipset$0AAAA000_MSI CR620 E1681IMS V1.03 02/03/10

CPUID 製造商        GenuineIntel
CPUID CPU 名稱        Intel(R) Core(TM) i7 CPU Q 740 @ 1.73GHz
CPUID 修正        000106E5h

ProcessorID(來自Windows自帶的PowerShell中下 Get-WmiObject Win32_Processor 指令)
0FEBFBFF 000106E5

BIOS SN(來自CMD中下 wmic bios get serialnumber指令)
56 4d 81 66 40 20 47 8d-4d 9d be d3 94 1a 08 2d

HDD SN(來自Hard Disk Serial Number Changer)
C89B-A1D9

MAC地址(來自CMD中下 ipconfig /all 指令)
00:0C:29:1A:08:2D

如果還需要什麼資料再告訴我,我再po上來~~~

*****************************************************************

另一個可以下手的程式是MKS.exe, 這是我送ID回去他再Send過來的主程式,按下左邊 "Start_server"鍵,
如果ID和原先Send給他的一樣,(表示是在同一臺計算機上工作)就會顯示 "MKS Server start ok."
其後就可以正常工作了.

MKS Server started ok.jpg

若是ID不一樣(表示我換了一臺計算機工作)就會顯示 "MKS Server started error."...如圖

MKS Server started error.jpg

MkDevKit就會拒絕工作了,如果從這個程式下手,讓他不管什麼ID都可以工作,
也是一個不錯的思路啊

如果有人可以解決ID的問題,我會把其餘的小工具和我自己的使用心得陸續發上來,和大家一起分享的... ... ...

轉: https://bbs.pediy.com/thread-203609.htm