UNLOOPER - jak z czym i gdzie

advertisement
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
Download