Non credo sia abbastanza semplice, ma puoi guardare tu stesso il codice Ruby qui:
https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf
Vedo un corso per keylogging, per uno.
Ecco il comando che viene utilizzato per avviare vim
in lib / vimgolf / cli.rb :
vimcmd = GOLFVIM.shellsplit + %W{-Z -n --noplugin --nofork -i NONE +0
-u #{challenge.vimrc_path} -U NONE -W #{challenge.log_path} #{challenge.work_path}}
@statox aveva (quasi) ragione su -w outfile
... -W outfile
, in realtà, che sovrascrive il file a cui vengono inviati i caratteri digitati anziché aggiungerlo ad esso. Ma come ho già detto, non "abbastanza semplice" ... confronta il contenuto di uno di quei file e ciò che viene generato dallo strumento vimgolf. Questo proviene da un vero problema di Vimgolf ...
-W
output quando copiato e incollato qui:
GI0. ý`gvgý`ZZ
Diversi personaggi non stampabili si sono "persi nella traduzione".
-W
output come appare sullo schermo:
^VGI0. ^[<80>ý`gvg^A<80>ý`ZZ
Beh, è un po 'brutto.
vimgolf ha visualizzato / caricato l'output:
<C-V>GI0. <Esc>gvg<C-A>ZZ
Ah, va meglio.
Aggiornamento: ho trascorso alcuni minuti a guardare un po 'più da vicino le cose e ho un paio di nuove informazioni.
Innanzitutto, la classe keylog.rb di keylogger che menziono sopra è davvero un pezzo importante del puzzle, ma in realtà è abbastanza semplice. I codici chiave che Vim emette e che vengono salvati nel -W
file di registro sono costituiti da un byte o tre byte (indicati da un primo valore di byte di 0x80) e esiste una mappa hash per ciascuno dei due set.
La versione a un byte associa il valore del byte a una rappresentazione in formato stringa del codice chiave come 0
o g
. La versione a tre byte si associa in modo simile a una stringa (ad es. <Esc>
O <C-V>
) ma utilizzando come chiave i valori combinati dei byte due e tre. Esistono alcune eccezioni / casi angolari che vengono gestiti in modo diverso, ma la stragrande maggioranza dei codici chiave viene risolta attraverso semplici ricerche in queste due mappe.
Vedendo quanto fosse basilare il codice del key logger, potevo dire che qualcosa non andava in quello che stavo vedendo nei file di log del keycode (come nell'esempio incollato sopra). Si scopre che avrei dovuto usare il file vimrc richiesto dalle regole di VimGolf. In particolare questa linea
set t_RV=
risulta nella registrazione corretta. L'esempio "appare sullo schermo" sopra in realtà sarebbe simile al seguente:
^VGI0. ^[gvg^AZZ
Ora si può vedere la linea retta da questa stringa "grezza" alla forma renderizzata di VimGolf.