万捷博客

万捷博客
一个知识汇聚的地方
首页 » 网络验证 » VC++通过万捷网络验证实现VMP网络授权功能_VC++网络验证_防破解_网页加网络验证_脚本加网络验证_网络验证系统_收费系统_软件注册收费系统

VC++通过万捷网络验证实现VMP网络授权功能_VC++网络验证_防破解_网页加网络验证_脚本加网络验证_网络验证系统_收费系统_软件注册收费系统

简介

  • 本实例用于演示,通过万捷网络验证给VC++程序增加VMP网络授权功能,让VC++编写的程序可以进行销售,控制软件的版权,为软件的作者提供收益。
  • VMP是一款非常强大的PE保护壳程序,通过虚拟化代码内存等处理,为指定子程序增加注册码授权的功能,没有正确的注册码解密受保护的代码,就不可以正常运行软件,可以更好的达到防破解的目的。
  • 购买使用网络验证系统请联系唯一客服QQ:434888761

实现的原理:

根据网络验证的WebApi接口的要求,构造URL网址,然后访问网址,根据返回的内容控制程序流程。

用到的技术/接口:

1、(必须)需要用到URL访问的功能,通常表达为:网页访问、GET请求、HTTP请求、cURL,用于访问构造的网址。

2、(非必须)字符串分割成数组的功能,用于将访问网址返回的内容分割成数组,根据实际需求来利用分割出的成员结果。

相关资料:

在线帮助文档(看 webapi接口说明):https://www.wjsrs.com/h/

示例源码(片段):

// 此代码为部分代码片段, 网络验证授权功能需要配合万捷网络验证系统实现。
// 联系QQ:434888761

#include <iostream>
#include <string>
#include <sstream>
#include "conio.h"
#include "include/VMProtectSDK.h"
#include <Windows.h>
#include "HttpRequest.h"

using namespace std;

int main()
{

    string server = "http://127.0.0.1/";//服务器地址
    INTERNET_PORT port = 80;//端口号

    //获取机器码hwid
    size_t hwid_Len =VMProtectGetCurrentHWID(NULL,0);
    char* hwid = new char[hwid_Len];
    VMProtectGetCurrentHWID(hwid, hwid_Len);
    cout <<"机器码:" << hwid <<"\n\n";

    string ka;
    stringstream url;  //组合URL

    //用户登录获取激活码
    cout  <<"请输入卡号后按回车:\n\n";
    cin >> ka;
    url.clear();
    url.str("");
    url << server;
    url << "wlyz/web6.0/api.php?name=s_vmpkey";//设置接口名称
    url << "&c1=10001";//设置软件编号
    url << "&c2=" << ka ;//设置卡号
    url << "&c4=1.0";//设置软件编号
    url << "&c5=" << hwid;//设置机器码

    //cout << "URL:" << url.str() <<"\n\n";

    string res= GetHtml(url.str(), port);
    ///cout << "返回结果:" << res << "\n";

    //返回信息不包含<|>分隔符,表示返回错误信息了。
    if (!res.find("<|>")) {
        cout << "出错了:" << res << "\n\n";
        system("pause");
        return 0;
    }   
    //分割字符串,取出序列号等信息
    vector<std::string>arr =  Split(res, "<|>");
    if (arr.size() < 4) {
        cout << "出错了:" << res << "\n\n";
        system("pause");
        return 0;
    }
    cout << "序列号:" << arr[3] << "\n\n";

    //设置序列号
   int zt = VMProtectSetSerialNumber(arr[3].c_str());
   if (zt!=0) {
       switch (zt)
       {
       case 1:
           cout << "Error:授权模块错误." << "\n\n";
           break;
       case 2:
           cout << "Error:序列号错误." << "\n\n";
           break;
       case 4:
           cout << "Error:序列号已被加入黑名单." << "\n\n";
           break;
       case 8:
           cout << "Error:序列号已过期." << "\n\n";
           break;
       case 16:
           cout << "Error:序列号已超过使用次数." << "\n\n";
           break;
       case 32:
           cout << "Error:序列号已经绑定其他机器." << "\n\n";
           break;
       case 64:
           cout << "Error:序列号不适用当前版本." << "\n\n";
           break;
       default:
           cout << "Error:未知错误." << "\n\n";
           break;
       }
       system("pause");
       return 0;
   }
 
   //取序列号状态
   zt = VMProtectGetSerialNumberState();
   if(zt!=0){
       cout << "Error:错误 "<< zt << "\n\n";
       system("pause");
       return 0;
   }

   //设置VMP保护标记,在VMP中将此标记绑定到序列号
   VMProtectBeginUltraLockByKey("VMP保护标记,【锁定到序列号】选【是】");
   cout << "看到这条信息,表示所有验证都通过了,被序列号保护的代码正常执行。 " << "\n\n";
   VMProtectEnd();


   system("pause");
   return 0;
    
}

文章如无特别注明均为原创! 作者: admin, 转载或复制请以 超链接形式 并注明出处 万捷博客
原文地址《 VC++通过万捷网络验证实现VMP网络授权功能_VC++网络验证_防破解_网页加网络验证_脚本加网络验证_网络验证系统_收费系统_软件注册收费系统》发布于2022-12-26

打赏作者

评论

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册