Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Восстановление родных команд кода
Посл.ответ Сообщение

Ранг: 10.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2011 00:15
· Личное сообщение · #1

Вставил несколько своих команд, путём иньекции.
Теперь хочу восстановить родные команды, но не получается...
Вот пример как я пытаюсь сделать:
Code:
  1. 00401000    JMP 00401003
  2. 00401001    90
  3. 00401002    90
  4. 00401003    MOV DWORD PTR SS:[00401000],0

После последней команды меня кидает в системную библу, вместо того чтоб записать ноль по адресу.
И после этого выскакивает ошибка


Что я делаю не так ???
И если можно пример как записать ноль без ошибки




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 10 сентября 2011 00:30
· Личное сообщение · #2

00401000 - это у вас секция кода походу. По-умолчанию, она не имеет прав на запись.

-----
the Power of Reversing team





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2011 01:56 · Поправил: tekton
· Личное сообщение · #4

ARCHANGEL пишет:
В примере, который вы привели, адреса вымышленные?

Ну да для наглядности так сказать
ARCHANGEL пишет:
А так - либо в секциях править атрибуты доступа

Можно это програмно сделать?
ARCHANGEL пишет:
либо VirtualProtect юзать.

Можно подробнее ?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 10 сентября 2011 08:16
· Личное сообщение · #5

tekton --> VirtualProtect <--

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: tekton

Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 10 сентября 2011 08:19
· Личное сообщение · #6

ARCHANGEL
> Кидает, видимо, на KiUserExceptionDispatcher
Оно есчо кудато может кидать ?

> либо VirtualProtect юзать.
> Можно подробнее ?
Мб попробовать гугл ?



Ранг: 10.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2011 11:49 · Поправил: tekton
· Личное сообщение · #7

ARCHANGEL & PE_Kill Спасибо
Буду разбираться




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 сентября 2011 12:45
· Личное сообщение · #8

bowrouco
О, вам ли не знать, что кидать может куда угодно, достаточно только адрес этого CALLBACK'а в ядре исправить

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 10 сентября 2011 16:17
· Личное сообщение · #9

ARCHANGEL
Мы рады что вам известно как называется этот колбек



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 10 сентября 2011 16:41
· Личное сообщение · #10

походу тема превратилась в очередную свалку.
есть 3 способа под вин хп сделать метаполиморфный код =(самомодификацию . расшифровка по ходу выполнения и т.д) сегмент кода по дефолту ток для чтения поэтому 3 варинта. либо выболнять код в стэке(вроде как закрыто начиная с висты) либо переназначения прав сегменту памяти на предмет разрешения записи в него, либо исполнение кода в мапед файле. Резуме. Если вы хотите исполнить код, думайте чЁ делаете.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 10 сентября 2011 17:05 · Поправил: bowrouco
· Личное сообщение · #11

VodoleY
> сегмент кода по дефолту ток для чтения
Он для чтения и исполнения. Доступ к странице определяется не только дескриптором сегмента, он описан также в PTE. Посему если страница ридонли, то попытка записи через Ds(R/W) приведёт к фолту.

> переназначения прав сегменту памяти
Нельзя изменять дескрипторы в GDT. Если нужен другой дескриптор, то придётся LDT юзать, но зачем ?
Вероятно вы путаете регион памяти с сегментом(сегмент описывается дескриптором сегмента).

> либо исполнение кода в мапед файле.
Бред какойто. Нужно разрешить запись в страницу, это NtProtectVM. Исполнять можно код по любому адресу в кодовом сегменте, если PAE выключен, либо управлять NX. У меня например код на стеке исполняется без проблем, а константа PAGE_EXECUTE не поддерживается(PAE не робит).



Ранг: 10.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2011 18:10
· Личное сообщение · #12

Спасибо всем за наставление на путь истинный
Нашёл пример использования VirtualProtect
буду пробовать через него справиться с задачей.



Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 11 сентября 2011 00:18
· Личное сообщение · #13

tekton
Не благодарите, это одна из базовых апи для работы с памятью. Инде хочет слышать мнение ARCHANGEL'а.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 11 сентября 2011 01:08
· Личное сообщение · #14

bowrouco
Да тут уже, в общем-то, всё сказано. Если вас интересует, что я думаю по поводу вашего комментирования утверждений VodoleY, то давайте по-порядку:

> сегмент кода по дефолту ток для чтения
Он для чтения и исполнения. Доступ к странице определяется не только дескриптором сегмента, он описан также в PTE. Посему если страница ридонли, то попытка записи через Ds(R/W) приведёт к фолту.


Хоглунд и Батлер в своей книге "Руткиты. Внедрение в ядро Windows" начиная со с.62 в разделе Детали проверки доступа к памяти подверждают мнение bowrouco.



