Prijavi se z GoogleID

» »

Keylogger

Keylogger

Blisk ::

A obstaja kak program, ki bi mi ob pritisku na katerokoli tipko naredil en TXT fajl.
Ne rabim vedeti katera tipka je bila pritisnjena, ne stavkov, nič, samo da se naredi naprimer datoteka keyboard.txt.

Imam sicer tole skripto ki sem jo predelal iz powershell ampak jo antivirus zazna kot keylogger in je ne pusti izvajati.
Dal sem jo tudi v izjemo ampak ne pomaga.
Torej rabim preprosto skripto ali program, ki mi ob pritisku katerekoli tipke na tipkovnici oz. vsaj črke in številke naredi txt fajl. Če bi zadeva zaznala še premikanje miške bi bilo odlično!

function Test($logPath="D:\test\keyboard.txt") 

{
  # API declaration
  $APIsignatures = @'
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] 
public static extern short GetAsyncKeyState(int virtualKeyCode); 
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int GetKeyboardState(byte[] keystate);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MapVirtualKey(uint uCode, int uMapType);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int ToUnicode(uint wVirtKey, uint wScanCode, byte[] lpkeystate, System.Text.StringBuilder pwszBuff, int cchBuff, uint wFlags);
'@
 $API = Add-Type -MemberDefinition $APIsignatures -Name 'Win32' -Namespace API -PassThru
    
  # output file
   while ($true) {
      Start-Sleep -Milliseconds 40            
      for ($ascii = 9; $ascii -le 254; $ascii++) {
        # get key state
        $keystate = $API::GetAsyncKeyState($ascii)
        # if key pressed
        if ($keystate -eq -32767) {
          $null = [console]::CapsLock
          # translate code
          $virtualKey = $API::MapVirtualKey($ascii, 3)
          # get keyboard state and create stringbuilder
          $kbstate = New-Object Byte[] 256
          $checkkbstate = $API::GetKeyboardState($kbstate)
          $loggedchar = New-Object -TypeName System.Text.StringBuilder
          # translate virtual key          
          if ($API::ToUnicode($ascii, $virtualKey, $kbstate, $loggedchar, $loggedchar.Capacity, 0)) 
          {
            #if success, add key to logger file
            [System.IO.File]::($no_output = New-Item -Path $logPath -ItemType File -Force)
            
          }
        }
      }
    }
  }
   
 test


exit
  • predlagalo izbris: zee ()

LilStalker ::

Kaj pa imaš to za ene poredne načrte?

Blisk ::

LilStalker je izjavil:

Kaj pa imaš to za ene poredne načrte?

Nobenih porednih načrtov, pač pa ko je računalnik v uporabi se ne sme pognati program za backup, ker sicer ga full upočasni.

Zato pa ne rabim vedet kaj se tipka in počne, ampak samo če so tipke v uporabi in miška oz. če nekdo dela na računalniku.
Task Scheduler ne pride v poštev.

Kolk denarja da mi tole nekdo sprogramira?

Zgodovina sprememb…

  • spremenil: Blisk ()

Gagatronix ::

Kaksnega calla za idle time pa ni ? Recimo nekaj takega, ki preverja ce se lahko sprozi screensaver. Ker to bi ti konkretno olajsalo zadeve.

OrkAA ::

Premisli, ce ti bo to res resilo problem. Ko bos enkrat zaznal, da je racunalnik idle, se bos moral odlocit kako hitro se backup lahko zacne. Po 5 minutah? eni uri? Kaj se zgodi, ko prides nazaj do racunalnika in backup program dela? Ga bos lahko dal na pavzo?

Jaz bi najprej pogledal, ce lahko programu omejis I/O priority. Torej, das mu najnizjo mozno prioriteto, kar pomeni, da bodo tvoje akcije vedno imele prednost pri uporabi diska/cpuja.

Druga moznost je, da uporabis program, ki ima take funkcije ze vgrajene - https://support.code42.com/Administrato...

darkolord ::

Sicer pa je za to GetLastInputInfo API funkcija.
spamtrap@hokej.si
spamtrap@gettymobile.si

Blisk ::

kar rabim je en exe fajl, ki ga poženem, kakorkoli že in dela kot proces v ozadju in preverja, če je kakšna tipka pritisnjena ali če se miška premika, ko zazna karkoli od tega naredi en txt fajl, ko naprimer 30 min. ni več aktivnosti, pobriše ta txt fajl.
to je vse, pa exe fajl bi moral prebrati nastavitve.cfg kjer bi določil kam se naj shrani ta txt fajl (pot) in koliko časa obstaja ta txt fajl ko ni več aktivnosti (ko je fajl star 30 min naprimer).
Pa še ena stvar je, če tale exe laufa in bi hotel še 1x zagnati ta exe se ne bi zagnal, se pravi dela samo 1 proces v ozadju. In delati mora na win7
to je vse.

OrkAA je izjavil:

Premisli, ce ti bo to res resilo problem. Ko bos enkrat zaznal, da je racunalnik idle, se bos moral odlocit kako hitro se backup lahko zacne. Po 5 minutah? eni uri? Kaj se zgodi, ko prides nazaj do racunalnika in backup program dela? Ga bos lahko dal na pavzo?

Jaz bi najprej pogledal, ce lahko programu omejis I/O priority. Torej, das mu najnizjo mozno prioriteto, kar pomeni, da bodo tvoje akcije vedno imele prednost pri uporabi diska/cpuja.

Druga moznost je, da uporabis program, ki ima take funkcije ze vgrajene - https://support.code42.com/Administrato...


vse to smo že probal pa ne gre, ne morem uporabljati drugih zadev ker je to ena specifična zadeva in sem omejen s tem kar imam.
Ko prideš nazaj pa če se backup dela mašine ne moreš uporabljati, ker ne gre, prekinit backup pa ne moreš.

tako da dejansko rabim en exe ki bo deloval kot process v ozadju ko ga poženem.

Zgodovina sprememb…

  • spremenil: Blisk ()

darkolord ::

Čisto na hitro, najbolj basic varianta, zaznava premikanje miške ali tipkovnice (no, ne premikanje tipkovnice, ampak tipkanje po njej):

using System.Runtime.InteropServices;
using System.Threading.Tasks;


[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
	public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

	[MarshalAs(UnmanagedType.U4)]
	public UInt32 cbSize;
	[MarshalAs(UnmanagedType.U4)]
	public UInt32 dwTime;
}

static uint GetLastInputTime()
{
	uint idleTime = 0;
	LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
	lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
	lastInputInfo.dwTime = 0;

	uint envTicks = (uint)Environment.TickCount;

	if (GetLastInputInfo(ref lastInputInfo))
	{
		uint lastInputTick = lastInputInfo.dwTime;
		idleTime = envTicks - lastInputTick;
	}

	return ((idleTime > 0) ? (idleTime / 1000) : 0);
}

private uint _lastInputTime;
private bool _idle = false;
private string _fileName;
private int _idleTime = 1800;

void Main()
{
	var cfg = File.ReadAllLines("nastavitve.cfg");
	_fileName = cfg[0];
	int.TryParse(cfg[1], out _idleTime);
		
	_lastInputTime = GetLastInputTime();
	
	while (true)
	{
		var inputTime = GetLastInputTime();

		if (_idle && inputTime - _lastInputTime < 1)
		{
			_idle = false;
			
			File.Create(_fileName).Close();
		}
		
		if (!_idle && inputTime - _lastInputTime > 5)
		{
			_idle = true;
			
			if (File.Exists(_fileName)) 
				File.Delete(_fileName);
		}
		
		Thread.Sleep(1000);
	}
}


Prva vrstica v nastavitve.cfg je ime fajla, ki naj se kreira; druga vrstica je idle čas v sekundah, po katerem se ta fajl izbriše.
spamtrap@hokej.si
spamtrap@gettymobile.si

Zgodovina sprememb…

  • spremenilo: darkolord ()

Blisk ::

hvala za tole, predvidevam da je powershell skripta.
samo pri meni ne deluje, zaradi nekih napak

datoteka nastavitve.cfg
E:\A\test.txt
50000

At E:\mouse_key_move.ps1:1 char:6
+ using System.Runtime.InteropServices;
+      ~
Missing using directive
At E:\mouse_key_move.ps1:2 char:6
+ using System.Threading.Tasks;
+      ~
Missing using directive
At E:\mouse_key_move.ps1:2 char:1
+ using System.Threading.Tasks;
+ ~~~~~
A 'using' statement must appear before any other statements in a script.
At E:\mouse_key_move.ps1:3 char:1
+ [DllImport("user32.dll")]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected attribute 'DllImport'.
At E:\mouse_key_move.ps1:4 char:1
+ static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
+ ~~~~~~
Unexpected token 'static' in expression or statement.
At E:\mouse_key_move.ps1:6 char:15
+ [StructLayout(LayoutKind.Sequential)]
+               ~
Missing closing ')' in expression.
At E:\mouse_key_move.ps1:6 char:1
+ [StructLayout(LayoutKind.Sequential)]
+ ~~~~~~~~~~~~~~
Unexpected attribute 'StructLayout'.
At E:\mouse_key_move.ps1:6 char:25
+ [StructLayout(LayoutKind.Sequential)]
+                         ~~~~~~~~~~~
Unexpected token '.Sequential' in expression or statement.
At E:\mouse_key_move.ps1:6 char:36
+ [StructLayout(LayoutKind.Sequential)]
+                                    ~
Unexpected token ')' in expression or statement.
At E:\mouse_key_move.ps1:11 char:13
+     [MarshalAs(UnmanagedType.U4)]
+                ~
Missing closing ')' in expression.
Not all parse errors were reported.  Correct the reported errors and try again.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingUsingStatementDirective

Zgodovina sprememb…

  • spremenil: Blisk ()

darkolord ::

Ajej, C# je tole. Če bi rad .exe, je tole najhitrejš. Imaš VS Code ali VS?

Lahko ti skompajlam tudi jaz, samo mi boš pač moral zaupat, da ti pošiljam to isto zadevo ..
spamtrap@hokej.si
spamtrap@gettymobile.si

win64 ::

Se backup zaganja preko task scheduler-ja?
Tam imaš opcijo, da se task zažene samo, če je računalnik idle. Lahko celo nastaviš koliko časa mora biti računalnik idle.

Pozabi, sem prehitro prebral.

Zgodovina sprememb…

  • spremenil: win64 ()

Blisk ::

darkolord je izjavil:

Ajej, C# je tole. Če bi rad .exe, je tole najhitrejš. Imaš VS Code ali VS?

Lahko ti skompajlam tudi jaz, samo mi boš pač moral zaupat, da ti pošiljam to isto zadevo ..


sem si naložil VS samo moram še naštudirat kako to spravim v exe.
Lahko poveš zakaj je tole posebej?
ne spada zraven kode?
using System.Runtime.InteropServices;
using System.Threading.Tasks;

Zgodovina sprememb…

  • spremenil: Blisk ()

darkolord ::

Posebej je, ker je okoli še nekaj malenkosti, odvisno od tega, kakšen app narediš.

V tvojem primeru v VS narediš nov "C# Console App (.NET Framework)", potem pa vsebino fajla Program.cs zamenjaš s temle spodaj. Ko daš Build se ti bo v mapi bin\Debug ali bin\Release naredil .exe

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        [DllImport("user32.dll")]
        static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        struct LASTINPUTINFO
        {
            private static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

            [MarshalAs(UnmanagedType.U4)]
            public uint cbSize;
            [MarshalAs(UnmanagedType.U4)]
            public uint dwTime;
        }

        static uint GetLastInputTime()
        {
            uint idleTime = 0;
            LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
            lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
            lastInputInfo.dwTime = 0;

            uint envTicks = (uint)Environment.TickCount;

            if (GetLastInputInfo(ref lastInputInfo))
            {
                uint lastInputTick = lastInputInfo.dwTime;
                idleTime = envTicks - lastInputTick;
            }

            return ((idleTime > 0) ? (idleTime / 1000) : 0);
        }

        private static uint _lastInputTime;
        private static bool _idle = false;
        private static string _fileName;
        private static int _idleTime = 1800;

        static void Main()
        {
            var cfg = File.ReadAllLines("nastavitve.cfg");
            _fileName = cfg[0];
            int.TryParse(cfg[1], out _idleTime);

            _lastInputTime = GetLastInputTime();

            while (true)
            {
                var inputTime = GetLastInputTime();

                if (_idle && inputTime - _lastInputTime < 1)
                {
                    _idle = false;

                    File.Create(_fileName).Close();
                }

                if (!_idle && inputTime - _lastInputTime > _idleTime)
                {
                    _idle = true;

                    if (File.Exists(_fileName))
                        File.Delete(_fileName);
                }

                Thread.Sleep(1000);
            }
        }
    }
}
spamtrap@hokej.si
spamtrap@gettymobile.si

Blisk ::

Sem naredil fajl je 156kb velik exe fajl, ko ga poženem se za trenutek pokaže neko okno in izgine, ampak potem ga ni v task managerju prav tako ne dela.
Verjetno sem kaj narobe naredil.

darkolord ::

156 kB je malo velik - moj je 6 KB.

Si pognal ConsoleApp1.exe ali mu je ime kako drugače?

Če ga poženeš v cmdju, kaj ti napiše?
spamtrap@hokej.si
spamtrap@gettymobile.si

Zgodovina sprememb…

  • spremenilo: darkolord ()

WhiteAngel ::

Mislim, da preveč kompliciraš. Arhiviraš, ko pač arhiviraš, ampak program za arhivirat poženeš z nice/ionice oz. ekvivalent na windowsih. Ko bodo prišli zraven pomembnejši procesi, bodo imeli ti višjo prioriteto in se bo arhiviranje ustavilo v tistem kratkem trenutku.

bluefish ::

darkolord je izjavil:

156 kB je malo velik - moj je 6 KB.
Verjetno je kompajlal Debug verzijo. Izbrati mora Release.

Blisk ::

no tole sem naredil pa fajl noče bit manjši od 156 Kb.



pa neke fajle še zahteva

Zgodovina sprememb…

  • spremenil: Blisk ()

Blisk ::

Sem še enkrat skompajlal release verzijo pa je isto manjka mu hostpolicy.dll

darkolord ::

Ko si naredil nov projekt, si izbral "Console App (.NET Core)", moral bi pa izbrati "Console App (.NET Framework)"
spamtrap@hokej.si
spamtrap@gettymobile.si

Blisk ::

darkolord je izjavil:

Ko si naredil nov projekt, si izbral "Console App (.NET Core)", moral bi pa izbrati "Console App (.NET Framework)"

ja res je, te opcije sploh nisem imel sem jo moral namestiti, zdaj je res 6Kb.
ampak ko zaženem se ne zgodi nič, kurzor utripa na mestu. datoteke ni, ko tipkam ali premikam miš
https://mab.to/qgcRLXBjU

Je komu ratalo tole skompajlat in program dela?

Zgodovina sprememb…

  • spremenil: Blisk ()

Blisk ::

Res ni nobenga junaka, ki bi men tole pomagal spravit v pogon? :'(

WhiteAngel ::

Ali najde nastavitve.cfg? Si poskusil zagnati iz cmd, da vidiš, če kaj izpiše?

Blisk ::

WhiteAngel je izjavil:

Ali najde nastavitve.cfg? Si poskusil zagnati iz cmd, da vidiš, če kaj izpiše?

vse sem probal pa se ne zgodi nič, program se zažene, najde cfg ampak se ne zgodi nič.
Pognal sem tudi direktno v VB pa isto nič.
Razen če bi moral dati kaj extra v cfg fajl?

darkolord ::

Očitno sem nekaj zaj... ko sem sestavljal, probaj še takole:

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        [DllImport("user32.dll")]
        static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        struct LASTINPUTINFO
        {
            private static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

            [MarshalAs(UnmanagedType.U4)]
            public uint cbSize;
            [MarshalAs(UnmanagedType.U4)]
            public uint dwTime;
        }

        static uint GetLastInputTime()
        {
            uint idleTime = 0;
            LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
            lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
            lastInputInfo.dwTime = 0;

            uint envTicks = (uint)Environment.TickCount;

            if (GetLastInputInfo(ref lastInputInfo))
            {
                uint lastInputTick = lastInputInfo.dwTime;
                idleTime = envTicks - lastInputTick;
            }

            return ((idleTime > 0) ? (idleTime / 1000) : 0);
        }

        private static bool _idle = false;
        private static string _fileName;
        private static int _idleTime = 1800;

        static void Main()
        {
            var cfg = File.ReadAllLines("nastavitve.cfg");
            _fileName = cfg[0];
            int.TryParse(cfg[1], out _idleTime);

            while (true)
            {
                var inputTime = GetLastInputTime();

                if (_idle && inputTime  < 1)
                {
                    _idle = false;

                    File.Create(_fileName).Close();
                }

                if (!_idle && inputTime > _idleTime)
                {
                    _idle = true;

                    if (File.Exists(_fileName))
                        File.Delete(_fileName);
                }

                Thread.Sleep(1000);
            }
        }
    }
}
spamtrap@hokej.si
spamtrap@gettymobile.si


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Funkcija GetAsyncKeyState

Oddelek: Programiranje
61107 (810) Looooooka
»

Java skeniranje map in podmap

Oddelek: Programiranje
6631 (520) nightrage
»

kako narediti program ki bere drugi program

Oddelek: Programiranje
463848 (2161) imagodei
»

uporaba C++ unmanaged kode v C#.NET projektu

Oddelek: Programiranje
111326 (1049) krho
»

[C#] unmanaged->managed code

Oddelek: Programiranje
111596 (1471) Zvonko

Več podobnih tem