Pull to refresh

Comments 23

>>В наличии относительный условный переход, который затрется нашими 5 байтами
Именно по этой причине стараюсь использовать технику сплайсинга как можно меньше!
Куда больше нравится править непосредственно IAT(Import Address Table).

Поясню:
Допустим есть код:
.0047C452: 56                2push        esi
.0047C453: 8D45F8             lea         eax,[ebp][-8]
.0047C456: 50                 push        eax
.0047C457: FF1594E04A00       call        GetSystemTimeAsFileTime

Для наглядности офсет куда указывает инструкция call покажу в виде списка dword-ов:
.0047C459: 004AE094
.0047C45D: 33FC758B
.0047C461: 15FFF875


Как мы знаем это ничто иное как адрес в IAT:
.004AE094:  20 16 0D 00-3A 16 0D 00-48 16 0D 00-5A 16 0D 00   ▬♪ :▬♪ H▬♪ Z▬♪


Можно сделать такое:
1) Сохраняется оригинальный адрес в IAT
2) В IAT пишется свой адрес
3) После перехода на код хэндлера мы должны понять: «А это тот кусок кода что мы перехватываем?» На этот вопрос можно получить ответ только когда мы понимаем кто вызвал нашу функцию. Это же в свою очередь можно понять пользуясь технологией SEH, как это делают при раскрутке стека, это не сложно и не накладно по скорости работы! Для 64-битов немного другие правила.

Плюсы:
1) Достаточно быстро патчится
2) Не надо морочиться с корректностью выполнения первых N-байтов где мы поставили свой jmp
3) Код достаточно читабельный и проще сопровождать

Минусы:
1) Не перехватываются вызовы функций, которые приложение получило через GetProcAddress
2) Сколько загружено модулей, столько и IAT-ов патчить (для полной гарантии перехвата функции внутри процесса надо отслеживать заргузку новых модулей). Столкнулся с этим, когда надо было прозрачно для приложения шифровать определённые типы файлов. IAT модуля, скажем acad.exe был исправлен, а реальный вызов CreateFileA проходил через IAT модуля msvcrt.dll
С минусами согласен. Но для этой задачи вполне подходит именно IAT-патчинг.
1) а что мешает перехватить GetProcAddress?
ничего не мешает, но это уже за пределеми «чистого» IAT-патчинга.

сейчас нашёл ещё один минус:
3) если атакуемое приложение упаковано хотя бы безобидным UPX, патчер не сможет найти расположение оригинальной IAT, он увидит IAT-таблицу для upx-депакера
При написании любого куска кода всегда есть ограничения, но это не означает что программировать вообще не надо! Это означает надо посмотреть на задачу и понять всю ситуацию и с какими конкретно ограничениями можно согласиться. Так что говорить одно круче или хуже можно только относительно конкретно взятой ситуации.
патчи, патчи. инди клерк вас не одобрил бы:)
Ты меня еще духом эмисрэма попугай )))
Я смотрю, весь wasm здесь :)
Вспомнились статьи ms-rem'a и ночи проведенные с дизасемблером
Мне кажется, статус «на коленках» уже немножко не катит…
Вот и я о том же. Там где начинается хардкор — теряется вся наглядность…
Хардкор это бинарь покрытый скажем Themida не желающий работать под какой-либо виртуалкой, а файл сомнительный и на живой машине реверсить не хочется, а надо!
Ну про такой хардкор я бы никогда не стал тут писать :)
UFO just landed and posted this here
Простите, я малость позабыл, это Themida создает 100500 потоков и кучу антиотладочных трюков в себе держит. В смысле расчет на крайне высокую сложность ручной распаковки?
>>В смысле расчет на крайне высокую сложность ручной распаковки?
Это требование справедливо к любому современному проту, иначе смысл его покупать?
Я поясню. Последний раз реверсом занимался на первых курсах… потом работа некогда было. На тот момент такие вещи только появлялись, набирал обороты сэйфдиск. классикой жанра был аспротект.
Значит видимо верно вспомнил его…
Аспротект — это классика: ворованные байты, а позже и своя vm :). Хотя стриппер отлично снимал защиту в большинстве случаев.
Да… в то время мы думали что через пару лет он сделает полиморфный компилятор какой-нить)
Темида снимается даже нубастым мной с использованием некоторых скриптов в 70% случаев…
>>даже нубастым мной с использованием
При стандартных решениях. А когда перед тобой хз че за файл и над ним хорошо постарались, то скрипты тут не помогут, тут думать надо.
Я как-то одного выскочку проучил, хвалился что может снять простой элементарный пакер. Я сделал ему unpackme: взял один известных пакеров, открутил Aplib, а под ним был был e8\e9-фильтр, убрал его и попатчил код фильтра. Затем дошел до настройки импорта, пофиксил чексумму имени АПИ-шки, потом это все обратно Аплибом запаковал. Какого было мое удивление, что человек не осилил! ;) Там импорт был чуток нестандартен, его немного подпилить и все, можно ImpRec юзать.
Ну так я и говорю, 70%. Ваши махинации под 30% подпадают. ) Я и не говорю что профессионал, скорее очень даже наоборот…
Sign up to leave a comment.

Articles