提到Spoon可能大家还会感到陌生,但是如果提及XenoCode那么研究过DOTNET的人应该都知道吧。Spoon的前身就是XenoCode,虽然没有了PostBuild这个混淆软件,但是虚拟化技术仍然在完善,Spoon可以让DOTNET、JAVA和Flash程序脱离Framework在电脑上独立运行。最新的spoon已经可以支持DOTNET4.0了。
    网上破解Spoon的教程几乎没有,有的也只有Danny_Su直接提供的破解版本。而我最为羡慕的就是Danny提供的版本中拥有原版安装界面。经过几天的研究,终于实现了此功能,特分享给大家。
    首先可以利用NETUNPACK获得DOTNET的Assembly文件,而可以利用Ollydbg来获得非托管文件。早在XenoCode时代,网上就有了视频教程。获得脱壳的文件后,我们将使用一些其他的工具来替代传统的Reflector进行追踪。
    首先出场的是初级DOTNET调试软件DILE。先运行Spoon,然后使用DILE的Attach功能来附加到Spoon的进程上。

附加成功后,选择Spoon Studio中菜单中的Install License Certificate

在弹出的对话框中不填写任何东西,直接点击确定,结果Spoon系统内部出抛出异常,而此时的DILE会捕获这个异常。

DILE会停在上图的代码处,然后我们选择Call Stack Panel,就可以查看引起这个异常时哪里调用的了,然后我们双击上图中圈出的类。
进入这个Spoon.Common.Accounts.X0615e395e52a99d0::_x5d487333ced49b69类后,我们按F9设置一个断点。按F5让程序跑飞后,我们回到Spoon再次输入证书。这次我们不填空了,而是直接输入Danny以前的破解版的License

点击OK后,程序会中断在我们前面设置的断点处。

按F10单步,一路下来,并随时注意观察IL代码,灵活运行F11和F12单步调试能力,很快就可以定位到下图的类中。(具体怎么找到,就要看各位平时的调试能力了,多练习就会很快定位)

这个时候ILSPY上场了,找到Spoon.Common.Accounts.dll的类x0615e395e52a99d0和方法x22ab5dfa6f12e902名,发现这个方法是有一个重载,如下图所示只要将这个方法的返回值全部设置为true就可以了。

我们再将ILSPY的反编译的语言设置为IL,那么就可以看到这个方法的RVA位置。

打开CFF Explorer,将Spoon.Common.Accounts.dll文件拖入到该工具中,首先找到强名的相关表,发现居然没有强名验证,这样我们破解就更简单了。

在Address Converter中输入前面我们找到的RVA地址0x4a90,我们就快就可以定位Hex地址了。只要在这一段二进制中将返回值设置为true就行了,经常玩DOTNET破解的就应该知道只需要将二进制16修改为17就行了。我们找到这段IL代码中的五个16,然后全部修改为17后保存即可。

重新使用ILSPY打开,我们发现,流程已经更改了。

      我们重新注册,发现注册成功了,新建一个文件试一试,也没有提示过期了。破解到此已经结束,是不是很简单。破解完毕了,这并不是我们的终极目标,为了保持原汁原味,我们决定还将此文件打包回去。
    利用我们破解的程序将Spoon这么多的文件再打包成一个文件,将StartFile设置为Studio.exe,在Runtime设置中,我们设置为DOTNET3.5 SP1,打包结束后,我们获得了一个大小为121兆左右的单一Studio.exe文件。

    现在我们应该想办法将这个文件替换到Spoon原版安装包中。我们需要三个程序:MsiDb.exe,Orca,CABARC.EXE。
1、使用Orca打开安装包文件。
在左侧找到Media,在右侧记下流文件名叫做#disk1.cab,这个压缩包将在第2步用到。

2、使用MsiDb来提取这个cab文件。执行cmd命令:
msidb -x disk1.cab -d Setup-9.4.1860.0.msi
获得压缩文件disk1.cab 

这个时候可以直接使用winrar进行解压缩。发现有三个文件 VAStudio.exe,Studio.chm,XStudio.exe其中VAStudio.exe就是我们要替换的文件。我们将破解的Studio.exe 更名为VAStudio.exe 替换原版文件。我们在执行下面的命令来重新制作cab压缩包:
cabarc -m LZX:21 -r N disk1.cab "disk1\*"
3、cab压缩包制作好后,我们再使用MsiDb.exe将新的压缩包替换进去。首先删除原MSI文件中的disk1.cab文件流:
msidb -k disk1.cab -d Setup-9.4.1860.0.msi
再次,添加新的的disk1.cab文件:
msidb -a disk1.cab -d Setup-9.4.1860.0.msi
这时候,新的安装包就制作好了。我们测试一下,果然新的安装包既保持了原版风味,而且是破解版本。

文中提到的软件地址:
Spoon:http://www.spoon.net/Studio/
DILE:http://sourceforge.net/projects/dile/files/DILE/
CFF Explorer: http://www.ntcore.com/exsuite.php
MsiDb.exe,Orca,CABARC.EXE 可以自己Google之。
欢迎大家和我联系 chenxiaolu2012@gmail.com

【原创】DOTNET动态调试破解Spoon,及MSI安装包文件替换技术的更多相关文章

  1. 电脑运行msi安装包提示the error code is 2503/2502如何解决

    当在电脑中运行msi安装包时,出现the error code is 2503或者2502错误提示,其实是由于没有运行的权限导致的,但是又不能右击以管理员身份运行,那么应该如何操作呢?对于这样的问题, ...

  2. 找回MSI安装包Win7/Win8管理员身份功能

    找回MSI安装包Win7/Win8管理员身份功能 从Vista开始,系统引入了UAC用户控制功能,即普通用户运行exe软件安装程序,支持使用普通账户/管理员身份分别进行安装,但是msi安装包只支持默认 ...

  3. 绝对干货:自定义msi安装包的执行过程

    有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...

  4. arcgis安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法

    安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法   windows/temp目录相关权限不对,右击temp文件夹,选择管理员获取所有权限.

  5. 在Win10中,在安装msi安装包的时候常常会出现代码为2502、2503的错误。

    前言:在Win10中,在安装msi安装包的时候常常会出现代码为2502.2503的错误.其实这种错误是由于安装权限不足造成的,可以这种msi的安装包不像其他exe的安装程序,在安装包上点击“右键”之后 ...

  6. 自己定义msi安装包的运行过程

    有时候我们须要在程序中运行还有一个程序的安装.这就须要我们去自己定义msi安装包的运行过程. 比方我要做一个安装管理程序,能够依据用户的选择安装不同的子产品.当用户选择了三个产品时,假设分别显示这三个 ...

  7. Elasticsearch各版本的MSI安装包和Kibana各版本的zip包(Windows)

    elastic各产品下载列表页:https://www.elastic.co/cn/downloads/ 打开Elasticsearch的下载页后看到的是当前最新版本的安装界面,现在最新的版本是7.4 ...

  8. Navicat 12.x for MySQL最新版安装破解教程(附安装包和注册机,全网独家可用

    title: "Navicat 12.x for MySQL最新版安装破解教程(附安装包和注册机,全网独家可用" categories: soft tags: soft autho ...

  9. 自定义msi安装包的执行过程

    有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...

随机推荐

  1. Java NIO Files

    Java NIO Files Files.exists() Files.createDirectory() Files.copy() Overwriting Existing Files Files. ...

  2. Requests库的文档高级用法

    高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...

  3. 1.3.2、CDH 搭建Hadoop在安装之前(端口---Cloudera Navigator加密使用的端口)

    列出的所有端口都是TCP. 在下表中,每个端口的“ 访问要求”列通常是“内部”或“外部”.在此上下文中,“内部”表示端口仅用于组件之间的通信; “外部”表示该端口可用于内部或外部通信. 零件 服务 港 ...

  4. metasploit framework(十三):FTP扫描

    设置目标IP 查看是否支持匿名登录 获取到版本信息 使用ftp登录模块 搜索刚才获取到的版本信息,找到一个针对这个版本的漏洞利用代码

  5. Excel学习之图表创建

    前言:由于工作的需要,现在需要恶补Excel知识,温故而知新,不记录下来自己的学习的点点滴滴怎么能行 Excel版本:2016 一.插入如下图所示的数据源: 1.勾选图表区域范围 2.选中区域范围后直 ...

  6. phpStudy安装教程

    1.在phpStudy官网下载安装包(http://phpstudy.php.cn/)2.解压安装后,若提示没有“VC9.VC11.VC14运行库,注意是X86 32位”,则在phpStudy下载对应 ...

  7. stm32 启动文件 C和汇编交叉嵌入

    在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...

  8. 在linux 中启动anaconda

    anaconda-navigator   $ source ~/anaconda3/bin/activate root ###在bin  目录下打开终端 敲 ./activate root   $ a ...

  9. iOS工程中创建pch文件

    1.新建pch类文件 2.在工程配置中,Build Setting 下搜索"pre"寻找Apple LLVM6.1 - Language下的 Preflx Header 3.点开P ...

  10. Java面试基础知识(1)

    1.final, finally, finalize的区别 final:修饰符(关键字)如果一个类被声明为final,没有子类也不能被继承.因此一个类不能既被声明为 abstract的,又被声明为fi ...