Projekto pradžia
Kartą dėl „sportinių“ sumetimų sumanėme pagaminti kompiuterio klaviatūros šnipą. Naršydami internete, radome platų klaviatūros šnipų pasirinkimą. Programinės versijos netiko, nes joms įdiegti kompiuteryje privalėjome turėti Administratoriaus teises. „Hardvarinių“ versijų irgi radome, bet mokėti už jas nemažus pinigus nesinorėjo, nes jautėme, kad galime patys pasidaryti tokį prietaisą.
Prie darbo
Klaviatūra bendrauja su AK skankodais. Nuspaudus klavišą, host‘ui nusiunčiamas „Make“ kodas (dažniausiai vieno baito), o atleidus – nusiunčiamas „Brake“ kodas (dažniausiai du baitai – F0 ir „Make“ kodas). Pavyzdžiui, trumpai paspaudus „a“ klaviatūroje, host‘as gauna tris baitus: 1C F0 1C. Funkcinių klavišų skankodai yra ilgesni.
„Q“ klavišo skankodas. Kanalas A yra Clock signalas, kanalas B yra Data signalas (autorius – Adam Chapweske)
Pirmas prietaiso variantas buvo juokingas ir nepatogus naudojimui. Tiesiog panaudodavom Clock ir Data signalų laidus iš klaviatūros kabelio ir pravesdavom laidą iki kito PC LPT prievado. Tame kompiuteryje mano programa sinchroniškai įrašydavo Clock ir Data lygius į tekstinius failus „nuliukų-vienetukų“ pavidalu. Po 30 sekundžių skanavimo, failai užimdavo apie 60 MB. Taigi programą reikėjo paleisti tik slaptažodžio įvedimo metu, o tai ne visada buvo įmanoma. Po to programa analizuodavo gautus failus ir išskirdavo klavišų paspaudimus. Jie buvo paverčiami iš skankodų į ASCII simbolius pagal lentelę. Iš pat pradžių buvo aišku, kad tai yra tik laikinas sprendimas.
Pirmo prietaiso varianto duomenų dekodavimo programa
Sekantis variantas jau turėjo AVR mikrokontrolerį. Nesukau galvos dėl pavadinimo ir pavadinau jį Loggeriu. Jis jungiamas prie Clock ir Data signalų laidų tarp klaviatūros ir kompiuterio. AVR kontroleris įrašo skankodus į savo vidinę atmintį (128 baitai). Vidinės AVR‘o atminties užtenka įrašyti apie 40 klavišų paspaudimų, nes skankodai yra nuo 3 iki 5 baitų ilgio. Buvo idėja prijungti išorinę EEPROM atmintį, bet vėliau nusprendžiau to atsisakyti, nes man nereikėjo tokio atminties kiekio. Pridėjus programinį filtrą host‘o valdymo ir klaviatūros inicializavimo komandoms, login-password lengvai sutelpa į vidinę AVR atmintį.
Veikimo principas
Loggeris gauna maitinimą per PS/2 jungtį, t. y., įsijungia kartu su PC. Kompiuterio įjungimo metu vyksta klaviatūros inicializavimo procedūra, kurios aš neaprašinėsiu. Beveik visus šios procedūros skankodus Loggeris išfiltruoja taupydamas vietą atmintyje. Spaudžiant klaviatūros mygtukus, skankodai įrašomi į Loggerio atmintį. Kai atmintis persipildo, Loggeris veikia toliau tik tam, kad atpažintų teisingai įvesta slaptą klavišų kombinaciją. Jei aptinkamas teisingas kodas, Loggeris nustato High būseną Control linijoje, kuria valdo 4066 mikroschemą. Taip Loggeris nutraukia ryšį tarp PC ir klaviatūros, pats likdamas prijungtas prie Clock ir Data linijų, einančiu į PC.
Toks veiksmas leidžia Loggeriui imituoti klaviatūros veikimą ir išsiusti sukauptą informaciją į bet kokį tekstinį redaktorių. Jei AVR pradėtų siusti duomenis neatjungus klaviatūros, tie duomenys patektų ne tik į PC, bet ir į klaviatūrą, kuri supras juos kaip valdymo komandas iš PC ir mėgins į jas reaguoti. Gaunasi visiška betvarkė ir PC dažniausiai „pakimba“.
Modifikacijos
Padarėme du Loggerio variantus:
1. Išorinis. Jis jungiamas į PC PS/2 prievadą ir prie jo jungiama klaviatūra. Privalumai – galima greitai prijungti / atjungti. Trūkumai – matomas (nors ne kiekvienas kasdien pasižiūri į savo kompiuterio galinį skydelį, tuo labiau jei kompiuteris pakištas po stalu).
Duomenų nuskaitymas: išimame Loggerį ir prijungiame jį prie kito kompiuterio su PILNAI užkrauta operacine sistema. Atidarome key.exe ir surenkame slaptą kodą. Pagal nutylėjimą trijų simbolių kodas yra „Tarpas“, „`“, „Num+“. Jį galima pakeisti programiškai. Po sekundės viršutiniame key.exe lange pasirodys skankodu seka iš AVR atminties. Spaudžiame GO (slapto kodo simboliai turi būti ištrinti ). Programa paverčia skankodus į ASCII simbolius ir apatiniame lange matome rezultatą. Jei rezultatas atrodo įtartinas, atidarykite gautą failą notepad. Visos simbolių poros turi būti atskirtos tarpais. Priekyje neturi būti slapto kodo simbolių. Programa gali suklysti, jei Loggerio darbo metu ilgesnį laiką buvo paspaustas kuris nors klavišas (buvo įsijungęs „autorepeat“). Jei failas atrodo tvarkingai, o programa jo vis tiek nesupranta, pamėginkite dekoduoti skankodus rankiniu būdu pasinaudojus ASCII lentele.
Key.exe duomenų dekodavimo programa
2. Vidinis. Loggeris įmontuojamas į klaviatūros vidų. Privalumai – niekas net neįtars, kad jo klaviatūroje padaugėjo detalių. Trūkumai – ilgesnis montavimas.
Duomenų nuskaitymas: jei galima pasinaudoti tuo pačiu kompiuteriu su PILNAI užkrauta operacine sistema, tai tiesiog atidarome notepad ar key.exe, suvedame slaptą kodą ir dekoduojame vietoje. Arba galima prijungti „patobulintą“ klaviatūrą prie kito kompiuterio su PILNAI užkrauta operacine sistema. Toliau veiksmai kaip ir su Loggerio išoriniu variantu.
Išvados
Loggerio gamyba buvo gera patirtis. Teko išstudijuoti PS/2 protokolą, susipažinti su AVR (tai buvo mano pirmasis AVR projektas), net paprogramuoti su „Borland Builder C++“ (nemažai nervų man kainavo). Tačiau sukurtas prietaisas nėra tobulas. Norint gauti tikrai universalų įrenginį, galima būtų:
- Prijungti norimos talpos išorinę EEPROM atmintį.
- Panaudoti AT90S2323 vietoj 2313 – sumažinsime įrenginio matmenis.
- Suprojektuoti PCB plokštę su SMD komponentais – tada matmenys dar labiau sumažės.
- Patobulinti ar visai perrašyti key.exe algoritmą, įgyvendinti slapto kodo pakeitimą per notepad, cut, copy, paste funkcijas.
- Perrašyti AVR programą C+ kalboje pasinaudojant jau esama PS/2 klaviatūros emuliavimo biblioteka.
- ....sugalvokite patys.
Nuorodos
Failai
- 1132.BAS – programa BascomAVR‘ui;
- 1132.HEX – sukompiliuotas hex failas AVR‘ui;
- key.EXE – Loggerio duomenų dekodavimo programa;
- xxx_16_09_2004.TXT – Loggerio darbo pavyzdys, užkraukit jį į key.exe;
- WinXPstart.TXT , WinXPstartNO_FA.TXT – dar Loggerio darbo pavyzdžiai;
- Logger1.LAY – eksperimentinio Loggerio plokštės (pcb) išdėstymas SprintLayout‘ui;
- Logger_by_Vaicekas.LAY – užbaigtas Loggerio pcb (autorius – Vaicekas);
- logger.JPG,logger2.JPG – eksperimentinio Loggerio nuotraukos;
- logger-Finished1.JPG, 2,3 – užbaigtas Loggerio variantas (autorius – Vaicekas);
- Logger-alfaFAQ.DOC – klausimai-atsakymai;
- logger.PNG – Loggerio schema;
- scancodetable.PNG – Klaviatūros skankodų lentelė (autorius - Adam Chapweske).
Visi failai viename archyve.