Hertz
Active Members-
Posts
1377 -
Joined
-
Last visited
-
Days Won
7
Everything posted by Hertz
-
Intotdeauna am fost interesat de cum si ce date sunt stocate pe banda magnetica a diferitor carduri, asa ca am decis sa creez un cititor din un vechi casetofon. Hardware Partea hardware pentru acest proiect e destul de simpla. Banda magnetica e citita folosind un cap magnetic de la un vechi mono casetofon si cateva componente pentru a amplifica semnalul in vederea citirii mai usoare. Acesta e conectat la mufa pentru microfon a PC-ului. Puterea pentru amplificator e de asemenea luata din inputul pentru microfon, notebook-ul meu outputeaza cam 3V acolo. Pentru mai multe detalii, uitate la schema amplificatorului de AICI Poza cu cititorul : http://i50.tinypic.com/21o29ax.jpg Software . Prima oara am incercat softurile de AICI si de AICI , dar nicicare dintre acestea doua nu au fost prea stabile (pentru mine), asa ca m-am decis sa imi scriu propriul decoder. Inainte sa citesti mai departe iti recomand sa inveti despre cum sunt datele codate pe banda magnetica. Decoderul meu incearca prima oara sa masoare latimea pulsului bitilor initiali, apoi foloseste acea marime ca referinta pentru decodarile urmatoare. Asta se face masurand grosimea tuturor pulsurilor urmatoare si comparandule cu ultimul puls cu grosimea zero. Daca doua grosimi sunt mai aproape de pulsul zero decat de primul puls, pulsurile sunt decodate ca 1. Altfel primul puls e interpretat ca 0. In final, pulsul zero este schimbat folosind un factor dat la ultimul puls masurat pentru a lucra cu viteze diferite de lovire. Exemplu Sa spunem ca decoderul detecteaza urmatoarele grosimi ale pulsurilor : 91, 101, 90, 55, 44, 51, 45, 98, 48, 49, 91, 101 1) Prima grosime (91) este folosita ca pulsul zero ( sa-l numim zp) 2) Apoi zp-ul este comparat cu urmatorul puls (101; |91-101| = 10) si suma urmatorilor 2 (101+90 = 191; |91-191| = 100) 3) Dupa cum se poate vedea, grosimea e mai aproape de zp (10<100) deci pulsul e decodat ca 0 4) In cele din urma valoarea lui zp este ajustata la noua grosime de puls folosind un factor definit f (am ales 0.2 aici, dupa cateva teste initiale) zp_nou = zp - ((zp - grosime) * f) zp_nou = 91-((91-101)*0.2)=93 5) Urmatorul puls e decodat tot ca acesta, deci nu voi explica din nou. zp_nou = 93-((93-90)*0.2)=92 (rotunjit la cea mai mica valoare) 6) Apoi zp e comparat cu urmatoarea grosime (55; |92-55|=37) si suma urmatoarelor doua (55+44=99; |92-99|=7) 7) Acum suma urmatoarelor doua pulsuri e mai aproape de zp (7<37) deci cele doua pulsuri sunt decodate ca 1 8) zp_nou=92-((92-(55+44))*0.2)=93 9) Acum totul continua ca inainte exceptand faptul ca trebuie sa folosesti 51 si 45 in loc de 44 si 51 (trebuie sa avansezi cu 2 numere in vector). Folosire Trebuie sa ai sox pentru a functiona. Decodeaza un fisier .wav inregistrat - track 1 sox fisier.wav -r 48000 -t dat -q - | ./bifaze.pl 1 Decodeaza un fisier live - track 2 sox rec -r 48000 -t dat -q - | ./bifaze.pl 2 Sursa decoderului meu - bifaze.pl #!/usr/bin/perl -w # Written by Hertz <ownage [dot] hertz [at] gmail.com> use strict; my $track = 2; $track = 1 if((scalar(@ARGV) == 1) && ($ARGV[0] eq '1')); my $threshold_1 = 0.2; my $maxlen_1 = 150; my $adoptrate_1 = 0.2; my $smalldiff_1 = 0.1; my $threshold_2 = 0.2; my $maxlen_2 = 350; my $adoptrate_2 = 0.2; my $smalldiff_2 = 0.1; my $dbg_lens = 0; my $dbg_dec = 0; ############################################################################### my $chars_1 = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'; my $charlen_1 = 6; my $chars_2 = '0123456789:;<=>?'; my $charlen_2 = 4; ############################################################################### $| = 1; my $threshold = $threshold_1; my $maxlen = $maxlen_1; my $adoptrate = $adoptrate_1; my $smalldiff = $smalldiff_1; my $chars = $chars_1; my $charlen = $charlen_1; if($track == 2) { $threshold = $threshold_2; $maxlen = $maxlen_2; $adoptrate = $adoptrate_2; $smalldiff = $smalldiff_2; $chars = $chars_2; $charlen = $charlen_2; } my $slope = 1; my $old = 0; my $data = 0; my $olddata = 0; my $init = 1; my $mode = 0; my $count = 0; my $len = 0; my $curlen = 0; my $oldlen = 0; my $bitmode = 0; my $chk = 0; my $complete = 1; my $celllen = 0; my $str = ''; sub parity_ok { my $charlen = shift; my $c = shift; my $one = 0; for(my $j = $charlen - 1;$j >= 0;$j--) { $one++ if(substr($c, $j, 1) eq '1'); } $one++ if(substr($c, $charlen, 1) eq '1'); return ($one % 2) == 1; } sub xtract_char { my $charlen = shift; my $c = shift; my $x = 0; for(my $j = $charlen - 1;$j >= 0;$j--) { $x <<= 1; $x |= 1 if(substr($c, $j, 1) eq '1'); } return $x; } sub decode_char { my $charlen = shift; my $chars = shift; my $str = shift; return ('x', 0) if(!parity_ok($charlen, $str)); my $x = xtract_char($charlen, $str); return ('y', 0) if($x >= length($chars)); return (substr($chars, $x, 1), $x); } while(<STDIN>) { chop; next if(/^;/); next unless(/([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?) +([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?)/); my ($t, $y) = ($1, $2); my $s = $slope; if($y > $threshold) { $s = 1; } elsif($y < (-1 * $threshold)) { $s = -1; } if($slope != $s) { $slope = $s; if($data) { $data = 0; } else { $data = 1; } } if($init) { $len = 0; $olddata = $data; $init = 0; $mode = 0; $bitmode = 0; } else { my $lenchange = 0; my $gotbit = 0; if($len > $maxlen) { $mode = 0; $bitmode = 0; $init = 1; if(!$complete) { print " TIMEOUT\n"; $complete = 1; } } else { if($olddata != $data) { print "$len\n" if($dbg_lens); $oldlen = $len; $curlen = $len; $len = 0; $lenchange = 1; } else { $len++; } } if($lenchange) { if($mode == 0) { $count = 3; $mode++; } elsif($mode == 1) { if($count <= 0) { $str = ''; $mode++; } else { $count--; } } elsif($mode == 2) { my $c = $oldlen; my $n = $curlen; my $d0 = abs($celllen - $c); my $d1 = abs($celllen - ($c + $n)); my $d = 0; print abs($d0 - $d1) . " " . ($celllen * $smalldiff) . "\n" if($dbg_dec); if(abs($d0 - $d1) > ($celllen * $smalldiff)) { if($d0 < $d1) { $d = 0; } else { $d = 1; } } else { $d = 1; } $str .= $d; $gotbit = 1; print "$c $n $d0 $d1 $celllen $d\n" if($dbg_dec); if($d == 0) { $celllen -= int(($celllen - $c) * $adoptrate); } else { $celllen -= int(($celllen - ($c + $n)) * $adoptrate); $mode++ } print "-> $celllen\n" if($dbg_dec); } elsif($mode == 3) { $mode--; } } if($gotbit) { if($bitmode == 0) { $complete = 0; if($str eq '1') { $bitmode++; $chk = 0; } else { $str = ''; } } elsif($bitmode == 1) { if(length($str) >= ($charlen + 1)) { my $c = substr($str, 0, $charlen + 1); $str = substr($str, $charlen + 1); print "p" if(!parity_ok($charlen, $c)); my ($ch, $x) = decode_char($charlen, $chars, $c); $chk ^= $x; print "$ch"; $bitmode++ if($ch eq '?'); } } elsif($bitmode == 2) { if(length($str) >= ($charlen + 1)) { my $c = substr($str, 0, $charlen + 1); $str = substr($str, $charlen + 1); print "p" if(!parity_ok($charlen, $c)); my ($ch, $x) = decode_char($charlen, $chars, $c); $chk ^= $x; if($chk) { print " ERROR\n"; } else { print " OK\n"; } $complete = 1; $bitmode = 0; } } } } $olddata = $data; $old = $y; }
-
Nu vezi tot? Da stiu. Telealimentari am facut si eu demi-a venit acru in varf de 'limba'. dar tu tocmai ai demonstart ca eu am totusi dreptate. Dc ce faci pe albastru cu maro
-
@begood cu o antena buna > 100 m @psycho ~ 1 secunda
-
Acum cateva saptamani, dupa ce am citit un .pdf complex despre o grupare care au facut chestia asta pe niste tastaturi wireless de la Microsoft, de la distanta mare, m-am gandit sa incerc si eu pe o tastatura Labtec pe care o folosesc. Hardware Acesta a fost primul proiect in care am folosit USRP - ul cumparat acum cateva luni.Am folosit LFRX - ul ca daughterboard si o antena foarte simpla care defapt e un cablu. E departe de perfect, dar functioneaza in teste daca tastatura e foarte aproape (~1m). USRP : http://i47.tinypic.com/mrebuw.jpg Intreg sistemul de interceptare : http://i46.tinypic.com/152j7l4.jpg Demodularea Primul pas ce a trebuit sa il fac a fost gasirea frecventei exacte la care tastatura transmitea. A fost destul de usor fiindca tastatura avea FCCID scris pe spate. Am cautat pe siteul ASTA si am aflat ca transmite la exact 27.195MHz. Am reglat USRP - ul la acea frecventa si am folosit usrp_oscope.py pentru a primii unde. Dupa unele cercetari privind sistemele cele mai folosite de modulare, am realizat ca aceasta unda e modulata folosind FSK.Rularea prin intermediul blocului de demodulare cuadraturaica mi-a dat urmatorul rezultat : Acum arata foarte mult ca un semnal binar, deci e foarte posibil ca modulatia sa fie corecta. Urmatorul pas a fost sa gasesc encriptia corecta pentru a putea extrage bitii adevarati din acest stream. Mai tarziu am confirmat prin dezasamblarea recieverului original. Semnalele din osciloscop erau la fel ca cele de deasupra. Codare RF Aceasta a fost cea mai grea parte din analiza mea. Prima oara am crezut ca ar putea fii codat NRZI , far asta nu mi-ar da niciodata mai mult de 2 zerouri in secventa si chiar si cu bit unstuffing nu era nici un pattern in datele decodate. Dupa cautari serioase am dat peste Codarea Miller.Aceasta mi-a dat niste rezultate foarte promitatoare deoarece acum era un pattern recurent in datele obtinute. Dar inca era o problema : pachetele extractate aveau un puncte pornire si unul de oprire in pattern (model), dar lungimea varia pentru diferite tastari. In stadiul asta puteam sa identific marea majoritate a tastarilor, dar nu foarte bine deoarece nu erau intr-o pozitie fixa in interiorul pachetului. Asta m-a facut sa caut multe alte scheme de codare pana cand am descoperit ca in interiorul pachetelor (exceptand in secventa sync) nu era niciodata un singur zero (101). Asa ca am incercat sa sterg un singur zero din fiecare secventa de zerouri (10001 -> 1001). Acesta a fost ultimul pas. Acum fiecare pachet (excluzand secventa sync) avea lungimea de 35 biti. Inversarea pachetelor Odata ce schema de codare era cunoscuta, era foarte usor sa aflu structura pachetelor. Consistau din secventa sync din 5 sau 7 biti, 3 biti de date inca necunoscute , 3 bytes de coduri ale tastelor si un indetificator al tastaturii de 1 byte. A fost doar o problema de cateva minute sa incerc toate butoanele , pentru a construii un tabel de cautare al codurilor tastelor. Inca doua lucruri ciudate pe care le-am notat : cand primul bit din identificatorul tastaturii era 1 , complet pachetul era inversat si cand procesam codurile tastelor de la dreapta la stanga , un 1 in msb inversa toate codurile urmatoare. Concluzie Am deconectat tastatura de cateva ori pentru ca identificatorul tastaturii sa se schimbe , insa codurile tastelor ramaneau la fel, deci in concluzie acest model de tastatura nu folosea nici o encriptie.
-
E grozav. Mersi pentru ele.
-
Radio Filelist transmite si manele contra asteptarilor
Hertz replied to SympleBoy22's topic in Off-topic
Nicu Paleru e manelist? -
Logic ca poate sa iti apara tie in fereastra 1000 buzzuri ca el a primit doar 50. Sunt limitari din server, nu doar din client. Asa poti sa trimiti in continuu cu copy paste <ding> si iti va aparea ca i-ai trimis buzz de n ori.
-
Sau cu asta seamana mai bine http://www.darkc0de.com/c0de/perl/dr4k3_lfiscan.txt
-
Ba ce ciudat, seamana perfect cu asta : (si postu e din 13 noiembrie) si tu zici ca l-ai facut acu 2 zile ¼òµ¥ºóÃÅʵÏÖ(perl)-ѧԺ-ºÚ»ùÍø Fain?
-
Iei la muie. Are addsense , vrea vizite.
-
Iei la muie. Are addsense , vrea vizite.
-
2 bani... 9;
-
Asa si eu. 2001-2008 numa am citit,deabia dupaia mi-am facut cont. Da eu l-am observat.
-
Aia cu infrarosu e imbecila.
-
Stai sa ma descalt. Is curios daca gasesti vreun cumparator (:.
-
Add N Edit Cookies JSView Firebug Java Quick Starter Reload Every Live HTTP Headers Tamper Data Source Editor SQLite Manager Source Editor Talkback User Agent Switcher Torbutton Le folosesc zilnic 90% din ele.Toate is activate si importante. Ce rost are sa mi instalez 1000 de addonuri si 900 sa le tin dezactivate , 90 sa nu le folosesc deloc , 5 sa nu stiu cum functioneaza si 5 sa le folosesc ocazional. Pa.
-
Corect , carti super adevarate.Imi place la nebunie Doyle. Acum citesc o carte de el , "Unchiul Bernac".
-
Sau hai pa si pula revedere! Sa'ti trag falcaoa.
-
Corect!Bravo
-
Un numar hexagonal se compune folosind urmatoarea formula : H(n) = n(2n-1) Primele 5 numere hexagonale sunt : 1 6 15 28 45 Cate dintre primele 100.000.000 numere hexagonale se impart cu toate numerele intre 1 si 20?
-
Un triunghi format din numere intregi unde fiecare numar este egal cu suma celor 2 de dinjos. ......32 ....18 14 ...13 5 9 ..10 3 2 7 Suma tuturor acestor numere este 113. Care este suma tuturor numerelor din acest triunghi? ......115 .....-- -- ....33 -- -- ...-- -- 13 -- ...7 -- -- 5 --
-
Corect acum.
-
Patratele primelor 5 numere intregi pozitive sunt 1,4,9,16,25 Cuburile primelor 5 numere intregi pozitive sunt 1,8,27,125 Considerati acum numerele care pot fii scrise ca suma unui patrat si unui cub.Cateva exemple : 9=1+8=1^2+2^3 12=4+8=2^2+2^3 232=16+216=4^2+6^3 Gasiti suma tuturor numerelor distincte mai mici decat 100.000 care pot fii scrise ca suma unui patrat si unui cub.
-
Nu.Gresit.
-
Se dau primii 2 termeni a unei secvente fiind 1 si trebuie sa insumezi toti termeni anteriori ,apoi sa ridici suma la ptrat pentru a genera urmatorul termen. Secventa va arata astfel : 1 1 4 36 ... secventa actuala a termenilor la patrat 1 1 2 6 ... termenii Care e suma cifrelor celui de-al 10-lea termen din secventa anterioara?