Сейчас на форуме: zds, tyns777, JustLife, 2nd, morgot, Rio, CDK123 (+4 невидимых)

 eXeL@B —› Программирование —› Программно отличить реальный код от мусора, как?
. 1 . 2 . >>
Посл.ответ Сообщение

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

Создано: 25 декабря 2008 14:59
· Личное сообщение · #1

Доброе время!

Вот такой сабжевый вопрос назрел собственно.

К примеру - процедура поксорена одним значением, и чтобы подобрать это значение, нужно как-то идентифицироать "хороший" код от мусора.

Может, что посоветуете?

Спасибо.

Правда, сомневаюсь в существовании каких-либо эффективных методов




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 25 декабря 2008 15:05 · Поправил: daFix
· Личное сообщение · #2

temp
А чем отличается поксоренный код от мусора? Кажется ни чем... Попробуй по энтропии как нибудь, но кажется и это тебе особо не поможет. Если ксор везде на одинаковое число, то попробуй бинарно искать поксоренный болк, если он заведомо известен
PUSH xxx
//
POP xxx
RET
И то это не выход

-----
Research For Food




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 декабря 2008 15:08
· Личное сообщение · #3

temp
файл с полным имеджем или куска выполняемого замусоренного кода можно ?

-----
My love is very cool girl.




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 25 декабря 2008 15:15 · Поправил: progopis
· Личное сообщение · #4

Вообще здесь нужен качественный двиг дизасма. Искать надо всякий бред, типа два префикса замены сегмента подряд (что на самом деле не может быть создано компилятором, потому как первый префикс будет проигнорен процом, а компиляторы делают оптимизацию), конструкции leave/retn и leave/retf (после leave всегда идёт ret, иначе это мусор), если КОПа не существует, а предыдущая команда не Jcc,JMP,CALL - тоже признак мусора. Ну и так далее.

P.S. ИМХО универсального лекарства не существует. Длина ключа хоть какая? Там у тебя обычный XOR? Тогда легко.



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

Создано: 25 декабря 2008 15:28 · Поправил: temp
· Личное сообщение · #5

theCollision пишет:
файл с полным имеджем или куска выполняемого замусоренного кода можно ?



одно замечание - не замусоренный код, а именно код - мусор, т.е. там нет от оригинального ничего.

прикрепил пример - бинарник: оригиналы нескольких команд поксорены одним байтом



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

Создано: 25 декабря 2008 15:33
· Личное сообщение · #6

temp пишет:
прикрепил пример - бинарник: оригиналы нескольких команд поксорены одним байтом



0e7c_25.12.2008_CRACKLAB.rU.tgz - data.bin



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

Создано: 25 декабря 2008 15:42 · Поправил: temp
· Личное сообщение · #7

daFix пишет:
А чем отличается поксоренный код от мусора?

daFix пишет:
А чем отличается поксоренный код от мусора? Кажется ни чем...


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



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

Создано: 25 декабря 2008 15:45
· Личное сообщение · #8

progopis пишет:
Длина ключа хоть какая?


длина ключа на самом деле = DWORD = 64 бит, и там не простой ксор =) но не в этом дело, я специально утрировал задачу




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 25 декабря 2008 15:46
· Личное сообщение · #9

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

-----
Research For Food




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 декабря 2008 15:54
· Личное сообщение · #10

temp
В 23:00 не увижу, что разобрался гляну ;)

-----
My love is very cool girl.





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

Создано: 25 декабря 2008 16:24
· Личное сообщение · #11

была тема у меня , схожая , цель примерно таже. В топике много полезных ссылок Вот смотри --> Link <--

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





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

Создано: 25 декабря 2008 16:44
· Личное сообщение · #12

Если брать что-то конкретное, то в каком-либо отдельном ехе файле - ещё ладно, можно программно сдетектить, надо только знать, какой там мусор, а для этого исследовать конкретную программулину. А если в общем, то фиг - всегда можно написать такой мусор, который вроде бы и не мусор, но и нах не нужен.

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




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 декабря 2008 16:45 · Поправил: theCollision
· Личное сообщение · #13

>>Вот смотри --> Link <--

>>Тема не существует. Она была удалена администратором либо НИКОГДА не существовала
это фича кряклаба ?

-----
My love is very cool girl.




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

Создано: 25 декабря 2008 16:50
· Личное сообщение · #14

ARCHANGEL пишет:
всегда можно написать такой мусор, который вроде бы и не мусор, но и нах не нужен.


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



Ранг: 172.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 25 декабря 2008 16:52
· Личное сообщение · #15

"www" убери с урлы - заработает, у тебя куки на другой поддомен засейвились

-----
HOW MUCH BLOOD WOULD YOU SHED TO STAY ALIVE





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 25 декабря 2008 16:52 · Поправил: daFix
· Личное сообщение · #16

theCollision

http:/www.exelab.ru/f/action=vthread&topic=13288&forum=6&p age=-1
http://exelab.ru/f/action=vthread&topic=13288&forum=6&page =-1

Ты там в своём файле Hosts.txt ничего не правил, когда были глюки с лабом? Попробуй по этим двум
ссылкам зайти

ProTeuS
+1 Опередил

-----
Research For Food




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 декабря 2008 19:56
· Личное сообщение · #17

daFix
повторой зашел )

-----
My love is very cool girl.




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 декабря 2008 19:59
· Личное сообщение · #18

temp
я не думаю, что корректно расматривать мусор сам по себе, вот если бы практический смысл, т.е. в работающей проге, которую надо зареверсить, то тогда это имело бы смысл! Приложи какую-нить прогу, а то мусор, ради самого мусора. неее, это уж вы сами как нить )

-----
My love is very cool girl.




Ранг: 38.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 25 декабря 2008 20:56
· Личное сообщение · #19

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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 26 декабря 2008 15:22
· Личное сообщение · #20

temp пишет:
К примеру - процедура поксорена одним значением, и чтобы подобрать это значение, нужно как-то идентифицироать "хороший" код от мусора.


Бред. С каких пор код после ксора становится мусором? Если в обычном в коде есть мусор, его можно вычистить так же как это делают компиляторы при оптимизации = "код который ничего не делает выкидывается". Если у тебя есть поксоренный (код + мусор), тогда пытаться узнать ключ по мусору тоже самое что узнать цвет волос по цвету мочи.

-----
have a nice day




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

Создано: 26 декабря 2008 15:25
· Личное сообщение · #21

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



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

Создано: 26 декабря 2008 15:57
· Личное сообщение · #22

Nimnul пишет:
Бред. ...... тогда пытаться узнать ключ по мусору тоже самое что узнать цвет волос по цвету мочи.


То, что бред - не согласен.

Сходу по мусору ключ не определить, это да, но можно делать так:


1) Меняем значение "ксора"
2) "Ксорим" процедуру
3) Проверяем по определенным правилам на выходе мусор или код
4) Если не код, то повторяем с п.1

з.ы. ессеессенно без дизасма не обойтись
я пока не вижу ничего другого, как откидывать код содержащий мнемоники типа: fadd, fdiv st, rep push и т.п.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 26 декабря 2008 16:04 · Поправил: Nimnul
· Личное сообщение · #23

temp пишет:
Если не код, то повторяем с п.1


а чем это отличается от брутфорса? И если эта процедура хоть когда-нибудь расшифровывается не проще поставить бряк и посмотреть что за код? или код идет в ключе?

temp пишет:
То, что бред - не согласен.


Значит ты не встречался с кодом, который специально разбавляют мусором. И что ты тут понимаешь под словом "мусор" я хз.

-----
have a nice day




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

Создано: 26 декабря 2008 16:08 · Поправил: temp
· Личное сообщение · #24

Nimnul пишет:
а чем это отличается от брутфорса?


А я и не говорил, что это не брут, вопрос, как надежнее и быстрее отсеивать мусор

Nimnul пишет:
или код идет в ключе?


код идет в ключе

Nimnul пишет:
Значит ты не встречался с кодом, который специально разбавляют мусором. И что ты тут понимаешь под словом "мусор" я хз.


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

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



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 декабря 2008 16:12
· Личное сообщение · #25

temp
Что за программа? Скинь в личку инфу. Если что, скардить можно будет, а всякие там бруты по миллионы лет - не наш метод.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 26 декабря 2008 16:19 · Поправил: Nimnul
· Личное сообщение · #26

temp

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

-----
have a nice day




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

Создано: 26 декабря 2008 16:21
· Личное сообщение · #27

progopis пишет:
Что за программа? Скинь в личку инфу. Если что, скардить можно будет, а всякие там бруты по миллионы лет - не наш метод.


не миллионы, а ~50 суток, на одной машине, а у меня есть возможность рулить 20 машинами, так что за недельку точна подберу, если брут сделать с качественным "отсеивателем"

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



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

Создано: 26 декабря 2008 16:27 · Поправил: temp
· Личное сообщение · #28

Nimnul пишет:
я понял, ты хочешь написать брут, но не знаешь как проверить результат. Используй дизасм длинн для проверки. Или... Любая функция всегда начинается со стековых команд и заканчивается...


да, теперь Вы меня поняли верно, тока вот незадача, что стековые команды стоят на месте, а вот потом идет джамп через мусор на конец процедуры(стековые команды), в общем, как в любом коммерческом проте.

а так бы еще и по ret XX в конце можно было бы отсеивать, хм..... это в принципе тоже стековая команда



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 26 декабря 2008 16:46
· Личное сообщение · #29

Nimnul пишет:
С каких пор код после ксора становится мусором

+1, ведь дизассемблировать можно в принципе всё, кроме ошибочных инструкций. Алгоритм отсеивания правильных и неправильных инструкций присутствует в --> HDE <-- http://patkov-site.narod.ru/download/hde32-0.25.tar.gz
Всё остальное в статике не получится разобрать - надо отлаживать процесс и трассировать. + Нет никаких гарантий того что есть например некий валидный код, а программа во время выполненния его перезаписывает другим валидным кодом. И тот и другой код статический анализ примет за реальный. Выходит что нужно отлавливать обращения к коду и смотреть на предмет его изменения/перезаписи(да ещё и смотреть на динамически выделяемую память, где вообще в гавно мешать можно код и данные ).

-----
все багрепорты - в личные сообщения





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 26 декабря 2008 17:21 · Поправил: Nimnul
· Личное сообщение · #30

temp

если там коммерческий прот, то самое простое это вставить корокий прыг вперед через 1-3 байт, что бы код был не выровнен и тогда никакие сигнатуры тебе непомогут определить валидность расшифрованного кода. Но прыг это тоже команда, если ты предполагаешь что там первым может быть прыг, включи его в условие валидности, а дальше проверяй дизасмом длин или как HandMill подсказал. Если там есть смещение, то проверяй n раз, где n глубина возможного смещения в байтах. Кроме того последние байты функции могут быть только ret, call, jmp || jxx, ищи от конца функции эти команды, потому что за ними может быть мусор. и знай что расширить память под функцию, не так просто, поэтому у коммерческого прота не так много места для маневров, если опять же он не выполняет часть функции в стеке или в куче.

-----
have a nice day



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


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