吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 9765|回复: 124

[原创逆向图文] Virtual Serial Port Driver 最新版本V10_0_992的IL代码分析

  [复制链接]
zyyujq 发表于 2022-5-29 14:49 | 显示全部楼层 |阅读模式

本帖最后由 yujunqiang 于 2022-5-29 17:40 编辑

运行环境:WIN10、WIN11
涉及工具:dnSpy
教程类型:逆向限制,算法分析等
是否讲解思路和原理:
以下为图文内容:
Virtual Serial Port Driver 最新版本V10_0_992原版官方下载地址:
https://cdn.electronic.us/products/vspd/windows/download/vspd.exe
但美国或许禁止了中国IP下载,上面地址可能无法下载。

百度云下载:
链接:https://pan.baidu.com/s/1ZQW10aqsfd0LN-htArDTOA
提取码:yujq

安装后PJ运行界面:

fakename.png

主程序 vspdpro.exe 的PJ:
Virtual Serial Port Driver V10版本从10.0.844开始到现在的10.0.992,主程序 vspdpro.exe 都采用 MS Visual C# / Basic.NET 代码编译,且没有混淆代码,容易逆向。
以前发过这个程序的PJ过程,今天再详解:

1、安装后,使用 dnSpy 打开 主程序 vspdpro.exe
2、PJ主程序

dnSpy打开程序后,可以选择C#、VB、IL代码形式查看源代码
fakename.png

在 vspd.Control 下有 IsDemoKey、IsProKey
A、进入 vspd.Control.IsDemo
fakename.png
public bool IsDemo
{
        [CompilerGenerated]
        get
        {
                return this.<IsDemo>k__BackingField;                //注释:此处鼠标右键选择编辑IL指令,为return false,返回否,不是演示版。
        }
        [CompilerGenerated]
        private set
        {
                if (this.<IsDemo>k__BackingField == value)
                {
                        return;
                }
                this.<IsDemo>k__BackingField = value;
                this.OnPropertyChanged("IsDemo");
        }
}

IsDemo.get 删除多余的IL指令,只留如下:
0        0000        ldc.i4.0          //注解:值0
1        0001        ret                //返回,上面值0,即 false


B、进入 vspd.Control.IsPro
public bool IsPro
{
        [CompilerGenerated]
        get
        {
                return this.<IsPro>k__BackingField;                    //注释:此处鼠标右键选择编辑IL指令,即改为return true,返回是,是专业版。
        }
        [CompilerGenerated]
        private set
        {
                if (this.<IsPro>k__BackingField == value)
                {
                        return;
                }
                this.<IsPro>k__BackingField = value;
                this.OnPropertyChanged("IsPro");
        }
}

IsPro.get 删除多余的IL指令,只留如下:
0        0000        ldc.i4.1          //注解:值1
1        0001        ret                //返回,上面值1,即 true


fakename.png

C、点击 vspd.vm.Activator ,下有DaysLimit、IsExpired、IsGoodToWork、IsDemoKey、IsProKey,修改方法同上。
修改 IsExpired 返回 false (未过期),IsGoodToWork 返回 true(工作OK),IsDemoKey 返回 false(非演示),IsProKey 返回 true(是专业版)
fakename.png
public override bool IsDemoKey
{
        get
        {
                if (!this.license.demo)
                {
                        int? days = this.license.days;
                        int num = 0;
                        return days.GetValueOrDefault() > num & days != null;
                }
                return true; //注解:将上面if语句删除,将此改为 false ,即 get { return false; } ,IsDemoKey直接返回 false (不是演示版)。
        }
}

在get语句内,鼠标右键选择编辑IL指令,删除多余的指令,修改为如下:
fakename.png
0        0000        ldc.i4.0          //注解:值0
1        0001        ret                //返回,上面值0,即 false



// vspd.vm.Activator
public override long DaysLimit
{
   
get
   
{
        
return (long)this.license.days.GetValueOrDefault();
   
}
}
返回可以修改为3650,过期天数为十年:
public override long DaysLimit
{
   
get
   
{
        
return 3650L;
   
}
}


鼠标右键选择编辑IL指令,删除多余的指令,修改为如下:
fakename.png


0        0000        ldc.i4    3650      //注解:值3650 (十六进制 0xE42
1        0001        ret                    //返回,上面值3650,即3650天,十年


