Сейчас на форуме: (+6 невидимых) |
eXeL@B —› Протекторы —› Armadillo 9.40 Восстановление наномитов |
Посл.ответ | Сообщение |
|
Создано: 25 марта 2016 12:34 · Поправил: RAMZEZzz · Личное сообщение · #1 Приветствую. Бьюсь над одним ПО, накрыт Армой 9.40 (DebugBlocker+Nanomites+IAT Elimination+Code Splicing) Снял с помощью модифицированного армагеддона 2.2, хорошо что исходники есть, поправил несколько мест чтоб не падал на данном exe и OEP находил правильно. Импорт восстановился успешно, до армагеддона пытался снять его руками но весь затык был в импорте, что то у меня не сросталось... В общем, в итоге остались наномиты. C помощью армагеддона + ArmNF + правками исходников nanolib и какой то матери нашел наномиты, при автовосстановлении тем же армагедоном он замещает int 3 на джампы, и всё бы ничего, но прога падает. Начал разбираться и восстанавливать их вручную, и обнаружил 2 проблемы: 1 некоторые наномиты оказались "лишними", int3 между функциями, который ни на что не влияет. Ок, их пропускаем... 2 в некоторых местах внутри функций, есть только один int3 в один байт, а джамп как минимум в 2 байта, и ArmNF затирает следующий за int3 "нужный" байт байтом смещения джампа... Вроде бы простой вопрос, а как это побороть не знаю. Навешивать свой отладчик который будет int3 перехватывать и перенаправлять куда следует, как то сложно, может есть способ проще? Гуру, очень жду вашей помощи. Если нужен сам exe, его дамп, таблица наномитов и т.п., отпишите, выложу.. например: Code:
при восстановлении наномита по адресу 0051B2EF получаем затертый push ebp |
|
Создано: 25 марта 2016 12:43 · Поправил: vden · Личное сообщение · #2 |
|
Создано: 25 марта 2016 12:52 · Поправил: dosprog · Личное сообщение · #3 RAMZEZzz пишет: а джамп как минимум в 2 байта, В данном случае - 5 ? --Добавлено-- ..пример кода лучше выглядел без тега [ ASM].. vden пишет: Ну если затертые прыжком байты сами не являются прыжком, то их можно тоже перенести в восстановленную область? Тогда уже не байты, а инструкции целиком.. - Там их и выполнить перед возвратом. Но это сложно. --Добавлено-- К следующему посту: RAMZEZzz пишет: в примере заменяю call и int3 на прыжок в свою подпрограмму, которая выполняет этот call а затем восстановленый из наномита прыжок А если перед <int3> будет не <call> ?.. В общем, имхо, зависит от количества этих фрагментов. --Добавлено2-- К следующему посту: RAMZEZzz пишет: Но еще жду идеи. Та тут вроде как только две идеи и есть - одна предложенная, а другая собственный отладчик как в стартпосте.. Может, та даже более радикальная |
|
Создано: 25 марта 2016 12:57 · Поправил: RAMZEZzz · Личное сообщение · #4 Тогда получается делать так: в примере заменяю call и int3 на прыжок в свою подпрограмму, которая выполняет этот call а затем восстановленый из наномита прыжок, либо прыгает на следующую за бывшим int3 команду, push ebp в примере. Спасибо за наводку! Но еще жду идеи. Добавлено спустя 16 минут А вообще наномиты обычно сосредоточены в функциях проверки регистрации? Это разработчик задаёт? |
|
Создано: 25 марта 2016 13:16 · Поправил: vden · Личное сообщение · #5 |
|
Создано: 25 марта 2016 13:24 · Поправил: dosprog · Личное сообщение · #6 vden пишет: установить свой VEH, ловить int 3 по нужным адресам и обрабатывать как следует. )) это и подразумевалось под "собственным отладчиком". Головняк однако.. По-любому RAMZEZzz пишет: А вообще наномиты обычно сосредоточены в функциях проверки регистрации? Это разработчик задаёт? - Ну да. В зависимости от старательности, может напихать их в любом месте исходного кода |
|
Создано: 25 марта 2016 13:34 · Личное сообщение · #7 |
|
Создано: 25 марта 2016 13:47 · Личное сообщение · #8 |
|
Создано: 25 марта 2016 14:05 · Личное сообщение · #9 |
|
Создано: 25 марта 2016 14:09 · Личное сообщение · #10 |
|
Создано: 25 марта 2016 14:11 · Личное сообщение · #11 а меня вообще смущает эта конструкция.. 0051B2E7 . C2 0400 RETN 4 --- конец функи 0051B2EA > E8 019F2100 CALL 007351F0 ---- не ложный ли? 0051B2EF . CC INT3 - не выравнивание ли по границе? 0051B2F0 $ 55 PUSH EBP -- вот как раз выровнено по границе 4 байта.. и вроде как начало новой функи.. 0051B2F1 . 8BEC MOV EBP, ESP ЗЫ. там точно должен быть джамп? ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 25 марта 2016 14:32 · Личное сообщение · #12 VodoleY пишет: ЗЫ. там точно должен быть джамп? да, вы правы, call в итоге ведет на вызов эксепшена, поленился дальше посмотреть с первого раза... так что int3 - не наномит оказывается... Извините за каламбур возникает другой вопрос: полностью автоматического средства значит нет, самое надежное - разгребать их руками, так? |
|
Создано: 25 марта 2016 14:37 · Поправил: VodoleY · Личное сообщение · #13 RAMZEZzz инт делала плаг под иду.. якобы чуть чуть лучше чем ArmNF.. когда то я свой писал.. но все равно.. 1-2 ошибки вылазит обычно.. в вашем коде подозрительно еще и то.. что перед int 3 нету cmp .. я часть наномитов так и выправлял.. в зависимости от данных проги. (адрес прыжка то у вас ест.. после int 3) остается угадать ток тип сравнения АДД. а вообще самый верный способ это порыть обработчик int 3 армы. я года 4 назад так и делал. там не сильно то и сложно. анализ флагов.. и главное таблу дернуть.. которая в зависимости от адреса принемает решение.. прыгать или не прыгать ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 25 марта 2016 18:02 · Личное сообщение · #14 |
|
Создано: 26 марта 2016 08:45 · Личное сообщение · #15 Hellspawn пишет: повесить VEH кстати не так сложно, обработчики накатал и вперед. я тут шутки ради сделал лоадер, который инжектит код, вешает обработчик на VEH и ставит железные бряки и вперед)) на вмпроте норм отрабатывает все. на вмпрот.. делал тоже самое.. видимо идея не нова. таким образом делал трассу выполнения вмпрота. но ток это не тот случай. там в случае RAMZEZzz все проще ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 29 марта 2016 09:40 · Поправил: RAMZEZzz · Личное сообщение · #16 C наномитами разобрался, вручную их поправил, работает. Теперь новая проблема вылезла: при отладке в IDA, при срабатывании любого бряка (даже на OEP), IDA падает с дампом памяти. Пробовал 6.8, 6.6, 6.5, 6.3 на Win7x86 и Win10x64, Local и Remote Debugger - везде одно... Дамп открывал в windbg: Code:
Причем в Olly всё ок, но нужна именно IDA с HexRays'ом... exe на котором падает: |
|
Создано: 29 марта 2016 10:36 · Личное сообщение · #17 |
|
Создано: 29 марта 2016 11:00 · Поправил: RAMZEZzz · Личное сообщение · #18 VodoleY пишет: а там в TLS кода нету случаем? как проверить? VodoleY пишет: ты. копимем вырубил? дык вроде нет его Original file: | Сообщение посчитали полезным: Hellspawn |
|
Создано: 30 марта 2016 16:42 · Личное сообщение · #19 |
|
Создано: 30 марта 2016 18:09 · Поправил: VodoleY · Личное сообщение · #20 RAMZEZzz ну нету ничего сверхестественного. просто внимательно пересмотри прогу еще раз. RAMZEZzz пишет: VodoleY пишет: а там в TLS кода нету случаем? как проверить? ПОЧИТАТЬ ЧТО ТАКОЕ TLS и проверить. (РЕ заголовке посмотреть) RAMZEZzz пишет: VodoleY пишет: ты. копимем вырубил? дык вроде нет его уверен? код чистый? или пошифрован? RAMZEZzz пишет: но нужна именно IDA с HexRays'ом.. накой она тебе впилась? сделай дамп и анализируй его хексреем скок хош. ЗЫ. если 2 разных дебагера работают по разному.. может взять 3ий? раз уж такая беда? c0000005 - если я правильно помню ошибка к доступу памяти. ты дочерний процес от родительского отвязал? ЗЫЫ. какие еще идеи могут быть? ты криво чтото поднял.. олька эксепшины проглатывает, а ИДА валится ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... | Сообщение посчитали полезным: RAMZEZzz |
|
Создано: 31 марта 2016 09:52 · Поправил: RAMZEZzz · Личное сообщение · #21 VodoleY пишет: VodoleY пишет: а там в TLS кода нету случаем? как проверить? ПОЧИТАТЬ ЧТО ТАКОЕ TLS и проверить. (РЕ заголовке посмотреть) TLS в заголовках не определен (RVA=00000000) VodoleY пишет: RAMZEZzz пишет: VodoleY пишет: ты. копимем вырубил? дык вроде нет его уверен? код чистый? или пошифрован? Код чистый VodoleY пишет: RAMZEZzz пишет: но нужна именно IDA с HexRays'ом.. накой она тебе впилась? сделай дамп и анализируй его хексреем скок хош. Просто к хорошему быстро привыкаешь - отлаживать прямо в хексрее - одно удовольствие. Но видимо придется по старинке - в Olly и асме. Дык с дампом и вожусь. VodoleY пишет: c0000005 - если я правильно помню ошибка к доступу памяти. ты дочерний процес от родительского отвязал? Ну да, дамп сам по себе работает без всяких... VodoleY пишет: ЗЫЫ. какие еще идеи могут быть? ты криво чтото поднял.. олька эксепшины проглатывает, а ИДА валится C вашего "пинка" начал копать глубже, обнаружил что в PE есть debug info, вырезал ее нафиг.... и о чудо!! ИДА заработала с ним без вылетов! Всем спасибо! Тему закрываю.. |
eXeL@B —› Протекторы —› Armadillo 9.40 Восстановление наномитов |
Эта тема закрыта. Ответы больше не принимаются. |