ldloc.s <d0t.net> stloc.s <Reversed>
-
Автор темы
- #1
Обходит: всё, кроме виртуализации
GitHub:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Как известно, вмпрот меняет все названия методов/типов/классов/полей и т.п. на недоступимые значения (начинающиеся с цифры). И для того, чтобы это исправить, а нам нужно это исправить, чтобы не замарачиваться с поиском нужного метода и его патча и компилирования кода, воспользуемся специальными программами. Также, вмрпот генерирует почти всю свою сигнатуру всегда, при включении анти-дебаге или же виртуализацией методов, включаются и остальные части кода для других функций защит. WinApi - функции находятся в классе, который можно легко найти и увидеть, в нем будут вызовы с точкой входа, например:
Приступим к самому интересному. Дело в том, что все методы у вмпротекта виртуализированы. Спросите: "А как же тогда, откуда вызываются методы?". Для этого нужно найти класс, в котором будем искать .Invoke(method, parameters); Делается это очень просто.
ПКМ по коду любого места приложения --> Go to <Module>.cctor --> переходим по методу --> Ctrl + F --> вводим Invoke --> и нажимаем 4 раза на Enter --> попадает на нужный нам Invoke. Будет что-то вроде:
В коде будет много мутации, для этого будем использовать демутатор.
И если вы поставите бряк куда я указал, при нажатии на F5 (выполнить) - вы будете видеть методы и аргументы в локальных переменных. Но там будут одни цифры, поэтому будем чистить.
C#:
[DllImport("kernel32", EntryPoint = "FlushViewOfFile", SetLastError = true)]
public static extern bool 2F6134B2(IntPtr 3083415C, int 6CC310E9);
ПКМ по коду любого места приложения --> Go to <Module>.cctor --> переходим по методу --> Ctrl + F --> вводим Invoke --> и нажимаем 4 раза на Enter --> попадает на нужный нам Invoke. Будет что-то вроде:
C#:
IL_AAF:
num += 701444068U; // сюда можете ставить бряк
num /= 1718035421U;
667734B2 = 73BD731A.Invoke(obj3, array4); // это нам нужно. Не пытайтесь ставить брейкпоинт, у вас не получится. Или заходите в IL и ставить на инвок бряк, или ставите на первый num (рекомендую сюда)
num ^= 1971348639U;
IL_AD3:
Dictionary<int, 044A6FB4.2E337EF1> dictionary9 = dictionary;
num |= 1229679295U;
using (Dictionary<int, 044A6FB4.2E337EF1>.Enumerator enumerator2 = dictionary9.GetEnumerator())
И если вы поставите бряк куда я указал, при нажатии на F5 (выполнить) - вы будете видеть методы и аргументы в локальных переменных. Но там будут одни цифры, поэтому будем чистить.
Детект происходит за счет вызова инструкции CPUID 0x40000000 && 0x40000010
А также вызовом EnumSystemFirmwareTables()
А также вызовом EnumSystemFirmwareTables()
Функции, которые вызывает вмпрот для проверки на отладку:
Эти функции успешно обходит сам dnSpy. Для этого ставим галочки в настройках на:
IsAttached
IsLogging
IsDebuggerPresent
CheckRemoteDebuggerPresent
IsAttached
IsLogging
IsDebuggerPresent
CheckRemoteDebuggerPresent
Почему проблемные функции? Потому что dnSpy успешно обходит "непроблемные", а вот с этими не справляется. Но и это мы тоже сейчас исправим
NtQueryInformationProcess
NtQueryInformationProcess
CRC-проверка тут вообще смех. Вмпрот использует WinApi функцию "CreateFile" и маппит его. Ну и понятное дело первым аргументом идет путь, который мы и будем менять на путь к нашему ОРИГИНАЛЬНОМУ ЗАПРОТЕКЧЕННОМУ файлу.
Важно: файл, до всех операций, должен называться "vmp.exe"
Важно: файл, до всех операций, должен называться "vmp.exe"
Драг н дропаем наш защищенный файл на VMP_DeMutation.exe (автор:
Это позволит нам убрать почти всю мутацию с файла.
Важно: файл не должен быть упакован (т.е. когда вы переходите в точку входа и не видите тела методов, такого быть не должно)
Пожалуйста, авторизуйтесь для просмотра ссылки.
)Это позволит нам убрать почти всю мутацию с файла.
Важно: файл не должен быть упакован (т.е. когда вы переходите в точку входа и не видите тела методов, такого быть не должно)
2-ой этап - очистка кода de4dot'ом. Это позволит нам спокойно редактировать и компилировать код в редакторе dnSpy. Использовать нужно с официального репозитория (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), не форкнутого. Но перед этим нужно изменить один флажок файла. Открывает в CFF Explorer наш файл, далее в .NET Directory переходим, нажимаем на синюю кнопку и снимает галочку с IL Only Это нужно для того, чтобы de4dot применял нативные настроки (NativeWrite) при сохранении:Внедряем патчи. Автор - я. Исходники:
Скачать:
Запускаем - драг н дропаем приложение (на данном этапе оно у вас должно называться "vmp.dem-cleaned.exe", а после 'киллера' - vmp.dem-cleaned.justify.exe)
В папке должен лежать нетронутый еще файл, просто защищенный, под названием, как я уже говорил, "vmp.exe"
Пожалуйста, авторизуйтесь для просмотра ссылки.
Скачать:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Запускаем - драг н дропаем приложение (на данном этапе оно у вас должно называться "vmp.dem-cleaned.exe", а после 'киллера' - vmp.dem-cleaned.justify.exe)
В папке должен лежать нетронутый еще файл, просто защищенный, под названием, как я уже говорил, "vmp.exe"
Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.
Последнее редактирование: