Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2014, 12:57   #1
Alexey_68
Пользователь
 
Регистрация: 01.03.2013
Сообщений: 39
По умолчанию Внедрение кода

Приветствую All!
Пытаюсь внедрить функцию в чужой процесс:
Код:
DWORD PIDByName(char * AProcessName)
{
  HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 ProcessEntry;
  DWORD pid;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(pHandle, &ProcessEntry);

  while (Loop)
    {
      if (strstr(ProcessEntry.szExeFile, AProcessName))
      {
          pid = ProcessEntry.th32ProcessID;
          CloseHandle(pHandle);
          return pid;
      }
      Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}
..
void EnableDebugPrivilege(bool fEnable)
{
    HANDLE hToken;

    if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
    {
        TOKEN_PRIVILEGES tp;
        tp.PrivilegeCount = 1;
        LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
        tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
        AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
        CloseHandle(hToken);
    }
}

int func()//Функция для внедрения
{
HANDLE han;
char path1[] = "c:\\1.exe";
han = GetModuleHandleA(NULL);
ShellExecute (han, NULL, path1, NULL, NULL, 0x09);
}

.....
int main()
{
HANDLE handle;
DWORD pid;
int i;


EnableDebugPrivilege(True);
pid = PIDByName("spider.exe");

handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

lpMemory = VirtualAllocEx(handle, NULL, как определить размер функции?, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(handle, (void*)lpMemory, ?, размер функции?, NULL);

system("pause");
}
Как осуществить запись моей функции в память процесса и выполнить её?
Интересует именно запись кода, а не dll.

Последний раз редактировалось Alexey_68; 19.04.2014 в 13:16.
Alexey_68 вне форума Ответить с цитированием
Старый 19.04.2014, 13:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как получить размер функции,
Да никак не получить. Функции не имеют размеров, не ну конечно может компиляторы и знают такую инфу, но она существует только на стадии кимпиляции.
Вроде бы если получить map файл можно получить размер функции вычислив разницу между началом и началом следующей за ней функции, но...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.04.2014, 13:17   #3
Alexey_68
Пользователь
 
Регистрация: 01.03.2013
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да никак не получить.
а что касается остального?
Alexey_68 вне форума Ответить с цитированием
Старый 19.04.2014, 14:00   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Про размер функции почитай вот это, например. TL;DR - надо открывать в дизассемблере и смотреть, чтобы точно убедиться.

Чтобы выполнить записанный код, в принципе, можно использовать CreateRemoteThread. Только там же не все так кристально просто: нужные места в адресном пространстве процесса могут быть уже заняты, нужные длл могут быть не загружены, etc etc.
Son Of Pain вне форума Ответить с цитированием
Старый 19.04.2014, 14:03   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А на счет остального я бы не парился. DLL целиком в чужой процесс - и пусть работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.04.2014, 16:09   #6
Alexey_68
Пользователь
 
Регистрация: 01.03.2013
Сообщений: 39
По умолчанию

to:Son Of Pain
>>в принципе, можно использовать CreateRemoteThread
это и планировалось.
to:Stilet
>>А на счет остального я бы не парился. DLL целиком в чужой процесс - и пусть работает.
реализовал бы из Рихтера, но dll с собой таскать не получится.
Alexey_68 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внедрение кода кнопки в открытый файл zaquson Microsoft Office Excel 7 26.03.2013 10:58
внедрение исполняемого кода в PE файл Dante13 Win Api 6 27.04.2011 11:27
Внедрение систем ИИ ai2010 Свободное общение 3 19.05.2010 19:27
внедрение кода(Visual Studio) koljsch Visual C++ 10 07.04.2010 13:55
Внедрение кода в EXE prizrak1390 Общие вопросы Delphi 16 07.05.2008 08:10