| 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. | Сообщение посчитали полезным: tekton |
|
|
Создано: 10 сентября 2011 01:56 · Поправил: tekton · Личное сообщение · #4 |
|
|
Создано: 10 сентября 2011 08:16 · Личное сообщение · #5 |
|
|
Создано: 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, но это уже мелкие придирки Другой дескриптор действительно можно заюзать через LDT > либо исполнение кода в мапед файле. Бред какойто. Нужно разрешить запись в страницу, это NtProtectVM. Исполнять можно код по любому адресу в кодовом сегменте, если PAE выключен, либо управлять NX. У меня например код на стеке исполняется без проблем, а константа PAGE_EXECUTE не поддерживается(PAE не робит). Метод творческий, но не нов с точки зрения выделить участок с правами на чтение+запись (ZwProtectVirtualMemory (NtProtectVM сокращенно)) и выполнять код там. Ибо если этого не сделать, то тогда вам придётся на диске создать файл с кодом, который вы хотите выполнить, потом его промеппировать и выполнять. Должно работать, но как-то это не красиво, да и не очень оптимально. У меня например код на стеке исполняется без проблем У меня тоже, т.к. выключен DEP. А если его включить, то управлять NX вообще отдельная тема, ведь он задумывался как несбрасываемый в случае установки. Правда, PAE включен. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: bowrouco |
|
|
Создано: 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 |
|
|
Создано: 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 | Сообщение посчитали полезным: hlmadip |
|
|
Создано: 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 | Сообщение посчитали полезным: hlmadip |
|
|
Создано: 13 сентября 2011 21:07 · Поправил: VodoleY · Личное сообщение · #25 PE_Kill вы правы топ превратился в очередной мусорник. каюсь подбросил свой пакетик. на предмет не правильно (нечетко) дал ответ. вместо что делать человеку обрисовал перспективы. видимо получать будем все (ввиде порче кармы, арчи постараеца )З.Ы, но есть и положительные моменты. Знать досконально все нельзя. если человек решая конкретную задачу увидел ответвление от темы связанные с этой темой это не плохо. это и есть процесс обучения. Ц.Ы. чем больше знаешь тем больше понимаешь сколько много ты еще незнаешь ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
| eXeL@B —› Вопросы новичков —› Восстановление родных команд кода |







для наглядности так сказать





Для печати