首页
社区
课程
招聘
请问,用ASProtect如何实现和机器硬件信息绑定
发表于: 2006-4-12 03:44 13769

请问,用ASProtect如何实现和机器硬件信息绑定

2006-4-12 03:44
13769
我用的是asp2.11 ske版,该软件有使用硬件锁,硬件ID一个选项该使用哪个ID,硬盘的还是CPU.好像只能使用本机的ID,不能随便输入其他机器的ID,这个选项到期是干啥用的?

另外: asp到能能否实现和机器的硬件信息绑定,如可以,该如何实现?

请高手告诉菜鸟

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
找个ASP看下不就知道
有几种模式了
至于用的是什么
只有加壳作者知道了
2006-4-12 03:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ASP不可以直接用吗,难道需要API,请问在那里设置硬件ID的类别,楼上所说的“看一下”是指参考例子程序?

多谢指教
2006-4-12 04:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
各位高手帮忙:

我的软件刚开始卖,客户钱已经付了。我还没想好如何加密。

哪位熟悉ASP或者ACP,能否给我的email里留个电话或者qq

chenghj@gmail.com

多谢多谢。
2006-4-12 04:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 hnchj 发布
我用的是asp2.11 ske版,该软件有使用硬件锁,硬件ID一个选项该使用哪个ID,硬盘的还是CPU.好像只能使用本机的ID,不能随便输入其他机器的ID,这个选项到期是干啥用的?


这里的ID是指客户提供给你注册的机器ID,这里相当于注册机,这个地方你可以不设置的,在asp的帮助文件中有关于这个的说明,同时,得要保存好这个.aspr文件,否则,呵呵,没法注册了。。

获得机器的ID需要使用API函数:GetHardwareID(),这个函数没有参数,this function retrieves the unique computer identifier. HardwareID is used to generate keys, limited to particular computer.
2006-4-12 10:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还有,利用API,CheckKeyAndDecrypt()可以根据KEY实现硬件ID/key检测,正确就解密相应代码,当然,如果没有功能限制,可以用CheckKey就行了。
不过,aspr正是论坛讨论的焦点,高手分分钟就可以pass掉。呵呵,祝你好运。
2006-4-12 11:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢楼上,现在的软件关键是防菜鸟不妨高手,向我这样菜鸟加密的软件难道还怕高手解密。
2006-4-12 11:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我用ASPR加壳完了程序老是不能运行,提示NO VALID.....不知道什么原因
2006-4-12 16:40
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
9
最初由 kaspasky 发布
我用ASPR加壳完了程序老是不能运行,提示NO VALID.....不知道什么原因


今天向CoDe_Inject学了一招,设置时必须得设2个以上的modes,然后压缩\Examples\Reg Trial样例就能成功:
2006-4-12 16:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我也发现了类似问题,好像就是需要设置2个以上的mode才能成功。

我用delphi编程,是不是在调用asp的函数时需要copy其他dll文件或者api文件,到底哪里有asp的详细使用说明。
ASP好像没有ACP好有,但是ACP的作者好像不很热衷于国内用户,猜测。
联系几次想要免费版,都没有结果。

看来我只好用硬件狗了,自己省事,客户费事,没办法的办法。
2006-4-12 18:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 kaspasky 发布
我用ASPR加壳完了程序老是不能运行,提示NO VALID.....不知道什么原因


你只用一种模式并使用了Use Activation Keys选项。
2006-4-12 18:18
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
还是用不了注册功能
2006-4-12 18:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
详细点吧,以VC为例:

首先,
设置mode1,用作试用用户,不要设置 use activation key选项及is this mode in registered mode,然后设置mode expire。

其次,设置mode2,用作注册用户,设置 use activation key选项及is this mode in registered mode,如果需要硬件锁定,设置 activate key properties中的use handware locking,如果在程序中使用了REG_CRYPT_BEGIN*,REG_CRYPT_END*,则设置 unlock encrypted sections(注意,设置了这个功能,则试用用户无法使用你加密了的代码段),好了,加密设置ok了。

下面说说程序中的sdk,将aspr.h,asprotect.h,aspr_api.h,aspr_ide.lib拷贝到你的工程目录下。
#include "aspr.h"
#include "asprotect.h"
#include "aspr_api.h"   
#pragma comment(lib,"aspr_ide.lib")  

在程序启动的时候调用GetRegistrationInformation(BYTE ModeId, char** Key, char** Name),得到key以及注册名,如果key空,则是试用用户,这是你可以利用GetHardwareID()得到硬件ID并提示用户注册。

注册:设计一个用户注册界面接受key、user、hardwareID,然后调用CheckKey( char* Key, char* Name, PMODE_STATUS mode_status ),如果你使用了REG_CRYPT_BEGIN*,REG_CRYPT_END*加密了你的某些代码,则调用CheckKeyAndDecrypt( char* Key, char* Name, BOOL SaveKey )检测key并解密相应代码。CheckKeyAndDecrypt中的Savekey参数设置为TRUE,可以保存注册状态(在asp中的菜单options->key storage area type中进行设置保存位置)。

