📄 epesdk.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 + -