⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 软件加密保护
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    List: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mBuf:array[0..100] of Byte;
  mFun,mP1,mP2,mP3,mP4,rt:Word;
  lP1,lP2:LongWord;
  mHand:array[0..16] of Word;
  mHardID:array[0..16] of LongWord;
  rc:array[0..4] of Word;

  function  Rockey(fun:Word; var Handle:Word;
                var lp1,lp2:LongWord;
                var P1,P2,P3,P4:Word;
                var buf:Byte):Word;
                stdcall;external 'Rockey4ND.dll';
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
    i,num:Integer;
    str:string;
    mRockeyNumber:Word;
    tmpBuf:array[0..30] of Byte;
    cStr:array[0..100] of Char;
    RY_FIND,RY_FIND_NEXT,RY_OPEN,RY_CLOSE,RY_READ :Word;
    RY_WRITE,RY_RANDOM,RY_SEED,RY_WRITE_USERID:Word;
    RY_READ_USERID,RY_SET_MOUDLE,RY_CHECK_MOUDLE,RY_WRITE_ARITHMETIC:Word;
    RY_CALCULATE1,RY_CALCULATE2,RY_CALCULATE3,RY_DECREASE:Word;
begin
RY_FIND                        :=1 ;		{找锁}
RY_FIND_NEXT		       :=2 ;		{找下一锁}
RY_OPEN                        :=3 ;		{打开锁}
RY_CLOSE                       :=4 ;		{关闭锁}
RY_READ                        :=5 ;		{读锁}
RY_WRITE                       :=6 ;		{写锁}
RY_RANDOM                      :=7 ;		{产生随机数 }
RY_SEED                        :=8 ;		{产生种子码 }
RY_WRITE_USERID		       :=9 ;		{写用户 ID  }
RY_READ_USERID		       :=10;		{读用户 ID  }
RY_SET_MOUDLE		       :=11;		{设置模块字 }
RY_CHECK_MOUDLE		       :=12;		{检查模块状态}
RY_WRITE_ARITHMETIC            :=13;		{写算法 }
RY_CALCULATE1		       :=14;		{计算 1 }
RY_CALCULATE2		       :=15;		{计算 2 }
RY_CALCULATE3		       :=16;		{计算 3 }
RY_DECREASE		       :=17;		{递减模块单元 }
    List.Items.Clear();
    mP1:=$c44c;
    mP2:=$c8f8;
    mP3:=$799;
    mP4:=$c43b;
    for i:=0 to 30 do
       mBuf[i]:=0;
    rt:=0;
    mFun:=1;
    rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
    if rt<>0 then
    begin
        FmtStr(str,'没找到ROCKEY4ND,error:0x%x ',[rt]);
        List.Items.Add(str);
        exit;
    end;
    List.Items.Add('找到第1个ROCKEY4ND');

    mHardID[0]:=lp1;
    mFun:=RY_OPEN;
    rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
    if rt<>0 then
    begin
        FmtStr(str,'没打开ROCKEY4ND,error:0x%x ',[rt]);
        List.Items.Add(str);
        exit;
    end;
    //Rockey4ND返回的类型是7,Rockey4返回的类型是
    // 1  ROCKEY4 标准并口类型
    // 2  ROCKEY4+ 增强并口类型
    // 3  ROCKEY4 标准 USB 类型
    // 4  ROCKEY4+ 增强 USB 类型
    // 5  ROCKEY4 网络并口类型
   // 6  ROCKEY4 网络 USB 类型

   //Rockey4ND,Rockey4类型都通过lp2返回

    if(lP2=7) then
    List.Items.Add('已打开ROCKEY4ND');



    i:=1;
    while rt = 0 do
    begin
        mFun:=RY_FIND_NEXT;
        rt:= Rockey(mFun,mHand[i],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
        if rt<>0 then
           break;

        mHardID[i]:=lP1;
        FmtStr(str,'找到第0x%x个ROCKEY4ND',[i+1]);
        List.Items.Add(str);

        mFun:=RY_OPEN;
        rt:= Rockey(mFun,mHand[i],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
        if rt<>0 then
        begin
            FmtStr(str,'没打开第0x%x个ROCKEY4ND',[i+1]);
            List.Items.Add(str);
            break;
        end;

        //识别类型
        if(lP2=7) then
        FmtStr(str,'已打开第0x%x个ROCKEY4ND',[i+1]);
        List.Items.Add(str);
        i:=i+1;
    end;
    mRockeyNumber:=i;
for num:=0 to mRockeyNumber-1 do
begin
  List.Items.Add('*******************************************');
  FmtStr(str,'开始测试第0x%x个ROCKEY4ND',[num+1]);
  List.Items.Add(str);
{写}
  mFun:=RY_WRITE;
  for i:=0 to 10 do
      mBuf[i]:=31;
  mP1:=498;
  mP2:=11;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'写ROCKEY4ND时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'写ROCKEY4ND正确',[i+1]);
   List.Items.Add('正确写入ROCKEY4ND');
{读}
  mFun:=RY_READ;
  for i:=0 to 10 do
      tmpBuf[i]:=0;
  mP1:=498;
  mP2:=11;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,tmpBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'读ROCKEY4ND时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end
   else
   begin
      for i:=0 to 10 do
          if mBuf[i] <> tmpBuf[i] then
              break;
      if i = 11 then
         List.Items.Add('正确读出ROCKEY4ND')
      else
          List.Items.Add('正确读出ROCKEY4ND,但与写入的不同');
   end;
{随机数}
  mFun:=RY_RANDOM;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'检测随机数时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'随机数0x%x:',[mP1]);
   List.Items.Add(str);
{种子码}
  mFun:=RY_SEED;
  lP2:=$12345678;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'发送种子码时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'种子码0x%x:返回值:0x%x,0x%x,0x%x,0x%x',[lP2,mP1,mP2,mP3,mP4]);
   List.Items.Add(str);
   rc[0] := mP1; rc[1] := mP2;
   rc[2] := mP3; rc[3] := mP4;
{写用户ID}
  mFun:=RY_WRITE_USERID;
  lP1:=100;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'写用户ID时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'写用户ID0x%x',[lP1]);
   List.Items.Add(str);
{读用户ID}
  mFun:=RY_READ_USERID;
  lP1:=0;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'读用户ID时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'读出用户ID0x%x',[lP1]);
   List.Items.Add(str);
{设置模块}
  mFun:=RY_SET_MOUDLE;
  mP1:=7;
  mP2:=$2122;
  mP3:=1;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'设置模块0x%x时发现0x%x号错',[mP1,rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'设置模块0x%x,为0x%x,可递减',[mP1,mP2]);
   List.Items.Add(str);
{检测模块第一次}
  mFun:=RY_CHECK_MOUDLE;
  mP1:=7;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'检测模块0x%x时发现0x%x号错',[mP1,rt]);
        List.Items.Add(str);
        break;
   end;
   if mP2 = 1 then
      if mP3 = 1 then
            FmtStr(str,'检测模块0x%x,有效,可递减',[mP1])
      else
            FmtStr(str,'检测模块0x%x,有效,不可递减',[mP1])
   else
     if mP3 = 1 then
            FmtStr(str,'检测模块0x%x,无效,可递减',[mP1])
      else
            FmtStr(str,'检测模块0x%x,无效,不可递减',[mP1]) ;
   List.Items.Add(str);

{递减}
 mFun:=RY_DECREASE;
  mP1:=7;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'递减模块0x%x时发现0x%x号错',[mP1,rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'递减模块0x%x,为0X2121',[mP1]);
   List.Items.Add(str);


 {写算法1}
  cstr:='H=H^H, A=A*23, F=B*17, A=A+F, A=A+G, A=A<C, A=A^D, B=B^B, C=C^C, D=D^D';
  for i:=0 to strlen(cstr) do
      mBuf[i]:= Byte(cstr[i]);
  mBuf[i]:=0;
  mFun:=RY_WRITE_ARITHMETIC;
  mP1:=0;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'写算法1时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
  List.Items.Add('正确写入算法1');
{计算一}
  mFun:=RY_CALCULATE1;
  lP1 := 0; lP2 := 7;
  mP1 := 5; mP2 := 3;
  mP3 := 1; mP4 := $ffff;
  rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'计算1时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
  List.Items.Add('计算输入: p1=5, p2=3, p3=1, p4=0xffff');
  List.Items.Add('结果: = ((5*23 + 3*17 + 0x2121) < 1) ^ 0xffff = BC71');
  FmtStr(str,'计算输出: p1=0x%x, p2=0x%x, p3=0x%x, p4=0x%x',[mP1,mP2,mP3,mP4]);
  List.Items.Add(str);

{写算法2}
  cstr:='A=A+B, A=A+C, A=A+D, A=A+E, A=A+F, A=A+G, A=A+H';
  for i:=0 to strlen(cstr) do
      mBuf[i]:= Byte(cstr[i]);
  mBuf[i]:=0;
  mFun:=RY_WRITE_ARITHMETIC;
  mP1:=10;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'写算法2时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
  
  List.Items.Add('正确写入算法2');
{计算2}
  mFun:=RY_CALCULATE2;
  lP1 := 10; lP2 := $12345678;
  mP1 := 1; mP2 := 2;
  mP3 := 3; mP4 := 4;
  rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'计算2时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
  List.Items.Add('计算输入: p1=1, p2=2, p3=3, p4=4');
  FmtStr(str,'结果: %04x + %04x + %04x + %04x + 1 + 2 + 3 + 4 = %04x',[rc[0], rc[1], rc[2], rc[3], Word(rc[0]+rc[1]+rc[2]+rc[3]+10)]);
  List.Items.Add(str);
  FmtStr(str,'计算输出: p1=0x%x, p2=0x%x, p3=0x%x, p4=0x%x',[mP1,mP2,mP3,mP4]);
  List.Items.Add(str);
{写算法3}
  cstr:='A=E|E, B=F|F, C=G|G, D=H|H';
  for i:=0 to strlen(cstr) do
      mBuf[i]:= Byte(cstr[i]);
  mBuf[i]:=0;
  mFun:=RY_WRITE_ARITHMETIC;
  mP1:=17;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'写算法3时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
  List.Items.Add('正确写入算法3');
  {递减}
 mFun:=RY_DECREASE;
  mP1:=7;
   rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'递减模块0x%x时发现0x%x号错',[mP1,rt]);
        List.Items.Add(str);
        break;
   end;
   FmtStr(str,'递减模块0x%x,为0X2120',[mP1]);
   List.Items.Add(str);

{计算3}
  mFun:=RY_CALCULATE3;
  lP1 := 17; lP2 := 6;
  mP1 := 1; mP2 := 2;
  mP3 := 3; mP4 := 4;
  rt:= Rockey(mFun,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   if rt<>0 then
   begin
        FmtStr(str,'计算3时发现0x%x号错',[rt]);
        List.Items.Add(str);
        break;
   end;
  FmtStr(str,'读出从6开始的模块字: 0x%x,0x%x,0x%x,0x%x',[mP1,mP2,mP3,mP4]);
  List.Items.Add(str);
  end;


  for num:=0 to mRockeyNumber-1 do
  begin

   rt:= Rockey(RY_CLOSE,mHand[num],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
   begin
        List.Items.Add('关闭Rockey4ND');
        break;
   end;
   end;
  

end;

//procedure TMainForm.BitBtn1Click(Sender: TObject);
//begin
 //    close()
//end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close()
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -