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

📄 epesdk.pas

📁 传世源码可编译的,功能齐全.是学习的好模版,会DELPHI的朋友们也可以自己修改,弄个自己的引擎.
💻 PAS
字号:
unit EPESDK;

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


procedure CopyCodeToFile(StartPoint:PChar);
procedure CopyCodeToFileX( StartPoint:PChar);
function Codesize( StartPoint:PChar):integer;
function CodesizeCheck10nop( StartPoint:PChar):integer;

procedure CalCCodeLength ;
procedure loadCodefromFile(StartPoint:PChar);
function loadCodefromEPE(StartPoint:PChar;LENTH:INTEGER):boolean;
procedure INIepe();
procedure CallFunction(Addres:integer);

var Codelength:integer = 3896;
    EPEpassword,EPEint:integer;
    sEPEpassword8:string;
    hadwareIdpos:Integer;
    tReslt:Integer;
    RegSn2:string;
    RandomSId:Integer;
    HardwareID2:string;
    EncodeHardwareID:string;
    VArKeyString:string;
    g_keyz:boolean;
implementation
 uses   ShareUnit;

function  FileSize (const FName: string): Longint;
var
  SearchRec: TSearchRec;
begin
  if FindFirst(ExpandFileName(FName), faAnyFile, SearchRec) = 0 then
    Result := SearchRec.Size
  else Result := -1;
end;

procedure CalCCodeLength ;
var i:integer;
begin
    for I:=8 downto 2 do begin
    {$I  EPESDK.inc}
     if not (i in [4,3]) then
     Codelength:= EPECaclResult(Codelength,i,i+1);
     {$I  EPESDK.inc}
   end;
     Codelength:= EPECaclResult(Codelength,10,3);
     {$I  EPESDK.inc}
     Codelength:= EPECaclResult(Codelength,1,1);

end;
procedure CallFunction(Addres:integer);
var
  x1,x2,p:integer;
  t:string;
begin
    {$I  EPESDK.inc}
   GetRegisterInfo;
   {$I  EPESDK.inc}
   if (RegisterStrings<>nil) and (RegisterStrings.Count>14 ) then begin
   x1:=strtoint(RegisterStrings[13]) ;
   EPEint:=x1;
   {$I  EPESDK.inc}
   t:= copy(RegisterStrings[14],1,8) ;
   x2:=StrtoInt('$' + t);
   EPEpassword:=x2 ;
   {$I  EPESDK.inc}
   p:=Addres;//integer(@TFrmMain.MENU_CONTROL_CLEARLOGMSGClick);
   p:=p xor x1 xor x2;
   {$I  EPESDK.inc}
   RunFunction(p);
  end;
end;

procedure CopyCodeToFile( StartPoint:PChar);
var

  nCodeSize:Integer;
  FileHandle:Integer;
  sFileName:String;
begin
 // StartPoint:=@TForm1.addline;
    GetRegisterInfo;
  if RegisterStrings<>nil then exit; //如果是已经加壳了不导出代码
  nCodeSize:=0;
  while (nCodeSize < 1000) do begin
    if StartPoint[nCodeSize] = Char($C3) then begin    //  $90
      Inc(nCodeSize);
      break;
    end;
    Inc(nCodeSize);
  end;
   sFileName:='Error.dat';

  if FileExists(sFileName) then begin
    FileHandle:= FileOpen(sFileName, fmOpenWrite or fmShareDenyNone);
  end else begin
    FileHandle:=FileCreate(sFileName);
  end;
  if FileHandle > 0 then begin
    FileWrite(FileHandle,StartPoint^,nCodeSize);
  end;
  FileClose(FileHandle);

end;

procedure CopyCodeToFileX( StartPoint:PChar);
var

  nCodeSize:Integer;
  FileHandle:Integer;
  sFileName:String;
begin
 // StartPoint:=@TForm1.addline;
  {$I  EPESDK.inc}
  nCodeSize:=0;
  {$I  EPESDK.inc}
  while (nCodeSize < 1000) do begin
    if StartPoint[nCodeSize] = Char($C3) then begin    //  $90
      Inc(nCodeSize);
      {$I  EPESDK.inc}
      break;
    end;
    Inc(nCodeSize);
  end;
 {$I  EPESDK.inc}
end;
function check10nop(StartPoint:PChar):boolean;
var I:Integer;
begin
    result:=true;
    for I:=1 to 10 do begin
      if StartPoint[-i]<> Char($90) then begin
       result:=false;
       break;
      end;
    end;
end;

function CodesizeCheck10nop( StartPoint:PChar):integer;
var
  nCodeSize:Integer;
begin

  {$I  EPESDK.inc}
  nCodeSize:=0;
  {$I  EPESDK.inc}
  while (nCodeSize < 10000) do begin
  //  if StartPoint[nCodeSize] = Char($C3) then begin    //  $90
      if  (nCodeSize>1)
       and (StartPoint[nCodeSize-1]=Char($90))
       and (StartPoint[nCodeSize-2]=Char($90))
       and (StartPoint[nCodeSize-3]=Char($90))
       and (StartPoint[nCodeSize-4]=Char($90))
       and (StartPoint[nCodeSize-5]=Char($90))
       and (StartPoint[nCodeSize-6]=Char($90))
       and (StartPoint[nCodeSize-7]=Char($90))
       and (StartPoint[nCodeSize-8]=Char($90))
       and (StartPoint[nCodeSize-9]=Char($90))
       and (StartPoint[nCodeSize-10]=Char($90))       then begin



      //  Inc(nCodeSize);
       {$I  EPESDK.inc}
        break;
      end;
 //   end;
    Inc(nCodeSize);
  end;    //while
  result:= nCodeSize;
 {$I  EPESDK.inc}
end;


function Codesize( StartPoint:PChar):integer;
var
  nCodeSize:Integer;
begin

  {$I  EPESDK.inc}
  nCodeSize:=0;
  {$I  EPESDK.inc}
  while (nCodeSize < 100000) do begin
    if StartPoint[nCodeSize] = Char($C3) then begin    //  $90
    //  Inc(nCodeSize);
      {$I  EPESDK.inc}
      break;
    end;
    Inc(nCodeSize);
  end;
  result:= nCodeSize;
 {$I  EPESDK.inc}
end;

procedure loadCodefromFile(StartPoint:PChar);
var

  ProcBlock:PChar;
  nCodeSize:Integer;
  FileHandle:Integer;
  sFileName:String;
  Re:Dword;
   oldprotect:dword;
begin
 //  StartPoint:=@TForm1.addlinea;
   sFileName:='Code.bin';

  if FileExists(sFileName) then begin
    nCodeSize:= filesize(sFileName) ;
    FileHandle:= FileOpen(sFileName, fmOpenRead or fmShareDenyNone);
  end else begin
    FileHandle:=FileCreate(sFileName);
  end;
  if FileHandle > 0 then begin

     GetMem(ProcBlock,nCodeSize);
    Fileread(FileHandle,ProcBlock^,nCodeSize);
  end;
  FileClose(FileHandle);

  VirtualProtect(StartPoint,nCodeSize,PAGE_EXECUTE_READWRITE,@oldprotect);
  Move(ProcBlock^,StartPoint^,nCodeSize);
  VirtualProtect(StartPoint,nCodeSize,oldprotect,@oldprotect);


  FreeMem(ProcBlock)
end;
procedure INIepe();
begin
   GetRegisterHandle;
{   Codelength:=1000;
   Codelength:= EPECaclResult(Codelength,2,3);   //1000 div 2
   Codelength:= EPECaclResult(Codelength,3,4); //500 mod 3    =2
   Codelength:= EPECaclResult(Codelength,4,5); //  2 and 4   =8
 }
end;

function loadCodefromEPE(StartPoint:PChar;LENTH:INTEGER):boolean;
var
   
  ProcBlock:PChar;
  nCodeSize:Integer;
  FileHandle:Integer;
  sFileName:String;
  Re:Dword;
  oldprotect:dword;
  pdate : Pointer ;
begin
  result:=false;

  nCodeSize:=Codelength;//LENTH;

  if nCodeSize=3896 then exit;
//   GetMem(ProcBlock,nCodeSize);
  if  (nCodeSize>87) or (nCodeSize<=0)   then  nCodeSize:=87;    //代码的长度,
//  nCodesize:=111;
  pdate:= GetSavedData(1, nCodeSize);    //从壳中获取数据。
  if pdate<> nil then  begin

  VirtualProtect(StartPoint,nCodeSize,PAGE_EXECUTE_READWRITE,@oldprotect);

  Move(pdate^,StartPoint^,nCodeSize);
 
  VirtualProtect(StartPoint,nCodeSize,oldprotect,@oldprotect);
  result:=true;
  end;

 // FreeMem(ProcBlock)
end;


end.

⌨️ 快捷键说明

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