CRACK de Invisible Keylogger 1.2 dit IK
By Nody
Intro.
Logiciel : (Amecisco) Invisible Keylogger 1.2 dit IK
Source : http://www.amecisco.com (800 ko)
Commentaires :
IK est un petit Keylogger sympa, assez discret. Si j’ai bien capté les
descriptifs du site web de IK, il met en mémoire un module qui intercepte les touches
avant même windows. Ça c’est très cool.
Problème : IK est un shareware.
Il écrit les touches dans un fichier ik.dat cryptés que dat2txt.exe permet de décrypter. Il crée en fait un buffer de 75 touches en mémoire puis il les écrit dans le fichier.
La version shareware est limité à 500 touches enregistrées. En fait, 500 touches c’est vite écrit, alors c’est parti pour une version illimitée.
Le Crack.
Installez IK et redémarrez Windows pour qu'il soit chargé en mémoire. On trouve le
programme principal dans c:\program files\ik\, accompagné de dat2txt.exe
qui est chargé de décrypter ik.dat (fichier contenant les touches frappés par
l'utilisateur).
Faites un Ctrl-Alt-Suppr et vous voyez IK chargé comme tâches. Tapez 500 lettres (ça va
vite ... :-) ) et refaites un Ctrl-Alt-Suppr, ô magie, IK a disparu. Ne vous inquiétez
pas, ré-exécutez ik.exe et vous aurez le droit à 500 nouvelles touches
gratuites. Bon, passons aux choses sérieuses...
Mais c'est pas tout, il y a aussi une jolie DLL dans c:\windows\system\ qui s'appelle ik.dll. On la fait passer directement chez w32dasm et zou, un jolie petit morceau d’asm.
Bon allons voir les ‘exported fonctions’ Il y en a une qui a l'air sympa, c'est l'API ‘KeyboardHook' . On va alors la charger avec le Symbol Loader de Soft-Ice. Vous êtes grand, je vous laisse faire ça.
Maintenant sous Soft-Ice, tapez un ‘bpx keyboardhook’ et sortez de Soft-Ice..
On tombe directement dedans et on y retourne aussi vite après un Ctrl-D.
Voilà une partie de la source de KeyboadHook :
(Note : les 4 premiers chiffres de l'offset sont sûrement différents sous Soft-Ice)
1000120D mov dword ptr [1000C0B0], 00000000
10001217 mov byte ptr [eax+1000C010], cl
1000121D mov ecx, dword ptr [1000C0B4]
10001223 inc eax eax := eax + 1
10001224 inc ecx ecx := ecx + 1
10001225 cmp ecx, 000003E8 \
[...] \ ecx < à 1000 ? Si oui on va en 1000126B
10001236 jl 1000126B \
[...]
* Reference To: USER32.UnhookWindowsHookEx, Ord:0248h
10001249 call dword ptr [1000B25C]
[...]
* Reference To: USER32.PostMessageA, Ord:01B1h
1000125B call dword ptr [1000B268]
10001261 mov eax, 00000001 eax := 1
[...]
10001268 ret 000C bye bye....
* Reference by a (U)nconditional or (C)onditional Jump at
Address:
|:10001236 (C)
|
1000126B cmp eax, 00000096 \ eax == 150 ?
10001270 jne 10001277 \ oui on continue, non on saute
10001272 call 10001300 \ c'est pour après...(pas important)
* Reference by a (U)nconditional or (C)onditional Jump at
Addresses:
|:100011FC (C), :10001201 (C), :10001270 (C)
|
[...]
* Reference To: USER32.CallNextHookEx, Ord:0011h
1000128B call dword ptr [1000B260]
[...]
10001293 ret 000C bye bye ....
Sous Soft-Ice, virez le bpx 'keyboadhook' et faites un 'bpx unhookwindowshookex'. Amusez-vous à taper des lettres et à un moment, vous tombez sous Soft-Ice pour le USER32! UnhookWindowsHookEx. Tapez F12 et vous tombez où ? Et ouais dans IK à l'offset 10001249 (cf le détail de la routine au-dessus). Sortez de Soft-Ice, faites un Ctrl-Alt-Suppr et vous verrez que IK n'est plus là.
Bon, pas bien difficile à comprendre. Si vous êtes pressés, remplacez le jl en 10001236 en un jmp. Je suis gentil je donne l'hexa :
7C 33 E8 C3 00 00 00 par E9 33 E8 C3 00 00 00
C'est bien de patcher un jl en jmp, mais bon, faut pas s'arréter là.
Qu'est-ce qui provoque le saut ? C'est le cmp ecx, 3E8, ie compare ecx à 1000. Mouais mais 1000 c'est 500 * 2, c'est le_nombre_de_touches_autorisées * 2. Si vous avez tracez l'API KeyboardHook, vous avez remarquez qu'après le mov ecx, dword ptr [1000C0B4], on a ecx = eax. Mais c'est seulement ecx qui est utilisé pour la comparaison 'nombre de touches utilisées > 500?'.
En fait, eax et ecx jouent le rôle de compteur dans cette routine mais ils ne comptent
pas la même chose : ecx sert UNIQUEMENT pour la protection, alors eax est vraiment utile
pour le programme.
Regardez, on a ça, si nombre de touches < à 500 :
1000126B cmp eax, 00000096
10001270 jne 10001277
10001272 call 10001300
Compare eax à 0x96 ie 150 et si eax = 150 alors on fait le call 10001300. Que représente 150 ? Encore une fois, 150 = 75 * 2 = taille_du_buffer * 2,et devinez ce qu'il y a dans le call ? La routine d'écriture des caractères dans ik.dat.
Je n'ai toujours pas compris pourquoi eax = nombre_de_touches_frappées * 2, mais bon, on se passera de l'explication.....
Question : comment cracker autrement ik.dll qu'en remplaçant le jl ?
En nopant le inc ecx of course !! Mais il y a plein d'autres facçons !! Par conter, éviter de noper le inc eax, c'est plus risqué ... Mais vous pouvez mettre un cmp ecx, 540BE3FF (petit farceur va :-) ),cmp ebx, 3e8, etc .....
Conclu.
Rien de bien difficile, le tout est de trouver la bonne routine .....
Remarques pour l'utilisation de IK : IK est très pratique pour choper les mots de
passe des connections internet (qui a dit du lycée ???) mais faites gaffe quand même,
par exemple rennomer le en 'explorer.exe', 'win386.exe', 'system.exe' et évidement, ne
laisser pas trainer le fichier dat2txt.exe sur le pc de votre victime, on sait jamais
......
De plus, si le pc est assez lent au démarrage, la fenêtre ik peut-etre visible pendant 1
ou 2 secondes dans la barre des tâches.
Après l'avoir renommé, crééz un fichier ik.reg et exécutez le et il contiendra ça :
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"ik"="C:\\PROGRA~1\\IK\\IK.EXE"
et remplacer ik.exe par system.exe, etc ....