Tekst powstał na podstawie dostępnych materiałów w necie i wypowiedzi kolegów na Forum DVHK ja Tylko pozbierałem i posegregowałem: UNLOPER 1.Jaki powinien być 2.Dodatki do podstawowego unlopera 3.Budowa Unlopera 4.Budowa Patcha 100MHz 5.Budowa JTAG 6.Połączenie Unlopera 7.Modyfikacja dodatkowa 8.Wgrywanie oprogramowania 9.Dodatkowe informacje (teoria) 1.Jaki powinien być Według kolegi Matiasa najlepszy jest taki: 2.Dodatki do podstawowego unlopera Jak widzimy na wcześniejszym zdjęciu do unlopera potrzebujemy dodatkowo: 1.Patch 100MHz 2.Jtag do zaprogramowania Patcha 3.Kabel szeregowy 4.Kabel równoległy 3.Budowa Unlopera Rys.1 Unloper Rys.2 Rozmieszczenie elementów Rys.3 Płytka drukowana Rys.4 Schemat UNLOOPER - Lista Części B1 1 DF02M PUENTE RECTIFICADOR 1A 100V DB-1 C1,2 2 27pF CONDENSADOR 27pF 50V CERAMICZNY 5% C3 1 0.0047uF KONDENSATOR 4,7nF 50V CERAMICZNY 10% C4,5,6,7 4 1uF KONDENSATOR TANTAL 1uF 35V (*) C8,12,13,14,15,16,17,18,19 9 0.1uF KONDENSATOR POLIESTER .1MFD 50V 5% C9 1 0.022uF KONDENSATOR POLIESTER .022UF 50V 5% C10 1 220uF KONDENSATOR ELECTROLIT 220UF 25V C11 1 100uF KONDENSATOR ELECTROLIT 100UF 25V DL1 1 LED ROJO LED CIRCULAR 3MM ROJO DL2 1 LED VERDE LED CIRCULAR 3MM VERDE J1 1 2MM JACK CONECTOR JACK POWER 2MM PCB J2 1 DB9 Hembra CONECTOR SUB-D 9 HEMBRA ACODADO CI J3 1 ISO7816 ZOCALO TARJETA SMARTCARD ISO7816 R1 1 100K REZYSTOR 100 KOHM 1/4W 5% R2 1 4.7K REZYSTOR 4.7 KOHM 1/4W 5% R4,5 2 470oh REZYSTOR 470 OHM 1/4W 5% R3,6 2 47K REZYSTOR 47 KOHM 1/4W 5% S1 1 DIP SWITCH DIP SWITCH 4 C DESLIZANTE S2 1 TOGGLE SWITCH CONMUTADOR U1 1 7805 CIRC INTEGR. 5.0V 1.5A REGULATOR TO-220AB U2 1 MAX232CPE CIRC INTEGR. 5V DUAL RS232 TRANSCEIVER U3 1 74HCT04 CIRC INTEGR. HEX INVERTER 14 DIP U4 1 74HC00 CIRC INTEGR. QUAD 2 INPUT NAND GATE 14 DIP U5 (PCB DUAL 2:1/8:1) 2 74HC74 CIRC INTEGR. DUAL D TYPE FLIP FLOP 14 DIP U6,7 2 74HC4053 CIRC INTEGR. TRIPLE 2 CH MUX/DEMUX 16 DIP U8 1 LM358 CIRC INTEGR. LOW POWER DUAL OP AMP 8 DIP U9 1 AT90S2313-10PC Atmel 8-Bit RISC AVR Microcontroler Y1 1 18.432Mhz Kwarc 18.432MHZ HC49 U8 1 8 Pin DIP podstawka pod układ 8 PIN TORNEADO U3,4,5 3 14 Pin DIP podstawka pod układ 14 PIN TORNEADO U2,6,7 3 16 Pin DIP podstawka pod układ 16 PIN TORNEADO U9 1 20 Pin DIP podstawka pod układ 20 PIN TORNEADO 4.Budowa Patcha 100MHz Patch 100 MHz LISTA CZĘŚCI 1 xilinx xc9536xl-10pc44c + podstawka (Connettore PLCC da superficie 44 poli) 1 stabilizator tranzystorowy LM1086CT-3.3 1 kondensatore elettrolityczny100 uF 16v 1 kwarz 100 Mhz 4 Pin 2 złącze szpilkowe 6 do połączenia z jtag 2 złącze szpilkowe 7 pin połączenia z unloperem z których tworzymy szpilki pasujące do podstawki 14 pin Schemat płytki drukowanej 5.Budowa JTAG Płytka drukowana JTAG-a JTAG Lista części 2-Układ. 74HC125 + podstawka 20 PIN 2-Diodiy1N5817 7-Rezystorów 100 ohm 5-Rezystorów 300 ohm 1-Rezystor 47k ohm 1-Rezystor 1k ohm 4-Kond. 100 pf 1-Kond. 0,1 microf 1- Połączenie DB25 łączące kablem równoległym JTAG-a z PC 1- 14 poli + connettori Scemat JTAG-a dla XiLinx-a 6.Połączenie Unlopera Aby połączyć unloper wyciągamy dwa układy tak jak na poniższym zdjęciu -p0łącztć przewodem punkty unlopera i patcha jak na zdjęciu - wpiąć patcha w gniazdo układu 74HC74 I tak wygląda po złożeniu: 7.Modyfikacja dodatkowa Według kolegi Matiasa między nogą 9 a GND umieszczamy trymer od 6 do 65 pF 8.Wgrywanie oprogramowania Jak wiemy bez odpowiedniego oprogramowania nie będzie nam unloper współpracował z kartami i musimy zaprogramować Atmela; Można użyć do tego dołączonego programu UFP 16 I wgrać pliki: V7.flash do flesha Atmela V7. eeprom do eeproma Ustawienia: Jak ktoś posiada phenixa z podstawką 20 pin po zmianie zworek może na zewnątrz wgrać oprogramowanie programem i2cProg_v1[1].2b4 Po zaprogramowaniu Atmela musimy jeszcze zaprogramować Xilinx-a przez Jtag-a programem WebPACK_71_fcfull_i , który trzeba sobie ściągnąć z netu (na forum DVHK w topiku o unloperze kolega Matias wskazuje linka skąd). Po zainstalowaniu programu programujemy według poniższych zdjęć: Do wyboru jest dwa oprogramowania: -według BaX - v7_00_xyl -według Matiasa – sch.jed Po zaprogramowaniu potrzebny nam Winexplorer i skrypt (też dołączone) Możemy wysyłać karty w ATR4 lub wyciągać klucze. 9.Dodatkowe informacje (teoria) 1. Definicja glitcha i co to jest glitch? Są dwa główne sygnały, które wchodzą na kartę i które możemy kontrolować z zewnątrz. Pierwszy (napięcie) to zasilanie karty, tzw. Vcc. Zakłada się, że jest to wartość prądu stałego ok 5V. Drugi (częstotliwość) to sygnał reprezentowany przez zegar karty lub fale prostokątną, która oscyluje pomiędzy 0V a 5V z częstotliwością 4.608MHz. Przez glitcha rozumie się .świadomą zmianę jednego z tych dwóch typów sygnałów. Pierwszy typ glitcha, który opisze, to glitch napięciowy. W tym typie glitcha, napięcie na wejściu do karty (Vcc) zmniejsza się do 2,5V przez ok. pół cykla zegara lub jeszcze mniej. W niektórych przypadkach aplikuje się czas dłuższy, aż do końca 1 cyklu zegara. Drugi typ glitcha to ten, w którym modyfikuje się zegar. W tym przypadku, sygnał zegara jest mnożony razy 4 (tu osiąga on wartość bliska 18,432MHz, dla kart HU częstotliwość najbardziej poprawna to 18,31818MHz) w jednym cyklu zegara. To powoduje wykonanie aż 4 cykli w jednym normalnym interwale potrzebnym zwykle na wykonanie jednego cyklu. 2. Efekty glitchowania i co robia glitche na karcie? Glitche zegarowe mogą mieć efekt na procesach przetrzymywania danych przez rejestry wewnętrzne karty. Większa część procesów przechowywania danych w rejestrach jest realizowana przez flip-flopy (przerzutniki) typu D. Zatrzymanie wartości (bitu) przez flip-flop typu D, odbywa się wtedy, gdy na wejściu D dana musi być obecna przez pewien okres czasu (określony jako "set-up time" lub "hold time"). Jeśli flip-flop typu D zostanie "wyzegarowany" wcześniej niż bit pojawi się na wejściu D na określony przedział czasowy, nie będzie możliwe "zatrzymanie" tego bitu. Kiedy zegar zostanie zwiększony z glitchem, jakiekolwiek zatrzymanie danych przez interesujący nas rejestr zostanie przerwane i tym sposobem zablokowany ruch danych w kierunku naszego rejestru. Wirtualnie jakikolwiek rejestr wewnętrzny mikroprocesora może zostać dotknięty w ten sposób. W tym rejestry A i B (najważniejsze) oraz program counter (PC). Glitch napięciowy może mieć podobny efekt. Są elementy logiczne CMOS, w których TTL wymaga aby napięcie na wejściu musiało być w pewnym przedziale aby rozróżnić wartość logiczną "1" lub "0". Jeśli napięcie jest poza limitami, efekt na elemencie nie będzie taki jak oczekiwany. W systemie standardu logiki 5V, napięcia powyżej 3,8V są uznawane za logiczna "1" a napięcia poniżej 0,8V jako logiczne "0". W glitchu napięciowym, napięcie we wszystkich obwodach karty jest określone i osiąga wartość zwaną "ziemia niczyja". Jest to ok 2,5V. Elementy logiczne jak flipflopy próbując osiągnąć i zatrzymać jakaś wartość logiczna, zmuszane są do używania wartości, która nie jest dla nich ani "1" ani "0". Rezultat jest taki, ze nie osiągając nowej wartości przechowują w rejestrze starą wartość. Może to spowodować ten sam efekt co glitch zegarowy - błąd w ruchu danych w różnych rejestrach wewnętrznych mikroprocesora. 3. Jak wydajnie uzywac glitcha? OK. teraz jak już wiemy co robi glitch i jak to robi. Jak możemy go użyć na nasza korzyść? Kiedy karta się uruchamia, rozpoczyna wykonywanie programu zawartego w ROMie. Oczywiście, program jest tak skonstruowany, ze pozwala wykonać się niektórym funkcjom, a wszystkie inne odrzuca. Glitche jednak zaaplikowane karcie podczas wykonywania określonej instrukcji, mogą spowodować błąd wykonania tej operacji. To powoduje zachowanie się karty poza specyfikacja, na która została zaprojektowana. Glitche są również używane w procesie ładowania smart kart HU, aby załadować na kartę bootloader (mały program, który działa w RAMie). Gdy bootloader jest załadowany, to on sam - a nie procedury karty - kontroluje i komunikuje się z zewnątrz, pozwalając w ten sposób odczytywać i zapisywać na karcie. 4. Zdolnosc loadera (skryptu) typu wildthing. Soft typu wildthing umieszczony w Atmelu unloppera, za pomocą komend (CMD), udostępnia różne wariacje typów glitcha, które możemy zaaplikować karcie. Do dyspozycji mamy ich 5: - CMD 0A: Glitch zegara. prędkość 4x normalny zegara przez ok 1/2 cykla normalnego zegara. Nie jest używany do załadowania loadera na kartę HU (zobacz karty NDS di STREAM); - CMD 0B: Glitch napięcia. Zmniejsza wartość napięcia, aż do wartości DAC na około pół cyklu zegara karty. Nie jest wykorzystywany podczas ładowania karty HU. Tym glitchem uruchamia się karty typu H które są nazywane "black sunday" (n.b. są one robione w USA); - CMD 09: Glitch zegara i napięcia równocześnie przez kompletny cykl zegara karty. Jest używany jako pierwszy glitch w procedurze ładowania karty HU; - CMD 0C: Glitch zegara i napięcia równoczesny, opóźniony o kilka cykli zegara a później glitch zegara i napięcia razem. Jest używany jako 2 i 3 glitch w procesie ładowania kary HU. Z ta komendą (i ta wersja software'u) aplikuje się kartom typu H tylko glitch napięciowy; - CMD 0D: glitch zegarowy, opóźniony o kilka cykli zegara, i glitch napięciowy. Używane przede wszystkim w procesie unloopingu karty H i we wszystkich skryptach unloopingu kart typu H. Z tego jak można zauważyć, soft na Atmela może aplikować rożne kombinacje glitchy. 5. "Uczasowianie" glitcha Nawet jeśli mamy wszystkie możliwości zaaplikowania glitcha na kartę, to nic nie zdziałamy bez dokładnego timingu. Przez dokładny timing rozumie się glitcha, który musi być wykorzystany w określonym cyklu zegarowym, i aby był efektywny, musi być wykorzystany w pewnym punkcie tego cyklu. W tym celu jest wykorzystywany daughter board i on pozwala uzyskać dokładne wykorzystanie glitcha w loader karty HU, w stosunku do unloopera standardowego. Kolejność glitchingu dla kart HU musi być zsynchronizowana tak precyzyjnie, aby programiści loadera kart HU mogli modyfikować kod Atmela, by moc precyzyjnie opóźnić synchronizacje glitcha. Również procedury send/receive zostały zmodyfikowane, żeby otrzymać perfekcyjną synchronizację glitchingu. Kolejność glitchingu jest moderowana przez Atmela i wykorzystywany hardware. Jest jednak kwestia dokładności posłania glitcha. Przez dokładność rozumie się możliwość zaaplikowania go kiedy się chce. Atmel może być zaprogramowany poprzez swój kod asemblerowy w celu zaaplikowania glitcha z dokładnością do 1/2 cyklu zegarowego karty. To nie jest wystarczające dla kart typu HU i dlatego został dodany daughter board. Został też dodany soft żeby komunikować się z unlooperem. Atmel umie umiejscowić glitcha około 4 cykle zegarowe od strefy wybranej. To jest zbyt niedokładne dla kart HU i może spowodować błędy w unloopingu kart H. Kolejny negatywny czynnik dla Atmela to rozdzielczość glitcha. Tę rozdzielczość reprezentuje czestotliwość i amplituda impulsu sygnału glitcha, który może być zaaplikowany karcie. Atmel, nawet jeśli jest zaprogramowany bezpośrednio w asemeblerze, może zaaplikować glitche tylko w 1/2 cyklu zegara, a amplitudy mogą być wielorakie w 1/2 cyklu zegarowego. To nie przeszkadza w ładowaniu loadera dla kart HU, ale jest niewystarczające dla ich unloopingu. Jestem przekonany ze aktualny hardware dla unlooperów zostanie niedługo zmieniony, aby móc go wykorzystywać dla kart HU. Powód dla którego synchronizacja glitchingu jest tak ważna, to celowe spowodowanie wadliwego wykonania instrukcji, które nas interesują. Musimy glitchowac w określonym cyklu zegarowym wykonania danej instrukcji. Np. komenda CJNE na karcie H wymaga 12 cykli zegarowych. Glitch napięciowy w 10 cyklu zegarowym tej instrukcji spowoduje niedokończony skok, bez względu na wartości przetwarzane (w ten sposób są uruchamiane karty H black sunday). Glitching w cyklu zegarowym 9 lub 11 nie powoduje tego rezultatu. Czyli nie jest to metoda na ominiecie zabezpieczenia karty, ale sposób na złamanie wykonywania instrukcji na karcie w sposób nam życzliwy. 6. Problemy i informacje o ładowaniu loadera na kartę HU Aby załadować bootloader na kartę na karty HU ładujemy kolejno 3 glitche. Zaaplikowanie glitcha podczas ATRa używa się, aby nakłonić kartę do zdumpowania RAMu. Z dumpu odzyskuje się klucze w RAMie. - Glitch 1 - wysyła instrukcje 5E żeby ustawić jakieś flagi i na koniec, ładuje 2 glitche żeby zablokować niektóre rejestry na zmiany na inne wartości. - Glitche 2 i 3 - wysyła instrukcje 4C żeby zapisać wartości w RAMie, zdekryptować je w ten sposób, ze ładują w RAM-ie w postaci jawnych bajtów, które formują na nowo stos, który pozwoli odczytanie więcej bajtów w preboot loadingu. Kiedy prebootloader przejmie kontrole, załaduje bootloadera. Kiedy bootloader się załaduje, jesteś gotowy do wysyłania komend czytania i zapisywania w eepromie. Glitche wysyłane po instrukcji 5E są najbardziej krytyczne i są uwidocznione w loaderze karty HU. To znaczy: "1A 8C", "1A 8E" itd., 8C i 8E z wartością DAC użytą (wartość napięcia na glitchu). 1A E - opóźnienie miedzy glitchami 2 i 3. Typ glitcha w komendzie 0C, który glit****e, napięcie i zegar na 2V. Więcej jest możliwych kolejności glitchingu na kartach HU, "8C 8E" i "8E 8E" z wartością opóźnienia różną od 8E zamiast 1A. Stad jak można zobaczyć glitche 8E są wykorzystywane błędnie (na kartach HU). Próbują glitchowania w punkcie różnym w stosunku do 1A (które w przeciwieństwie są najbardziej wydatne) i instrukcje które próbuje glitchować musiałyby uprzedzić zapis wartości w rejestrach wewnętrznych, ale glitch 8E wymusza ok 4 cykle zegara. Mam wrażenia ze to może być motywem unloopingu kart w procedurze ładowania loadera (karta HU). 7. Możliwe szkody w chipie karty Zawsze jest prawdopodobieństwo szkód fizycznych w chipie kiedy glitch nie zakończy sie poprawnie. Może to się zdarzyć kiedy chip próbuje zapisać w pamięci eeprom w czasie, gdy otrzymuje glitcha napięciowego. Żeby dokończyć ten zapis w eepromie jest potrzebne wyższe napięcie, które w wyniku niepoprawności glitcha może być niewystarczające, albo spowodować zapis przypadkowych danych. Ale to tez zależy od układów na karcie. Ten układ otrzymuje 12V na wejściu od 5V, a to napięcie używane do zapisywania w eepromie. Jeśli się wykonuje glicha napięciowego, napięcia wynikowe na inne części obwodów mogą być bardzo wysokie, powodując przeciążenia części chipa, nagrzewanie i przerwania (podobne do bezpiecznika). Można wiec otrzymać kartę która nie jest w stanie zapisywać do eepromu. Oczywiście są tez inne okoliczności które mogą spowodować szkody fizyczne na karcie. 8. Możliwe szkody w EEPROMie karty Używając glitchingu w sposób przedłużony, uszkodzenie eepromu jest bardziej prawdopodobne niż innych części. Jak to zostało powiedziane wcześniej, jeśli nie jest wyliczone z dokładnością timing glichingu, rezultaty których oczekujemy, mogą nie być tymi ustalonymi/przewidzianymi. Przez to, program, który chcemy wykonać na karcie może prawdopodobnie spowodować niechciany zapis w eepromie. Jeśli to się przydarzy karcie, zostanie ona nie do odzyskania zloopowana. Dlatego wniosek jest taki, ze jeśli się ma dobry loader, który jest zdolny zglitchować kartę za pierwszym lub drugim razem to nie ma problemu. Nie trzeba nigdy przejmować się skutkami długiego aplikowania glitcha na kartę, w którym mogą być max 1 lub 2 glitche. Jeśli natomiast hardware (karta?) potrzebuje większej ilości cykli glitchow mogą się pojawić problemy w loopingiem. To nie musi być sam glitch, ale złe jego wykonanie przez hardware, powodując przypadkowe zapisy w eepromie. Nanokomendy i funkcje: 7 grup instrukcji Można powiedzieć że jest 7 grup instrukcji 1. 0x01-0x0F: Operacje na porcie D. Podejrzewam ze tam właśnie są podłączone "układy zakłócające". Bez schematu raczej nie dojdę do tego co to jest. Mile widziany schemat :-) 2. 0x1X a dokładniej (binarnie 0x0001XXYY) - ustawia funkcje która jest wykorzystywana do wysyłania/odbierania danych do/z karty (można wybrać jedną z 4 funkcji - koduje się to na 2 bitach, XX - numer funkcji nadającej, YY - numer funkcji odbierającej. Narazie nie patrzyłem w to dokładnie wiec informacje nie są na 100% 3. 0x2X-0x7X - opóźnienie. Tak na prawdę opóźnienie pobiera dodatkowo jeszcze 2 bajty. Ma format 0xAABBCC. Jednostka opóźnienia są obroty pętli programu. Wiec jego wartość w us zależy od kwarcu atmela. AA jest najbardziej znacząca 4. 0x8X-0xBX - odbiór danych z karty. Jak nic się nie pomyliłem to można odebrać od 1 do 64 bajtów 5. 0xCX-0xEX - wysyłanie danych do karty. 6. 0xFX - specjalne funkcje. 7. Funkcje ATR 1. Operacje na porcie D 0x00 - to samo co 0x0F 0x01 - włącza układ glitch (zakłócania) ustawia go w stan bezpieczny i (poprawne zasilanie i częstotliwość) resetuje kartę i wyłącza glitch 0x02 - włącza układ glitch i trzyma kartę w resecie 0x03 - ustawia 0 na magistrali IO karty 0x04 - ustawia port (RD6) podłączony do magistrali IO na wejście (z pullup'em) 0x05 - jeżeli na magistrali IO jest 1 to wykonuje 0x0F 0x06 - jeżeli na magistrali IO jest 0 to wykonuje 0x0F 0x07 - oczekuje na 0 na magistrali IO. Jeżeli upłynie timeout (ustawiany przez 0x0E) wywołana zostanie 0x0F 0x08 - oczekuje na 1 na magistrali IO. Jeżeli upłynie timeout (ustawiany przez 0x0E) wywołana zostanie 0x0F 0x09 - glitch częstotliwościowy (dłuższy) 0x0A - glitch częstotliwościowy (krótszy) 0x0B - glitch napięciowy 0x0C - glitch napięciowy, przerwa, glitch napięciowy. Długość przerwy to parametr dla 0x0C 0x0D - glitch częstotliwościowy, przerwa, glitch napięciowy. Długość przerwy to parametr dla 0x0D 0x0E - ustawia timeout dla funkcji 0x07 i 0x08. Timeout to parametr dla 0x0E 0x0F - wysyła do PC adres aktualnie wykonywanej komendy (przez unlooper jako urządzenie - nie mylić z komenda atmela), liczbę odebranych bajtów z karty i odpowiedz karty 2. Funkcja wysyłania/odbierania do/z karty 0x1X - wybór parametrów transmisji do/z karty. 2 najmłodsze bity wybierają parametry odczytu a dwa kolejne zapisu. Funkcje jakby są bliźniacze tzn. jeżeli wybierzemy dla nadawania funkcje 00 to dla odbioru tez powinniśmy wybrać funkcje 00. To do czego udało się dojść to ze 0x10 ustawia odpowiednie parametry do komunikacja z naszymi kartami. Mało ciekawa komenda wiec dalej jej nie będę opisywał. 4, 5. Odbiór/wysyłanie danych z/do karty 0x8X-0xBx - odbiór danych z karty. Wzór na liczbę danych do odczytania L = cmd-0x80 + 1. Przykład: Komenda 0xA5 powinna przeczytać 0xA5-0x80+0x01 czyli 38 bajtów 0xCx-0xEx - wysyłanie danych do karty. Parametry identyczne jak przy czytaniu tylko należy odjąć 0xC0 np. 0xC5 - 0xC0 + 0x01 czyli 6 bajtów do zapisu. 6. Funkcje Specjalne 09 atak prąd czestotliowść - do weryfikacji 0A atak na kartę czestotliowść (krótka) - do weryfikacji 0B atak napięciowy - do weryfikacji 0xF0 - reset karty 0xF1 - krótszy glitch napięciowy (brak dodatkowego nop) 0xF2 - długi glitch napięciowy (2 dodatkowe nop) 0xF3 - długi glitch napięciowy (4 dodatkowe nop) 0xF4 - długi glitch napięciowy (8 dodatkowe nop) 0xF5 - glitch napięciowy konfigurowalny (czas jego trwania podaje sie jako parametr do tej komendy) 0xF6 - włączenie przerwań timer/counter0. Konfiguracja PWM i komparatorów. Timer ten jest odpowiedzialny za parametry glitcha napięciowego (PWM) 0xF7 - włączenie przerwań od timer/counter0 , timer/counter1. Wyłączenie PWM i komparatorów 0xF8 - włączenie glitcha napięciowego (ta funkcja tylko włącza natomiast nie wyłącza) 0xF9 - wyłączenie glitcha napięciowego (ta funkcja tylko wyłącza) 0xFA - pusta funkcja 0xFB - krótkie WYLACZENIE glitcha napięciowego 0xFC - ustawienie preskalera dla timer/counter1. Clock1Prescale - CK, Prescale - 0x0000. 0xFD - wyłączenie preskalera. ClockPrescale - Stop. FE - (Spodziewana długość odpowiedzi) odbiera jeden bajt z karty następnie wyłącza timer/counter1, prescaler i przesyła odebrany bajt do PC i wszystkie które odbierze od karty C0 Get Counts 7.Funkcje ATR dim ToWrite // deklaracja Sc.Write("A1") // cos na ekran??? ToWrite="100e06018F" // przypisanie SendGP(ToWrite) // wysłanie i odbiór danych z RS (czyli unloopera) sc.delay(300) // opóźnienie Sc.Print("ATR: ") // wyświetlenie danych For i=0 to GPRLen-1 Sc.Print(HexInv(GPR(i),2) &" ") Next Sc.Print(vbCr) // na koniec znak karetki ATR: 100e06018F tak wiec mamy następujące nanoinstrukcje: (10) - standardowe funkcje do transmisji do/z karty (0E)06 - ustawia timeout na 0x06 (01) - restart układu glitch i karty (8F) - odczyt z karty (0x8F - 0x80 + 0x01 = 0x10) 16 bajtow No i mamy odczytany ATR :-) C11a000008 odczyt kluczy na karcie (używane tylko dla info) C10e0003ff odczyt seriala tyle , ze len=FF (tylko taki ins jest faktycznie wykorzystana przez unlooper) 100e06018F reset karty nanokomenda 0x80 to odebranie bajtu ack. Wykorzystane do ustalenia momentu w którym odpalamy nano 2x xx xx (najczęściej 200324) a zaraz po nim 0A. Pierwszy glith ma na celu wywalenie skoku do countermeasure czyli losowego czasu wykonania ins. jak LEN jest >= 0x80 to unlooper wykonuje nastepujace fuckcje 0x8X - zwraca informacje czy karta jest w slocie (0 - brak, 1 - jest) 0x9X - wersja firmware w atmelu 0xA0 - obsluga diody (0xA0 - zgaszeniem 0xA1 - zapalenie) 0xB0 - ustawia wartosc komparatoradla timer1. Pobiera jeden parametr 0xCX - odczyte timera. Wartosc timera1 jest przesylana do PC 0xDX - odczyt EEPROM atmela (adres odczuytu to X) - wydaje sie nieprzydatne 0xEX - odczyt EEPROM atmela (odczyt 64 bajtow) - wydaje sie nieprzydatne 0xFX - Ta funkcja wydaje sie ze zostala przerwana w polowie pisania. Czyta z adresu 0x300 kodu programu i nic nie robi z tym. Ogolnie slabo sie nadaje do wykorzystania Ogolnie z tego zestawu funkcji wykorzystywane sa 0xAX i 0xCX