D、//// vspd.Utils.LicenseUpdater
public void UpdateLicense()
{
        string text;
        uint num;
        for (;;)
        {
                text = this.Activator.LicenseStatus;
                if (this.Activator.IsDemoKey && this.Activator.IsExpired && text != "+STARTING")
                {
                        text = "DEMO_IS_OVER";
                }
                num = <PrivateImplementationDetails>.ComputeStringHash(text);
                if (num <= 890022063U)
                {
                        if (num > 516577132U)
                        {
                                goto IL_6B;
                        }
                        if (num == 215374295U)
                        {
                                goto IL_DB;
                        }
                        if (num != 516577132U)
                        {
                                break;
                        }
                        if (!(text == "+BADTIME"))
                        {
                                break;
                        }
                        if (!new AlertWindow
                        {
                                FirstLine = Resources.IDSA_badlocaltime,
                                SecondLine = Resources.IDSA_setdatetime,
                                OkButtonText = Resources.IDSA_btn_tryagain
                        }.Run(this.parentWindow))
                        {
                                return;
                        }
                        this.Activator.ActivateOnline("reactivate");
                }
                else if (num <= 2646111894U)
                {
                        if (num == 1181904525U)
                        {
                                goto IL_12F;
                        }
                        if (num != 2646111894U)
                        {
                                break;
                        }
                        if (!(text == "+BACKWARDTIME"))
                        {
                                break;
                        }
                        if (!new AlertWindow
                        {
                                FirstLine = Resources.IDSA_time_backward,
                                SecondLine = Resources.IDSA_trial_blocked,
                                OkButtonText = Resources.IDSA_btn_activate,
                                CancelButtonText = Resources.IDSA_btn_ordernow
                        }.Run(this.parentWindow))
                        {
                                goto IL_20E;
                        }
                        this.Activator.ActivateOnline("demo");
                }
                else if (num != 3427124686U)
                {
                        if (num == 3457219322U)
                        {
                                goto IL_F0;
                        }
                        if (num != 3914721229U)
                        {
                                break;
                        }
                        if (!(text == "+WRONG_HID"))
                        {
                                break;
                        }
                        if (!new AlertWindow
                        {
                                Title = Resources.IDSA_title_reactivation_required,
                                FirstLine = Resources.IDSA_wrong_hid,
                                SecondLine = Resources.IDSA_failed_reactivate,
                                OkButtonText = Resources.IDSA_btn_tryagain,
                                CancelButtonText = Resources.IDSA_btn_upd_info
                        }.Run(this.parentWindow))
                        {
                                goto IL_372;
                        }
                        this.Activator.ActivateOnline("reactivate");
                }
                else
                {
                        if (!(text == "+STARTING"))
                        {
                                break;
                        }
                        Thread.Sleep(500);
                        this.Activator.UpdateStatus();
                }
        }
        goto IL_393;
        IL_6B:
        if (num != 609027880U)
        {
                if (num == 890022063U)
                {
                        if (text == "0")
                        {
                                goto IL_183;
                        }
                }
        }
        else if (text == "NO_AVAILABLE_ACTIVATIONS")
        {
                if (new AlertWindow
                {
                        Title = Resources.IDSA_title_cant_reactivate_anymore,
                        FirstLine = Resources.IDSA_max_hids,
                        SecondLine = Resources.IDSA_msg_maxhids_update.Replace("{update_info_button}", Resources.IDSA_btn_upd_info),
                        OkButtonText = Resources.IDSA_btn_activate,
                        CancelButtonText = Resources.IDSA_btn_upd_info
                }.Run(this.parentWindow))
                {
                        this.<UpdateLicense>g__ShowRegisterWindow|5_1();
                        return;
                }
                this.OpenChangeHidUrl();
                return;
        }
        goto IL_393;
        IL_DB:
        if (!(text == "ALREADY_ACTIVATED"))//已激活
        {
                goto IL_393;
        }
        goto IL_183;
        IL_F0:
        if (text == "DEMO_IS_OVER")
        {
                this.<UpdateLicense>g__ShowWizard|5_0(new WizardModel.Expired());
                return;
        }
        goto IL_393;
        IL_12F:
        if (text == "KEY_BANNED")
        {
                if (new AlertWindow
                {
                        FirstLine = Resources.IDSA_error_key_banned,
                        SecondLine = Resources.IDSA_support_email,
                        OkButtonText = Resources.IDSA_btn_activate,
                        CancelButtonText = Resources.IDSA_btn_ordernow
                }.Run(this.parentWindow))
                {
                        this.<UpdateLicense>g__ShowRegisterWindow|5_1();
                        return;
                }
                this.OpenPurchaseUrl();
                return;
        }
        goto IL_393;
        IL_183:
        if (this.Activator.IsDemoKey || this.Activator.DaysLimit > 0L)
        {
                this.<UpdateLicense>g__ShowWizard|5_0(new WizardModel.Message());
                return;
        }
        return;
        IL_20E:
        this.OpenPurchaseUrl();
        return;
        IL_372:
        this.OpenChangeHidUrl();
        return;
        IL_393:
        if (new AlertWindow
        {
                Title = Resources.IDSA_title_other_error,
                FirstLine = Resources.IDSA_need_activate,
                SecondLine = Resources.IDSA_error_details.Replace("{error}", text),
                OkButtonText = Resources.IDSA_btn_tryagain,
                CancelButtonText = Resources.IDSA_btn_ordernow
        }.Run(this.parentWindow))
        {
                this.<UpdateLicense>g__ShowRegisterWindow|5_1();
                return;
        }
        this.OpenPurchaseUrl();
}

