破解-软件协议有加密,且不能修改软件本身,还有什么方法破解吗?

破解-软件协议有加密,且不能修改软件本身,还有什么方法破解吗?

偏爱自由 发布于 2016-12-05 字数 203 浏览 1292 回复 1

在破解一个VS2008的UnrealScript nFringe插件时,网络协议有加密和签名,无法使用本地IIS验证的方法破解。VS2008会对插件做效验,又无法在短时间内找出效验的地方。向此类保护的软件有很多,还有什么方法破解吗?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生未歇 2016-12-12 1 楼

在这分享一个替换本进程时间函数API的方法,使得软件无限试用。大家还有什么方法,都发出来,或者对我破解过程中有什么疑问,欢迎一起探讨。

破解分析过程如下:
1.安装好nFringeSetup-1.1.34.193.msi后,在C:Program FilesPixel MinenFringe 下找到一些dll文件。
2.破解的关键是要寻找验证模块,打开vs 2008后使用XueTr.exe 工具加载的dll模块中是否含有nFringe的dll,发现加载了好几个dll。
于是手动一个个卸载,若卸载后注册界面消失则认为是这个dll。最后定位到是UnrealScriptLanguageProvider.dll模块。
3.使用PEID对UnrealScriptLanguageProvider.dll查壳,发现无壳且为.net平台语言编写(无壳,心中暗喜),如下图:

4.使用Reflector.exe 反编译UnrealScriptLanguageProvider.dll,发现没有进行任何保护措施,如名称混淆、流程混淆等,如下图:

可以看到和原来的语言一模一样,不是汇编代码,给我们分析带来了便利。
5. 进过分析,验证模块在“SamHarwell.UnrealScriptLanguageProvider.Licensing”中。去掉验证机制后保存,
使用VS加载居然报错。后发现修改其任意一字节都会报错,说明有对代码计算效验和。如下图:

6.确定效验和是谁计算的,是VS还是UnrealScript插件本身? 经过搜索报错的内容发现是VS报的。推测一定是控件注册时写入了某文件,然后VS加载插件时从中读出效验和比对。于是使用FileMon在安装包安装时,监控电脑上的文件写入,定位到是写入到windows.prf 文件了,但由于写入的内容较多,短时间内无法解出,所以没有使蛮力。

7.决定自己先写个插件,然后看它是怎么注册的以及对其进行修改后VS是否还报错。在UnrealScript插件的官方
下载主页http://pixelminegames.com/nfringe/ 查阅其实现与VS接口的方法,原来是使用VS的Language service接口进行开发的,通过.net的
CodeDemo即时编译运行技术产生的与C#、VB、C++并列的UnReal Script语言。然后去codeproject、MSDN上查阅,实现的方法有两种,尝试了
其中一种方法。
把实现好的Demo插件进行安装,安装方法是:copy dll到“C:WINDOWSassembly”下面,修改任意一字节,Windows提示公钥不对不让修改。
把nFringe的Dll复制到“C:WINDOWSassembly”下面后,用vs打开提示不能安装。显然nFringe的Language service接口实现与这种方法不一致。
由于另外一种实现方法资料不全,所以暂时放弃这种尝试。

8.既然修改二进制文件的方法不可行,我们可以尝试下破解网络验证。对插件输入注册码和用户名时进行抓包,以及查看反汇编出的源代码。
发现nFringe效验中有签名逻辑,客户端提交验证信息后,服务器返回的信息为:1)用户提交的注册key,2)key做hashcode后用服务器端的私钥做签名。
客户端需要用自己的公钥解开签名。这样从协议上是安全的,无法使用IIS本地验证破解,因为不知道私钥,无法伪造签名。

9.无意之间发现使用试用版模式时,即使时间过期,也可以通过手动修改系统时间的方法,使其不过期。
经过和李老师的讨论,得知使用试用版时无功能限制,决定替换系统底层获得当前时间的函数,始终让其返回一个比较早期的时间。而且客户端判断是否
过期的方法是:“服务器返回的当前使用日期” 与 “本机当前时间” 做减法,若结果大于3天,则认为过期。“本机当前时间”是可以由我们伪造的,这也是
修改系统本机时间“继续试用”的原因。
但是手动修改电脑上的时间会使其它软件受到影响,所以要替换系统底层获得当前时间的函数,然后判断若是VS 2008进程访问则替换成一个早期的时间,
若是其它程序则原样返回。
替换的方法采用修改VS 2008主程序“devenv.exe ”的导入表,使其加载时加载我们的一个DLL,DLL中执行上面的替换逻辑。这种比从驱动中替换Ring0层
时间函数的方法稳定快速。

最后还需要让VS 2008加载我们的程序,也就是修改下导入表。若安装的非SP1或VS 2005等其它版本,方法相同。没有安装UnrealScript插件的先安装,去http://pixelminegames.com/nfringe/ 上下载。在使用Stud_PE.exe的过程中,可能会造出杀毒软件报警,属于正常现象。

1.解压Ha-Stud_PE.v2.4.0.1-Feisu.rar 后,点击Stud_PE.exe,如下图:

2.把VS主程序devenv.exe 拖入Stud_PE,然后点击“函数”选项卡:

3.右键点击“模块”,选择“添加新的函数”,弹出“输入表添加器”界面:

4.点击“Dll 选择”按钮,选择RemoveTimeLimit.dll,然后点击“选择函数”按钮,点上"Start"后,确定:

5.点击“添加到列表中”按钮,最后点击"添加",就可以在Stud_PE中看到“模块”中多了个RemoveTimeLimit.dll,且有"Start"函数,devenv.exe就修改完成了!

6.打开VS IDE,点击New->Project,在弹出的界面中

选择UnrealScript,我这里是没有安装UnrealScript编译器、调试器的,安装了的可能跟我不一样。点击OK。
7.新建一个.uc文件:

新建后,会在右下角弹出一个英文气球提示框,右键点击它,然后选择“License Manager...”,弹出"Add nFringe License"对话框:

选择第二个checkBox,"I would like to evaluate nFringe for my commercial project"。随便输入一个用户名、项目名、邮箱:

输入完后,点击“Activate”按钮后:

可以看到“735 days remaining”,有735天的试用时间,实际上这个时间永远是不会改变的,也就是永久试用。再次试用VS UnrealScript插件不会看到烦人的提示框,以及禁止试用了。