关于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的问题,我会把其余的小工具和我自己的使用心得陆续发上来,和大家一起分享的... ... ...
谢谢大家耐心看完
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!