给用户生成key:
打开你的.aspr文件,就是加密时保存的project,在activation keys中输入用的hardware id,name for registration,点create按钮,将key提供给用户,用户完成注册。

就这样了,有错误请提出,谢谢。
2006-4-12 18:51
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
又学到新东西了

支持
2006-4-12 22:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
13楼解释得很清楚,多谢。回头我先尝试一下。
2006-4-13 03:08
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
下面说说程序中的sdk,将aspr.h,asprotect.h,aspr_api.h,aspr_ide.lib拷贝到你的工程目录下。
#include "aspr.h"
#include "asprotect.h"
#include "aspr_api.h"   
#pragma comment(lib,"aspr_ide.lib")  

在程序启动的时候调用GetRegistrationInformation(BYTE ModeId, char** Key, char** Name),得到key以及注册名,如果key空,则是试用用户,这是你可以利用GetHardwareID()得到硬件ID并提示用户注册。

注册:设计一个用户注册界面接受key、user、hardwareID,然后调用CheckKey( char* Key, char* Name, PMODE_STATUS mode_status ),如果你使用了REG_CRYPT_BEGIN*,REG_CRYPT_END*加密了你的某些代码,则调用CheckKeyAndDecrypt( char* Key, char* Name, BOOL SaveKey )检测key并解密相应代码。CheckKeyAndDecrypt中的Savekey参数设置为TRUE,可以保存注册状态(在asp中的菜单options->key storage area type中进行设置保存位置)。

这一段不懂,能否再详细些?谢谢
2006-6-6 00:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 wwgroup 发布
下面说说程序中的sdk,将aspr.h,asprotect.h,aspr_api.h,aspr_ide.lib拷贝到你的工程目录下。
#include "aspr.h"
#include "asprotect.h"
#include "aspr_api.h"
#pragma comment(lib,"aspr_ide.lib")
........

/***************************************************************
**************以下代码可以在Aspr提供的Samples中找到*************
***********************************************************8****/
// trial.cpp : Defines the entry point for the application.
#include "stdafx.h"
#include "resource.h"
#include <shellapi.h>

#include "include/aspr_api.h"
#include "include/asprotect.h"
#pragma comment(lib,"include/aspr_ide.lib")
#define MAX_LOADSTRING 100
char*        UserKey         = NULL;
char*        UserName             = NULL;
char*        LocalHardwareID = NULL;
char*        ModeName             = NULL;
DWORD        TrialDaysTotal  = 0,TrialDaysLeft= 0;

