WPE|52wpe|我爱WPE

 找回密码
 注册会员
搜索
  • 3130查看
  • 1回复

主题

好友

1172

积分

禁止发言

发表于 2009-8-18 17:52:36 |显示全部楼层
因为有些人说要源码,所以发出来了,都没什么技术含量的
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;

主题

好友

12

积分

新手上路

发表于 2009-9-6 01:24:21 |显示全部楼层
回复

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册会员

手机版|Archiver|WPE|52wpe|我爱WPE ( 闽ICP备15009081号 )

GMT+8, 2024-5-6 14:32 , Processed in 0.053496 second(s), 17 queries .

返回顶部