Welcome to the CYBSECGROUP Forum
You have the opportunity to get acquainted with interesting projects in an interesting environment
Registration

ვწერთ საკუთარ ჯოინერს delphi ში

SIMBIOS

R00T 😈
დრუიდი
Jun 24, 2018
56
107
#1
images.jpg
პირველ რიგში გავერკვიოთ რას უნდ ა აკეთებდეს ჩვენი ჯოინერი:
1) ამოაარქივოს ტემპში საჭირო ფაილები
2) გაუშვას საჭირო ფაილები ტემპიდან

ასეთი რაღაცის გაკეთება შესაძლებელია სხვადასხვანაირად მაგარმა მე ვაკეთებ მასე

ისევე როგორც კრიპტერებს ჩვენი პროგრამაც შედგება 2 პროგრამისგან :
1)პირველი პროგრამა არის კონსტრუქტორი გრაფიკული ინტერფეისით რომელიც განკუთვნილია ბილდის შესაქმნელად

2) მეორე პროგრამა - Stub ეს არის ცენტრაულური პროგრამ რომელიც პასუხისმგებელია ჯოინერიდან ამოიღოს ფაილები გაშვებისას და ასევე გაუშვას ის ტემპ კატალოგიდან

სტაბის დაწერა ჯობს ასემბლერზე რადგან პატარა მოცულობის იქნება და არ გაჭედავს

კონსტრუქტორის დაეწერა შესაძლებელაი delpgi, c# და ა.შ

ამ სტატიაში ორივეს დავწერთ დელფიში


დავიწყოთ

1) ვწერთ კონსტრუქტორს

ვქმნით დელფიში სტანდარტულ პროექტს

შექმნის შემდეგ რას უნდა აკეთებდეს ჩვენი კონსტურქტორი :

1) სტაბის ბოლოში წერდეს ინფორმაციას, ესენია : ფაილის ზომა, ფაილსი სახელი რომელიც უნდა ჩაიწეროს, საერთო ფიალების ოდენობა და საერთო ფაილების ის ოდენობა რომნელიც უნდა გეშვას.

ვქმნით სტრუქტურას

Code:
Type
FileInfRecord = record //ეს ჩვენი  სტრუქტურაა სადაც მოხდება მისი წაკითვა სტაბიდან
_filesize: array [0..1000] of cardinal; // ფაილის ზომა
_filename: array [0..1000] of string[100]; //ფაილის სახელი
_filenameStart: array [0..1000] of string[100]; /ფაილის სახელი რომელიც უნდა გაეშვას
_fileCount: cardinal; //ფაილების ოდენობა (საერთო)
_fileCountStart: cardinal; //ფაილების ოდენობა რომელბიც უნ აგეშვას
End;
შემდგომ მასთანნ მუშაობისთვის ვანახლებთ ცვლადს : _FileHeader: FileInfRecord;
მთელი კოდის ახსნას აქ ვერ დავიწყებ ვისაც დაინტერესებს სოურსში ნახავთ

დასაწყისისთვის შევასვსოთ სტრუქტურა საჭირო მონაცემებით: ფაილის ზომა, ფაილსი სახელი რომელიც უნდა ჩაიწეროს, საერთო ფიალების ოდენობა და საერთო ფაილების ის ოდენობა რომნელიც უნდა გეშვას

ამისთვის გამოვიყენოთ ვონდოუსის API

ვავსებთ სტრუქტურას მონაცემებით რომელიც შეიყვანა GUI ინტერფეისი მომხმარებელმა

Code:
or i:=0 to ListView1.Items.Count-1 do  //ვავსებთ სტრუქტურას ანუ (დასახელება მოცულობა და ა.შ ციკლში)

  begin

    _fileHeader._filename[i]:=ListView1.Items.Item[i].Caption;      //ფაილის სახელი

    _fileHeader._filesize[i]:=GetFileSized(ListView1.Items.Item[I].SubItems.Strings[0]+ ListView1.Items.Item[I].Caption);      //ხომა

  end;

for i:=0 to memo1.lines.count-1 do _FileHeader._filenameStart[i]:=Memo1.Lines[i]; //Сაქ შეგვყავს ფაილის სახელი ორმელიც უნდა გაეშვას

  _fileHeader._fileCount:=ListView1.Items.Count;  //ფაილების რაოდენობას
შემდგომ ვაკომპელირებთ ჩვენ სტაბს და შეგვაქვს ინფორმაცია და ფაილები რომლებიც უნდა მივაკრათ


Code:
CopyFile(pchar(extractFilePath(application.ExeName)+ 'stub.exe'), pchar(SaveDialog1.FileName), false);    //ვაკომპირებთ სტაბს მომხმარებლის მიერ მითითებულ ადგილას        
  Sleep(100);    //ველოდებით 100 მილწამს რომ ფაილმა მოასწროს კომპელაცია
შემდგომ როდესაც სტრუქტურა შეივსო საწირო მონაცემბით უნდა ჩავწეროთ სტაბში ამისთვის:

1) ვხსნით ჩვენ დაკოპირებულ სტაბს

2) გადავდივართ ფაილის ბოლოში

3) ვწერთ ჩვენ სტურქტურას

4) შემდეგ ციკლში ვწერთ ფილას რომელიც უნდა მივაკროთ


Code:
_distFile:=CreateFile(pchar(SaveDialog1.FileName), GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); //ვხსნით ჩვენ დაკოპირებულ სტაბს

SetFilePointer(_distFile, 0, nil, FILE_END); //გადავდივართ ფაილის ბოლოში

  WriteFile(_distFile, _fileHeader, sizeOf(_fileHeader), _temp, nil);  //ვწერთ ჩვენ სტურქტურას სტაბში

  for i:=0 to ListView1.Items.Count-1 do  //შემდეგ ციკლში ვწერთ ფილას რომელიც უნდა მივაკროთ

  begin

    _fromFile:=CreateFile(pchar(ListView1.Items.Item[i].SubItems.Strings[0]+              ListView1.Items.Item[i].Caption), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);    //ვხსნით  ფილას რომელიც უნდა მივაკროთ

repeat
ReadFile(_fromFile, _buff, sizeOf(_buff), _temp, nil); //ვკითხულობთ  ფილას რომელიც უნდა მივაკროთ

WriteFile(_distFile, _buff, _temp, _temp2, nil);//ვწერთ ყველაფერს სტაბში

ZeroMemory(@_buff, sizeOf(_buff));//ვწმენდავთ ბუფერს

until _temp<>1025;

    CloseHandle(_fromFile);

  end;

  CloseHandle(_distFile);

  ShowMessage('მიკრობა წარმატებით დასრულდა!');

2) კონსტუქტორი გვაქვს მაგრამ ჩამტვირთავი პროგრამის გარეშე ის უსარგებლოა ამიტომ უნდ აშევქმნა თ აალი პროექტი და დ ავწეროთ რამოდენიმნე კოდის ხაზი. ჩამტვირთავი პროგრამა უნდა იყოს მინიმალური მოცულობის რაც ნიშნავს რომ იუნდა მოვიცილოთ ზედმეტი ნაწილი. წავშალოთ Uses ყველა მოდული დავტოვოთ მხოლოდ Windows და ShellAPI. აღვწეროთ სტრუქტურა FileInfRecord. ის უნდა გამოიყურებოდეს როგორც ჩვენი კონსტრუქტორი .


ახალა გავარკვიოთ რას აკეთებს ჩვენი სტაბი:

1) გაშვებისას უშვებს თავსი თავს

2) კითხულობს ჩვენს სტრუქტურას

3) სტუქტურაშიი დაფუძნებულ მიონაცემებზე იღებს ფაილებს ტემპ კატალოგიდან და უშვებს

Code:
  type
FileInfRecord = record // ეს სტრუქტურა რომელიც წაიკითხავს მთელი ინფორმაციას სტაბიდან
_filesize: array [0..1000] of cardinal; // ფაილის ზომა
_filename: array [0..1000] of string[100]; //ფაილის სახელი
_filenameStart: array [0..1000] of string[100];
_fileCount: cardinal; //ფაილების ოდენობა (საერთო)
_fileCountStart: cardinal; //ფაილების ოდენობა (რომლებიც უნდ ჩავწეროთ)

შემდეგ ვქნით ცვლადს სტრუქტურასთან მიუშაობისთვის: _fileHeader:FileInfRecord;

fileSource:=Createfile(pchar(ParamStr(0)), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0); //უშვებს თავსი ტავას
SetFilePointer(_fileSource, mySize, nil, FILE_BEGIN); //გადადის სტაბის ბოლოში
ReadFile(_fileSource, _fileHeader, sizeOf(_fileHeader), _temp, nil); // კითხულობს სტრუქტურის სათაურს
Start:=_fileHeader._fileCountStart;//ამ ცვლადში შეგვაქვს ფაილები რომლებიც უნდა ჩაიწეროს


  if _fileHeader._fileCount=0  //თუ არ წაიკითხა
  then
  begin
  Exit; //გამოვდივართ
  end;
  GetTempPath(MAX_PATH, ShortPath); //ვპულობთ ტემპ ფაილს


for i:=0 to _fileHeader._FileCount-1 do
begin
//ვქმით ფაილს რომელიც მიაკრავს ერთმაეთს ფაილებს:
_fileDist:=CreateFile(pchar(string(ShortPath)+string(_fileHeader._filename[i])), GENERIC_WRITE, FILE_SHARE_WRITE,nil,CREATE_NEW, 0, 0);


for j:=1 to _fileHeader._filesize[i] do
begin
ReadFile(_fileSource, _buff, sizeOf(_buff), _temp, nil);// ვკითხულობთ მონაცემებს სტაბიდან
WriteFile(_fileDist, _buff, sizeOf(_buff), _temp, nil); // ვწერთ იმ მონაცემებს რომლებიც შევმქმენით
end;
  CloseHandle(_fileDist);
  Sleep(100);
end;
End;
ვქმნით კონსტანსტს სადაც შეინახება სტაბის მოცულობა ანუ ჩამტვირთავსი ზომა.

დასაწყისისთვის ჩვენ უნდა გავხსნათ ფაილის წაიკითხვა ჩამტვირთველი პროგრამისთვის. ამის შემდეგ ვასრულებთ გადანაცვლებას მისამართამდ, საიდანაც დაიწყება ინფორმაციული ბლოკი.
ვაკომმპელირებთ მადლობა ყურადღებისთვის
 

Attachments

Skiddie_From_Kernel

SuperUser 🐱‍💻
CSG Member
Alien 👽
Dec 1, 2018
23
10
#2
ეს ბინდერი არაა იგივე?? ესეთი მე სუ ზე მაქ დაწერილი მარა ამ დროს როცა ტემპში გადაგაქ და იქიდან უშვებ თასქ მენეჯერში გამოჩნდება ყველაფერი და არ ჯობია ტემპის მაგივრად პირდაპირ ოპერატიულში რო გაუშვა როგორც კრიპტერის დროს
ანუ თასქ მენეჯერში რო მხოლოდ ერთი პროცესი გამოჩნდეს და არა იმდენი რამდენსაც ჩააკერებ და მერე ტემპიდან გაუშვებ
 

SIMBIOS

R00T 😈
დრუიდი
Jun 24, 2018
56
107
#3
ჩემთვის დიდი მნიშვნელობა არა აქვს რამდენ პროცესად გაეშვება ეს პირადი მოხმარებისტთვის არის ვირუსი რომ იყოს ვაბშე პროცესს დავმალავდი ამ შემთხვევასი უბრალო ჯოინერია