• Почему драйвер зависает, и не вызывает DeviceAdd функцию, а только DriverEntry?

    @armadillo-cld Автор вопроса
    Проблема была в коде драйвера.
    Вот рабочий Hello World
    #include <ntddk.h>  
    #include <wdm.h>
    
    VOID DriverUnload(PDRIVER_OBJECT Driver)
    {
    	UNREFERENCED_PARAMETER(Driver);
    	return;
    }
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegistryPath)
    {
    UNREFERENCED_PARAMETER(pDriverObject);
    UNREFERENCED_PARAMETER(RegistryPath);
    DbgPrint("Hello, world!");
    pDriverObject->DriverUnload = 
    return STATUS_SUCCESS;
    }


    Как оказалось, не всегда для драйвера нужно создавать устройство (IoCreateDevice), что бы потом в Unload прописать его удаление. Достаточно просто добавить функцию Unload и добавить её в pDriverObject, и всё заработает.
    Ответ написан
    Комментировать
  • Как исправить ошибку компиляции Kernel Mode Driver?

    @armadillo-cld Автор вопроса
    https://docs.microsoft.com/en-us/cpp/build/referen...

    Просто уберите из "Свойства проекта" -> "C/C++" -> "Создание кода" -> "Spectre Mitigation" -> Disabled
    Ответ написан
    Комментировать
  • Не получается взять символ из строки на FASM?

    @armadillo-cld Автор вопроса
    Видимо, мне нужно побольше узнать о функциях ассемблера, потому что я ограничиваюсь только lea, mov, jmp, jnz, je, jz, и др.
    Про rep movsb, cld не знал, соответственно не смог выполнить это задание.

    cld
                            mov ecx,processname_len-1
                            lea esi,[processname+1]
                            lea edi,[processname]
                            mov byte al,[edi]
                            rep movsb
                            mov byte [edi],al


    Этот кусок кода сдвигает строку влево на один символ, перемещая первый символ строки на место последнего. Чтобы не сдвигать завершающий строку нуль-терминатор, при определении strlen добавляем минус один. А в ECX помещаем еще на единицу меньше, так как один символ будет обработан отдельно через регистр AL. В приемник загружаем адрес начала строки, а в источник — адрес второго символа (stroka+1). Перед запуском копирования цепочки байтов сохраняем первый символ в AL. После копирования извлекаем его по адресу, содержащемуся в EDI, — это будет уже адрес последнего символа строки
    Ответ написан
  • Как получить список процессов на FASM?

    @armadillo-cld Автор вопроса
    Собственно, берём и объявляем.
    Чего-то я туплю.
    Вот решение:
    ...
    struct PROCESSENTRY32
    dwSize dd ?
    cntUsage dd ?
    th32ProcessID dd ?
    th32DefaultHeapID dd ?
    th32ModuleID dd ?
    cntThreads dd ?
    th32ParentProcessID dd ?
    pcPriClassBase dd ?
    dwFlags dd ?
    szExeFile rb 1024
    ends
    ...
    ; IN section '.data'
    pe32 PROCESSENTRY32 ?
    Ответ написан
    Комментировать
  • WDK Setup не видит Visual Studio?

    @armadillo-cld Автор вопроса
    Проблема решена.
    Дело в том, что у меня багнулся Visual Studio Installer, и при заходе - он выдавал ошибку "Невозможно найти продукт, соответствующий параметрам: installPath="D:\Microsoft Visual Studio\....""
    Пришлось переустановить на диск C:\ (по стандартному пути: Program Files (x86) ... )и всё заработало.
    Наверное, это из-за того, что я где-то удалил какую-то важную папку, я частенько лазаю в C:\ и мусор чищу.
    Ответ написан
    Комментировать
  • Что делать если listen возвращает 10022?

    @armadillo-cld Автор вопроса
    Так и не понял в чём заключалась проблема, но мне кажется что нужно было использовать ::bind а не bind
    Нашел рабочий код тут: https://www.binarytides.com/code-tcp-socket-server...
    WSACleanup();
    	WSADATA wsaData;
    	SOCKET sListen, newConnection;
    	struct sockaddr_in server, client;
    	int c;
    	
    	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
    		dlg->AddLog("Error WSAStartup");
    		return -1;
    	}
    
    	if ((sListen = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
    		dlg->AddLog("Error create socket sListen");
    		return -1;
    	}
    
    	server.sin_family = AF_INET;
    	server.sin_addr.s_addr = inet_addr(IP.c_str());
    	server.sin_port = htons(atoi(PORT.c_str()));
    
    	int result = ::bind(sListen, (struct sockaddr*)&server, sizeof(server));
    	if (result != 0) {
    		string code = to_string(WSAGetLastError());
    		dlg->AddLog(string("Bind error: " + code).c_str());
    	}
    
    	listen(sListen, 256);
    
    	dlg->AddLog("Waiting for connections...");
    
    	c = sizeof(struct sockaddr_in);
    
    	newConnection = accept(sListen, (struct sockaddr*)&client, &c);
    	if (newConnection == INVALID_SOCKET) {
    		dlg->AddLog("Error accept");
    	}
    
    	dlg->AddLog("Connected new user!");
    
    	closesocket(sListen);
    Ответ написан
    Комментировать
  • InternetReadFile добавляет ересь в конец строки. Что делать?

    @armadillo-cld Автор вопроса
    Кхм-кхм...
    Мне, наверное, пора идти спать, 5 часов утра как-никак.
    Решение возникло сразу же, когда я посмотрел на массив.
    Объявлен был так:
    strContent[1024];
    По сути там же ничего нет, так что было достаточно заполнить его нулями:
    strContent[1024] = {0};
    И всё заработало.
    Не расценивайте как спам, просто был невнимателен, а решение оставлю, вдруг у кого то тоже такое будет.
    Ответ написан
    2 комментария
  • Старт верстальщиком на фрилансе?

    @armadillo-cld
    Работайте сначала на теневых форумах.
    По типу lzt.guru или dark2web.com
    Там почти конкуренции 0.
    Сам зарабатывал там когда-то.
    Потом набьёте портфолио, и вперёд на фриланс.
    Ответ написан
    Комментировать
  • Как получить значение из массива в json?

    @armadillo-cld Автор вопроса
    Решено!
    var des = JsonConvert.DeserializeObject<List<Settings>>(File.ReadAllText("settings.json"));
                foreach(string i in des[0].keys)
                {
                    Console.WriteLine(i);
                }
    Ответ написан
    Комментировать
  • Лучше развиваться или зарабатывать деньги?

    @armadillo-cld
    Что мешает развиваться во время выполнения заказов(заработка)?
    Что-то не знаете - погуглили, посмотрели на форумах, изучили, сделали.
    И опыт, и знания, и заработали деньги за заказ.
    Ответ написан
  • Как вытащить текст из картинки?

    @armadillo-cld
    Достаточно зайти на https://translate.yandex.ru
    Нажать "Картинка" сверху
    Вставить картинку
    Выделить нужный текст
    После чего он вставится в бокс переводчика, и вы сможете его скопировать.
    Ответ написан
  • Не получается внедрить dll в процесс?

    @armadillo-cld Автор вопроса
    Сам смеялся. Решение было достаточно лёгким.
    Я вызывал функцию не правильно.
    Вызывал:
    di.inject_DLL("winhex.exe", di.GetPID("winhex.exe"));

    Нужно:
    di.inject_DLL("module.dll", di.GetPID("winhex.exe"));

    Всем спасибо за помощь.
    Ответ написан
    Комментировать