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

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

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

Создано: 27 сентября 2011 14:51 · Поправил: webzzter
· Личное сообщение · #1

Добрый день,

Набралось несколько вопросов по "патчингу" исполняемых файлов, на которые я пока не нашел ответа.

первый.
разбирая процедуры я часто натыкаюсь на INT3 или NOP которые идут после RETN выхода различных процедур, собственно использую это для переноса RETN и добавлению своей инструкции (обходов, записи в DS итп..).. насколько это правильно ??

второй.
насколько я понимаю если мы добавляем свой код, добавляем в файл новые инструкции, после этого сбивается карта вызова процедур.. и нужно много фиксить всего итп.. включая контрольную сумму. так ктонибудь делает ??

третий.
может кто ткнет носом или опишет возможные действия при необходимости добавления своего асм. кода в исполняемый файл..




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

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

webzzter пишет:
насколько это правильно

Это выравнивание кода, для увеличения скорости его работы. Если места хватает, то пиши туда, почему нет.

webzzter пишет:
после этого сбивается карта вызова процедур

Ничего не сбивается. Да и карты такой нет в исполняемом файле.

webzzter пишет:
может кто ткнет носом или опишет возможные действия при необходимости добавления своего асм. кода в исполняемый файл

Если кода много, то ищем в конце секции кода нули, ставим туда jmp пишем нужный код и ставим jmp обратно, если кода сильно много, то добавляем вторую секцию кода и пишем всё там.

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




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

Создано: 27 сентября 2011 15:32
· Личное сообщение · #3

2Pe_Kill тут понял.

по 2 вопросу немного не так сформулировал. адреса переходов нужно восстанавливать, или не так.. ? допустим был адрес 1c21b я добавил инструкцию и все адреса съехали на 3 байта по всему DS до 1c21e




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

Создано: 27 сентября 2011 15:38
· Личное сообщение · #4

сделай скриншот, нихера не понятно.

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




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

Создано: 27 сентября 2011 15:40
· Личное сообщение · #5

да какой там скриншот, это у меня только в теории.
например я внедряю свой код не заменяя инструкции а расширяя размер файла.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 27 сентября 2011 15:44
· Личное сообщение · #6

Если Вы делаете Push на это место, то это одно, если Call, то это совсем другое, если Jmp, то это третье. Давайте пример.




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 27 сентября 2011 15:45 · Поправил: neomant
· Личное сообщение · #7

я внедряю свой код не заменяя инструкции а расширяя размер файла.
Так низя. Это уже какойто непатчинг. Нужно вставить инструкции - ищи свободное место в конце секций, вставляй туда нужный код и делай прыжок. Нет свободного места - добавляё новую секцию.

-----
Следуй за белым кроликом





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

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

PE_Kill
Он имеет ввиду, если добавить байт куда-то в середину исполняемого файла. Если рассматривать ехе как бинарь, то можно условно разделить его на 3 части: RawData до вставки кода, добавочный код и RawData после вставки кода.

webzzter
я внедряю свой код не заменяя инструкции а расширяя размер файла.

Расклад такой работать не будет. И дело тут не в картах. Когда загрузчик проецирует образ на виртуальное пространство, он читает виртуальные оффсеты секций и по ним записывает физические данные из бинарника. Данные (и код ) в виртуальной памяти имеют выравнивание, определяемое параметром SectionAlignment, а данные на диске имеют обычно более мелкое выравнивание, равное FileAlignment. Когда вы добавляете секцию, последняя секция автоматом становится предпоследней. Это приводит к необходимости выравнивания её физических данных и дописывания новых, которые бы следовали бы за старыми (именно поэтому некоторые вирусы не пашут с файлами, имеющими в конце оверлей). Да, последнюю секцию можно не выравнивать.

Теперь в вашем случае. Когда вы всовываете байт (или более) в центр в произвольное место, вы нарушаете порядок соответствия виртуальных и физических данных, и это, как правило, приводит к невалидности той же таблицы импорта, экспорта и прочих. В результате имеем сообщение о невалидности Pe-файла ещё на стадии загрузки.

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





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

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

ARCHANGEL пишет:
Он имеет ввиду, если добавить байт куда-то в середину исполняемого файла.

Охереть, я даже не додумался до такого. Потом просто надо будет заново весь файл перекомпилировать, что без исходников невозможно.

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




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

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

коллеги, надо думать, опечатались

ARCHANGEL пишет:
Когда вы всовываете байт (или более) в центр в произвольное место, вы нарушаете порядок соответствия виртуальных и физических данных, и это, как правило, приводит к невалидности той же таблицы импорта, экспорта и прочих.

вовсе нет. ТС своими вставками в худшем случае затрет начало какой-либо процедуры или блока под/с данными с последующей ошибкой типа "недопустимая операция" / какой-нибуть exception.

PE_Kill пишет:
Потом просто надо будет заново весь файл перекомпилировать, что без исходников невозможно.

перекомпиляция exe - вот это действительно круто.

а ТС, я пологаю, уже осознал собственные ошибки.




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

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

DMD пишет:
вовсе нет. ТС своими вставками в худшем случае затрет начало какой-либо процедуры

Так вроде как и имелась в виду именно вставка дополнительных байт, а не патчинг имеющихся в имидже.

-----
Следуй за белым кроликом




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

Создано: 27 сентября 2011 18:04 · Поправил: DMD
· Личное сообщение · #12

neomant пишет:
Так вроде как и имелась в виду именно вставка дополнительных байт


и куда, по-Вашему, эти самые байты планируется вставлять? если:

webzzter пишет:
патчингу" исполняемых файлов, на которые я пока не нашел ответа.

первый.
разбирая процедуры я часто натыкаюсь на INT3 или NOP которые идут после RETN выхода различных процедур, собственно использую это для переноса RETN и добавлению своей инструкции (обходов, записи в DS итп..)..





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

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

Да, да. И несколькими постами ниже webzzter пишет:
например я внедряю свой код не заменяя инструкции а расширяя размер файла.


-----
Следуй за белым кроликом




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

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

мы сейчас в больше степени говорим не об ошибках ТС, а о не совсем корректных ответах уважаемых "коллег по цеху"




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

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

DMD
Всё именно так. Опечаток нет, или вы с чем-то не согласны? Я понял, что webzzter хочет "расширить" файл примерно так: запустили WinHex (любой другой хекс-редактор), выделили место в файле, куда будем добавлять, выбрали Edit -> Paste Zero Bytes -> Вписали количество байт -> Изменили их значения. Тогда всё будет разворачиваться по изложенному мной сценарию.

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




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

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

Патч - модификация кода. В памяти, либо на диске, в последнем случае это называется инфектом, за это статью дают. В общем там и обсуждать нечего. Динамически требуется проверять контексты всех потоков(хотпатч даже ядро может выполнять). Статически вообще тупо. Динамический патч - не жизниспособный способ контроля кода, ибо детектится и выпиливается всем подряд(один клик мышью в рку выносит ваши патчи, восстанавливает код). В старших версиях системы это обнаруживается как разрушение целостности модулей и система останавливает свою работу(патчгурд). Патч не имеет никакого отношения к руткитам, любой код портящий кодосекции руткитом не может называться.



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

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

ARCHANGEL
я согласен с тем, что вопросы/проблемы нужно излагать max корректно и точно. в первую голову это касается ТС.
и уж тем более, что пользовать возможности какого-либо инструмента без понимания "для чего", "как" и пр. - уже mauvais ton.



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

Создано: 29 сентября 2011 21:16 · Поправил: Модератор
· Личное сообщение · #18

Модер с...ка

Истену низя удалить!!

От модератора: наркоман, что ли? забанен. снова



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

Создано: 01 октября 2011 07:17
· Личное сообщение · #19

Столкнулся с такой проблемкой..
stripper анпакнулdll, добавив такой косяк:
Code:
  1.  8B8068040000       mov         eax,[eax][000000468]
  2.  FF152CFFB800       call        d,[000B8FF2C] ;GetCurrentProcess
  3.  D885DB7C3B43       fadd        d,[ebp][0433B7CDB]

хотя в дампе не усматривалось ни какого намёка на сиё winapi
Code:
  1.  8B8068040000           mov         eax,[eax][000000468]
  2.  E8F87EE8FF             call       .0000057F0 --1
  3.  8BD8                   mov         ebx,eax
  4.  85DB                   test        ebx,ebx
  5.  7C3B                   jl          00017D939 --X
  6.  43                     inc         ebx

соответственно, вызов к api релочился...

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

Точнее вспоминать техники работы с ними

мож кому пригодиться --> Link <--




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

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

Стриппер давно устарел, юзайте DecomAS.

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



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


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