本文为原创作品,转载请注明出处,作者:Chris.xisaer E-mail:69920579@qq.com
QQ群3244694
补丁下载地址:https://download.csdn.net/download/xsdn123/71921978
https://github.com/hansiyuan1983/Reflector-path/releases
程序下载地址:
官方下载:
.NET Decompiler: Decompile Any .NET Code | .NET Reflector (red-gate.com)
https://www.red-gate.com/products/dotnet-development/reflector/
1.关于C#的反编译软件xx,其实非常简单。我会在下面的教程加以说明。希望有需要的同学参考技术要点,不要用于商业目的。
2.本次xx只是技术展示,不用于任何商业目的,如有需求请购买正版软件。也希望官方尽快修复漏洞。
3.如果需要交流技术的可以加本人的QQ群3244694(确实很LOW但是没办法咱们国家的特色),我看现在网上很多的教程只是教你123,但是不教你为什么写123,希望能懂我意思。
转入正题!!
估计能看到这篇文章的人 因该知道什么是Refector.以及它的用处。这里我就不在赘述了。
本次xx的版本是目前此程序的最新版本 11.1 trial.版。xx方式是暴力xx。如果喜欢写注册机的朋友,我下面会告诉你他的注册算法在那个文件中。你可以自己研究一下搞定他的注册机制。
先来张图没xx的时候是什么样子!
程序弹出一个模态对话框提示到期,并给出两个按钮。一个是激活一个是关闭程序。
当我们点击激活的时候会弹出输入激活KEY 和电子邮件地址的对话框。点击另一个便是直接退出程序。
下面 开搞!
既然是C#的程序 自然是通过IL 中间语言翻译器运行的程序。我们打开能反编译此类程序的软件,有很多。推荐两个,一个是微软自带的ildasm(ilasm),另外还有一个就是ILSPY。这两个你用哪个查看都可以。当然最好用的还是咱们下面要xx的这个Reflector。
我们用ILSPY打开目标软件:
我们会发现Reflector有很多的类。可能有些朋友没有学过C#(本人就是)。你就当C++看就行。我们当然要找到我们关心的类。什么是我们关心的?
这里我先说下破软件的xx法很多,比如1.找到负责激活的函数研究其算法写出相应的注册机。2.直接跳过验证程序或者更改验证结果。3.直接屏蔽此模态对话框让程序跳过检测。等等吧。因为方法太多了我这里就不一一列举的,喜欢xx的朋友们可以自己开阔思维。
那么对于这种基本直接源代码给你到眼前的代码。我们就没什么可说的了。先看看源代码里的哪些命名空间是我们需要的。
对就是这个名字空间 Licensing.从他的英文名字我们就能猜到 这是关于许可证相关的类的集合。
我们点进去看发现了几个 类。第一个BouncerParms 是保镖类的参数类。也就是负责监视我们对程序许可证做什么的类的一些参数的类。
第二个是版本信息类Edition. 这个公司在给版本信息的时候一共给了这么几个:
internal enum Edition
{
None = 0,
Standard = 1,
VS = 2,
VSPro = 3,
Evaluation = 10
}
我们现在的TRIAL 就是None=0;
但是这个是无法修改的,因为修改也没用。。。
继续往下看 EndTrialScreen类 从名字就能看出来这是构建我们试用结束对话框那类,当我们试用结束后程序会初始化这个类,并加载对话框。这个对话框是模态的 也就是说他的存在我们不能使用程序的任何功能。
好现在回到刚才的问题:我们关心什么?
我们就是关心这个对话框。我们让程序跳过调用这个类直接到下面正常程序的初始化就可以继续使用这个Reflector。
下面我们点击EndTrialScreen:
我们会看到这个类的完整定义是不是很赞?这可比反编译C的程序简单多了。
可以看到这个几个方法 Reflector.Application.Licensing.EndTrialScreen.ActivateClick
private void ActivateClick(object sender, RoutedEventArgs e)
{
TheBouncer.EnterSerialNumber(new Win32Helper
{
Handle = new WindowInteropHelper(this).Handle
});
if (TheBouncer.Licence.Activated)
{
base.DialogResult = true;
}
if (TheBouncer.IsEvaluation)
{
base.DialogResult = true;
}
}
Reflector.Application.Licensing.EndTrialScreen.CloseClick
private void CloseClick(object sender, RoutedEventArgs e)
{
Environment.Exit(-1);
}
这两个就是相关的两个按钮的 对应方法(函数);
第二个方法不用说就是退出程序。我们来看第一个方法。其中有一项条件判断:
if (TheBouncer.Licence.Activated)
{
base.DialogResult = true;
}
if (TheBouncer.IsEvaluation)
{
base.DialogResult = true;
}
当程序的需可能是激活状态的时候 对话框的值为真,当程序有评估版本值的时候对话框的值为真。注意这里的值为真并不是显示不显示对话框!
我们这里关心的就是这个Licence.Activated.方法。我们找到Licence类的对应方法中去看看!
在哪里呢?找不到啊。没在Reflector的名字空间中。这个类是一个DLL 导入类 导入的DLL 是RedGate.Licensing.Client中。
我们进入到这个命名空间中的Lisence类:
我们可以研究一下这个类 :从这些方法的名字我们可以看出相应的功能。
第一个便是刚才提到的ACTived 是一个BOOL 类型的变量 记录程序是否已经注册。
另外比较有价值的是下面这些方法!
其中CreateNewXXX函数是关于如何生成注册许可证算法的函数。有兴趣的童鞋可以看一下,我列出一个:
public static Licence CreateTamperedLicence(string machineHash, int productCode, string productName, string displayName, int majorVersion, int minorVersion, DateTime utcNow, string location)
{
Licence licence = CreateNewTrialLicence(machineHash, productCode, productName, displayName, majorVersion, minorVersion, utcNow, 0, location);
licence.Status = TrialStatus.Tampered;
if (0 == 0)
{
licence.TrialLength = 14;
}
return licence;
}
通过机器硬件的哈希数值,产品代码。产品名字 等等等弄出来的一个算法。。。是不是很复杂。。不关心了因为我们没有打算做注册机。。我们爆破。。
回到我们关心的话题,我们不希望产生那个提示对话框。我们还希望程序继续运行。。。
在调头来看一下在EndTrialScreen类下面。有个LicenceChecker类 我们进去看:
里面只有两个函数。我们只关心一个 就是 CheckLicense:
public void CheckLicense(IServiceProvider serviceProvider)
{
try
{
TheBouncer.Parms = new BouncerParms(m_MainWindow?.Icon, "Thank you for trying .NET Reflector", ".NET Reflector is a class browser, analyzer, and decompiler for .NET code.", ".NET Reflector");
if (!TheBouncer.CheckLicence(m_MainWindow, Edition.Standard, serviceProvider))
{
m_InternalApplicationManager.Exit();
}
if (TheBouncer.Licence.Activated)
{
m_ProBanner?.Close();
}
m_InternalApplicationManager.UpdateTitleBar();
}
catch (Exception exception)
{
ILog logger = LogService.GetLogger(GetType().FullName);
logger.Fatal("Error checking Licensing", exception);
Environment.Exit(71);
}
}
我们看一下 这个就很清楚了 是验证程序。当验证没有通过后 退出程序管理器。也就是退出程序。如果验证是ACTIVATED的许可证,那么关闭广告条执行程序管理器类的标题更新 并继续初始化程序。这里就是我们要更改的第一个地方 我们看一下翻译器翻译过来的语言
这里你只需要懂一点IL 语法就可以。
这里我们要修改的就是程序的25行我们把
brfalse.s ->(32)call RedGate.licensing.Client XXXXXXXXXXXXXXX_LICENCE()
修改为
brtrue.s ->(32)call RedGate.licensing.Client XXXXXXXXXXXXXXX_LICENCE()
也就是说当我们没有许可证的时候验证通过!
当然这里只改这个虽然可以用但是还是会弹出对话框,必须手动关闭对话框才能继续使用程序。
我们继续寻找需要的就是连对话框你也不要出是话直接初始正常的程序 跳过验证对话框。
我们来看这里
这就是我们开头说的要关注的哪个保镖类,他里面也有一个CHECKLICENCE 方法这个方法就是用来初始化提示我们试用已过期哪个模态对话框的,我们这里还是看他的翻译程序:
这里我就不继续说明我们怎么改了,留给童鞋们自己思考把。这里修改后我们就可以爽快的用Reflextor 。
破解后的程序:
本文为原创作品,转载请注明出处,作者:Chris.xisaer E-mail:69920579@qq.com
QQ群3244694
————————————————
版权声明:本文为CSDN博主「xsdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xsdn123/article/details/122171076