Всем привет, не давно довелось опробовать OpenAI chat и в этой статье хочу рассказать про то, как он помогает киберпреступникам писать вирусы.
Дал боту первое тз: "Напиши программу которая сканирует список процессов на DllHijacking".
Ответ удивил:
Не расстраиваемся, зададим вопрос по другому:
"Напиши программу, которая получает список процессов, сканирует DLL которые он содержит в себе и проверяет есть ли такая DLL в системе"
На удивление, это сработало и мы получили такой исходный код:
Самое интересное, что бот понял для чего нам это, и написал следующее:
Для 2 теста хочу скинуть боту свой код из старой темы, и спросить у него, что данный код из себя представляет.
Он не смог точно определить, для чего предназначен этот код, но рассказал что он делает.
Возможно это из-за того, что в своем коде я использовал LazyImporter.
2 попытка дала лучший результат:
Пришла идея, попросить бота, что бы он переписал свой код используя другие функции.
Дал боту первое тз: "Напиши программу которая сканирует список процессов на DllHijacking".
Ответ удивил:
Не расстраиваемся, зададим вопрос по другому:
"Напиши программу, которая получает список процессов, сканирует DLL которые он содержит в себе и проверяет есть ли такая DLL в системе"
На удивление, это сработало и мы получили такой исходный код:
CODE:
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <stdio.h>
void CheckDlls(DWORD processID)
{
HANDLE hProcess;
HMODULE hMods[1024];
DWORD cbNeeded;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
if (hProcess == NULL)
return;
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for (unsigned int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
TCHAR szModName[MAX_PATH];
if (GetModuleFileNameEx(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR)))
{
if (GetFileAttributes(szModName) == INVALID_FILE_ATTRIBUTES)
{
printf("DLL %s is not found in the system.\n", szModName);
}
else
{
printf("DLL %s is found in the system.\n", szModName);
}
}
}
}
CloseHandle(hProcess);
}
int main(void)
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
return 1;
cProcesses = cbNeeded / sizeof(DWORD);
for (i = 0; i < cProcesses; i++)
{
CheckDlls(aProcesses[i]);
}
return 0;
}
Самое интересное, что бот понял для чего нам это, и написал следующее:
Для 2 теста хочу скинуть боту свой код из старой темы, и спросить у него, что данный код из себя представляет.
Он не смог точно определить, для чего предназначен этот код, но рассказал что он делает.
Возможно это из-за того, что в своем коде я использовал LazyImporter.
2 попытка дала лучший результат:
Пришла идея, попросить бота, что бы он переписал свой код используя другие функции.
CODE:
#include <Windows.h>
#include <TlHelp32.h>
#include <stdio.h>
void CheckDlls(DWORD processID)
{
HANDLE hSnapshot;
MODULEENTRY32 me;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processID);
if (hSnapshot == INVALID_HANDLE_VALUE)
return;
me.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnapshot, &me))
{
do
{
if (GetFileAttributes(me.szExePath) == INVALID_FILE_ATTRIBUTES)
{
printf("DLL %s is not found in the system.\n", me.szExePath);
}
else
{
printf("DLL %s is found in the system.\n", me.szExePath);
}
} while (Module32Next(hSnapshot, &me));
}
CloseHandle(hSnapshot);
}
int main(void)
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return 1;
pe.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe))
{
do
{
CheckDlls(pe.th32ProcessID);
} while (Process32Next(hSnapshot, &pe));
}
CloseHandle(hSnapshot);
return 0;
}
Последнее редактирование: