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

 eXeL@B —› Протекторы —› Armadillo 9.40 Восстановление наномитов
Посл.ответ Сообщение


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

Создано: 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:
  1. Address                      Hex dump                     Command                                               
  2. 0051B2E5                      .  5B                       POP     EBX
  3. 0051B2E6                      .  5D                       POP     EBP
  4. 0051B2E7                      .  C2 0400                  RETN    4
  5. 0051B2EA                      >  E8 019F2100              CALL    007351F0
  6. 0051B2EF                      .  CC                       INT3
  7. 0051B2F0                      $  55                       PUSH    EBP
  8. 0051B2F1                      .  8BEC                     MOV     EBP, ESP


при восстановлении наномита по адресу 0051B2EF получаем затертый push ebp



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

Создано: 25 марта 2016 12:43 · Поправил: vden
· Личное сообщение · #2

Ну если затертые прыжком байты сами не являются прыжком, то их можно тоже перенести в восстановленную область?



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

Создано: 25 марта 2016 12:52 · Поправил: dosprog
· Личное сообщение · #3

RAMZEZzz пишет:
а джамп как минимум в 2 байта,


В данном случае - 5 ?

--Добавлено--
..пример кода лучше выглядел без тега [ ASM]..

vden пишет:
Ну если затертые прыжком байты сами не являются прыжком, то их можно тоже перенести в восстановленную область?


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

--Добавлено--
К следующему посту:
RAMZEZzz пишет:
в примере заменяю call и int3 на прыжок в свою подпрограмму, которая выполняет этот call а затем восстановленый из наномита прыжок


А если перед <int3> будет не <call> ?..
В общем, имхо, зависит от количества этих фрагментов.

--Добавлено2-- К следующему посту:

RAMZEZzz пишет:
Но еще жду идеи.


Та тут вроде как только две идеи и есть - одна предложенная, а другая собственный отладчик как в
стартпосте.. Может, та даже более радикальная






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

Создано: 25 марта 2016 12:57 · Поправил: RAMZEZzz
· Личное сообщение · #4

Тогда получается делать так:
в примере заменяю call и int3 на прыжок в свою подпрограмму, которая выполняет этот call а затем восстановленый из наномита прыжок, либо прыгает на следующую за бывшим int3 команду, push ebp в примере. Спасибо за наводку!
Но еще жду идеи.

Добавлено спустя 16 минут
А вообще наномиты обычно сосредоточены в функциях проверки регистрации? Это разработчик задаёт?



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

Создано: 25 марта 2016 13:16 · Поправил: vden
· Личное сообщение · #5

dosprog пишет:
Тогда уже не байты, а инструкции целиком

Это и подразумевалось. Иначе какой смысл

Еще вариант, не очень красивый, но все же: установить свой VEH, ловить int 3 по нужным адресам и обрабатывать как следует.



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

Создано: 25 марта 2016 13:24 · Поправил: dosprog
· Личное сообщение · #6

vden пишет:
установить свой VEH, ловить int 3 по нужным адресам и обрабатывать как следует.

)) это и подразумевалось под "собственным отладчиком".
Головняк однако.. По-любому

RAMZEZzz пишет:
А вообще наномиты обычно сосредоточены в функциях проверки регистрации? Это разработчик задаёт?

- Ну да. В зависимости от старательности, может напихать их в любом месте исходного кода





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

Создано: 25 марта 2016 13:34
· Личное сообщение · #7

RAMZEZzz пишет:
int3 между функциями, который ни на что не влияет.

Это выравнивание кода. Но на них управление вообще не должно попадать. Армагеддон разве не собирает только те "наномиты", которые выполняются?



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

Создано: 25 марта 2016 13:47
· Личное сообщение · #8

RAMZEZzz Armadillo Nanomites Fixer вроде бы так и работает - вешает свой отладчик на отладчик армы

Добавлено спустя 3 минуты
TrueConf Server




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

Создано: 25 марта 2016 14:05
· Личное сообщение · #9

SReg пишет:
TrueConf Server


Один вопрос: как? Как вы узнали? Тоже ее смотрели? И каков результат, если не секрет?



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

Создано: 25 марта 2016 14:09
· Личное сообщение · #10

RAMZEZzz пишет:
Тоже ее смотрели? И каков результат, если не секрет?

да посмотрел, распаковал скриптом, тузла не сработала, я и забил тут же, не вижу смысла напрягаться за 100 баксов. баксов за 300 сделал бы. но это оффтоп все...



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

Создано: 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

ЗЫ. там точно должен быть джамп?

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





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

