IDA - анти-витиеватость

Jun 16, 2011 00:13

Продолжаем обсуждение вопроса получения IDA без watermarks (предыдущие посты: пост о невозможности купить IDA, пост о watermarks в IDA).
Read more... )

warez, ida

Leave a comment

anonymous June 15 2011, 20:51:20 UTC
то что вы предлагаете помоему абсолютно не реально
писать плагин к IDA, который будет хешить каждую функцию
и потом сравнивать два хеш отчета?
невижу результата в этом
нужно же выявить возможные watermakes? а не сравнить насколько один билд похож на другой!

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

Reply

sporaw June 15 2011, 20:58:56 UTC
Вы не до конца поняли идею. Как раз изначальная задача сравнить насколько один билд похож на другой. Тем самым и выявляются разночтения в коде и сопутствующих (окружающих) данных. Это и позволяет выявить watermarks, а в дальнейшем - избавиться от них. Напоминаю, сравниваться будут одни и те же версии, просто от разных поставщиков.

Reply

anonymous June 15 2011, 21:02:00 UTC
watermark может сидеть в не в секции кода, а вообще где то черт знает где

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

Reply

sporaw June 15 2011, 21:04:26 UTC
Принесет.

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

Далее, если речь идет о watermark в данных, то опять же: пересортировав данные, можно втупую дальше сравнивать по fc /b. И видеть результат.

Так что в этом смысле все хорошо.

Reply

sporaw June 15 2011, 21:06:12 UTC
Просто представьте себе некое множество блоков. У вас их изначально два одинаковых.
Потом приходит некто и переставляет внутри эти блоки по-разному.
А потом еще маленькие блочки (единичные -- их будем считать за watermarks) меняет на "специальные", отличающиеся друг от друга.

Вопрос: сможете ли вы найти watermarks, переставив блоки в любом одинаковом порядке в этих множествах?

Ну это грубо так, но для простого понимания.

Reply

sporaw June 15 2011, 21:09:24 UTC
Чтобы было понятно, что такая схема вполне рабочая, посмотрите этот пост - он на другую тему, но некая аналогия прослеживается.

Reply

anonymous June 15 2011, 21:26:10 UTC
я не совсем понимаю что вы хотите сравнивать
ок, берем простой пример

функция A в билде A находится по .text:00201000
и
функция A в билде Б находится по .text:00304100

и теперь представляем
что в функциях присутвует обращение к сеции .data
данные одни и теже
но компилер в разных местах разметил эти данные в секции .data
соответсвенно и по хешам функии A в разных билдах будут различатся
а если еще в функциях есть и call/jmp
которые можут прыгать на одинаковые функции в разных билдах, но эти функции физически размещенны в разных местах
то смещения по jmp/call буду тоже разные
вот и все сравнение.. сравнивать получается и несчем

Reply

sporaw June 15 2011, 21:38:45 UTC
Обращение к данным -- в этих инструкциях присутствуют relocations. Эти данные, как относительные, анализироваться не будут. Насчет call поясню на примере:

.100013A0: 8B442404 mov eax,[esp][4]
.100013A4: 50 push eax
.100013A5: 68[801A1510] push 010151A80 ; ссылка на данные
.100013AA: E8{51FD0A00} call _areacb_t_get_next_area ; call на функцию (некий код)
.100013AF: 50 push eax
.100013B0: 68[801A1510] push 010151A80 ; ссылка на данные
.100013B5: E8{16000B00} call _areacb_t_getn_area ; call на функцию (некий код)
.100013BA: C3 retn

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

Reply

sporaw June 15 2011, 21:40:44 UTC
Почти как FLAIR-сигнатуры :)

Забыл тэг pre сделать :(

Reply

anonymous June 15 2011, 21:44:33 UTC
ок, теперь понял
только учтите что есть разные билды которые скомпилированы к примеру с защитой стека _chkesp, или без него

она присутсует всегда до вызова retn
и ее прийдется тоже выявлять и анализировать
да и сам стек sub esp, ???
тоже может различатся по разному в разных билдах
вообщем как бы не оказалось что в итоге и сравнивать будет нечего :))

Reply

sporaw June 15 2011, 21:47:32 UTC
Билды собираются с одними и теми же опциями. Это все-таки не наколенный продукт (хотя во многом по качеству некоторых мест на него похоже). :)

Вся разница в них - это просто порядок функций/данных. (По сути, команда линкеру располагать функции/obj в определенном, заданном, порядке).
Все остальные опции те же.
На тысячи клиентов различными опциями не напасешься, да и не нужно этого :)

Reply

sporaw June 15 2011, 21:45:52 UTC
Начать можно с простого варианта: {} так же пропускать.
Просто может быть большое число коллизий. Нужно смотреть по конкретному коду.

Reply

anonymous June 16 2011, 11:09:51 UTC
написать скрипт idc
который получает адресс функции и далее читай по одной комманде из функции и начинает ее хешить и результат в виде
addrfn len md5hash
не проблема
а вот как потом сравнивать эти два результата
ну допустим можно будет отсортировать сначала по длинне фукнции
а потом по хешу
а вот как и чем сравнивать два таких результата
это будет поиск каждой комбинации с одного файла, в другом..
сложноватый поиск...

Reply

anonymous July 4 2011, 00:30:27 UTC
http://labs.idefense.com/files/labs/releases/previews/IDACompare/
уже готовый плагин для сравнения

Reply

anonymous June 15 2011, 21:08:17 UTC
Не совсем понятно почему одна и та же версия от разных поставщиков должна отличаться?
И от каких разных? Контора вроде одна )

Reply

sporaw June 15 2011, 21:11:30 UTC
Смотрите предыдущий пост про watermarks. Потому что ida.wll, ida64.wll у каждого клиента разные (суть кода одна и та же). В них переставлены функции и данные. Это уже достоверно доказанный факт (по анализу v5.7 и практико-гипотезе v6.1).

Reply


Leave a comment

Up