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

 eXeL@B —› Обсуждение статей —› [ R.Narvaja, estet, MARcoDEN ] Распаковка Армадилло с IAT Elimination (часть 3)
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 536.4 (!), 171thx
Активность: 0.660.13
Статус: Администратор
Создатель CRACKL@B

Создано: 22 ноября 2010 00:12
· Личное сообщение · #1

Обсуждение статьи Распаковка Армадилло с IAT Elimination (часть 3)

-----
Всем не угодишь




Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 21 июня 2014 23:30
· Личное сообщение · #2

Распаковываю программу, пакованную армой, дошел до 3 части, но застрял на поиске записи значений апи функций в таблицу. В самом начале статьи Рикардо ставит бряк на запись на адрес хранения адреса апи функции, перезапускает программу и у него срабатывает бряк, но адрес начала таблицы постоянно меняется. И у меня из-за этого бряк не срабатывает. А как можно изменить адрес таблицы ? Я нашел этот адрес, у меня этот адрес всегда 12d3f4. Я пробовал ставить бряк на запись по этому адресу, но очень много раз он изменяется, перед тем как таблица начнется заполняться.



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 22 июня 2014 04:31
· Личное сообщение · #3

kola1357
поставь WinXP себе на ВМ и дебаж.
хватить е..ать мозги мемберам, почему адреса другие и изменяются




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 22 июня 2014 05:01
· Личное сообщение · #4

SReg пишет:
kola1357
поставь WinXP себе на ВМ и дебаж.
хватить е..ать мозги мемберам, почему адреса другие и изменяются


Че-то у меня подозрения, что товарищ даже не знает что такое стек.... Крайне прескорбно..



Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 22 июня 2014 11:43 · Поправил: kola1357
· Личное сообщение · #5

Rainbow пишет:
Че-то у меня подозрения, что товарищ даже не знает что такое стек.... Крайне прескорбно..

Хах мне даже смешно стало от таких подколов.

Добавлено спустя 8 минут
SReg пишет:
поставь WinXP себе на ВМ и дебаж.

Я люблю работать на вин 7, а хп винда старая. Но заметьте что адрес, в котором хранится указатель на таблицу не меняется. А создается это значение рандомом и сохраняется в этот адрес 12d3f4. Только обращений на перезапись к этому адресу слишком много, пока он начнет использоваться для таблицы. Поэтому я решил написать скрипт небольшой, который будет писать в лог адрес команды остановки и значение этого адреса, а как только прервемся на адресе заполнения таблицы, то скрипт тормозим.

loop:
run
cmp eip,2254f // это адрес заполнения таблицы, если мы тут, то тормозим скрипт.
jne st
ret

st:
log eip
mov s,[12d3f4]
log s
jmp loop

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

У меня получился адрес 00хх2B79, а базовый адрес все время меняется после перезапуска, но это я отловил, через VirtualAlloc, она возвращает адрес базовый при создании страницы.

Добавлено спустя 12 минут
SReg пишет:
поставь WinXP себе

Я не думаю, что это будет решение данной проблемы. Как вы видели в моем предыдущем посте, я писал, что страничка, в который код заполнения таблицы, создается динамически, при помощи VirtualAlloc, так чем тут хп поможет, эта функция выделяет память случайным образом. И на хп будет давать разные адреса вовзврата в eax.



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

Создано: 22 июня 2014 12:06 · Поправил: VodoleY
· Личное сообщение · #6

kola1357 там апи в 3 этапа распаковывается..(с рандомом кстате) + 2 таблицы импорта.. одна загаженная, 2ая реальная. сделайте нормальный дампер и разбирайте в статике говнидло. + вам еще с со сплайсами прийдется повозиться.. они не сложноые.. но гимора добавляют
З.Ы, рандом.. там для перемешивание фунок .. между собой.. рекомендую сразу делать в ПРАВИЛЬНОМ порядке.. чтоб не путаться

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 22 июня 2014 12:40
· Личное сообщение · #7

VodoleY пишет:
ам апи в 3 этапа распаковывается..(с рандомом кстате) + 2 таблицы импорта

Да кажется так. Сначала я ставил бряк на байты в call [], которые идут после FF 15, попал на заполнения липовой таблицы, указатель который направлен в секции пакера, после этого я обнаружил где хранится указатель, потом как выше писал, сделал скрипт и поймал последний момент перезаписи указателя, там я его специально поменял, чтобы он указывал в секцию data программы. Также в этом месте я поставил бряк на запись в таблицу по новому указателю и поймал процедуру, которая производит заполнение. Там сравнил заполнение хороших и плохих адресов и нашел магик джамп, который решает и занопил его, таблица вся заполнилась хорошими адресами, программа правда вылетела после этого дела. Она тот адрес после заполнения переписывает там команды и видимо либо спалила изменения в коде, либо она расчитывает новое значения по старому и естественно сбилась. Поэтому тут тоже написал скрипт короткий, который просто флаг меняет на этом джампе.

Про сплайсы пока не дошел, но уже посмотрел, это вроде антидампы ? Только название другое придумали ? Увидел в секции кода много джампов, ведущих в секцию пакера.



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

Создано: 22 июня 2014 12:46
· Личное сообщение · #8

kola1357 пишет:
Про сплайсы пока не дошел, но уже посмотрел, это вроде антидампы ?

сплайс. это кусок кода.. стыренного .. загаженного.. и перенесенного в др. место. расчищается 6-тью сигнами. ИНТ делал кусок для иды. и есть полу готовое решение тут на форуме. ищи

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 22 июня 2014 16:44
· Личное сообщение · #9

VodoleY
Ну вообще у меня и для наномитов скрипты есть. Сейчас посмотрел свои труды, немного удивился от количества написанного кода. Мне обычно лень что-то такое делать. Но топикстартер хочет по Нарвахе распаковывать. Это наверняка лучше, чем мои скрипты разбирать построчно. Там конечно есть комментарии, но все равно без теории это все тяжело.



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

Создано: 22 июня 2014 18:53
· Личное сообщение · #10

OFFTOP
Прочитал про XP, сам на ней сижу.
Но возник вопрос, неужели никто ничего не сделал что бы выключить ASLR для всех процессов в более новых редакциях Windows.

В книге внутреннее устройство Windows 7 (6-е издание) страница 443, этап запуска процесса "Этап 3.А настройка процесса EPROCESS", пункт 9, тут про решение запуска ASLR.

А вот тут выключение этой технологии в Windows 7 и 8.1
http://digital-forensics.sans.org/blog/2014/02/17/malware-analysis-and-aslr-on-windows-8-1





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 22 июня 2014 19:24
· Личное сообщение · #11

Alinator3500 пишет:
Но возник вопрос, неужели никто ничего не сделал что бы выключить ASLR для всех процессов в более новых редакциях Windows.


Enhanced Mitigation Experience Toolkit



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

Создано: 22 июня 2014 19:31
· Личное сообщение · #12

Если пройти по ссылке, то Enhanced Mitigation Experience Toolkit там и указан в случае Win7.



Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 22 июня 2014 22:13
· Личное сообщение · #13

Alinator3500 пишет:
неужели никто ничего не сделал что бы выключить ASLR для всех процессов

Я экспериментировал с этой программкой EMET как-то, после отключения ASLR некоторые программы отказались запускаться.

Да и чем это поможет ? Арма выделяет себе секцию памяти через VirtualAlloc, результат всегда будет случайным, потому что она в параметр адрес ставит NULL, то есть память будет выделена там, где решит ОС. Эта функция возвращает базовый адрес памяти.

Добавлено спустя 4 минуты
VodoleY пишет:
сплайс. это кусок кода.. стыренного .. загаженного.. и перенесенного в др. место.

Сплайс оригинально починил. Значит после не скольких приходов в оеп заметил, что анти-дамп каждый раз указывает в разные секции. То есть опять прот как-то получает случайное число. Поставил бряк на апи Time, из ее ответа рассчитывается адрес секции, а потом опять VirtualAlloc арма вызывает. Ну и тут я просто подменил в EAX адрес секции, записал туда адрес одной из секций армы, благо их оказалось много, а так как после распаковки они использоваться не будут, значит мы не затрем так важный код программы.



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

Создано: 22 июня 2014 22:20
· Личное сообщение · #14

kola1357 пишет:
записал туда адрес одной из секций армы

Ну на самом деле это пол работы. В идеале их надо чистить и вставлять на место.



Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 22 июня 2014 22:53 · Поправил: kola1357
· Личное сообщение · #15

int пишет:
В идеале их надо чистить и вставлять на место.

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



Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 23 июня 2014 19:44
· Личное сообщение · #16

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

Вот мне интересно почему так на хп происходит, что VirtualAlloc возвращает одно и тоже почти всегда, но при установке бряка на него, возвращает разные значения ? Как это можно объяснить, что хп выделяет память программе по одному и тому же адресу после перезапуска ?



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

Создано: 23 июня 2014 21:04
· Личное сообщение · #17

kola1357 пишет:
Руками чистить там много работы, нужно скрипт писать

Есть такое дело) Если работаешь в OllyDbg просто делаешь дамп этой области памяти и не паришься с приделыванием в секцию программы. Запоминаешь адрес. Потом IDA открываешь свой не рабочий дамп и применяешь скрипт, который я написал. Нет смысла повторять чью то уже проделанную работу. За одно может ошибки найдете - пишите, исправлю.

kola1357 пишет:
Но мне также интересно есть ли в арме решение, чтобы арма не делала анти-дампы

Анти-дампы это маркерное решение. Т.е. разработчик ставит маркеры внутри своих функций. Затем арма ворует код и пихает в свои недры. Потом идет процесс обфускации и сохранение обфускированного кода внутри вырезанных блоков и плюс в отдельную выделяемую область памяти. Т.е. на самом деле в защищенной программе нет оригинального кода без обфускации. Стало быть никаких волшебных патчей тут не придумаешь. Так что или дамп или чистить. Чистить легко. Обфускация шаблонная.

5d3f_23.06.2014_EXELAB.rU.tgz - splice_cleaner.idc

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


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

Создано: 23 июня 2014 21:21
· Личное сообщение · #18

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



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

Создано: 23 июня 2014 21:53
· Личное сообщение · #19

Archer
Может быть ты и прав. Маркерами похоже только наномиты и шифрование. Я уже не помню. А вообще я разбирал в 3-ей арме весь процесс упаковки. Там как раз можно спалить багу с генератором случайных чисел, что позволяет распаковать без ключа на старых версиях (на новых не изучалось).

Кстати маркеры стали причиной тому, что я автоматизировал процесс удаления наномитов. Сбоев не давал ни разу. Обычный скрипт для IDA который находит маркеры (а они всегда парами) и используя анализатор IDA разгребает все переходы между двумя маркерами.



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 23 июня 2014 21:55 · Поправил: SReg
· Личное сообщение · #20

Тоже думаю что без маркеров, т.к. попадались проги где сплайсов было порядка 10к переходов.
з.ы. Запиливал давно даже тузлу, которая чистит код и переносит на родное место, но потом как выяснилось, в украденом коде есть инструкции типа mov r32,r32 и это был оригинальный код(видел правда только mov edi,edi), и если не перенести эти пару байт то оригинальный код испортится... вообщем забил.



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

Создано: 23 июня 2014 21:58
· Личное сообщение · #21

SReg пишет:
и если не перенести эти пару байт то оригинальный код испортится... вообщем забил

Мне тоже что-то про это говорил Vodoley. У него вроде был случай push eax/pop eax. Программа на Delphi. Сам такое не встречал. В любом случае я проверяю длину и в логе выводится, если не удалось вставить на место из-за ошибки длины вставляемого блока. А пару ошибок можно и руками исправить.



Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 23 июня 2014 22:01
· Личное сообщение · #22

int пишет:
Т.е. на самом деле в защищенной программе нет оригинального кода без обфускации.

Да, я тоже предполагал что оригинального варианта изначально нет, да и логично, что разработчики так сделали.

Кстати а по поведению VirtualAlloc есть какик-нибудь мнения ? Тестировал прогу, пакованную армой версии 4.42, в которой иат испорчена протом. Протектор при заполнении таблицы иат создает секцию памяти себе через VirtualAlloc, но вот на хп эта функция почти всегда возвращала на тестах один и тот же адрес, а на 7 было множество вариантов.

Почему так происходит ? У меня предположение, что на хп система запоминает память, которую использовала прога и после перезапуска эти куски памяти и отдает. Как вы думаете, так ли это ?

И еще на хп при тесте этой же проги, я пробовал ставить бряк на VirtualAlloc и функция начинала возвращать разные адреса. Как можно это поведение программы объяснить ? Я полагаю, что прога обнаруживает обычный бряк и начинает намеренно выделять память в другом регионе, чтобы запутать взломщика.
Хотя почему бы просто не прервать выполнение, если она обнаружила бряк ?




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

Создано: 24 июня 2014 09:08
· Личное сообщение · #23

Из-за ASLR так происходит. Никакие адреса хп не запоминает. Выделение происходит исходя из карты памяти. Видимо, бряк меняет карту памяти, создавая приватную для процесса страницу, а не шареную. Можешь попробовать ставить ХВ бряк. И никто там никого не пытается запутать. Увы и ах, но винда и софт не крутятся только вокруг взломщика, одна заботливо за него запоминая, а вторая коварно портя адреса памяти. Если так интересно-бери и сорцы винды читай/отлаживай ядро, чем в 33 топика уже вопрос про эту память постить.




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 24 июня 2014 13:30
· Личное сообщение · #24

kola1357 пишет:
Я экспериментировал с этой программкой EMET как-то, после отключения ASLR некоторые программы отказались запускаться.


пример, пожалуйста.

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

Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 24 июня 2014 14:34 · Поправил: kola1357
· Личное сообщение · #25

Gideon Vi пишет:
пример, пожалуйста.

Эксперимент проводил с этой программкой UnPackMe_Armadillo4.42.a с сайта tuts4you.
http://rusfolder.com/41055963 Вот она, залил.
Значит, в программе EMET снимал галочку про использование ASLR, но после этого она не хочет запускаться, вылетает.

Archer пишет:
Из-за ASLR так происходит.

Хорошо, допустим, но как на 7 заставить программу без ASLR работать ? Отключить удалось, а вот работать не хочет. Да и еще Process Explorer показывает, что прога не использует ASLR http://floomby.ru/s2/eWupxd

Archer пишет:
Можешь попробовать ставить ХВ бряк.

Да действительно процесорные бряки не влияют на выделение.



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

Создано: 24 июня 2014 16:56
· Личное сообщение · #26

Что-то тему про арму захламили своими ASLR. В чем проблема похучить VirtualAlloc и явный адрес туда поставить? Это все причем скриптом можно автоматизировать. А что касается 7-ры и новых ОС, то это дикое извращение снимать проты старые на новых ОС. Проты гадят везде где только можно, и 90% защит вообще не работают на последующих ОС. Виртуальную машину в зубы и вперед, грабить караваны.

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

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

Создано: 24 июня 2014 17:01
· Личное сообщение · #27

to Gideon Vi
EMET как много в этом слове.
* Available and applicable only to 32-bit processes
** EMET supports Windows 7, Windows 8, Windows 8.1 и т.д.
Я на Win 8.1 ставил 4.0 стабильный билд (сейчас 4.1 доступна), а теперь вынужден сидеть на 5.0 Technical Preview.
На 4.0 иногда сайты с HTTPS не открывались в малопопулярных браузерах (другие для другого, все 32 битные), и выключал проверку и включал по дефолту, читал мануал по совместимости. Браузер мог вообще не запускаться, висит в процессах без GUI. Обновление Windows не работало, не пускало в шары локалки, youtube не разворачивал видео на пол экрана. (при удаленном с EMET 4.0 было тоже самое).
На 5.0 вроде норм уже как месяца 3-4, при удалении его старые настройки активны только доступа к ним нет, присосался короче :D
Или у меня руки кривые и я не смог правильно нажать 2 кнопки для установки, или она конфликтует с другим софтом в моем окружении. Разбираться лень, пущай* висит защищает.




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 24 июня 2014 17:11
· Личное сообщение · #28

kola1357 пишет:
Эксперимент проводил с этой программкой UnPackMe_Armadillo4.42.a с сайта tuts4you.


win7 x64 c aslr - вылет. Можно пример настоящего софта, а не чьего-то левого унпакми?

Alinator3500, я не знаю, что там с 8,1.




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

Создано: 24 июня 2014 18:21 · Поправил: Dr0p
· Личное сообщение · #29

> в программе EMET снимал галочку про использование ASLR

> Хорошо, допустим, но как на 7 заставить программу без ASLR работать ?

Это вы не про тот ASLR думаете, у вас трабл с ядерным, а вы ставя галки управляете софтверным

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



Ранг: 14.4 (новичок), 8thx
Активность: 0.050
Статус: Участник

Создано: 24 июня 2014 18:40
· Личное сообщение · #30

int пишет:
В чем проблема похучить VirtualAlloc и явный адрес туда поставить?

Да тут нет проблемы, просто на хп получается об этом не нужно думать, вот и на 7 так хочется сделать.
int пишет:
Виртуальную машину в зубы и вперед

Да я как раз и сижу на виртуалке Wmware c win xp sp2.
Gideon Vi пишет:
Можно пример настоящего софта

Софта любого или пакованного именно армой ? Если любой, то вот к примеру у меня программа Floomby, process explorer показывает, что она использует ASLR.


. 1 . 2 . >>
 eXeL@B —› Обсуждение статей —› [ R.Narvaja, estet, MARcoDEN ] Распаковка Армадилло с IAT Elimination (часть 3)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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