改为:
// vspd.Utils.LicenseUpdater
public void UpdateLicense()
{
}

编辑IL指令为一句
0        0000   ret      //返回空,不更新证书


E、自定义注册信息,注册名 // vspd.AboutWindow
public string Registered
{
        [CompilerGenerated]
        get
        {
                return this.<Registered>k__BackingField;        //此处改为 return "ChinaRadKe";
        }
}

删除多余IL指令,修改为:
0        0000        ldstr        "ChinaRadKe"
1        0005        ret



F、自定义注册信息,注册类型// vspd.AboutWindow
public string License
{
        [CompilerGenerated]
        get
        {
                return this.<License>k__BackingField;        //此处改为        return "Site License";
        }
}

删除多余IL指令,修改为:
0        0000        ldstr        "Site License"
1        0005        ret



G、搜索所有 Electronic Team 字符串改 Eltima Software,使用鼠标右键选择编辑IL指令。

H、汉化 vspd.Properties.Resources 资源,实现中文化。汉化资源可以使用 dnSpy 直接保存导出和导入。

I、到我的博客 https://blog.csdn.net/zyyujq ,下载:vspdpro_service.exe、vspdpro_service.dll,停止服务后覆盖原来的文件,再打开vspdpro服务。

最新汉化下载(含PJ的vspdpro_service.exe、vspdpro_service.dll):
https://download.csdn.net/download/zyyujq/85492721

最新版本 V10.0.979和V10.0.992博客:
https://blog.csdn.net/zyyujq/article/details/124067614

Virtual Serial Port Driver Pro 注册原理:
https://blog.csdn.net/zyyujq/article/details/121387304

本站PJ下载(中文和英文版的PJ):

Virtual Serial Port Driver Pro 10.0.992.rar (839.63 KB, 下载次数: 168)











评分

参与人数 44HB +53 THX +20 收起 理由
消逝的过去 + 2
再来壹瓶 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
卢来 + 2 + 1
爱编 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
NOP + 2
xiaoxixpj + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
longge188 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
迈克零零 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
焱燚 + 1 + 1
蓝色火焰 + 1 + 1
Jawon + 2
创客者V2.0 + 1
yahan + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
星星知我 + 1 + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
一路走来不容易 + 1
太阳神 + 2 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
Cerolluo + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
459121520 + 1
帝都骑士 + 1
行行行行行行 + 1
蓝候鸟 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
sjtkxy + 1
爱汇编爱汇编 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
纯英文 + 1
agan8888 + 1
飞刀梦想 + 1
我来拾豆豆 + 1 + 1
yexing + 1
xgbnapsua + 1
水墨青云 + 1 + 1
索罗门 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
男同在身边 + 1
l278785481 + 1
fengyuan0128 + 1
liugu0hai + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
Wayne + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
不卡呀 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
慕枫二二 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
temp + 1 + 1
三月十六 + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
weiran324 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
Shark恒 + 10 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zwd841 发表于 2022-5-29 14:50 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
YLa3 发表于 2022-5-29 14:55 | 显示全部楼层

甘拜下风,谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
MYJVcmOUusW 发表于 2022-5-29 15:21 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bsrBw 发表于 2022-5-29 15:47 | 显示全部楼层

大佬牛批!顶!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
mSYxEdBpL 发表于 2022-5-29 15:56 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
BPWK8 发表于 2022-5-29 16:13 | 显示全部楼层

威武霸气!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
CaBTfroL 发表于 2022-5-29 16:18 | 显示全部楼层

必火 正好需要  谢谢分享啊
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
FKEUiMSn0 发表于 2022-5-29 16:30 | 显示全部楼层

不知道来晚了没有
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LxAsK 发表于 2022-5-29 16:31 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表