Создано: 25 марта 2016 14:32
· Личное сообщение · #12

VodoleY пишет:
ЗЫ. там точно должен быть джамп?

да, вы правы, call в итоге ведет на вызов эксепшена, поленился дальше посмотреть с первого раза... так что int3 - не наномит оказывается...
Извините за каламбур
возникает другой вопрос: полностью автоматического средства значит нет, самое надежное - разгребать их руками, так?



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

Создано: 25 марта 2016 14:37 · Поправил: VodoleY
· Личное сообщение · #13

RAMZEZzz инт делала плаг под иду.. якобы чуть чуть лучше чем ArmNF.. когда то я свой писал.. но все равно.. 1-2 ошибки вылазит обычно.. в вашем коде подозрительно еще и то.. что перед int 3 нету cmp .. я часть наномитов так и выправлял.. в зависимости от данных проги. (адрес прыжка то у вас ест.. после int 3) остается угадать ток тип сравнения
АДД. а вообще самый верный способ это порыть обработчик int 3 армы. я года 4 назад так и делал. там не сильно то и сложно. анализ флагов.. и главное таблу дернуть.. которая в зависимости от адреса принемает решение.. прыгать или не прыгать

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





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 25 марта 2016 18:02
· Личное сообщение · #14

повесить VEH кстати не так сложно, обработчики накатал и вперед.
я тут шутки ради сделал лоадер, который инжектит код, вешает обработчик на VEH и ставит
железные бряки и вперед)) на вмпроте норм отрабатывает все.

-----
[nice coder and reverser]




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

Создано: 26 марта 2016 08:45
· Личное сообщение · #15

Hellspawn пишет:
повесить VEH кстати не так сложно, обработчики накатал и вперед.
я тут шутки ради сделал лоадер, который инжектит код, вешает обработчик на VEH и ставит
железные бряки и вперед)) на вмпроте норм отрабатывает все.

на вмпрот.. делал тоже самое.. видимо идея не нова. таким образом делал трассу выполнения вмпрота. но ток это не тот случай. там в случае RAMZEZzz все проще

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





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

Создано: 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:
  1. Access violation - code c0000005 (first/second chance not available)
  2. eax=00000000 ebx=00000000 ecx=967b4c96 edx=00000000 esi=000007a4 edi=74af28e0
  3. eip=7730d28c esp=00fda710 ebp=00fda71c iopl=0         nv up ei pl nz ac po nc
  4. cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b    efl=00200212
  5. ntdll!NtGetContextThread+0xc:
  6. 7730d28c c20800          ret     8

Причем в Olly всё ок, но нужна именно IDA с HexRays'ом...
exe на котором падает: --> Link <--



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

Создано: 29 марта 2016 10:36
· Личное сообщение · #17

RAMZEZzz пишет:
при срабатывании любого бряка (даже на OEP),

а там в TLS кода нету случаем? а падает у тебя изза доступа к памяти.. c0000005 ты. копимем вырубил?

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





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

Создано: 29 марта 2016 11:00 · Поправил: RAMZEZzz
· Личное сообщение · #18

VodoleY пишет:
а там в TLS кода нету случаем?

как проверить?
VodoleY пишет:
ты. копимем вырубил?

дык вроде нет его

Original file: --> Link <--

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


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

Создано: 30 марта 2016 16:42
· Личное сообщение · #19

нет идей ни у кого? что может быть?



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

Создано: 30 марта 2016 18:09 · Поправил: VodoleY
· Личное сообщение · #20

RAMZEZzz ну нету ничего сверхестественного. просто внимательно пересмотри прогу еще раз. RAMZEZzz пишет:
VodoleY пишет:
а там в TLS кода нету случаем?
как проверить?

ПОЧИТАТЬ ЧТО ТАКОЕ TLS и проверить. (РЕ заголовке посмотреть)

RAMZEZzz пишет:
VodoleY пишет:
ты. копимем вырубил?
дык вроде нет его

уверен? код чистый? или пошифрован?

RAMZEZzz пишет:
но нужна именно IDA с HexRays'ом..

накой она тебе впилась? сделай дамп и анализируй его хексреем скок хош.

ЗЫ. если 2 разных дебагера работают по разному.. может взять 3ий? раз уж такая беда?
c0000005 - если я правильно помню ошибка к доступу памяти. ты дочерний процес от родительского отвязал?
ЗЫЫ. какие еще идеи могут быть? ты криво чтото поднял.. олька эксепшины проглатывает, а ИДА валится

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


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


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

Создано: 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 Восстановление наномитов
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати