Сейчас на форуме: johnniewalker, vsv1, Magister Yoda, Kybyx (+4 невидимых)

 eXeL@B —› Крэки, обсуждения —› Теория поиска "Code caves"
Посл.ответ Сообщение

Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 30 января 2012 18:02
· Личное сообщение · #1

Добрый вечер. Не могли бы вы пояснить теоретический алгоритм поиска code caves?
Как отличить реально пустое место от потенциально опасного? Например если брать чистый файл, то много пустых мест есть в секции кода, однако неизвесто используется ли оно. То же самое и с секцией данных. Другой пример - упакованный UPX'ом файл, в хидере очень часто довольно большое пространство(перед версией пакера). Его использовать можно, но как это определить програмно? Возможно есть какой-то правильный алгоритм, потому что мне кроме поиска последовательности из нужного количества нулей, ничего в голову не приходит.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 30 января 2012 18:22 · Поправил: ajax
· Личное сообщение · #2

курить доку по исполняемому формату. сначала искать место - 00/CC/90. дальше перебрать из всех таблиц указатели на этот кусок, ... и в этом случае рез-т на 100% не гарантирован. а возможно просто секцию прилепить.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 30 января 2012 18:31
· Личное сообщение · #3

Вариант с прикручиванием секции и дописыванием в оверлей даже не рассматривается, я достаточно точно описал, что конкретно меня интересует.

По поводу поиска 00/СС/90, почему именно этот паттерн? Так же интересуют вышеуказанные "таблицы" - что это, первый раз слышу. Я так понимаю вы предлагаете дизассемблировать весь код и в статике проанализировать обращение к конкретному участку кода? Это просто безумная работа, которая абсолютно не эффективна, для такой мелочной задачи




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 30 января 2012 18:46
· Личное сообщение · #4

TryAga1n пишет:
По поводу поиска 00/СС/90, почему именно этот паттерн?

Это отдельные.
00 - это понятно, что за область.
СС - выравнивание.
90 - ну и нопы.

-----
Лучше быть одиноким, но свободным © $me





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 31 января 2012 01:42
· Личное сообщение · #5

TryAga1n пишет:
Так же интересуют вышеуказанные "таблицы" - что это, первый раз слышу

ajax пишет:
курить доку по исполняемому формату

section table, tls table, relocation table - для начала. придется подумать а если задача мелочная, то проще ручками вставить код

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 31 января 2012 05:17
· Личное сообщение · #6

Теперь суть в целом мне ясна, а то все не мог понять что за таблицы, почему-то возникали ассоциации с радужными таблицами для брута)
Идея хорошая как один из вариантов проверки, но хочется еще как-нибудь перестраховаться. Подумываю сделать 2 дампа секций кода у работающей и не работающей программ, а затем проверить адреса кейвов на наличие данных...как сообщество смотрит на такую идею?)




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 31 января 2012 07:24 · Поправил: ajax
· Личное сообщение · #7

TryAga1n пишет:
2 дампа секций кода у работающей и не работающей программ

они будут одинаковые на подавляющем большинстве EXE или речь не о PE/PE+ формате?

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 31 января 2012 08:01
· Личное сообщение · #8

ajax пишет:
они будут одинаковые на подавляющем большинстве EXE

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




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

Создано: 31 января 2012 09:35
· Личное сообщение · #9

100% дыры будут в концах секций файла при условии VSize < RSize

-----
Everything is relative...


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


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 31 января 2012 15:59 · Поправил: ajax
· Личное сообщение · #10

Vamit
в т.ч. на это намекал но, как показала практика, не всегда. а ТС, хрен хочет думать, все ему разжуй...

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 31 января 2012 16:49
· Личное сообщение · #11

Позвольте поинтересоваться, а что вы мне разжевали? Я лишь попросил подкинуть идею, либо правильный алгоритм, если такой существует. Если вас что-то не устраивает - всегда можно пройти мимо. По поводу вашего ответа, в котором вы "намекали" - можете закрыть глаза и в любом топике написать: "Иди курить мануалы, нуб". Если бы вы небыли столь самодовольным снобом, то знали бы, что не на все вещи есть мануалы и иногда, чтобы найти выход, нужна помощь других людей.




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

Создано: 31 января 2012 22:23
· Личное сообщение · #12

TryAga1n пишет:
не на все вещи есть мануалы и иногда, чтобы найти выход, нужна помощь других людей

Действительно, мануалов по вытиранию задницы не встречал.

Я лишь попросил подкинуть идею, либо правильный алгоритм, если такой существует

Google на запрос Code Caves выдал первую --> Ссыль <--, по которой можно скачать софт, который ищет то, что вам надо. Дизассемблируйте и вперёд. Вот и алгоритм.

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

Позвольте поинтересоваться, а что вы мне разжевали?

Думаю, готовых сорцов вряд ли можно ожидать здесь.

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


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


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 01 февраля 2012 09:20
· Личное сообщение · #13

давайте всё таки без оскорблений

-----
[nice coder and reverser]




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

Создано: 01 февраля 2012 09:27
· Личное сообщение · #14

TryAga1n, моя идея по поводу:
- открываем pe-файл, проверяем действительно ли он pe
- сканируем секции с первой по последнюю, ищем с параметрами чтения и запуска
- сканируем найденные секции на наличие блоков с 0x00, 0xCC, 0x90 нужной длины
- затем берем дизассемблер длин (по типу distorm или lde), удостоверяемся что в этих блоках реально ничего полезного нет
- выводим юзеру сообщение, мол блок такой то, по адресу такому то, длиной такой то, обнаружен

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


Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 01 февраля 2012 09:46
· Личное сообщение · #15

А зачем дизасмить блоки, в которых заведомо известные повторящиеся данные?
И да, на нопы я бы лучше не ориентировался, тогда уж нули и CC.

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


Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 февраля 2012 10:43 · Поправил: BoRoV
· Личное сообщение · #16

drone пишет:
- затем берем дизассемблер длин (по типу distorm или lde), удостоверяемся что в этих блоках реально ничего полезного нет

А это то зачем?

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

-----
Лучше быть одиноким, но свободным © $me


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

Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 01 февраля 2012 12:02
· Личное сообщение · #17

кажется нужный функционал есть в Cheat Engine, исходники которой открыты.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 01 февраля 2012 12:26 · Поправил: ClockMan
· Личное сообщение · #18

BoRoV пишет:
Проще всего проверить в секции кода последние N-байт

Ну как-бы после компиляции файла он уже оптимизирован и записать туда получится только после проицирования файла в память
BoRoV пишет:
90 - они же нопы вряд ли встретишь в чистой программе

а я в mfc вядил где заместо СС ипользовались 90
TryAga1n пишет:
То же самое и с секцией данных

Ну скажу посекрету свободный конец секции данных можно определить в некоторых файлах зная компилятор

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 февраля 2012 12:52
· Личное сообщение · #19

ClockMan пишет:
Ну как-бы после компиляции файла он уже оптимизирован и записать туда получится только после проицирования файла в память

Сути то не меняет.

-----
Лучше быть одиноким, но свободным © $me





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 01 февраля 2012 16:41 · Поправил: ajax
· Личное сообщение · #20

drone пишет:
затем берем дизассемблер длин (по типу distorm или lde), удостоверяемся что в этих блоках реально ничего полезного нет

и, как задать начало дизасма и удостовериться, что там стопудово ничего нет? теоретики, млин
Позвольте поинтересоваться, а что вы мне разжевали?
не хотел отвечать, но "раз уж пошла такая пьянка" мануал по PE формату - четко прописано, что к чему. к теоретикам - аффтар ничего не сказал про файло - поипитесь с кодекэйвами в файлеге с upx, например

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




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

Создано: 01 февраля 2012 16:59
· Личное сообщение · #21

начало дизасма - начало блока




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

Создано: 01 февраля 2012 19:57
· Личное сообщение · #22

Ебанулись что ли code caves автоматом искать. Кто реализует - станет миллионером, ибо наконец то решит единственную глобальную проблему высокоуровневого дизасма.

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


| Сообщение посчитали полезным: ajax, Gideon Vi, Nightshade


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 02 февраля 2012 04:38 · Поправил: ajax
· Личное сообщение · #23

drone пишет:
затем берем дизассемблер длин (по типу distorm или lde), удостоверяемся что в этих блоках реально ничего полезного нет

сорри, но это бред. что даст дизасм, вообще, для куска из одинаковых инструкци?

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

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




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

Создано: 04 февраля 2012 15:35
· Личное сообщение · #24

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




Ранг: 147.7 (ветеран), 50thx
Активность: 0.120
Статус: Участник
sv_cheats 1

Создано: 04 февраля 2012 23:53 · Поправил: SER[G]ANT
· Личное сообщение · #25

ARCHANGEL пишет:
Google на запрос Code Caves выдал первую --> Ссыль <--, по которой можно скачать софт, который ищет то, что вам надо. Дизассемблируйте и вперёд. Вот и алгоритм.

Можно и не дизассемблировать, есть исходник. Внутри него тс и найдет ответ на свой вопрос.


508e_04.02.2012_EXELAB.rU.tgz - CodeCaver_src.rar




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 05 февраля 2012 17:09
· Личное сообщение · #26

TryAga1n

Зада не мелочная, решай этот вопрос индивидуально, на практике этот метод самый эффективный, бери иду, бери подопытную программу, прокрути ее в дебаге, напиши Скрипт на питоне по поиску Индивидуальных Особенностей Кэйв, далее анализируй, потом в в раз два пишешь свою программу на базе полученного результата на конкретную цель. В итоге ты быстро решишь задачу, получишь дополнительную без геморойную методику дальнейшего изучения, а также соберешь многие особенности которые тебе нужны. Иначе ты хочешь сделать суперчудесную программу простым способом наскоком, это не серьезно. Тем более слишком много особенностей разброса. По выше описанным этапам ты реализуешь конечную цель быстро и эффективно ..

Если уже прям так лень, есть альтернативные методы Кэйвинга ..

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube



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


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