129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
1 | |
Запуск программы с системным именем28.12.2015, 18:02. Показов 1904. Ответов 21
Метки нет (Все метки)
Всем привет.
Наткнулся на одну программу.. Интересует реализация некой функции, которую она использует. А именно: при запуске самой программы exe, она запускает сама себя, но уже неизвестно где! То есть тот exe уже полностью свободен и изменяем (программа иногда загружает обновления на место старого exeшника). А в процессах он висит как системный. Тоесть считывает файлы в C\Windows\System32 и ставит себя вместо системных файлов, но не заменяет! Только в процессах висит как файл из системы, но если открыть расположение файла, это будет действительно системный файл, а не тот exe. Лично для меня это очень интересная фишка и хорошая защита от дебага, реверсинга. Как-то смотрел к чему обращается программа и наблюдал переполнение буфера в реестре. Где именно не помню. Файл прикрепляю. (прога упакована vmprotect'ом)
0
|
28.12.2015, 18:02 | |
Ответы с готовыми решениями:
21
Запуск скрипта под системным пользователем на всех компьютерах домена Запуск программы без создания окна. Запуск фоновой программы Пример программы для работы с системным реестром (установить в автозагрузку) Запуск студией и запуск самой виндой. Разница работы программы |
Ушел с форума
|
|
28.12.2015, 18:23 | 2 |
"Неизвестно где" - так не бывает. Exe-файл откуда-то да запущен.
Узнать можно через GetModuleFileNameEx (программно) или через "открыть расположение файла" (диспетчер задач). Регистрируем службу, запускаем ее и передаем ей параметры для работы. PsExec так делает, к примеру. Ничего не понятно. Ставит себя вместо системных файлов, но не заменяет - это как? Это будет действительно системный файл, а не тот exe - это как? Никак это ни от дебага, ни от реверсинга не защищает. Максимум может вызвать легкое недоумение.
3
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
29.12.2015, 06:59 [ТС] | 3 |
Неизвестно где - значит пользователь не знает где он запущен.
Он не запускается как системный, а вместо системного файла, не заменяя его. Почему это он не защищает от дебага? Как его вообще читать если он обходит тот же ollydbg, но открывается!?
0
|
управление сложностью
|
|
29.12.2015, 08:55 | 4 |
Но вы же должны разбираться в архитектуре ОС ? Как можно подменить адрес в памяти, тем более что это все происходит на нижнем уровне ? Вы либо не отдупляете что вам пишут, либо не совсем корректно выражаете свою мысль по этому поводу.
0
|
Ушел с форума
|
|
29.12.2015, 14:00 | 5 |
А, ну это известный хак. Можно в PEB поменять путь к процессу или вообще
понаписать туда неизвестно чего, тогда другие программы будут обламываться. Но у любого процесса все равно остается связанная с его exe объект-секция, вот ее уже никуда не спрячешь (хотя переименовать или переместить можно). Потому что на Olly свет клином не сошелся. Я могу запустить этот файл на виртуалке с подключенным отладчиком ядра и ковырять его так, как мне вздумается. А если у него будет защита и от этого, я сделаю дамп виртуалки и все равно смогу посмотреть внутренности запущенного файла, пусть и в статике. А если у него защита от запуска на виртуальных машинах, тогда я включу для VMware твик monitor_control.restrict_backdoor и снова окажусь в дамках. И т.д. Потому что 100% скрыть то, что запускается локально на компьютере пользователя, невозможно в принципе.
3
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
29.12.2015, 14:55 [ТС] | 6 |
Про дебаг понял. Как реализовать данный хак? Или хотябы его название чтобы погуглить
0
|
Ушел с форума
|
|
29.12.2015, 15:02 | 7 |
Ищи инфу по структурам процессов и потоков - PEB, TEB, NT_TIB, PEB_LDR_DATA и т.д.
Вот здесь есть очень много полезного: NirSoft http://www.nirsoft.net/about_nirsoft_freeware.html Часть структур документирована в MSDN, но, как правило, не полностью. Я обычно вбиваю в гугл примерно так: "PEB nirsoft" или "PEB undocumented" и выхожу на нужную страницу NirSoft-а с описанием этой структуры. Почти все структуры можно раскопать через отладчик, при условии, что ты подключил PDB-символы Microsoft. Например, вот такая команда в WinDBG показывает структуру PEB: dt ntdll!_PEB (и далее адрес, если нужно) В PEB хранится три связных списка загруженных модулей, командная строка процесса, полный путь к его exe, еще номер версии Windows, причем не искаженный виртуализацией и compatibility shims, там же LoaderLock (критическая секция, которая захватывается при загрузке-выгрузке dll, а также при создании и уничтожении потоков), переменные окружения, и вообще еще куча всего интересного. Многие функции Windows берут данные именно из PEB, а не откуда-то еще.
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
29.12.2015, 15:09 [ТС] | 8 |
Небольшое просвещение...
0
|
Ушел с форума
|
|
29.12.2015, 15:12 | 9 |
Да.
Если ты делаешь это для своего процесса, WriteProcessMemory не нужен.
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
||||||
29.12.2015, 18:14 [ТС] | 10 | |||||
Вот нашел такой код.
Буду благодарен если поможете разобраться с вызовом NtQueryInformationProcess:
Добавлено через 3 минуты блин запутался. уже не могу понять та ли это команда
0
|
Ушел с форума
|
|
29.12.2015, 18:22 | 11 |
Для начала попробуй вытянуть нужные данные из PEB своего процесса.
Это проще и не требует лазить по чужому адресному пространству.
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
30.12.2015, 07:50 [ТС] | 12 |
Как это сделать? Никак не могу найти подобные исходники в нете. И если нахожу, они часто не по теме (по другой части PEB)
Добавлено через 2 минуты Так же чаще нахожу примеры для студии
0
|
Ушел с форума
|
|
30.12.2015, 15:23 | 13 |
1. Находишь PEB с помощью NtQueryInformationProcess. Или другим способом.
2. Читаешь из PEB интересующие тебя поля. Некоторые поля лежат по фиксированному смещению на всех версиях Windows, другие "плавают". Исходники Process Hacker могу порекомендовать, там много интересного есть.
2
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
31.12.2015, 07:41 [ТС] | 14 |
Добавлено через 16 часов 12 минут Нашел некий пример, который достает данные о процессе через NtQueryInformationProcess и ReadProcessMemory(). Я так понимаю мне нужно достать Path of Process Image File и перезаписать его?
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
13.05.2017, 07:42 [ТС] | 15 |
Небольшой вопрос.. адресное пространство PEB находится в адресном пространстве самого процесса?
0
|
Ушел с форума
|
|
13.05.2017, 08:11 | 16 |
PEB - это структура, которая расположена в адресном пространстве процесса.
Кстати, у 32-битного процесса на 64-битной Винде два PEB-а, один 32-битный, второй 64-битный...
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
||||||
19.05.2017, 18:35 [ТС] | 17 | |||||
Все, дошел я до PEB. Но до ProcessParameters дойти не смог.
Пробовал через Cheat engine найти стоки в памяти "Имя файла.exe" чтобы понять, по какому адресу в памяти находится информация. Поменял все это, но в диспетчере как было старое имя, так и осталось. Также смотрел по структуре начиная с адреса 7EFDF000 (узнал его через тулзу ProcessPEBFinder) где посмотрел по каким смещениям что находится (здесь: https://www.aldeid.com/wiki/PE... ment-Block). И все же нужной информации там нет. Почитал ниже на этом сайте можно найти тот самый блок памяти через windbg командой dt ntdll!_PEB, но мой windbg такую команду не принял и сказал, что что-то не хватает. Через ollydbg не догадываюсь как искать. Параметры разрядности которые всегда выполняются: OS Windows x64, процесс x32. Далее здесь нашел информацию https://github.com/sochka/Proc... onitor.cpp как можно найти на c++, но там я начал догадываться, что смещение зависит от архитектуры процессора по этим строкам
Как наконец можно узнать адрес параметров процесса? Не важно, будет он меняться с каждым запуском или нет, т. к. найти указатель не составит труда
0
|
Ушел с форума
|
|
19.05.2017, 18:43 | 18 |
А диспетчер не обязан читать адресное пространство и/или PEB процесса для получения его имени.
Он может, например, запросить название процесса через системные функции NtQueryXxx. А они вообще дергают ядро... Она есть. Как минимум, в двух местах - в списке модулей и в RTL_USER_PROCESS_PARAMETERS. Возможно, не хватает отладочных символов. Они точно настроены? Кстати, еще проще так: Код
!peb Каких параметров? Командную строку? Так она тоже хранится в RTL_USER_PROCESS_PARAMETERS.
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
19.05.2017, 21:27 [ТС] | 19 |
Так, вроде бы понял.
У меня есть адрес PEB(7EFDF000). Залез через windbg и увидел: +0x020 ProcessParameters : Ptr64 _RTL_USER_PROCESS_PARAMETERS Это значит, что то что мне нужно, находится здесь? 7EFDF020 Далее через cheat engine можно посмотреть, что идет переадресация. Если превратить данные из 7EFDF020 в текст, можно получить "p4" (ранее было p20 и т д, только что это..) Если перейти на указатель, то 4 байта памяти выдает число 5154 (это точно не pid). Текст выдает бессмыслицу. Вот только если это те данные, то где проверять, работает это или нет? Через PidByName пробовать искать (не работает)? Добавлено через 1 час 31 минуту И еще, та программа меняла свое расположение, что было видно именно в диспетчере задач. И когда я нажимал открыть дирректорию файла, он именно открывал фейковую, а не свою
0
|
Ушел с форума
|
|
19.05.2017, 21:47 | 20 |
Не надо это делать "вслепую". Структуры PEB, RTL_USER_PROCESS_PARAMS и др.
частично документированы: struct PEB https://www.nirsoft.net/kernel... a/PEB.html struct RTL_USER_PROCESS_PARAMETERS https://www.nirsoft.net/kernel... ETERS.html В PEB хранится указатель на RTL_USER_PROCESS_PARAMETERS. В RTL_USER_PROCESS_PARAMETERS есть поля ImagePathName и CommandLine, там UNICODE_STRING (может, кстати, не завершаться нулем). И, кстати, какова конечная цель всех этих манипуляций? Допустим, нашли PEB, вытащили командную строку и т.д., а что дальше?
0
|
19.05.2017, 21:47 | |
19.05.2017, 21:47 | |
Помогаю со студенческими работами здесь
20
Поиск и запуск файлов с определённым именем Авто запуск макроса из личной книги при открытии файла с определенным именем Запуск из программы с админскими привилегиями внешней программы без прав админа Как удалить ссылку на запуск программы при удалении программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |