Hi people,

I have come across the following idea on the 'Net. With this method you 
cannot bypass keyloggers completely, however, you can *REALLY* confuse 
them. It works with almost any application, but I'll explain it using 
Keepass as an example. It goes like this (more info @ 
http://cups.cs.cmu.edu/soups/2006/posters/herley-poster_abstract.pdf):

You activate your target window. Now you find any area on that window, 
which is unresponsive to keystrokes. For Keepass it is the keyfile 
combobox (so you have to use a keyfile, but you should do it anyway :), 
i.e. if you click the combo box and press a key, Keepass discards that 
key. While the combo box is still open (or closed, doesn't matter, it 
should simply must have the focus), just press a random number of keys 
in that box. Now, you click the password box and type a character of 
your password. Then you click the combobox again and press some more 
random keys. And you repeat the process for each character of your password.

The more characters you use, the better. You could use literally 
hundreds of chars. For even more confusion, I've added a few things of 
my own:

- I'm making the password dialog completely transparent, since some 
keyloggers make screenshots after each mouseclick and so they could 
analyze the number of chars in your password
- your script can click in the password box in varying order, i.e. begin 
with the a char from the middle of your pass, then on next turn, your 
script clicks at the very beginning and types the preceding character, 
then on next it clicks far right in the password box and types the 
succeeding character (to the very first char), and so on.

I think the idea should be pretty clear and it's well suited to be 
automated for very sensitive passwords.

Since Keepass 1.x Auto-Type can be easily intercepted, you could even 
let PowerPro drag'n drop passwords (which is caught by virtually no 
keylogger) from Keepass to target window, though I'm not sure how this 
could be implemented in an easily reusable way.



A basic script which sends a single key to the password looks like this, 
it sends a fake "a" and a real "b". But you could use any number.

---- CUT ----
    local _target = "Open Database - Enter Master Key"
    win.show(_target)
    win.trans(_target, 255)

    local _input_pos = "450 125"   ;; relative position of password input
    local _dummy_pos = "495 185"   ;; relative position of combo-box
    local _wsml = 50   ;; duration of shorter waits
    local _wbig = 250   ;; duration of longer waits

    win.mouse("save")

    win.mouse("relative " ++ _dummy_pos ++ " lc")
    wait.forinterval(_wbig)
    win.keys("{to "++_target++"}a")
    wait.forinterval(_wsml)
    win.mouse("lc relative " ++ _input_pos ++ " lc")
    win.keys("{to "++_target++"}b")
    wait.forinterval(_wbig)
    ; and so on

    win.trans(_target, 0)

    win.keys("{to "++_target++"}{enter}")
    win.mouse("restore")
---- CUT ----

I've no idea yet how could be use more effectively for more passwords. 
I've also come across Keeform, which unfortunately works only for IE, 
and so I'll post this to Autoit-Forums as well.
(http://www.autoitscript.com/forum/index.php?showtopic=19403)

For more techniques against keyloggers, see:
http://en.wikipedia.org/wiki/Keylogger#Keylogger_prevention

Hope this helps and any suggestions/improvements are most welcome.

Cü

Reply via email to