//---------------------------------------------------------------------
BOOL APIENTRY RegDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
        char        keybuf[1024];
        char        namebuf[1024];
        char        buffer[1024];
        int        size;

        switch (msg) {
                case WM_INITDIALOG:
                        LocalHardwareID = GetHardwareID();
                        SetDlgItemText(hwnd, IDC_HARDWAREKEY_EDIT, LocalHardwareID);
                        return TRUE;

        case WM_COMMAND:
            switch (LOWORD(wParam)) {
                                case IDOK:

                                        // key

                                        size = GetDlgItemText(hwnd, IDC_REGKEY_EDIT, keybuf, 1024);
                                        keybuf[size] = 0;

                                        // name

                                        size = GetDlgItemText(hwnd, IDC_REGNAME_EDIT, namebuf, 1024);
                                        namebuf[size] = 0;

                                        if ( CheckKeyAndDecrypt( (char*)keybuf, (char*)namebuf, TRUE ) == TRUE )
                                        {
                                                MessageBox(hwnd, "Thank you for your registration!", "Registration", MB_ICONINFORMATION);
                                EndDialog(hwnd, IDOK);
                            break;
                                        }
                                        else
                                        {
                                                MessageBox(hwnd, "Key is not valid, please contact manufacture!","Registration", MB_ICONWARNING);
                            break;
                                        }

                                case IDC_SEND:
                                        buffer[0] = 0;
                                        lstrcat(buffer,"mailto:support@aspack.com?subject=Hardware%20ID%20for%20Advanced%20Application%201.0&body=Hardware%20ID is%20:%20");
                                        lstrcat(buffer,LocalHardwareID);
                                        lstrcat(buffer,"%0d%0aRegistration%20information%20:");
                    ShellExecute((HWND)GetDesktopWindow(), "open", buffer, NULL, NULL, SW_SHOWNORMAL);
                    break;

                case IDCANCEL:
                    EndDialog(hwnd, IDCANCEL);
                    break;

            }

            break;
    }

    return FALSE;
}
//---------------------------------------------------------------------
void ProcessRegistration( HWND hwnd )
{
  char                        caption[100];
  char                        buffer[256];

  MODE_STATUS   mode_status;

  GetRegistrationInformation( 0, &UserKey,  &UserName );

  if ((UserKey != NULL) && (strlen(UserKey) > 0))
  {

        // Trial doesn't expire
        // Application was registered

        REG_CRYPT_BEGIN1

        // caption

        strcpy( caption, "Registered version!" );
        SetWindowText( hwnd, caption );

    GetModeInformation( 0, &ModeName, &mode_status );

        // exit -> close

        SetWindowText( GetDlgItem(hwnd,IDCANCEL), "Close" );

        // hide trial buttons

        ShowWindow(GetDlgItem(hwnd,IDC_BUYNOW), SW_HIDE);
        ShowWindow(GetDlgItem(hwnd,IDC_REG_BUTTON), SW_HIDE);

        // registered info

        wsprintf( buffer,"Key: %s\nName: \t\t%s\nMode Name: \t%s",
                                          UserKey, UserName, ModeName );

        SetDlgItemText(hwnd, IDC_TEXT, buffer);

        REG_CRYPT_END1

  }
  else
  {

        if (GetTrialDays( 0, &TrialDaysTotal, &TrialDaysLeft ))
        {

                // caption

                strcpy( caption, "TRIAL version!" );
                SetWindowText( hwnd, caption );

                // show trial buttons

                ShowWindow(GetDlgItem(hwnd,IDC_BUYNOW), SW_SHOW);
                ShowWindow(GetDlgItem(hwnd,IDC_REG_BUTTON), SW_SHOW);

                // trial info

                if (TrialDaysLeft == 0)
                {
                        strcpy( buffer, "\t\tTRIAL EXPIRED!" );
                        SetDlgItemText(hwnd, IDC_TEXT, buffer);
                }
                else
                {
                        wsprintf( buffer,"\tUnregistered trial version:\n\n\tYou have : %d day(s) left",
                                                          TrialDaysLeft );
                        SetDlgItemText(hwnd, IDC_TEXT, buffer);
                }
        }
  }

}
//---------------------------------------------------------------------
BOOL APIENTRY DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

        switch (msg) {

                // Init

                case WM_INITDIALOG:

                        ProcessRegistration( hwnd );
                        return TRUE;

                // Cmd

        case WM_COMMAND:

                        switch (LOWORD(wParam)) {

                                case IDC_REG_BUTTON:

                                        ShowWindow(hwnd, SW_HIDE);
                                        DialogBox(        NULL,(LPSTR)MAKEINTRESOURCE(IDD_REG_DIALOG),hwnd,(DLGPROC/*WNDPROC*/)RegDlgProc);
                                        ProcessRegistration( hwnd );
                                        ShowWindow(hwnd, SW_SHOW);
                                        break;

                                case IDC_BUYNOW:
                                       
                                        ShellExecute((HWND)GetDesktopWindow(), "open", "http://www.aspack.com/register.htm", NULL, NULL, SW_SHOWNORMAL);
                                        break;

                case IDOK:
                    EndDialog(hwnd, IDOK);
                    break;

                case IDCANCEL:
                    EndDialog(hwnd, IDCANCEL);
                    break;
            }

            break;
    }

    return FALSE;
}
//---------------------------------------------------------------------
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow){

    MessageBox( 0, "This example shows the work in trial mode.", "Information", MB_ICONINFORMATION );

        DialogBox(NULL,(LPSTR)MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC/*WNDPROC*/)DlgProc);
        return 0;
}
2006-6-6 08:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
请问上述回复的意思是不是说,如果要使用硬件加密注册功能必须在编程时把相关代码嵌入到我编的程序中?然后随源程序一起编译?有没有别的办法?
如果上面说的正确,那么程序已经编译好了还有没有办法进行硬件加密?

请高手给解释一下!谢谢
2006-6-13 11:22
0
雪    币: 239
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
ASP每个版本在同一台机器上取到的ID是不一样的,最好不要用这个功能。
2006-6-13 13:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
最初由 wwth 发布
请问上述回复的意思是不是说,如果要使用硬件加密注册功能必须在编程时把相关代码嵌入到我编的程序中?然后随源程序一起编译?有没有别的办法?
如果上面说的正确,那么程序已经编译好了还有没有办法进行硬件加密?

请高手给解释一下!谢谢


需要使用到aspr的注册系统的话,只能在你的程序中利用aspr的SDK函数来获得硬件的信息。
已经编译好的的程序、进行硬件加密,请问表述的是什么意思?
2006-6-14 08:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
最初由 netthinker 发布
需要使用到aspr的注册系统的话,只能在你的程序中利用aspr的SDK函数来获得硬件的信息。
已经编译好的的程序、进行硬件加密,请问表述的是什么意思?


我的意思是对于已经编译好的程序,是不是只能重新编译才能使用注册保护功能?
2006-6-14 11:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
已经编译好的程序不加入代码,怎能调用SDK,不能调用SDK,那就不能使用注册保护功能了。
好象ARM不是ASP!
2006-6-14 13:07
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
加壳后,运行程序提示

protection error

error:45

是什么原因.....
2006-6-22 00:49
0
游客
登录 | 注册 方可回帖
返回
//