Прошлые домены не функционирует! Используйте адрес
ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
Надо на Windows 7 x64 скрыть процесс в диспетчере задач по имени. Вводишь в программе имя процесса, она убирает его из диспетчера задач, хотя процесс по-прежнему работает.
Прилагаю портянку кода: pastebin.com/CF8Kh2LG
Это работает, собирал кодблоксом 32бит, запускал на Windows 8.1 x64 и Windows 7 x64 - везде всё идет хорошо ровно до момента, пока не приходит пора получать адрес LoadLibrary, записывать её аргумент (адрес инжектируемой DLL) в виртуальное адресное пространство taskmgr.exe и вызывать её удаленным потоком, создавая последний. Там я сначала чуток запутался, а потом когда вникал в проблему, внезапно осознал, что я собираю всё под 32 бит, кодблокс в 64 бит не умеет, встроить 32бит DLL в 64бит taskmgr.exe невозможно (разве что как данные) и пора всё переписывать в Visual Studio, которая под 64бит нормально собирает.
Занимаюсь этим уже неделю, реально сдуру взялся, голова трещит просто. Вопросы таковы:
Как вы бы поступили, зная что LoadLibrary и прочие функции 100% будут работать с латиницей - приводили бы их аргументы к char или к wchar_t? Или как-то иначе? Какие тут подводные камни при использовании каждого из решений? И что поменялось при смене разрядности (когда я пересел с кодблокса на студию), если у меня теперь просто нихуя не работает, ссылаясь на неверные аргументы функций, работающих со строками и указателями на них (strcmp в строке 29 например)? По идее, должен был измениться sizeof(const char), и что мне теперь с ним делать, если WinAPI-функции были написаны для 32-битных систем? С каждым часом чтения манов понимаю всё меньше, прошу объяснить.
Второе - правильно ли я понимаю, что в общем случае в Windows такие библиотеки как kernel32, ntdll и им подобные загружаются единожды и где-то при старте системы, а не как другие библиотеки в момент загрузки их конкретным процессом? Но предположим, что библиотека загружена условно говоря в самые первые мегабайты физической памяти (0x00000000 - 0x000000FF к примеру), может ли быть такое, что виртуальное адресное пространство процесса начинается с 0x0000FFFF и как мне тогда ссылаться на функции из той же kernel32? В общем где-то на этом моменте я окончательно запутался в миллиарде аргументов VirtualAllocEx, CreateRemoteThread и LoadLibrary.