В любом случае, это нетрудно проверить, проведя аналогичный опыт.

> переназначения прав сегменту памяти
Нельзя изменять дескрипторы в GDT. Если нужен другой дескриптор, то придётся LDT юзать, но зачем ?
Вероятно вы путаете регион памяти с сегментом(сегмент описывается дескриптором сегмента).


Вероятно, имеется в виду, что нельзя менять из ринг 3, но это уже мелкие придирки Другой дескриптор действительно можно заюзать через LDT --> Proof <--

> либо исполнение кода в мапед файле.
Бред какойто. Нужно разрешить запись в страницу, это 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

Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 11 сентября 2011 10:46 · Поправил: bowrouco
· Личное сообщение · #15

ARCHANGEL
> придётся на диске создать файл с кодом, который вы хотите выполнить, потом его промеппировать и выполнять.

Можно выделить память под это дело(NtAlloc* или NtMap*, секция не обязательно должна быть файловой).

> Proof

Code:
  1. CreateDescriptor proc Base:PVOID, Limit:ULONG, Type:ULONG ; T3-1(0010B: R/W-A etc).
  2.     mov eax,Base
  3.     mov edx,Limit
  4.     mov ecx,eax
  5.     and edx,0F0000H
  6.     shr eax,16
  7.     and ecx,0FF000000H
  8.     and eax,0FFH
  9.     shl Type,8
  10.     lea edx,[eax + edx + 100H * 11110000B + 100000H * 1100B]
  11.     or edx,ecx
  12.     mov eax,Limit
  13.     mov ecx,Base
  14.     and eax,0FFFFH
  15.     shl ecx,16
  16.     or edx,Type
  17.     lea ecx,[ecx + eax]
  18. ; Edx:Ecx
  19.     ret
  20. CreateDescriptor endp




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 11 сентября 2011 11:26
· Личное сообщение · #16

bowrouco bowrouco пишет:
> либо исполнение кода в мапед файле.Бред какойто.

вы бы уважаемый перечитали свой да и мой пост еще раз.
Я описал ВСЕ возможные честные способы модификации кода.
1. сегмент стека имеет права риад врайт поэтому можно туда код засунуть
2.VirtualProtect ктом поменять в сегменте режим доступа к нему
3. а мапед файл это как вариант. никто не заставляет блокнот мапировать

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 11 сентября 2011 11:35 · Поправил: bowrouco
· Личное сообщение · #17

VodoleY
1. Регион памяти занятый стеком имеет тип доступа R/W. Поэтому можно туда писать и читать. Сегмент тут совершенно не причём. Например Ss:[0] не выделена, туда нельзя выполнять доступ, хотя сегмент весь до конца юзерспейса R/W(для дескриптора, селектор которого в Ss). Это плоская модель памяти уважаемый.

2. Изменяются атрибуты страниц, например взводятся биты в PTE. Сегмент описан в дескрипторе, он не изменяется.

3. В кодосекции проекции нельзя писать. А при включенном NX(DEP) в секциях данных нельзя код исполнять. Так что не понятно причём тут проекции. Маппинг это один из способов аллокации памяти.

Нашёл интересны пруфкод:
Code:
  1. SIGNATURE_LENGTH  equ 44H
  2.  
  3. Local BaseOfCode:PVOID, SizeOfCode:ULONG
  4.          assume fs:nothing
  5.          mov eax,fs:[TEB.Peb]
  6.          mov eax,PEB.Ldr[eax]
  7.          mov eax,PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
  8.          mov eax,LDR_DATA_TABLE_ENTRY.InLoadOrderModuleList.Flink[eax]
  9.          mov ebx,LDR_DATA_TABLE_ENTRY.DllBase[eax]   ; ntdll.dll
  10.          mov ecx,ebx
  11.          add ecx,IMAGE_DOS_HEADER.e_lfanew[ecx]
  12.          assume ecx:PIMAGE_NT_HEADERS
  13.          mov esi,[ecx].OptionalHeader.BaseOfCode
  14.          mov edi,[ecx].OptionalHeader.SizeOfCode
  15.          lea esi,[esi + ebx - 4]
  16.          cld
  17.          mov SizeOfCode,edi
  18.          mov BaseOfCode,esi
  19.          sub edi,SIGNATURE_LENGTH
  20. Step:
  21.          mov ecx,SIGNATURE_LENGTH/4
  22.          xor eax,eax
  23. @@:
  24.          xor eax,dword ptr [esi + ecx*4]
  25.          xor eax,ecx
  26.          rol eax,cl
  27.          loop @b
  28.          cmp eax,60EC54DCH
  29.          je Found
  30.          inc esi
  31.          dec edi
  32.          jnz Step
  33.          int 3
  34. Found:
  35.          mov ecx,SizeOfCode        
  36.          lea eax,[esi + 4]
  37.          mov edx,BaseOfCode
  38.          sub ecx,24H
  39. Scan:
  40.          cmp dword ptr [ecx + edx + 24H],eax
  41.          je @f
  42.          loop Scan
  43.          int 3
  44. @@:
  45.          lea esi,[ecx + edx + 23H]
  46.          cmp byte ptr [esi],68H
  47.          jne Scan
  48.          sub esi,20H
  49.          mov ecx,20H
  50. @@:
  51.          cmp word ptr [esi + ecx],0FF6AH
  52.          je Vale
  53.          loop @b
  54.          int 3
  55. Vale:
  56.          cmp byte ptr [esi + ecx + 2],0E8H
  57.          jne @b
  58.          lea eax,[esi + ecx + 7]
  59.          add eax,dword ptr [eax - 4]
  60.          mov eax,dword ptr [eax + 1]        ; ID
  61.          
  62.          ; push NtProtectVirtualMemory arg's.
  63.          ; mov edx,esp
  64.          ; Int 2EH
  65.          ; add esp,5*4





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 11 сентября 2011 12:02
· Личное сообщение · #18

VodoleY
Вы путаете термин сегмент и страница. --> Тут всё есть <-- Но это не упрёк. Ну, с кем не бывает. Я иногда и не так загоняю

Изменяются атрибуты страниц, например взводятся биты в PTE. Сегмент описан в дескрипторе, он не изменяется.

ИстЕна!

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 11 сентября 2011 12:24
· Личное сообщение · #19

ого, сколько ужаса можно услышать о том, что вроде все знать должны. и даже не похоже, чтобы этот бред был написано просто назло клерку.

чтобы пост не был оффтопом:
tekton пишет:
ARCHANGEL пишет:А так - либо в секциях править атрибуты доступа
Можно это програмно сделать?

в любом PE-редакторе: Sections -> в поле Characteristics секции кода ставишь галку "Writable"




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 12 сентября 2011 06:36
· Личное сообщение · #20

Что то простой вопрос новичка а-ля Как написать Hello world! превратился в помойку и снова уходит в ядро но теперь уже не только благодаря клерку, но и архангелу. Вам делать нефиг что ли?

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: hlmadip

Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 13 сентября 2011 00:23 · Поправил: bowrouco
· Личное сообщение · #21

PE_Kill
Одного не пойму. Что обсуждение свелось к нэйтивным вопросам(системным, хардварным, серьёзным.. понимайте со своей точки зрения) это разве плохо ?
Или вы сторонник скрипта и подобных идей, типо межплатформенной переносимости, где кроме прототипов апи ничего знать не нужно ?
Такие взгляды не годные.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 сентября 2011 08:43 · Поправил: PE_Kill
· Личное сообщение · #22

Если человек в "Вопросы новичков" спрашивает почему ключ на 10 не накидывается на гайку диаметром 14, то я не думаю, что ему будет интересно узнать, что любую гайку можно сорвать ядерным взрывом малой мощности и получить схему устройства и сборки такой бомбы.

Есть же оффтоп, там можно обсуждать всё.

-----
Yann Tiersen best and do not fuck




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 13 сентября 2011 18:48
· Личное сообщение · #23

PE_Kill
Не так. Если аналогия с ключём - тс не знает что есть ключ на 14 и в какую сторону крутить. Что гайка не крутится изза резьбы он узнает только изучив архитектуру, тоесть ядро.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 сентября 2011 20:59 · Поправил: PE_Kill
· Личное сообщение · #24

Я не знаю ядро и не хочу знать. Но при этом писал упаковщик исполняемых файлов, который работал и вин 98 и в вин 7. Мне повезло?

ЗЫ. Кстати кроме смеха. Откручивать и закручивать гайки меня научили еще в 7 лет, но что такое резьба и как она работает я узнал несколько позже. Так что логика прослеживается.

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: hlmadip

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 13 сентября 2011 21:07 · Поправил: VodoleY
· Личное сообщение · #25

PE_Kill вы правы топ превратился в очередной мусорник. каюсь подбросил свой пакетик. на предмет не правильно (нечетко) дал ответ. вместо что делать человеку обрисовал перспективы. видимо получать будем все (ввиде порче кармы, арчи постараеца )
З.Ы, но есть и положительные моменты. Знать досконально все нельзя. если человек решая конкретную задачу увидел ответвление от темы связанные с этой темой это не плохо. это и есть процесс обучения. Ц.Ы. чем больше знаешь тем больше понимаешь сколько много ты еще незнаешь

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....



 eXeL@B —› Вопросы новичков —› Восстановление родных команд кода
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати