Сейчас на форуме: -Sanchez- (+9 невидимых) |
eXeL@B —› Основной форум —› Взлом .NET (part 2) |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . >> |
Посл.ответ | Сообщение |
|
Создано: 12 сентября 2017 12:06 · Личное сообщение · #1 Со времени создания топика много обсудили, во много м разобрались и много осталось за кадром. Решил подшить выкладываемый софт и линки Инструменты: Рег-данные: Code:
Рег-данные: Code:
Документация: Статьи с хабры: Другое: Прошлый топик https://exelab.ru/f/action=vthread&forum=1&topic=16650&page=-1 - Last edit: 2012-02-17, Links fixed. Jupiter | Сообщение посчитали полезным: prorab777, ViruSZ7 |
|
Создано: 12 сентября 2019 15:17 · Поправил: ajax · Личное сообщение · #2 |
|
Создано: 12 сентября 2019 16:25 · Личное сообщение · #3 api монитор говорит обратное, посмотрим запилит лоадер там видно будет. Учитывай что net dll не тоже самое что простой натив телам еще надос скомпилится, расположится в памяти и т.д. Если он прав ломанем все))) Добавлено спустя 20 минут если ajax пишет: хук со сравнением имени "пролетит" создаю социальный заказ на универсальный генератор лоадеров для NET сборок))) |
|
Создано: 12 сентября 2019 21:04 · Личное сообщение · #4 Medsft вот посмотри https://mega.nz/#!eAwGDCYZ!MATZZ0Wo7sJDgV7WOpRq9oZWhj_YXh0vWZDkzQitPw8 dll не mixed поэтому через LoadLibraryExW не чекается. сделал через костыль, как умею...я не такой профи как большинство здесь... но вроде работает. патч только одно байта | Сообщение посчитали полезным: r_e |
|
Создано: 12 сентября 2019 21:10 · Личное сообщение · #5 Для mixed длл зачастую можно подцепиться через цепочку зависимостей. Думаю что тот семпл что ты дал можно через сторонний инжект сделать (CreateRemoteThread + DLL = patch) потому что у тебя по кнопке все. А вот если бы оно со старта вызывало протекченный код - было бы гораздо хуже. Впрочем, тоже решаемо. ----- старый пень | Сообщение посчитали полезным: zds |
|
Создано: 12 сентября 2019 22:58 · Личное сообщение · #6 |
|
Создано: 13 сентября 2019 03:46 · Личное сообщение · #7 Исходить нужно из того, что это dll: 1. Образы на диске и в памяти различаются из за формата, в частности базовые поправки адресов и выравнивание секций. 2. Загрузчик(ntldr) не может загружать копию модуля. Как минимум для этого есть проверка на уровне ядра(NtAreMapped). Это значит что в проверке загрузчик не участвует. Проверяющий код самостоятельно прочитает файл, напрямую или через проекцию. Тогда при открытии файла открыть оригинальный, либо если используются проекции - после отображения восстановить изменённые области(при этом так как проекция файловая, то можно менять её атрибуты на запись). Лучше второй способ, так как по описателям может быть запрос инфы про файл, например проверка что модуль и проекция из одного файла, теоретически. NtMapView -> if MemoryMappedFilenameInformation(handle) == target_file: NtProtectVi(Base) -> fix_data. ----- vx |
|
Создано: 13 сентября 2019 08:49 · Личное сообщение · #8 |
|
Создано: 13 сентября 2019 09:05 · Личное сообщение · #9 |
|
Создано: 13 сентября 2019 10:12 · Личное сообщение · #10 Признаю работает. 5 Вам) Щас усложню тест Добавлено спустя 8 часов 27 минут Такс усложню задачу.Теперь на форме 2 кнопочки и два разных метода проверки strongName с использованием стандартных апи. Необходимо чтобы оба выдавали правильное сообщение Патчить только 1 байтик 126a_13.09.2019_EXELAB.rU.tgz - test.zip |
|
Создано: 13 сентября 2019 22:43 · Поправил: difexacaw · Личное сообщение · #11 Medsft Я немного покодил, получается вот что. Файл читается многократно(W7), отображается как Image два раза, затем отображается как не pe, при этом не разделяем, те эксклюзивное чтение. Из за этого попытки что либо сделать с образом приводят к нехватке прав, так как секция создана с недостаточными правами, которые задаются при открытии файла. Что бы не возиться с секциями(возникают траблы с отображением на запись), проще вернуть описатель копии образа при открытии файла. Но и это не снимает основную проблему. Каким образом определить что происходит валидация образа ? Этот комовский рантайм сам проецирует файлы, при этом они не исполняемы(в com образы нет передач управления, те там NX). Code:
Вопрос - критерий, по которому можно определить факт проверки файла. Разумеется без хардкода системных процедур(смотреть бэктрейс стековый). Выборка на компиляцию и валидацию идёт из одного и того же модуля. ----- vx |
|
Создано: 14 сентября 2019 00:11 · Личное сообщение · #12 difexacaw пишет: Каким образом определить код что я реализовал в этом примере ничем не закрыт и его можно посмотреть любым декомпилем (к примеру dnspy) ради интереса скачайте этот инструмент статик анализа и взгляните на тело метода checkv2. Я просто применил малозадокументизированную апи, код её самой натив вы в нем уче разбираетесь чем я. Как определить.... Да я хз первое что приходит на ум отловить readprocessmemory когда процесс матка читает сам себя. NET изначально был ограничен майкрософтом в прямом доступе к памяти, незачем ему это подразумевалось. Пишу с телефона поэтому не вижу полной картины своего поста). zds лоадер будет? difexacaw а вы защиту пишите?)) |
|
Создано: 14 сентября 2019 08:58 · Личное сообщение · #13 Medsft Что бы обойти проверку нужно знать конкретный механизм проверки. Иначе может быть проверка уже загруженного модуля, тогда вообще не отличить - идёт компиляция или данные выбираются для вычисления контр суммы. Для вашего семпла первые два вызова NtMapView это загрузка модуля из clr, третий вызов это отображение для проверки из mscorwks. При этом разница - для загрузки отображение Image, для проверки Map, тоесть проверка происходит образа как файла, а не как pe. Достаточно сменить права на запись, что бы отображение произошло не как R, а как RW и восстановить там файловые данные. Либо во втором способе можно открыть исходный файл и вернуть его описатель. ----- vx |
|
Создано: 14 сентября 2019 11:17 · Личное сообщение · #14 |
|
Создано: 14 сентября 2019 12:00 · Личное сообщение · #15 Medsft вот https://mega.nz/#!aRxiUayI!yCj8AM6P5C5B_5mofWHMkaRiOvMgVHmNeRDuXcEOvbU все продолжает работать. поменял только адрес для патча PS, тут не совсем понятно когда срабатывает лоадер, возможно уже после ваших проверок. для чистоты эксперимента добавьте в следующий тест перед проверкой вызов лоадера Code:
тогда уже будет точно ясно срабатывают ваши проверки или нет |
|
Создано: 14 сентября 2019 12:16 · Личное сообщение · #16 zds А как это работает ? Проверка заключается в эксклюзивном открытии файла, отображении его в память на R и вызове криптоапи. У вас в сурке поиск файловых проекций и какие то манипуляции с ними(в не image проекции R данные никаким образом из юзермод изменить невозможно, только переотобразить) или загрузочными апи. Это всё не имеет отношения к самой проекции и как следствие к механизму проверки. Получается что результат проверки файла вообще не используется, хотя эта проверка есть ? ----- vx |
|
Создано: 14 сентября 2019 12:38 · Личное сообщение · #17 difexacaw извиняюсь, но я не понял вопроса у меня лоадер делает только патч 1 байта, которого попросил сделать Medsft я уже говорил выше, что код сделан хреново (на сколько хватает моих скудных познаний). т.к. тестовая dll не mixed mode, я не могу отследить ее старт через LoadLibraryExW. Поэтому все сделано через жопу и есть вероятность, что лоадер патчит нужный байт уже после вызова CheckV2 или CheckV1. Поэтому я попросил в следующий тест добавить прямой вызов лоадера перед вызовом CheckV2 или CheckV1, чтобы точно знать, что в момент вызова проверки лоадер уже отработал. | Сообщение посчитали полезным: difexacaw |
|
Создано: 14 сентября 2019 12:52 · Поправил: difexacaw · Личное сообщение · #18 zds Твой семпл под отлачиком. Как и без твоего загрузчика. Два отображения Image и одно R-map. Если пофиксить в Image, то всё равно происходит детект. В Map пофиксить нельзя без ремап, если туда поставить останов и при выборке подставить оригинальные данные, то тест проходит. Но твой лодер ничего не делает с этим отображением, не смотря на это тест проходит. В чём подвох ? Добавлено спустя 3 минуты Medsft Плохой семпл, не смотря на хорошую проверку с эксклюзивным отображением её школьники прошли, хоть и не ясно как ^ Результат проверки теряется, каким то образом это побочный эффект ----- vx |
|
Создано: 14 сентября 2019 13:11 · Личное сообщение · #19 Так опять с телефона поэтому уж извините к коду доступа нет. 1)chevkv1 работает с образом на диске 2)checkv2 работает с развёрнутой image. Многократно нажатие вызывает каждый раз проверку image на целостность. Как работает net сначала образ с диска мапируется на память и по мере надобности компилирует методы и располагает уже натив код где-то откуда и происходит дальнейший процессинг (это наше исследование с dife). Похоже ты залез в промежуток между. Компа нет поблизости не могу сделать модификацию семпла и даже пока не знаю как без перекрытия jit |
|
Создано: 14 сентября 2019 13:19 · Личное сообщение · #20 |
|
Создано: 14 сентября 2019 13:21 · Личное сообщение · #21 |
|
Создано: 14 сентября 2019 13:26 · Поправил: difexacaw · Личное сообщение · #22 |
|
Создано: 14 сентября 2019 13:34 · Личное сообщение · #23 difexacaw я хз как это работает. меня вполне устраивает тот факт, что это работает и я этим пользуюсь уже давно. когда не будет работать, буду искать другие варианты и не надо оскорблять, я уже давно не школьник, мне за 30. и я вроде тут не кого не оскорблял, ни кому ни чего не пытался доказать или принизить. Medsft многократно не получается нажать, после закрытия окна результата прога закрывается как я говорил выше возможно сначала выполняется твой checkv2, в процессе подгружаются какие-то dll через LoadLibraryExW, в результате лоадер наконец-то находит твою dll в памяти и патчит ее (уже после того как checkv2 был выполнен). либо убери закрытие проги после закрытия окна, либо добавь вызов лоадера перед checkv2 кстати заметил, если запустить твою тестовую прогу как есть и нажать на тест2, результат появляется через 4-5сек, если запускать с лоадером, то мгновенно. но я ничего с этим не делал, только патч 1 байта, как ты просил. исходники есть. |
|
Создано: 14 сентября 2019 13:37 · Личное сообщение · #24 |
|
Создано: 14 сентября 2019 15:27 · Личное сообщение · #25 |
|
Создано: 14 сентября 2019 18:38 · Личное сообщение · #26 difexacaw пишет: Если пропатчить Image, то проверка не проходит г уверен? Добавлено спустя 15 минут Еще difexacaw - zds же исходники прилагает, там же наверное понятно что патчится то. zds сделай генератор лоадеров который на вход принимает паф и таблицу :смещение что на что а потом генерится stand alone loader |
|
Создано: 14 сентября 2019 19:50 · Личное сообщение · #27 Medsft не вижу смысла автомитизировать это в текущем виде. как я говорил выше, главная проблема тут это детект нужной dll. частое выполнение GetDLLsBaseAddresses (перебор всех регионов памяти, см исходники) заметно сильно тормозит выполнение реальных приложений, особенно если это еще все накрыть чем-то. поэтому я делаю первый тестовый прогон, смотрю в логе при загрузке какой dll в MyLoadLibraryExW происходит обнаружение нужного нам модуля, беру ее и еще +3 и -3 dlls и ставлю их условием при котором будет срабатывать GetDLLsBaseAddresses. в этом случае производительность не падает. |
|
Создано: 14 сентября 2019 21:15 · Личное сообщение · #28 |
|
Создано: 14 сентября 2019 22:42 · Личное сообщение · #29 |
|
Создано: 14 сентября 2019 23:06 · Личное сообщение · #30 Medsft пишет: Есть такая классная прога https://www.apimonitor.com/ ловит все в том числе api mscoree. Кстати может кто полечит оч нужная вещь при исследовании net программ http://www.apimonitor.com/download/fulledition/APIMonitor.exe SN: 2091178488-C4FF1B543386BCBC | Сообщение посчитали полезным: mak, CyberGod, Medsft, Isaev, Orlyonok |
|
Создано: 15 сентября 2019 00:33 · Личное сообщение · #31 |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . >> |
eXeL@B —› Основной форум —› Взлом .NET (part 2) |