关于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

猜你喜欢

转载自blog.csdn.net/eric_e/article/details/83902274