-
Rouse_ © (09.12.15 17:08) [0]Перерабатываю в срочном порядке ядро защиты и тут потребовалась утилита для внешнего контроля изменений с кодом прямо в памяти. Взял и добавил такую возможность в свою старую (уже) утилиту Process Memory Map.
Получилось достаточно забавно.
Грубо вот так выглядел код на точке входа раньше: https://github.com/AlexanderBagel/ProcessMemoryMap/raw/master/img/5.png?raw=true
А вот так теперь я могу его читать сразу напрямую без подключения отладчика (темболее отлачик процессом блокируется):
https://github.com/AlexanderBagel/ProcessMemoryMap/raw/master/img/6.png?raw=true
Дизасм 32 и 64 бита, ядро движка не стал сильно думать и взял BeaEngine 3.1
Бинарник можно забрать вот тут: http://rouse.drkb.ru/files/processmm_bin.zip
Ну а кому интересны полные исходники (ну и скрины демонстрирующие основной функционал утилиты), то тогда вам сюда: https://github.com/AlexanderBagel/ProcessMemoryMap -
Rouse_ © (09.12.15 17:16) [1]Там правда есть небольшой косячек, следующего плана.
Дизавсм автоматом переключается ориентируясь на битность процесса, но в 64 битной ос в память 32 битного процесса подгружены четыре 64 битных библиотеки (ntdll wow64 wow64cpu и wow64win) если дизасмить их код, то т.к. процесс 32 битный - их инструкции будут трактоваться как 32 битные (что конечно ошибка) но это потом попозже поправлю ибо пока этот случай мне не интересен. -
А можно кратко о функционале программы?
Штука вроде полезная, но что-то не могу сообразить как.
Кстати, чем она от того же WinDbg отличается, например? ну в смысле посмотреть за памятью процесса? -
Rouse_ © (11.12.15 10:33) [3]Да, она предназначена как инструмент позволяющий удобно следить за памятью любого процесса, т.е. только чтение без возможности модификации данных.
Быстро определять где мы сейчас находимся, детектировать что за апифункция сейчас выполняется ну и т.п.
Ну и конечно поиск значений в процессе -
Мы под это дело наловчились дампы использовать.
Кстати, "детектировать что за апифункция сейчас выполняется" - это вот как?? или я невнимательно посмотрел и там был call stack? -
Rouse_ © (11.12.15 10:58) [5]там список экспорта строится (Ctrl+E) плюс в свойствах региона отображается ввержу (адрес рассчитывается также как и экпорты через символы)
-
Rouse_ © (11.12.15 11:44) [6]Вот как здесь вверху:
https://github.com/AlexanderBagel/ProcessMemoryMap/raw/master/img/5.png?raw=true
Хоть мы и находимся на точке входа, но он сразу показывает ближайшую к ней функцию, в данном случае это kernel32.dll DuplicateHandle
(иногда и промахивается но алгоритм там простой как пряник, просто вызываем SymGetSymFromAddr и если вернулось что-то нормальное, выводим его) -
Rouse_ © (27.05.16 23:20) [7]А уже кстати 10 альфа выложена :)
Тем кто страдает защитой очень полезен будет новый дизассемблер и режим контроля образа на основе контрольных сумм (MML) :)
ЗЫ: ничего что я тут бесплатный опенсорс пиарю? ;) -
Rouse_ © (27.05.16 23:24) [8]Эмм, рано кнопку нажал...
Оть тут бинарники:
https://github.com/AlexanderBagel/ProcessMemoryMap/releases
Оть тут исходники:
https://github.com/AlexanderBagel/ProcessMemoryMap -
Rouse_ © (27.05.16 23:28) [9]
> KSergey © (11.12.15 10:39) [4]
> Кстати, "детектировать что за апифункция сейчас выполняется"
> - это вот как?? или я невнимательно посмотрел и там был
> call stack?
Выхлоп в дизасме кстати с твоей подачи был сделан (рассчет адресов на дампе идет).
Действительно удобно стало.
https://raw.githubusercontent.com/AlexanderBagel/ProcessMemoryMap/master/img/9.png -
Пока ничего не понял в картинке, но надеюсь, что не слишком вас напряг.