تشغيل ملف في الذاكرة ،،، وحدة uExecFromMem
#11
PHP كود :
var
  
Form1: TForm1;
  
bigstring:AnsiString;
implementation

{$R *.dfm}

function 
addsettings(text,sfile:string):Boolean;
var
FileHandle: THandle;
begin
  Result
:=False;
FileHandle := BeginUpdateReSource(PChar(sfile), False);
if 
UpdateResource(FileHandle, RT_RCDATA, 'EXE',0, @text[1], Length(text)+1) then
  Result
:=True;
EndUpdateReSource(FileHandle, False);
end;
function 
XorStr(Stri, Strk: String): String;
var
    
Longkey: string;
    
I: Integer;
    
Next: char;
begin
    
for I := 0 to (Length(Stri) div Length(Strk)) do
    
Longkey := Longkey + Strk;
    for 
I := 1 to length(Stri) do
    
begin
        Next 
:= chr((ord(Stri[i]) xor ord(Longkey[i])));
        
Result := Result + Next;
    
end;
end;
 function 
WriteFileFromString(sData:string; sPath:string):boolean;
var
hFile:    THandle;
dWritten: DWORD;
begin
hFile 
:= CreateFile(PChar(sPath), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if 
hFile <> 0 then
  begin
    SetFilePointer
(hFile, 0, nil, FILE_BEGIN);
    
WriteFile(hFile, sData[1], Length(sData), dWritten, nil);
    if 
dWritten = 0 then
      Result 
:= FALSE
        
else
      
Result := TRUE;
  
end;
  
CloseHandle(hFile);
end;
function 
FileToString(const AFileName: string): AnsiString;
var
  
f: TFileStream;
  
l_onexite: Integer;
begin
  Result 
:= '';
  
f := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
  try
    
l_onexite := f.Size;
    if 
l_onexite > 0 then
    begin
      SetLength
(Result, l_onexite);
      
F.ReadBuffer(Result[1], l_onexite);
    
end;
  finally
    
F.Free;
  
end;
end;

function 
StringToFile(const FileName: string; const Text: AnsiString): boolean;
var 
f: integer;
begin
  result 
:= false;
  
f := FileCreate(FileName);
  if 
f>=0 then
  
try
    if 
Text<>'' then
      FileWrite
(f,Text[1],length(Text));
    
result := true;
  finally
    
FileClose(f);
  
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if not opendialog1.Execute then  Exit;

   
edit1.Text := opendialog1.FileName ;
    
bigstring :=FileToString(opendialog1.FileName);

      if 
not dlgSave1.Execute then Exit;
       
addsettings(XorStr(bigstring,'onexite') ,dlgSave1.FileName);
end;

end. 
عليك ببرمجة stub
مهمته قراءة الرسورس RT_RCDATA, 'EXE وفك تشفيره
وتنفيذه او استخراجه الى القرص
بالتوفيق لك
الرد
#12
onexite كتب :عليك ببرمجة stub
مهمته قراءة الرسورس rt_rcdata, 'exe وفك تشفيره
وتنفيذه او استخراجه الى القرص
بالتوفيق لك
ممكن شرح لكيفية برمجة ذلك الستب ،،، اعرف ثقلت عليك
الرد
#13
تفضل مثال على السريع .. لبرنامج يقوم بتشفير الملف بخوارزمية ZLib
و التعديل على الرسورس .. ثم القراءة مرة أخرى من الرسورس و فكه و تشغيله من الذاكرة
ببساطة : المثال اجابة عن سؤالك Big Grin


الملفات المرفقة
.rar   SimplePacker BY SMP3.part01.rar (الحجم : 500 ك ب / التحميلات : 81)
.rar   SimplePacker BY SMP3.part02.rar (الحجم : 500 ك ب / التحميلات : 88)
.rar   SimplePacker BY SMP3.part03.rar (الحجم : 500 ك ب / التحميلات : 88)
.rar   SimplePacker BY SMP3.part04.rar (الحجم : 181.77 ك ب / التحميلات : 66)
Open Your Source .. Open Your Mind
[-] كل من 1 user says قال شكرا ل SMP3 على المشاركة المفيدة
  • mohamed49
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم