首页 网络安全 安全学院 查看内容

数字签名添加器源码

2009-5-25 10:56 506 0

摘要: xsf516624 ,暗组论坛 因为有些人说要源码,所以发出来了,都没什么技术含量的 unit uMain; interface uses  Windows, Message...
关键词: nbsp 数字签名 vFS vFile procedure vNewStr TObject Sender end vStr

xsf516624 ,暗组论坛 因为有些人说要源码,所以发出来了,都没什么技术含量的 unit uMain; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls; type  TForm1 = class(TForm)    Button1: TButton;    SelFile: TOpenDialog;    EFile1: TEdit;    Label1: TLabel;    Label2: TLabel;    EFile2: TEdit;    Button2: TButton;    Button3: TButton;    Button4: TButton;    CBbakFile: TCheckBox;    Label3: TLabel;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure Button3Click(Sender: TObject);    procedure Button4Click(Sender: TObject);    procedure FormClose(Sender: TObject; var Action: TCloseAction);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} procedure ShowMessBox(pvCaptiong, pvText: string);begin  MessageBox(Form1.Handle, PAnsiChar(pvText), PAnsiChar(pvCaptiong), 0);end; function ReadHexDZ(fvFileName:string; fvHexDZ:Integer):Integer; //读取指定偏移地址十六进制数据var  //vBuffer : array of byte;   //没指定长度的话调用函数回出错  vBuffer : array [0..3] of byte;   //指定长度  vInt    : integer;  vFS     : TFileStream;  vStr    : string;begin  Result := -1 ;  vStr:= '';  try    vFS:= TFileStream.Create(fvFileName, fmOpenRead);      //以读取方式打开    vFS.Position:= fvHexDZ;                     //设置开始位置    vFS.ReadBuffer(vBuffer, SizeOf(vBuffer));   //读取数据到缓冲区    for vInt:=0 to 3 do      vStr:=IntToHex(vBuffer[vInt], 2) + vStr; //得到16进制    Result:= StrToInt('$'+vStr)  ;  except    Result := -1  END;  vFS.Free;end; procedure TForm1.Button1Click(Sender: TObject);begin  Self.Close;end; procedure TForm1.Button2Click(Sender: TObject);begin  SelFile.Title := '请选择含有数字签名的文件';  if not SelFile.Execute then Exit;    EFile1.Text := Selfile.FileName;end; procedure TForm1.Button3Click(Sender: TObject);begin  SelFile.Title := '请选择要添加数字签名的文件';  if not SelFile.Execute then Exit;    EFile2.Text := Selfile.FileName;end; procedure TForm1.Button4Click(Sender: TObject);var  vFile1, vFile2: string;  vBuf1,vBuf2: array [0..3] of Byte;  vFS: TFileStream;  vBufAttr: array [0..100000] of PAnsiChar ;  vFile2SZQMDZ,  vFile1SZQMDZ,     //指定数字签名的地址  vFile1SZQMSizeDZ,    //指定数字签名大小  vSZQMDZ, //数字签名地址  vBufSize:integer;//数字签名大小  vStr, vNewStr, vNewStr2:string;  vInt: Integer;begin  vFile1:= Trim(EFile1.Text);  vFile2 := Trim(EFile2.Text);  if not FileExists(vFile1) or not FileExists(vFile2) then  begin    ShowMessBox('消息', '找不到文件!');    Exit;  end;  if CBbakFile.Checked then    CopyFile(PAnsiChar(vFile2), PAnsiChar(ExtractFileName(vFile2)+'.bak'), False);  vFile1SZQMDZ:= ReadHexDZ(vFile1, $3C) + $98 ; //数字签名地址  vFile1SZQMSizeDZ :=  vFile1SZQMDZ +$4; //数字签名大小地址  vSZQMDZ:= ReadHexDZ(vFile1, vFile1SZQMDZ);  //数字签名开始位置  vBufSize := ReadHexDZ(vFile1, vFile1SZQMSizeDZ)  ;  //ShowMessBox(IntToStr(vFile1SZQMSizeDZ),  IntToStr(vBufSize));//  exit;  try    vFS := TFileStream.Create(vFile1, fmOpenRead);    try      vFS.Position:= vFile1SZQMDZ;      vFS.ReadBuffer(vBuf1, 4);  //得到记录数字签名所在地的缓冲区      vFS.Position:= vFile1SZQMSizeDZ;      vFS.ReadBuffer(vBuf2, 4);  //得到记录数字签名大小的缓冲区      vFS.Position:= vSZQMDZ;      vFS.ReadBuffer(vBufAttr, vBufSize);  //读取数字签名数据到vbufattr    finally      vFS.Free;    end;    vFile2SZQMDZ := ReadHexDZ(vFile2, $3C) + $98;    vFS := TFileStream.Create(vFile2, fmOpenReadWrite);    try      vFS.Position:= vFile2SZQMDZ;       vStr:= IntToHex(vFS.Size, 8);      vNewStr:=  Copy(vStr, 7, 2) ;      vNewStr:= vNewStr + Copy(vStr, 5, 2) ;      vNewStr:= vNewStr + Copy(vStr, 3, 2) ;      vNewStr:= vNewStr + Copy(vStr, 1, 2) ;      vNewStr2:= '';      for   vInt:=1   to   (length(vNewStr)   div   2)   do        vNewStr2:=vNewStr2+char(strtoint('$'+copy(vNewStr,(vInt-1)*2+1,2)));      vFS.WriteBuffer(Pointer(vNewStr2)^, 4); //写入数据指定数字签名所在地      vFS.Position := vFile2SZQMDZ + $4;      vFS.WriteBuffer(vbuf2, SizeOf(vBuf2)); //写入数据指定数字签名大小      vFS.Position:= vFS.Size;      vFS.WriteBuffer(vBufAttr, vBufSize);    finally      vFS.Free;    end;    ShowMessBox('消息','添加数字签名成功');  except    ShowMessBox('坏消息','添加数字签名出错');  end;end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin  Action:= caFree;end; end.  
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部