![]() |
eXeL@B —› Вопросы новичков —› Восстановление родных команд кода |
Посл.ответ | Сообщение |
|
Создано: 10 сентября 2011 00:15 · Личное сообщение · #1 Вставил несколько своих команд, путём иньекции. Теперь хочу восстановить родные команды, но не получается... Вот пример как я пытаюсь сделать: Code:
После последней команды меня кидает в системную библу, вместо того чтоб записать ноль по адресу. И после этого выскакивает ошибка ![]() Что я делаю не так ??? И если можно пример как записать ноль без ошибки ![]() |
|
Создано: 10 сентября 2011 00:30 · Личное сообщение · #2 |
|
Создано: 10 сентября 2011 01:14 · Личное сообщение · #3 tekton Кидает, видимо, на KiUserExceptionDispatcher. С него начинает разворачиваться обработка исключений в юзверьмоде. В примере, который вы привели, адреса вымышленные? Т.к. сообщение об ошибке говорит, что вы такое пытаетесь провернуть, когда EIP = 0x00401094, а пписать - по адресу 0x00401086. А так - либо в секциях править атрибуты доступа, либо VirtualProtect юзать. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 10 сентября 2011 01:56 · Поправил: tekton · Личное сообщение · #4 |
|
Создано: 10 сентября 2011 08:16 · Личное сообщение · #5 tekton ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 10 сентября 2011 08:19 · Личное сообщение · #6 |
|
Создано: 10 сентября 2011 11:49 · Поправил: tekton · Личное сообщение · #7 |
|
Создано: 10 сентября 2011 12:45 · Личное сообщение · #8 |
|
Создано: 10 сентября 2011 16:17 · Личное сообщение · #9 |
|
Создано: 10 сентября 2011 16:41 · Личное сообщение · #10 походу тема превратилась в очередную свалку. есть 3 способа под вин хп сделать метаполиморфный код =(самомодификацию . расшифровка по ходу выполнения и т.д) сегмент кода по дефолту ток для чтения поэтому 3 варинта. либо выболнять код в стэке(вроде как закрыто начиная с висты) либо переназначения прав сегменту памяти на предмет разрешения записи в него, либо исполнение кода в мапед файле. Резуме. Если вы хотите исполнить код, думайте чЁ делаете. ![]() ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 10 сентября 2011 17:05 · Поправил: bowrouco · Личное сообщение · #11 VodoleY > сегмент кода по дефолту ток для чтения Он для чтения и исполнения. Доступ к странице определяется не только дескриптором сегмента, он описан также в PTE. Посему если страница ридонли, то попытка записи через Ds(R/W) приведёт к фолту. > переназначения прав сегменту памяти Нельзя изменять дескрипторы в GDT. Если нужен другой дескриптор, то придётся LDT юзать, но зачем ? Вероятно вы путаете регион памяти с сегментом(сегмент описывается дескриптором сегмента). > либо исполнение кода в мапед файле. Бред какойто. Нужно разрешить запись в страницу, это NtProtectVM. Исполнять можно код по любому адресу в кодовом сегменте, если PAE выключен, либо управлять NX. У меня например код на стеке исполняется без проблем, а константа PAGE_EXECUTE не поддерживается(PAE не робит). ![]() |
|
Создано: 10 сентября 2011 18:10 · Личное сообщение · #12 Спасибо всем за наставление на путь истинный ![]() Нашёл буду пробовать через него справиться с задачей. ![]() |
|
Создано: 11 сентября 2011 00:18 · Личное сообщение · #13 |
|
Создано: 11 сентября 2011 01:08 · Личное сообщение · #14 bowrouco Да тут уже, в общем-то, всё сказано. Если вас интересует, что я думаю по поводу вашего комментирования утверждений VodoleY, то давайте по-порядку: > сегмент кода по дефолту ток для чтения Он для чтения и исполнения. Доступ к странице определяется не только дескриптором сегмента, он описан также в PTE. Посему если страница ридонли, то попытка записи через Ds(R/W) приведёт к фолту. Хоглунд и Батлер в своей книге "Руткиты. Внедрение в ядро Windows" начиная со с.62 в разделе Детали проверки доступа к памяти подверждают мнение bowrouco. ![]() В любом случае, это нетрудно проверить, проведя аналогичный опыт. > переназначения прав сегменту памяти Нельзя изменять дескрипторы в GDT. Если нужен другой дескриптор, то придётся LDT юзать, но зачем ? Вероятно вы путаете регион памяти с сегментом(сегмент описывается дескриптором сегмента). Вероятно, имеется в виду, что нельзя менять из ринг 3, но это уже мелкие придирки ![]() > либо исполнение кода в мапед файле. Бред какойто. Нужно разрешить запись в страницу, это NtProtectVM. Исполнять можно код по любому адресу в кодовом сегменте, если PAE выключен, либо управлять NX. У меня например код на стеке исполняется без проблем, а константа PAGE_EXECUTE не поддерживается(PAE не робит). Метод творческий, но не нов с точки зрения выделить участок с правами на чтение+запись (ZwProtectVirtualMemory (NtProtectVM сокращенно)) и выполнять код там. Ибо если этого не сделать, то тогда вам придётся на диске создать файл с кодом, который вы хотите выполнить, потом его промеппировать и выполнять. Должно работать, но как-то это не красиво, да и не очень оптимально. У меня например код на стеке исполняется без проблем У меня тоже, т.к. выключен DEP. А если его включить, то управлять NX вообще отдельная тема, ведь он задумывался как несбрасываемый в случае установки. Правда, PAE включен. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 11 сентября 2011 10:46 · Поправил: bowrouco · Личное сообщение · #15 ARCHANGEL > придётся на диске создать файл с кодом, который вы хотите выполнить, потом его промеппировать и выполнять. Можно выделить память под это дело(NtAlloc* или NtMap*, секция не обязательно должна быть файловой). > Proof Code:
![]() |
|
Создано: 11 сентября 2011 11:26 · Личное сообщение · #16 bowrouco bowrouco пишет: > либо исполнение кода в мапед файле.Бред какойто. вы бы уважаемый перечитали свой да и мой пост еще раз. Я описал ВСЕ возможные честные способы модификации кода. 1. сегмент стека имеет права риад врайт поэтому можно туда код засунуть 2.VirtualProtect ктом поменять в сегменте режим доступа к нему 3. а мапед файл это как вариант. никто не заставляет блокнот мапировать ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 11 сентября 2011 11:35 · Поправил: bowrouco · Личное сообщение · #17 VodoleY 1. Регион памяти занятый стеком имеет тип доступа R/W. Поэтому можно туда писать и читать. Сегмент тут совершенно не причём. Например Ss:[0] не выделена, туда нельзя выполнять доступ, хотя сегмент весь до конца юзерспейса R/W(для дескриптора, селектор которого в Ss). Это плоская модель памяти уважаемый. 2. Изменяются атрибуты страниц, например взводятся биты в PTE. Сегмент описан в дескрипторе, он не изменяется. 3. В кодосекции проекции нельзя писать. А при включенном NX(DEP) в секциях данных нельзя код исполнять. Так что не понятно причём тут проекции. Маппинг это один из способов аллокации памяти. Нашёл интересны пруфкод: Code:
![]() |
|
Создано: 11 сентября 2011 12:02 · Личное сообщение · #18 VodoleY Вы путаете термин сегмент и страница. ![]() Изменяются атрибуты страниц, например взводятся биты в PTE. Сегмент описан в дескрипторе, он не изменяется. ИстЕна! ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 11 сентября 2011 12:24 · Личное сообщение · #19 ого, сколько ужаса можно услышать о том, что вроде все знать должны. и даже не похоже, чтобы этот бред был написано просто назло клерку. чтобы пост не был оффтопом: tekton пишет: ARCHANGEL пишет:А так - либо в секциях править атрибуты доступа Можно это програмно сделать? в любом PE-редакторе: Sections -> в поле Characteristics секции кода ставишь галку "Writable" ![]() |
|
Создано: 12 сентября 2011 06:36 · Личное сообщение · #20 Что то простой вопрос новичка а-ля Как написать Hello world! превратился в помойку и снова уходит в ядро но теперь уже не только благодаря клерку, но и архангелу. Вам делать нефиг что ли? ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 13 сентября 2011 00:23 · Поправил: bowrouco · Личное сообщение · #21 PE_Kill Одного не пойму. Что обсуждение свелось к нэйтивным вопросам(системным, хардварным, серьёзным.. понимайте со своей точки зрения) это разве плохо ? Или вы сторонник скрипта и подобных идей, типо межплатформенной переносимости, где кроме прототипов апи ничего знать не нужно ? Такие взгляды не годные. ![]() |
|
Создано: 13 сентября 2011 08:43 · Поправил: PE_Kill · Личное сообщение · #22 Если человек в "Вопросы новичков" спрашивает почему ключ на 10 не накидывается на гайку диаметром 14, то я не думаю, что ему будет интересно узнать, что любую гайку можно сорвать ядерным взрывом малой мощности и получить схему устройства и сборки такой бомбы. Есть же оффтоп, там можно обсуждать всё. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 13 сентября 2011 18:48 · Личное сообщение · #23 |
|
Создано: 13 сентября 2011 20:59 · Поправил: PE_Kill · Личное сообщение · #24 Я не знаю ядро и не хочу знать. Но при этом писал упаковщик исполняемых файлов, который работал и вин 98 и в вин 7. Мне повезло? ЗЫ. Кстати кроме смеха. Откручивать и закручивать гайки меня научили еще в 7 лет, но что такое резьба и как она работает я узнал несколько позже. Так что логика прослеживается. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 13 сентября 2011 21:07 · Поправил: VodoleY · Личное сообщение · #25 PE_Kill вы правы топ превратился в очередной мусорник. каюсь подбросил свой пакетик. на предмет не правильно (нечетко) дал ответ. вместо что делать человеку обрисовал перспективы. видимо получать будем все (ввиде порче кармы, арчи постараеца ![]() З.Ы, но есть и положительные моменты. Знать досконально все нельзя. если человек решая конкретную задачу увидел ответвление от темы связанные с этой темой это не плохо. это и есть процесс обучения. Ц.Ы. чем больше знаешь тем больше понимаешь сколько много ты еще незнаешь ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Восстановление родных команд кода |