Przejdz do strony glownej  

Telekarty - Asturn/Phreak It - 1999-03-21

Pobierz wersje spakowana


 >> Phreak It
    > strona glowna
    > newsy
    > o serwisie
 >> Automaty
    > mapy i spisy
    > niebieski [TSP91]
    > srebrny [TPE97]
    > jajko [CTP]
    > żółty [eXANTO]
    > Netia
    > Dialog
    > karty chipowe
    > klucze
 >> W eterze
    > GSM
    > tranking
 >> Stuff
    > teksty (FAQ)
    > narzędzia
    > elektronika
    > nagrywarki
    > strony Variego
 >> Inne
    > multimedia
    > phreak-muzeum
    > hacked
    > linki



      [=][=][=]   [=][=][=]  [=][=][=]     [=]   [=]  [=][=][=]  [=][=][=]
      [=]   [=]   [=]   [=]        [=]     [=]   [=]  [=]   [=]  [=]   [=]
      [=]   [=]   [=]              [=]     [=]   [=]  [=]   [=]  [=]   [=]
      [=][=][=]   [=][=][=]     [=][=][=]  [=]   [=]  [=][=][=]  [=]   [=]
      [=]   [=]         [=]        [=]     [=]   [=]  [=] [=]    [=]   [=]
      [=]   [=]   [=]   [=]        [=]     [=]   [=]  [=]  [=]   [=]   [=]
      [=]   [=]   [=][=][=]        [=]     [=][=][=]  [=]   [=]  [=]   [=]


                        [=][=][=]  [=][=][=]  [=][=][=]
                        [=]        [=]   [=]  [=]   [=]
                        [=]        [=]   [=]  [=]   [=]
                        [=][=]     [=][=][=]  [=]   [=]
                        [=]        [=]   [=]  [=]   [=]
                        [=]        [=]   [=]  [=]   [=]
                        [=]        [=]   [=]  [=][=][=]
                                                  [=]
                                                  [=][=]

                                                               TELEKARTY

 ==========================================================================
||  Wszystko co tu znajdziecie mozecie wykorzystywac jak wam sie podoba.  ||
||  Nie interesuje mnie zupelnie  czy powstana przez  to jakies (czyjes)  ||
||  szkody czy  nie. Chce  zerwac z  maniera wrzucania takich tekstow na  ||
||  poczatku faqow, bo uwazam to za smieszne. W takich przypadkach traca  ||
||  zwykle monopolisci i/lub lameria wiec po co  sie o nich martwic? A o  ||
||  siebie sie  nie bojcie jak maja was zlapac to i tak zlapia, zeby nie  ||
||  wiem co - a i tak  nikogo jeszcze za teksty nie wsadzili (no w koncu  ||
||  jest demokracja) ;) Moja dywiza to: Im wiekszy dym tym ciekawiej ;-)  ||
 ==========================================================================



1. Wstep do faqu

2. Szczegoly techniczne

Czesc A. Wszystko co trzeba wiedziec o telekartach (podstawy)

Sekcja I.   Karty Gemplus, Solaic, Schlumberger, Oberthur (francuskie)
            a) wprowadzenie
            b) schemat chipu
            c) opis stykow zlacza
            d) podstawowe paramtery
            e) diagramy czasowe (timingi)
            f) mapa pamieci kart z Francji i Monako
            g) mapa pamieci kart z innych krajow

Sekcja II.  Karty ODS, Giesecke & Devrient, ORGA Karten systeme, Uniqua,
            Gemplus, Schlumberger i Oldenbourg Kartensysteme
            a) wprowadzenie
            b) styki
            c) podstawowe paramtery
            d) diagramy czasowe (timingi)
            e) mapa pamieci
            f) parametry elektryczne

Sekcja III. Schemat czytnikow
            a) czytnik 1
            b) czytnik 2

Czesc B. Jak zrobic wlasna telekarte?

Sekcja I.   Teoria
            a) szczegoly i podstawowy program
               - telecard.asm
               - picreg.equ
            b) system zabezpieczen
            c) niezbedne czesci
            d) jak to budowac

Sekcja II.  Niezbedny software
            a) czesc UUEnecode
               - plik UUEncode
            b) standardowy program do odczytu karty na PC

3. Linki zwiazane z tematem i "bibiografia"

4. Na koniec (podziekowania, etc...)


[ 1. Wstep do faqu ]
 ==================

Jak  widzicie  to moj pierwszy faq. Nie mam zamiary pisac rzeczach typu:
jak podpiac sie do  sasiada,  jak  znukowac lamera  czy jak zdobyc haslo
roota. Zajmuje sie tu KARTAMI CHIPOWYMI,  zwanymi  z angielska telecard,
phonecard lub (najrzadziej) chipcard. Wiem ze dla nas  to  temat  nowy i
raczej  malo  przydatny  bo TPSA nie kwapi sie z wprowadzeniem automatow
na takie karty. Poki co mamy  i  pewnie  dlugo  miec  bedziemy Urmety na
karty  magnetyczne Telefonica. Mimo to zdecydowalem sie  napisac  o  tym
faq poniewaz  czesto  bywam  za granica  i  tam  te  wiadomosci sie moga
przydac.  Poza  tym  nigdy  nic  nie  wiadomo  i moze pewnego dnia  TPSA
uszczesliwi nas automatami na karty chipowe. Dodatkowo  warto  wiedziec,
ze schemat takich kart jest uniwersalny (zgodnie z normami ISO) i nie sa
one  wykorzystywane  tylko  do  telefonow,  ale  takze  do odkodowywania
programow  TV, jako  karty identyfikacyjne, itp.  Oczywiscie, wiadomo ze
sam temat kart chipowych (tak jak kart  magnetycznych)  to rzeka i mozna
by o tym napisac 1 GB tekstu (sama dokumentacja to  kilkanascie  tysiecy
stron).  Poniewaz jest to niemozliwe, omowie tu podstawowe rzeczy, ktore
trzeba widziec  zajmujac  sie  ta  tematyka.  W rodziale "Linki" podalem
kilkanascie IMO najlepszych adresow URL z informacjami  na ten temat dla
dociekliwych.  A  tak  na  koniec  wstepu:  sorry ze ten faq jest troche
"sztywny" ale denerwuje mnie wypisywanie glupot  bez  zadnej tresci, jak
to coraz  czesciej  widze  w  roznych  faqach. Z gory przepraszam, jesli
jakies informacje  nie  sa  100%  aktualne. Stan, ktory opisuje dotyczyl
przelomu lat 1997/1998 ale w czerwcu  1998  na  pewno  wszystko  jeszcze
dzialalo. Dzis moze sie okazac,  ze  sa  niezbedne  pewne  korekty,  ale
jestem na 100% pewien, ze generalne zalorzenia sa takie jak byly.

[ 2. Szczegoly techniczne ]
  =======================

*************
* U W A G A *
*************

Ponizej  znajduje  sie szereg schematow. Oznaczenia niektorych elementow
sa miedzynarodowe (w  jezyku  angielskim),  dlatego  podaje  tu  do nich
"slownik".  Nie  zdecydowalem sie na przetlumaczenie ich na jezyk polski
w celu praktycznym. Latwiej na tej podstawie znalezc wszelkie informacje
w Internecie, dotyczace wlasnie tych wybranych elementow.

Address - adres
Clk     - (Clock) sygnal zegarowy (zegar)
Data    - Dane
Gnd     - (Ground) masa
R/W     - (Read/Write) zapis/odczyt
Fuse    - bezpiecznik
I/O     - (Input/Output) Wejscie/Wyjscie
xMOS    - (Metal  Oxide  Semiconductor) -  polprzewodnik  w  technologii
          metalowo tlenkowej.
PCB     - (printed circuit board) plytka drukowana
Reset   - zerowanie systemu (lub reset ;) )
Vpp     - napiecie programujace
Vcc     - napiecie zasilania

Mnznnz  - Mam nadzieje, ze nic nie zapomnialem

+----------------------------------------------------------------------+
| CZESC A. Wszystko co trzeba wiedziec o telekartach (podstawy)        |
+----------------------------------------------------------------------+

Sekcja I.  Karty  Gemplus,  Solaic, Schlumberger, Oberthur (francuskie):
------------------------------------------------------------------------

a) wprowadzenie

W  polowie lat 80-tych pojawily sie karty nowej generacji (zwane kartami
sprytnymi  -  "smart-cards" lub kartami chipowymi - "chip cards"). Karty
te zastapily wiekszosc  kart  magnetycznych  uzywanych w znacznej mierze
przez firmy telekomunikacyjne a takze korporacje  zajmujace  sie kartami
kredytowymi od strony produkcyjnej. Karty chipowe sa w wiele skuteczniej
zabezpieczone niz tradycyjne karty magnetyczne. Jest kilka typow  takich
kart  chipowych  majacych  rozne zastosowanie. Najprostsze to karty typu
"Prosta Pamiec". One  sa  wlasnie  najczesciej  uzywane  jako  karty  do
dzwonienia  z  automatow  publicznych. Ogolnie mozna powiedziec, ze cala
zawartosc pamieci jest przeznaczona do odczytu w tych kartach. Dodatkowo
jest tam specjalna czesc, ktora jest  nie niezapisywalna a wiec nie moze
byc takze w zaden sposob kasowana przez czytnik.
Poza tym sa bardziej skomplikowana karty, np. "Karta z Pamiecia" (lepszy
rodzaj karty "Prosta Pamiec") posiada specjalny  obszar z roznymi danymi
zabezpieczony  szyfrowanym  kluczem.  Takie  karty  moga zawierac jakies
prywatne informacje w tej zabezpieczonej czesci.
I wreszcie na koncu, sa tzw. "Karty  z  Mikroprocesorem"  (pracujace  na
podstawie  protokolu  ISO-7816). Te karty sa najbezpieczniejsze poniewaz
posiadaja wlasny sytem operacyjny,  ktory  zabezpiecza wszelkie operacje
wejscia/wyjscia (I/O), o ile wczesniej nie zostal  wprowadzony specjalny
kod PIN. Najczesciej uzywa sie tych kart kiedy niezbedna  jest  poufnosc
danych:  karty  bankowe, karty kodowe platnych telewizji (Canal+), karty
zdrowia (na Zachodzie Europy a podobno i u nas niedlugo po reformie ;)).

Co do kart chipowych uzywanych do dzwonienia (zwanych dalej telekartami)
to  nawet  gdy  naleza one do tych slabiej zabezpieczonych (a tak jest w
rzeczywistosci), bardzo trudno  jest dzwonic za darmo przy ich pomocy. W
rzeczy samej nie da sie,  ale sa przeciez  sposoby  ominiecia  wszelkich
trudnosci  technicznych,  prawda? Wracajac do telekart to wszystkie dane
sa czytelne bez zadnych ograniczen,  poniewaz  nie  ma  wewnatrz zadnych
poufnych informacji. Jednak sa na tyle dobrze zrobione, ze zabezpieczaja
interesy firm telekomunikacyjnych (za granica tez sa wielkie  i  pazerne
twory TPSA-podobne).
A  wiec  czym sa dokladnie telekarty? W rzeczywistosci sa to: 256 bitowy
EPROM  (karty  francuskie)  lub  128  bitowy EEPROM (karty niemieckie) z
szeregowym wyjsciem i kilkoma innymi kontrolnymi  stykami.  Karty innych
panstw to tylko powielenie technologii francuskiej lub niemieckiej  (ale
dotyczy  to  tylko  Europy  w USA jest troche inaczej). Oczywiscie kazdy
kraj ma wlasna specyfike, ale  roznice sa w bitach - bedzie o tym duzo w
czesci ze schematami.
Powstaje pytanie: dlaczego nie mozna (teoretycznie) telekarty "napelnic"
(uzupelnic)  po  raz drugi (i kolejny)? Otoz zeby uzupelnic po raz drugi
telekarte  trzeba  by  skasowac  zapis  przy  pomocy  promieni UV (ultra
fioletowych). Mozna tego dokonac jedynie na EPROMie a nie  dziala  to na
EEPROMie  (taka  jest jego specyfika elektroniczna). Karty sa pokryte, w
technologii UV, nieprzezroczysta  zywica  a  to powoduje, ze UV nie moze
dotrzec do krzemowego chipu. A wiec nastepna przeszkoda po EEPROMie. Ale
nawet gdyby byl to EPROM i jakby sie udalo zamazac chip  trzeba by teraz
zaprogramowac tzw. przetworczy obszar karty a wiec wyrugowac bezpiecznik
bedacy specjalnie ustawiony po zaprogramowaniu karty w fabryce,  tak aby
uniemozliwial  zapis.  Krotko  mowiac  ta czesc karty jest zabezpieczona
przed zapisem i aby to  zmienic trzeba by dysponowac takim sprzetem oraz
technologia jak w fabryce robiacej te karty.
Pomimo tego, warto dokladnie poznac jak te karty dzialaja, zeby zobaczyc
jakie  rodzaje danych sa wewnatrz i w jaki sposob dane te sa mapowane. Z
drugiej strony  BEZ  DOKLADNEGO POZNANIA BUDOWY TYCH KART nie da sie nic
pozniej zrobic w zwiazku z ich "samodzielnym  tworzeniem" ;). W tym celu
trzeba wreszcie zobaczyc ile modulow (jednostek) jest  pozostawianych po
wydzwonieniu. Poza tym karty te maja bardzo duzo innych zastosowan, poza
dzwonieniem, np. kiedy mozna ich uzyc jako klucz do otwarcia  drzwi  lub
jako  klucz do zabezpieczenia programu (na podstawie ich kodowania). Oba
przypadki  sa  jak  najbardziej  prawdziwe,  ale  nie  bede  sie tu nimi
zajmowal (to raczej drugorzedna rzecz) ;).
Jesli idzie o historie i ciaglosc technologiczna to telekarty francuskie
zostaly stworzone w 1984.  Konstruktorzy  zdecydowali  sie  robic  je  w
technologii  NMOS, ale teraz uzywaja juz technologii CMOS (od okolo roku
1994 chociaz zdarzaja sie jeszcze  w tej poprzedniej wersji). Czytniki w
automatach publicznych zostaly juz niemal  wszystkie zastapione na CMOS,
poza jednostkowymi przypadkami. Jednoczesnie uzywa  sie  EEPROMu zarowno
do zabezpieczania kart jak i dodania do nich wielu uzytecznych (z punktu
widzenia klienta i producenta), informacji.  To  nazywa  sie  "Telekarty
drugiej generacji", chociaz moim zdaniem duzo tu halasu (dumna  nazwa) a
zmian niewiele. Poza lepszym zabezpieczeniem, tzw. "obszarem producenta"
i zmiana wygladu nie ma tam nic wiecej.

b) schemat chipu

                    .-------------------.
                    |                   |
                  --|> Clk              |
                    | _                 |
                  --| R/W               |
                    |                   |
                  --| Reset             |
                    |                   |
                  --| Fuse              |
                    |                   |
                  --| Vpp               |
                    |                   |
                    |                   |
                    '-.               .-'
                      |               |
                    .-------------------.
                    |               Out |-- wyjscie szeregowe
                    '-------------------'


c) opis stykow zlacza

         AFNOR CHIP                                   ISO CHIP
         ----------                                   --------
 -------------+-------------                -------------+-------------
|   8         |         4   |              |   1         |         5   |
|             |             |              |             |             |
+-------\     |     /-------+              +-------\     |     /-------+
|   7    +----+----+    3   |              |   2    +----+    +    6   |
|        |         |        |              |        |         |        |
+--------|         |--------+              +--------|         |--------+
|   6    |         |    2   |              |   3    |         |    7   |
|        +    +----+        |              |        +----+----+        |
+-------/     |     \-------+              +-------/     |     \-------+
|   5         |         1   |              |   4         |         8   |
|             |             |              |             |             |
 -------------+-------------                -------------+-------------

                                         NB: tylko  pozycja  chipu  jest
                                         ustandaryzowana wedlug ISO. Nie
                                         dotyczy to jednak stykow.

Styki:     1 : Vcc = 5V        5 : Gnd
-----      2 : R/W             6 : Vpp = 21V
           3 : Clock           7 : I/O
           4 : Reset           8 : Fuse

d) podstawowe paramtery

   - Protokol Synchroniczny.
   - Technologia N-MOS.
   - Organizacja wedlug schematu 256x1 bit .
   - 96 zapisan zabezpieczonych przez wyrzucenie bezpiecznika.
   - Niska moc 85mW w trybie odczytu.
   - 21 V programujacego napiecia.
   - Czas dostepu: 500ns
   - Zakres temperatury: -10C + 70C
   - 10 lat przetrzymania danych.

e) diagramy czasowe (timingi)

+21V                                     _____________
+5V ____________________________________|             |_______________ Vpp
                                        :             :
+5V                  ___________________:_____________:_______________ Reset
0V  ________________|                   :             :
                    :                   :             :
+5V     ____        :      ____         :       ______:______
0V  ___|    |_______:_____|    |________:______|      :      |________ Clock
       :    :       :     :    :        :      :      :      :
+5V    :    :       :     :    :        :______:______:      :         _
0V  ___:____:_______:_____:____:________|      :      |______:________ R/W
       :    :       :     :    :        :      :      :      :
+5V    :    :       :_____:    :________:      :      :      :________
0V  XXXXXXXXXXXXXXXXX_____XXXXXX________XXXXXXXXXXXXXXXXXXXXXX________ Out
       :    :       :     :    :        :<-----><---->:      :
       :    :       :     :    :        :10 to   10 to       :
       :    :       :     :    :        :50 ms   50ms        :
        Reset        Bit 1        Bit2                           Bit 3
        karty       odczyt       odczyt  Bit2 zapisywany do 1    odczyt


f) mapa pamieci kart z Francji i Monako

Bajty       Bity      Binarnie   Szesnastkowo
                    +-----------+-----+
  1        1 --> 8  |           |     | ---> kod konstrukcyjny
                    +-----------+-----+
  2       9 --> 16  | 0000 0011 | $03 | ---> telekarta francuska
                    +-----------+-----+
  3      17 --> 24  |           |     |
                    +-----------+-----+
  4      25 --> 32  |           |     |
                    +-----------+-----+
  5      33 --> 40  |           |     |
                    +-----------+-----+
  6      41 --> 48  |           |     |
                    +-----------+-----+
  7      49 --> 56  |           |     |
                    +-----------+-----+
  8      57 --> 64  |           |     |
                    +-----------+-----+
  9      65 --> 72  |           |     |
                    +-----------+-----+
 10      73 --> 80  |           |     |
                    +-----------+-----+
 11      81 --> 88  |           |     |
                    +-----------+-----+
 12      33 --> 40  | 0001 0011 | $13 | ---> 120 jednostkowa karta
                    | 0000 0110 | $06 | --->  50 jednostkowa karta
                    | 0000 0101 | $05 | --->  40 jednostkowa karta
                    +-----------+-----+
 13-31  97 --> 248  |           |     | ---> Obszar jednostek: za kazdym
                    |           |     |      razem  gdy  jednostka  jest
                    |           |     |      uzywana, bit ustawia sie na
                    |           |     |      wartosc "1";
                    |           |     |      Ogolnie,    pierwsze     10
                    |           |     |      jednostek  jest spalanych w
                    |           |     |      fabryce na probe.
                    +-----------+-----+
 32    249 --> 256  | 1111 1111 | $FF | ---> karta jest pusta
                    +-----------+-----+

g) mapa pamieci kart z innych krajow

Bajty       Bity      Binarnie   Szesnastkowo
                    +-----------+-----+
  1        1 --> 8  |           |     |
                    +-----------+-----+
  2       9 --> 16  | 1000 0011 | $83 | ---> telekarta
                    +-----------+-----+-----------+-----+
3-4      17 --> 32  | 1000 0000 | $80 | 0001 0010 | $12 | ---> 10 jednostkowa karta
                    |           |     | 0010 0100 | $24 | ---> 22 jednostkowa karta
                    |           |     | 0010 0111 | $27 | ---> 25 jednostkowa karta
                    |           |     | 0011 0010 | $32 | ---> 30 jednostkowa karta
                    |           |     | 0101 0010 | $52 | ---> 50 jednostkowa karta
                    |           |     | 0110 0010 | $62 | ---> 60 jednostkowa karta
                    |           |     | 1000 0010 | $82 | ---> 80 jednostkowa karta
                    | 1000 0001 | $81 | 0000 0010 | $02 | ---> 100 jednostkowa karta
                    |           |     | 0010 0010 | $22 | ---> 120 jednostkowa karta
                    |           |     | 0101 0010 | $52 | ---> 150 jednostkowa karta
                    +-----------+-----+-----------+-----+
  5      33 --> 40  |           |     | ---> $00 dla Szwecji.
                    +-----------+-----+
  6      41 --> 48  |           |     |
                    +-----------+-----+
  7      49 --> 56  |           |     |
                    +-----------+-----+
  8      57 --> 64  |           |     |
                    +-----------+-----+
  9      65 --> 72  |           |     |
                    +-----------+-----+
 10      73 --> 80  |           |     |
                    +-----------+-----+
 11      81 --> 88  |           |     | ---> $11 dla Szwecji
                    +-----------+-----+
 12      89 --> 96  | 0001 1110 | $1E | ---> Szwecja
                    | 0010 0010 | $22 | ---> Hiszpania
                    | 0011 0000 | $30 | ---> Norwegia
                    | 0011 0011 | $33 | ---> Andora
                    | 0011 1100 | $3C | ---> Irlandia
                    | 0100 0111 | $47 | ---> Portugalia
                    | 0101 0101 | $55 | ---> Czechy
                    | 0101 1111 | $5F | ---> Gabon
                    | 0110 0101 | $65 | ---> Finlandia
                    +-----------+-----+
 13-31  97 --> 248  |           |     | ---> Obszar     jednostek:    za
                    |           |     |      kazdym  razem gdy jednostka
                    |           |     |      jest uzywana, bit ustawiany
                    |           |     |      jest na "1";
                    |           |     |      Ogolnie     pierwsze     10
                    |           |     |      jednostek  jest spalanych w
                    |           |     |      fabryce na probe.
                    +-----------+-----+
 32    249 --> 256  | 0000 0000 | $00 |
                    +-----------+-----+


Sekcja II.  Karty ODS, Giesecke & Devrient, ORGA Karten systeme, Uniqua,
            Gemplus, Schlumberger i Oldenbourg Kartensysteme:
------------------------------------------------------------------------

a) wprowadzenie

Specyfika  tych  kart  to  128 bitowa pamiec w technologii NMOS. Ponizej
mapa pamieci tych kart:

64 bitowy EPROM zapis zabezpieczony (obszar przetworczy).
40 bitowy EEPROM (5x8 bitow).
24 bity ustawione na "1".

b) styki

           ISO 7816-2
  -------------+-------------
 |   1         |         5   |        Styki
 |             |             |        -----
 +-------\     |     /-------+
 |   2    +----+    +    6   |          1 : Vcc = 5V    5 : Gnd
 |        |         |        |          2 : Reset       6 : n.c.
 +--------|         |--------+          3 : Clock       7 : I/O
 |   3    |         |    7   |          4 : n.c.        8 : n.c.
 |        +----+----+        |
 +-------/     |     \-------+        n.c. : nie polaczony
 |   4         |         8   |
 |             |             |
  -------------+-------------

c) podstawowe parametry

        - ISO 7816 - kompatybilne w 1/2.
        - uzywane pojedyncze (5V) napiecie zasilania.
        - zuzycie niskiej mocy.
        - technologia NMOS.

d) diagramy czasowe (timingi)

reset
-----

Adres licznika jest resetowany na 0 kiedy zegar, linia CLK, podnosi sie
dopoki linia kontrolna R jest wysoka. Zauwazyc nalezy takze, ze licznik
adresowy  nie  moze  byc  zresetowany gdy znajduje sie on w zakresie od
0 do 7.

      __________________
_____|                  |_____________________________________________ Reset
     :                  :
     :        _____     :  _____       _____       _____       _____
_____:_______|     |____:_|     |_____|     |_____|     |_____|     |_ Clk
     :       :          : :     :     :     :     :     :     :     :
_____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_
_____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_ (Address)
     :       :          :       :           :           :           :
_____:_______       ____:_______:___________:___________:___________:_
_____:       |_____|    :_______|___________|___________|___________|_ Data
Bit n                      Bit 0    Bit 1        Bit2       Bit3

Licznik  adresowy  jest  zwiekszany  o  1  na kazdym zboczu narastajacym
zegara - sygnal CLK, tak dlugo az linia kontrolna R jest szczatkowo mala
(istotne!!). Dane bedace w kazdym zaadresowanym bicie sa wysylane na I/O
za kazdym taktem zegara. Mozliwe jest tu zmniejszenie licznika adresow a
wiec adresowanie wczesniejszego bitu. Licznik  adresowy  musi byc jednak
wyzerowany, a pozniej zwiekszony do wymaganej wartosci.

zapis
-----

Wszystkie  niezapisane  lub  zamazane bity w obrebie adresu 64-104, moga
pozostac dalej niezapisane. Kiedy komroka pamieci nie jest zapisywana to
ustawiana jest na 0.
Zaadresowana komorka jest niezapisana az do ponizszej sekwencji:
1 - R  podnosi  sie  dopoki  wartosc  zegara  jest  niska. Trwa to az do
wylaczenie  licznika  adresowego  poprzez  zwiekszenie  go  o jeden takt
zegara.
2 - Wartosc zegara jest wtedy podnoszona do minimum 10ms az do zapisania
bitu  adresu.  Gdy  operacja  zapisu  sie  konczy, wartosc zegara spada,
licznik adresowy jest odblokowany a zawartosc zapisanej  komorki,  ktora
wynosi  teraz  0,  jest  wysylana  na  I/O,  jesli  operacja  przebiegla
pomyslnie.  Nastepny  takt  zegara  zwiekszy  adres  o  jeden, nastepnie
zapisana sekwencja bedzie mogla byc powtorzona do  zapisania  nastepnego
bitu.
Wiem  ze  troche  to skaplikowane (lub nawet bardzo ;) ), takze dla osob
znajacych elektronike, ale schematy wyjasniaja to lepiej niz moj opis ;)
Mam nadzieje, ze sobie poradzicie z tym.

              _____                                _____
_____________|     |______________________________|     |_______________  Reset
             :                                    :
     ___     :           _____           ___      :           _____
____|   |____:__________|     |_________|   |_____:__________|     |____  Clk
    :        :          :     :         :   :     :          :     :
____:________:__________:_____:_________:___:_____:__________:_____:_____
 n  |      n+1          |     n+2       |   :    n+3         |     :      (Address)
----'--------:----------'-----:---------'---:-----:----------'-----:-----
             :          :     :             :     :          :     :
________ ____:_____ __________:_____________:_____:_____ __________:____
________|____|     |__________|_____________|_____|     |__________|____  I/O
   n      n+1           :     :     n+1        n+2           :     :
                        :     :                              :     :
                         zapis                                zapis

Nosnik Zapisu
-------------

Licznik jest zamazywany przez wykonanie sekwencji Nosnika Zapisu. Dzieje
sie to podczas nastepnego, najwazniejszejszego jego dzialania (najwyzszy
priorytet), powodujacego zamazywanie licznika.

Sekwencja Nosnika Zapisu jest nastepujaca:
1 - Licznik  adresowy  jest ustawiany na niezapisany bit, ktory jest tez
zamazywany, w nastepnym najwazniejszym etapie pracy licznika.
2 - Zwiekszanie jest wylaczone  na nastepnym zboczu narastajacym R gdzie
wartosc zegara jest szczatkowo niska.
3 - Wartosc zegara jest wtedy zwiekszana do  minimum 10ms, dopoki R jest
male, zeby zapisac nastepny zaadresowany bit.
4 - R podnosi sie znowu dopoki wartosc zegara pozostaje szczatkowo mala,
zeby wylaczyc zwiekszanie po raz drugi.
5 - Wartosci zegara podnosi sie do minimum 1ms, dopoki R jest male, zeby
zapisac  zaadresowany  bit  po  raz  drugi,  wymazujac  poziom  licznika
bezposrednio ponizej zaadresowanego bitu.

       _____                      _____
______|     |____________________|     |_________________________________  Rst
      :                          :
      :            _______       :              _______        ___
______:___________|       |______:_____________|       |______|   |______  Clk
      :           :       :      :             :       :      :   :
      :           :       :      :             :       :      :   :
<------------------------- address n ------------------------>:<--- n+1 ------
      :           :       :      :             :       :          :
      :           :       :      :             :       :          :
______:_____ _____________:______:_____ _______________:__________:______
______|     |_____________|______|     |_______________|__________|______  I/O
                  :       :  n                 :       :     n        n+1
                  :       :                    :       :
                    Zapis                      Kasowanie

e) Mapa pamieci

Bajty      Bity      Binarnie   Szesnastkowo
                    +-----------+-----+
  1       1 -->   8 |           |     |
                    +-----------+-----+
  2       9 -->  16 | 0010 1111 | $2F | ---> Niemcy
                    | 0011 0111 | $37 | ---> Holandia
                    | 0011 1011 | $3B | ---> Grecja
                    +-----------+-----+
  3      17 -->  24 |           |     |
  4      25 -->  32 |           |     | ---> obszar wydawcy
  5      33 -->  40 |           |     |      (zapis niedozwolony)
  6      41 -->  48 |           |     |
  7      49 -->  56 |           |     |
  8      57 -->  64 |           |     |
                    +-----------+-----+
  9      65 -->  72 |           |     | ---> c4096  )
 10      73 -->  80 |           |     | --->  c512  )
 11      81 -->  88 |           |     | --->   c64  ) * 5 faza licznika
 12      89 -->  96 |           |     | --->    c8  )   osemkowego
 13      97 --> 104 |           |     | --->    c0  )
                    +-----------+-----+
 14     105 --> 112 | 1111 1111 | $FF |
 15     113 --> 120 | 1111 1111 | $FF | ---> obszar bitow ustawiony na
 16     120 --> 128 | 1111 1111 | $FF |      "1"
                    +-----------+-----+

Obszar wydawcy
--------------

Obszar  wydawcy zawiera 40 bitow. Tresc jego jest wyspecyfikowana przez
wydawce karty,  i  jest  ustalona  w  procesie produkcji. Tresc obszaru
wydawcy bedzie zawierala dane takie jak numery seryjne, daty czy centra
dystrybucyjne. Ten obszar jest przenaczony tylko do odczytu.

Obszar licznika
---------------

Obszar  licznika  przechowuje  jednostki  karty. Jego wartosc poczatkowa
jest wyspecyfikowana w  obszarze  zastrzezonym  przez  wydawce  karty  i
ustawiona w procesie produkcji. Obszar licznika jest podzielony na 5 faz
liczydla.  Wartosc  osemkowa  kazdej fazy jest zdefiniowana przez liczbe
bitow ustawionych na "1". Wartosc  tej  fazy  musi  byc  wielekrotnoscia
wspolczynnika 8^n (gdzie n miesci sie w obrebie [4..0] ).

przyklad: dla  karty  gdzie  pozostalo  15818  jednostek  zwyklych  (lub
          pienieznych).

       Bajt9        Bajt10       Bajt11       Bajt12       Bajt13
    ------------------------------------------------------------------
       00000111 -   00111111 -   01111111 -   00000001 -   00000011
    ------------------------------------------------------------------
       (3)osemkowo  (6)osemkowo  (7)osemkowo  (1)osemkowo  (2)osemkowo
    ------------------------------------------------------------------
    Wartosc = 3*8^4    +  6*8^3   +  7*8^2   +  1*8^1   +  2*8^
    --------------------------------------------------------------
    Suma = 15818 jednostek

Zauwazyc  nalezy, ze  gdy  sie  zmniejszy  licznik  to  wtedy  nie ma on
pozwolenia na zapis wartosci wiekszej niz poprzednia.

f) Parametry elektryczne

maksymalne wartosci
-------------------

                             +--------+------+------+------+---+
                             | Symbol | Min  | Max  |Jednostka |
+----------------------------+--------+------+------+----------+
| napiecie zasilania         |   Vcc  | -0.3 |    6 |    V     |
+----------------------------+--------+------+------+----------+
| napiecie wejsciowe         |   Vss  | -0.3 |    6 |    V     |
+----------------------------+--------+------+------+----------+
| temperatura przechowywania |  Tstg  |  -20 |  +55 |    C     |
+----------------------------+--------+------+------+----------+
| moc rozpraszana            |    Pd  |   -  |   50 |   mW     |
+----------------------------+--------+------+------+----------+

charakterystyka stalopradowa
----------------------------
                               +--------+-----+-----+-----+-----------+
                               | Symbol | Min.| Typ.| Max.| Jednostka |
+------------------------------+--------+-----+-----+-----+-----------+
| prad pobierany               |   Icc  |  -  |  -  |   5 |    mA     |
+------------------------------+--------+-----+-----+-----+-----------+
| napiecie wejsciowe (niskie)  |    Vl  |   0 |  -  | 0.8 |    V      |
+------------------------------+--------+-----+-----+-----+-----------+
| napiecie wejsciowe (wysokie) |    Vh  | 3.5 |  -  | Vcc |    V      |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wejscia R            |    Ih  |  -  |  -  | 100 |    uA     |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wejscia Clk          |    Il  |  -  |  -  | 100 |    uA     |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wyjscia (Vol=0.5V)   |   Iol  |  -  |  -  |  10 |    uA     |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wyjscia (Voh=5V)     |   Ioh  |  -  |  -  | 0.5 |    mA     |
+------------------------------+--------+-----+-----+-----+-----------+

charakterystyka zmiennopradowa
------------------------------

                       +--------+------+------+------+
                       | Symbol | Min. | Max. | Jedn.|
+----------------------+--------+------+------+------+
| szerokosc impulsu    |    tr  |   50 |   -  |  us  |
| R adres zerowany     |        |      |      |      |
+----------------------+--------+------+------+------+
| szerokosc impulsu    |    ts  |   10 |   -  |  us  |
| R zapis              |        |      |      |      |
+----------------------+--------+------+------+------+
| wysoki poziom Clk    |    th  |    8 |   -  |  us  |
+----------------------+--------+------+------+------+
| niski poziom Clk     |    tl  |   12 |   -  |  us  |
+----------------------+--------+------+------+------+
| strob zapisu         | Twrite |   10 |   -  |  ms  |
+----------------------+--------+------+------+------+
| strob kasowania      | Terase |   10 |   -  |  ms  |
+----------------------+--------+------+------+------+
|                      |   tv1  |    5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv2  |  3.5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv3  |  3.5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv4  |  3.5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv5  |  3.5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv6  |    5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv7  |    5 |   -  |  us  |
+----------------------+--------+------+------+------+
|                      |   tv8  |   10 |   -  |  us  |
+----------------------+--------+------+------+------+

SEKCJA III. Schemat czytnika
----------------------------

a) czytnik 1

   Zewnetrznie 5V (Opcjonalnie)
5V o------,
          |                 /             T2  PNP      d13  r7 10
0V o--,   |                /               BC 177     |\ |  _____
      |   |      ,-------o/   o--*------. E      C .--| >+-[_____]--------,
    __+__ |      |               |       \        /   |/ |                |
    \\\\\ |    __|__ Bateria     |         \    /                         |
          |      -   22.5V       |       ---------                        |
.......   |      |               |   _____   |   _____                    |
       :  |    __+__             +--[_____]--*--[_____]--,                |
   D2  :  |    \\\\\                r6 150k     r5 15k   |                |
4 o-------|---------------------------*------------------|-------------,  |
       :  |                           |   r3 220k       / C            |  |
   Ack :  |                           |   _____      |/    T1 - NPN    |  |
10 o------|--------.                  '--[_____]-*---|      BC107      |  |
       :  |        |                      _____  |   |\                |  |
       : ,-,      ,-,                 +--[_____]-'      \ E            |  |
       : | |r2    | |r1               |  r4 390k         |             |  |
       : | |220   | |22k            __+__              __+__           |  |
       : |_|      |_|               \\\\\              \\\\\           |  |
       :  |  |\ |  |                                                   |  |
       :  *--| >+--|----------------*----------------------------------|--*
       :  |  |/ |  |          ,-----|-----------------------------,    |  |
       :  |  d1    |          |     |   ,----------,----------,   |    |  |
       :  |        |          |     *---|--*  Fuse | Reset *--|---'    |  |
       :  |        |          |     |   |----------|----------|        |  |
   D0  :  |        |          |   ,-|---|--*   I/O | Clk   *--|---,    |  |
2 o-------|--------|----------'   | |   |----------|----------|   |    |  |
       :  |        |              | '---|--*   Vpp | R/W   *--|---|----'  |
  Busy :  |        |              |     |----------|----------|   |       |
11 o------|--------|--------------' ,---|--*   Gnd | 5V    *  |   |       |
       :  |        |                |   '----------'-------|--'   |       |
   D1  :  |        |              __+__    Zlacze chipu    |      |       |
3 o-------|--------|--------,     \\\\\                    |      |       |
       :  |        |        '------------------------------|------'       |
  Str  :  |  |\ |  |                                       |              |
1 o-------*--| >+--*----*----*----*----*-------------------'              |
       :   d2|/ |  |d3  |d4  |d5  |d6  |d7                                |
       :          -+-  -+-  -+-  -+-  -+-                                 |
       :          /_\  /_\  /_\  /_\  /_\                                 |
   D3  :           |    |    |    |    |   |\ | d8                        |
5 o----------------*----|----|----|----|---| >+-------*-------------------'
       :                |    |    |    |   |/ |       |
       :                |    |    |    |              |
   D4  :                |    |    |    |   |\ | d9    |
6 o---------------------*----|----|----|---| >+-------*
       :                     |    |    |   |/ |       |
       :                     |    |    |              |
   D5  :                     |    |    |   |\ | d10   |
7 o--------------------------*----|----|---| >+-------*
       :                          |    |   |/ |       |
       :                          |    |              |
   D6  :                          |    |   |\ | d11   |
8 o-------------------------------*----|---| >+-------*
       :                               |   |/ |       |
       :                               |              |
   D7  :                               |   |\ | d12   |
9 o------------------------------------*---| >+-------'
       :                                   |/ |
       :
       :
25 o------.
       :  |
.......:  |                                 d1 do d13: 1N4148
        __+__
        \\\\\
Port rownolegly

b) czytnik 2

                                                           dioda Zenera 3.3V
              2x1N4001         ________                150
           |\ |     |\ |      |        |              _____  | /|        (6)
o----,  ,--+ >+--*--+ >+--*---+  7824  +----*--o   o-|_____|-+< +-*----o Vpp
     |  |  |/ |  |  |/ |  |   |________|    |                | \| |
     )||(  220F |  220F |        |      ===== 0.22F           _+_
220V )||(    25V | +  40V | +      |        |                    / \  1N4148
     )||(      =====    =====    __+__    __+__                 '-+-'
 ~   )||(        | -      | -    \\\\\    \\\\\                  ,+,
     |  |   ___  |        |                                      | | 12
o----'  '--o   o-*      __+__                                    | |
        obecnosc |      \\\\\  ________                          '+'   12
         karty   |  |\ |      |        |                          |   _____    (1)
                 '--+ >+------+  7805  +------*-------------------*--|_____|-o Vcc
                    |/ |      |________|      |                   |
                   1N4001          |         _+_                  |
                                   |         \ / --->            ,+,
                                 __+__       -+-  --->           | |
                                 \\\\\        |                  | | 4.7k
                                             ,+,                 '+'
                                             | |                  |            (7)
                                             | | 680             *----------o I/O
                                             '+'                  |
                                              |       Zajete (11) o
                                              |                                (4)
                                            __+__         D0 (2)  o-----*----o Raz
                                            \\\\\                       |
                                                              4.7nF   =====
                                                                        |
                                                                      __+__
                                                                      \\\\\    (3)
                                                          D1 (3)  o----------o Clk
                                                                               (2)
                                                          D2 (4)  o----------o  W
                                                         Gnd (25) o
                                                                  |   fuse     (8)
                                                                  *--~~~~~---o Fus
                                                                __+__
                                                                \\\\\

+----------------------------------------------------------------------+
| CZESC B. Jak zrobic wlasna telekarte?                                |
+----------------------------------------------------------------------+

SEKCJA I. Teoria
----------------

a) szczegoly i podstawowy program

Tak  naprawde  system  stosowany  w kartach chipowych mozna dosyc prosto
obejsc, poniewaz wcale nie jest tak  dobrze  zabezpieczony, jak moglo by
sie wydawac po przeczytaniu CZESCI A. Ponizej przedstawione  jest  dosyc
specyficzne  oprogramowanie dla mikrokomputera jednoukladowego PIC 16C84
RISC,  wyprodukowanego  przez  Microchip.  Umozliwia  on  emulacje  kart
Schlumberger i  innych.  System  ten funkcjonuje w Skandynawii (Szwecja,
Norwegia i Finladnia), Hiszpanii,  Francji,  Monako  i  w  wielu  innych
krajach.  W przypadku Francji (ewentualnie innych krajow) oprogramowanie
to wymaga sladowych  modyfikacji  dla  poprawnego dzialania, ale jest to
rzecz na poziomie juz banalnym (przy  zalozeniu,  ze  rozumie  sie  cala
tresc przedstawiona do tej pory). A wiec co do przedstawianego tu tematu
niezbedne  jest  posiadanie  dostepu  do  programatora (PROMu), mogacego
poradzic sobie z ukladem PIC 16C84. Mozna rowniez  zbudowac  cos takiego
samemu jak to pokazane jest na dolaczonych schematach ponizej.

Po  pierwsze,  trzeba  wczytac  pierwsze  12  bajtow  danych z poprawnie
dzialajacej  karty  z  kraju,  w ktorym emulator ma dzialac. Warunek ten
jest niezbedny do spelnienia. Ma to byc karta aktualnie funkcjonujaca, a
nie jakas sprzed 10 lat (lub nawet  sprzed 2). Nastepnie wystarczy tylko
wprowadzic te 12 bajtow danych we wlasciwe miejsce w ponizszym programie
i to skompilowac. To wszystko ;-) Proste,  prawda? Poniewaz zdecydowanie
przypadkowo  wybralem  wersje  ukladu PIC z zewnetrznymi danymi EEPROMu,
oznacza  to,  ze  pierwsze  12  pozycji  danych EEPROMu powinno zawierac
identyfikator (ID) karty. Do dzisiaj kod ten  powinien (!)  dzialac  bez
zadnych  problemow.  Jesli  cos  jest  nie tak w niektorych przypadkach,
wystarczy zmodyfikowac odpowiednio ten  program  (jesli  sie  samemu nie
umie  poprosic  kolege  codera ;) ).  Poniewaz PIC jest bardzo szybkim i
"mocnym" mikrokomputerem jednoukladowym, moze  byc  to stosunkowo trudne
dla  firm  robiacych  telekarty  rozwiazanie  problemu   (a  dla  nas to
oczywiscie lepiej ;) ). Aha i jeszcze jedna sprawa co do oprogramowania:
zauwazyc nalezy, ze biezaca wersja pakietu PICSTART 16B Microchip'u jest
niemozliwa  do  programowania  tablicy  danych EEPROMu w ukladzie 16C84,
wiec jesli zamierzacie tego uzywac, uzyjcie  innej  wersji  kodu,  ktory
znajdziecie w dodatkach.

 - wersja oryginalna (komentarze po angielsku)
========================================================================

        TITLE   "ISO 7816 Synchronous Memory Card Emulator"
        LIST    P=PIC16C84, R=HEX
        INCLUDE "PICREG.EQU"

; PIC16C84 I/O Pin Assignment List

CRD_CLK         equ     0       ; RB0 + RA4 = Card Clock
CRD_DTA         equ     0       ; RA0 = Card Data Output
CRD_RST         equ     1       ; RB1 = Card Reset, Low-Active
CRD_WE          equ     7       ; RB7 = Card Write-Enable, Hi-Active

; PIC16C84 RAM Register Assignments

CRD_ID          equ     0x00c   ; Smartcard ID, 12 bytes
FUSCNT          equ     0x018   ; Fused units counter
BITCNT          equ     0x019   ; Bitcounter
LOOPCNT         equ     0x01a   ; Loop Counter
EE_FLAG         equ     0x01b   ; EEPROM Write Flag
TEMP1           equ     0x01c   ; Temporary Storage #1
TEMP2           equ     0x01d   ; Temporary Storage #2
TEMP3           equ     0x01e   ; Temporary Storage #3
TEMP4           equ     0x01f   ; Temporary Storage #4
TEMP_W          equ     0x02e   ; Temporary W Save Address
TEMP_S          equ     0x02f   ; Temporary STATUS Save Address

        org     0x2000          ; Chip ID Data
        dw      042,042,042,042

        org     0x2007          ; Configuration Fuses
        dw      B'00000001'

        org     0x2100          ; Internal Data EEPROM Memory (Card ID!!!)
        db      0x081,0x042,0x000,0x011,0x022,0x033
        db      0x044,0x055,0x066,0x077,0x011,0x084
        db      0x002           ; Default used up credits value

        org     PIC84           ; Reset-vector
        goto    INIT            ; Jump to initialization routine

        org     INTVEC          ; Interrupt-vector
        push                    ; Save registers
        call    INTMAIN         ; Call main interrupt routine
        pop                     ; Restore registers
        retfie                  ; return from interrupt & clear flag

        org     0x010           ; Start address for init rout.
INIT    bsf     STATUS,RP0      ; Access register bank 1
        clrwdt                  ; Clear watchdog timer
        movlw   B'11101000'     ; OPTION reg. settings
        movwf   OPTION          ; Store in OPTION register
        movlw   B'11111110'     ; Set PORT A Tristate Latches
        movwf   TRISA           ; Store in PORT A tristate register
        movlw   B'11111111'     ; Set PORT B Tristate Latches
        movwf   TRISB           ; Store in PORT B tristate register
        bcf     STATUS,RP0      ; Access register bank 0
        clrf    RTCC            ; Clear RTCC
        clrf    PORTA           ; Clear PORTA
        clrf    PORTB           ; Clear PORTB
        movlw   0d              ; 13 bytes to copy
        movwf   LOOPCNT         ; Store in LOOPCNT
        movlw   0c              ; Start storing at $0c in RAM
        movwf   FSR             ; Store in FSR
        clrf    EEADR           ; Start at EEPROM Address 0
EECOPY
        bsf     STATUS,RP0      ; Access register bank 1
        bsf     EECON1,RD       ; Set EECON1 Read Data Flag
        bcf     STATUS,RP0      ; Access register bank 0
        movfw   EEDATA          ; Read one byte of EEPROM Data
        movwf   INDIR           ; Store in RAM pointed at by FSR
        incf    FSR             ; Increase FSR pointer
        incf    EEADR           ; Increase EEPROM Address Pointer
        decfsz  LOOPCNT,1       ; Decrease LOOPCNT until it's 0
        goto    EECOPY          ; Go and get some more bytes!
        bsf     STATUS,RP0      ; Access register bank 1
        bcf     EECON1,EEIF     ; Clear EEPROM Write Int. Flag
        bcf     EECON1,WREN     ; EEPROM Write Disable
        bcf     STATUS,RP0      ; Access register bank 0
        movlw   B'10010000'     ; Enable INT Interrupt
        movwf   INTCON          ; Store in INTCON

MAIN    bsf     STATUS,RP0      ; Access register bank 1
        btfsc   EECON1,WR       ; Check if EEPROM Write Flag Set
        goto    MAIN            ; Skip if EEPROM Write is Completed
        bcf     EECON1,EEIF     ; Reset Write Completion Flag
        bcf     EECON1,WREN     ; EEPROM Write Disable
        bcf     STATUS,RP0      ; Access register bank 0
        btfss   EE_FLAG,LSB     ; Check for EEPROM Write Flag
        goto    MAIN            ; If not set, jump back and wait some more
        clrf    EE_FLAG         ; Clear EEPROM Write Flag
        movlw   0c              ; Units is stored in byte $0c
        movwf   EEADR           ; Store in EEPROM Address Counter
        movfw   FUSCNT          ; Get fused units counter
        movwf   EEDATA          ; Store in EEDATA
        bsf     STATUS,RP0      ; Access register bank 1
        bsf     EECON1,WREN     ; EEPROM Write Enable
        bcf     INTCON,GIE      ; Disable all interrupts
        movlw   055             ; Magic Number #1 for EEPROM Write
        movwf   EECON2          ; Store in EECON2
        movlw   0aa             ; Magic Number #2 for EEPROM Write
        movwf   EECON2          ; Store in EECON2
        bsf     EECON1,WR       ; Execute EEPROM Write
        bsf     INTCON,GIE      ; Enable all interrupts again!
        bcf     STATUS,RP0      ; Access register bank 0
        goto    MAIN            ; Program main loop!

INTMAIN btfsc   INTCON,INTF     ; Check for INT Interrupt
        goto    INTMAIN2        ; If set, jump to INTMAIN2
        movlw   B'00010000'     ; Enable INT Interrupt
        movwf   INTCON          ; Store in INTCON
        return

INTMAIN2
        bcf     STATUS,RP0      ; Access register bank 0
        bsf     PORTA,CRD_DTA   ; Set Data Output High
        btfsc   PORTB,CRD_RST   ; Check if reset is low
        goto    NO_RST          ; If not, skip reset sequence
        movfw   RTCC            ; Get RTCC Value
        movwf   TEMP4           ; Store in TEMP4
        clrf    RTCC            ; Clear RTCC
        movlw   055             ; Subtract $55 from TEMP4
        subwf   TEMP4,0         ; to check for card reset....
        bnz     NO_RST2         ; If not zero, jump to NO_RST
        movlw   02              ; Unused one has $02 in FUSCNT
        movwf   FUSCNT          ; Store full value in FUSCNT
        bsf     EE_FLAG,LSB     ; Set EEPROM Write Flag
NO_RST2 bcf     INTCON,INTF     ; Clear INT Interrupt Flag
        return                  ; Mission Accomplished, return to sender

NO_RST  movfw   RTCC            ; Get RTCC Value
        movwf   BITCNT          ; Copy it to BITCNT
        movwf   TEMP1           ; Copy it to TEMP1
        movwf   TEMP2           ; Copy it to TEMP2
        movlw   060             ; Load W with $60
        subwf   TEMP1,0         ; Subtract $60 from TEMP1
        bz      CREDIT          ; If it is equal to $60
        bc      CREDIT          ; or greater, then skip to units area
        rrf     TEMP2           ; Rotate TEMP2 one step right
        rrf     TEMP2           ; Rotate TEMP2 one step right
        rrf     TEMP2           ; Rotate TEMP2 one step right
        movlw   0f              ; Load W with $f
        andwf   TEMP2,1         ; And TEMP2 with W register
        movfw   TEMP2           ; Load W with TEMP2
        addlw   0c              ; Add W with $0c
        movwf   FSR             ; Store data address in FSR
        movfw   INDIR           ; Get data byte pointed at by FSR
        movwf   TEMP3           ; Store it in TEMP3
        movlw   07              ; Load W with $07
        andwf   TEMP1,1         ; And TEMP1 with $07
        bz      NO_ROT          ; If result is zero, skip shift loop
ROTLOOP rlf     TEMP3           ; Shift TEMP3 one step left
        decfsz  TEMP1,1         ; Decrement TEMP1 until zero
        goto    ROTLOOP         ; If not zero, repeat until it is!
NO_ROT  btfss   TEMP3,MSB       ; Check if MSB of TEMP3 is set
        bcf     PORTA,CRD_DTA   ; Clear Data Output
        bcf     INTCON,INTF     ; Clear INT Interrupt Flag
        return                  ; Mission Accomplished, return to sender

CREDIT  btfss   PORTB,CRD_WE    ; Check if Card Write Enable is High
        goto    NO_WRT          ; Abort write operation if not...
        btfss   PORTB,CRD_RST   ; Check if Card Reset is High
        goto    NO_WRT          ; Abort write operation if not...
        incf    FUSCNT          ; Increase used-up units counter
        bsf     EE_FLAG,LSB     ; Set EEPROM Write-Flag
        bcf     INTCON,INTF     ; Clear INT Interrupt Flag
        return                  ; Mission Accomplished, return to sender

NO_WRT  movlw   060             ; Load W with $60
        subwf   BITCNT,1        ; Subtract $60 from BITCNT
        movfw   FUSCNT          ; Load W with FUSCNT
        subwf   BITCNT,1        ; Subtract FUSCNT from BITCNT
        bnc     FUSED           ; If result is negative, unit is fused
        bcf     PORTA,CRD_DTA   ; Clear Data Output
FUSED   bcf     INTCON,INTF     ; Clear INT Interrupt Flag
        return                  ; Mission Accomplished, return to sender

        END

========================================================================


 - wersja jak wyzej
========================================================================

; PIC16Cxx Micro-controller Include File

PIC54           equ     0x1ff   ; PIC16C54 Reset Vector
PIC55           equ     0x1ff   ; PIC16C55 Reset Vector
PIC56           equ     0x3ff   ; PIC16C56 Reset Vector
PIC57           equ     0x7ff   ; PIC16C57 Reset Vector
PIC71           equ     0x000   ; PIC16C71 Reset Vector
PIC84           equ     0x000   ; PIC16C84 Reset Vector
INTVEC          equ     0x004   ; PIC16C71/84 Interrupt Vector

INDIR           equ     0x000   ; Indirect File Reg Address Register
RTCC            equ     0x001   ; Real Time Clock Counter
PCL             equ     0x002   ; Program Counter Low Byte
STATUS          equ     0x003   ; Status Register
FSR             equ     0x004   ; File Select Register
PORTA           equ     0x005   ; Port A I/O Register
PORTB           equ     0x006   ; Port B I/O Register
PORTC           equ     0x007   ; Port C I/O Register
ADCON0          equ     0x008   ; PIC16C71 A/D Control Reg 0
ADRES           equ     0x009   ; PIC16C71 A/D Converter Result Register
EEDATA          equ     0x008   ; PIC16C84 EEPROM Data Register
EEADR           equ     0x009   ; PIC16C84 EEPROM Address Register
PCLATH          equ     0x00a   ; Program Counter High Bits
INTCON          equ     0x00b   ; Interrupt Control Register
TRISA           equ     0x005   ; Port A I/O Direction Register
TRISB           equ     0x006   ; Port B I/O Direction Register
TRISC           equ     0x007   ; Port C I/O Direction Register
ADCON1          equ     0x008   ; PIC16C71 A/D Control Reg 1
EECON1          equ     0x008   ; PIC16C84 EEPROM Control Reg. 1
EECON2          equ     0x009   ; PIC16C84 EEPROM Control Reg. 2
OPTION          equ     0x001   ; Option Register

MSB             equ     0x007   ; Most-Significant Bit
LSB             equ     0x000   ; Least-Significant Bit
TRUE            equ     1
YES             equ     1
FALSE           equ     0
NO              equ     0

; Status Register (f03) Bits

CARRY           equ     0x000   ; Carry Bit
C               equ     0x000   ; Carry Bit
DCARRY          equ     0x001   ; Digit Carry Bit
DC              equ     0x001   ; Digit Carry Bit
Z_BIT           equ     0x002   ; Zero Bit
Z               equ     0x002   ; Zero Bit
P_DOWN          equ     0x003   ; Power Down Bit
PD              equ     0x003   ; Power Down Bit
T_OUT           equ     0x004   ; Watchdog Time-Out Bit
TO              equ     0x004   ; Watchdog Time-Out Bit
RP0             equ     0x005   ; Register Page Select 0
RP1             equ     0x006   ; Register Page Select 1
IRP             equ     0x007   ; Indirect Addressing Reg. Page Sel.

; INTCON Register (f0b) Bits

RBIF            equ     0x000   ; RB Port change interrupt flag
INTF            equ     0x001   ; INT Interrupt Flag
RTIF            equ     0x002   ; RTCC Overflow Interrupt Flag
RBIE            equ     0x003   ; RB Port Ch. Interrupt Enable
INTE            equ     0x004   ; INT Interrupt Enable
RTIE            equ     0x005   ; RTCC Overflow Int. Enable
ADIE            equ     0x006   ; PIC16C71 A/D Int. Enable
EEIE            equ     0x006   ; PIC16C84 EEPROM Write Int. Enable
GIE             equ     0x007   ; Global Interrupt Enable

; OPTION Register (f81) Bits

PS0             equ     0x000   ; Prescaler Bit 0
PS1             equ     0x001   ; Prescaler Bit 1
PS2             equ     0x002   ; Prescaler Bit 2
PSA             equ     0x003   ; Prescaler Assignment Bit
RTE             equ     0x004   ; RTCC Signal Edge Select
RTS             equ     0x005   ; RTCC Signal Source Select
INTEDG          equ     0x006   ; Interrupt Edge Select
RBPU            equ     0x007   ; Port B Pull-up Enable

; ADCON0 Register (f08) Bits

ADON            equ     0x000   ; A/D Converter Power Switch
ADIF            equ     0x001   ; A/D Conversion Interrupt Flag
ADGO            equ     0x002   ; A/D Conversion Start Flag
CHS0            equ     0x003   ; A/D Converter Channel Select 0
CHS1            equ     0x004   ; A/D Converter Channel Select 1
ADCS0           equ     0x006   ; A/D Conversion Clock Select 0
ADCS1           equ     0x007   ; A/D Conversion Clock Select 0

; ADCON1 Register (f88) Bits

PCFG0           equ     0x000   ; RA0-RA3 Configuration Bit 0
PCFG1           equ     0x001   ; RA0-RA3 Configuration Bit 0

; EECON1 Register (f88) Bits

RD              equ     0x000   ; PIC16C84 EEPROM Read Data Flag
WR              equ     0x001   ; PIC16C84 EEPROM Write Data Flag
WREN            equ     0x002   ; PIC16C84 EEPROM Write Enable Flag
WRERR           equ     0x003   ; PIC16C84 EEPROM Write Error Flag
EEIF            equ     0x004   ; PIC16C84 EEPROM Interrupt Flag

; Some useful macros...

PUSH    macro
        movwf   TEMP_W
        swapf   STATUS,W
        movwf   TEMP_S
        endm

POP     macro
        swapf   TEMP_S,W
        movwf   STATUS
        swapf   TEMP_W
        swapf   TEMP_W,W
        endm

        END
========================================================================
.

b) system zabezpieczen

Zabezpieczenia  systemu  kart  Schlumbergera,  w duzym stopniu zaleza od
dwoch  rzeczy:  wykrywacza  metali  w czytniku kart, ktory reaguje jesli
znajduje sie tam jakis metal na karcie, w miejscu  gdzie nie powinno byc
zadnego metalu. Obwod rejestruje ze karta wykonana domowym sposobem jest
zrobiona z metalu (zawsze to wykrywa). A wiec trzeba wykombinowac w jaki
sposob obejsc ten problem ;) Tak  naprawde  nie  jest  to zbyt trudne ;)
Producenci kart chipowych (zwlaszcza Schlumberger) pepelnili jeden (moze
wiecej, ale ten jest najistotniejszy), wielki blad: gdy wykrywacz metalu
jest uziemiony wtedy nie dziala! Na zalaczonych  tu  projektach dla tych
kart,  mozna  znalezc  jeden duzy obszar na plytce w ksztalcie kwadratu.
W tym miejscu nalezy zrobic duza cynowa kuleczke - wysoka na, miedzy 2 a
3 milimetry (oczywiscie w przyblizeniu). Kiedy karta wchodzi do telefonu
kropelka ta powinna dotykac wykrywacza  metalu  a poniewaz kropelka jest
takim uziemiaczem, wykrywacz metalu jest wowczas  rowniez  uziemiony ;).
Telefon  liczy  i rejestruje rowniez jak czesto wykrywacz metalu reaguje
na obecnosc nieznanego obiektu w czytniku karty (oznacza to, ze personel
od spraw bezpieczenstwa  kompanii  telekomunikacyjnych  widzi jesli ktos
usiluje uzywac podrobionej karty, nie majacej w sobie tego specyficznego
licznika-miernika, czy jak go tam nazywac).  Oczywiscie  taka informacja
jest  oczywiscie  zawarta w codziennym raporcie serwisowym, jaki telefon
wysyla do centralnego komputera.  A  gdy  cos  takiego wyjdzie pozniej w
logach to wiadomo: policja, pelne zabezpieczenie, CIA, itp. ;)

Drugie zabezpieczenie znajduje sie w pierwszych 12 bajtach karty. To nie
jest to co zwykle powinno byc w tym miejscu, czyli numer seryjny. To cos
znacznie  wiecej.  Czesc pierwszego bajtu jest to suma kontrolna jedynek
("1") w nastepnych 11  bajtach liczac od tego pierwszego. Nastepnie bajt
drugi wynosi zwykle $83 identyfikujac  karte  jako  elektroniczna  karte
telefoniczna  (telekarte).  Bajty  3 i 4  sa liczba jednostek na karcie.
Pierwszy kawalek bajtu 3 wynosi zwykle $1 a wtedy w pozostajacych trzech
kawalkach bajtu liczba jednostek jest trzymana w kodzie BSD. Na przyklad
$11,$12  oznacza  120  jednostek (dwie  jednostki  sa  zawsze  spalane w
fabryce  jako  test - co  wyzej opisalem). Nastepnie mamy 4 bajty danych
numeru seryjnego karty, 2 bajty  sumy kontrolnej karty (obliczanych przy
pomocy 16 bitowego klucza zawartego  w  ROMie  automatu  telefonicznego)
oraz 1 bajt, ktory wynosi zawsze $11 i wreszcie, na koncu bajt 12, ktory
jest identyfikatorem kraju.

c) niezbedne czesci

01 * PIC16C84, wersja 4 MHz, wersja powierzchniowa (obudowa SOIC-18)
01 * rezonator ceramiczny 4 MHz, wersja powierzchniowa
02 * kondensator 22 pF, wersja powierzchniowa (rozmiar 1206)
01 * laminat jednostronnie foliowany miedzia (plytka drukowana) o
     grubosci 0.8mm z fotoopornikiem P20

d) jak to budowac

Poniewaz  projekt ten wlasciwie nie jest przeznaczony dla poczatkujacych
elektronikow,  nie zamierzam zaglebiac sie w detale typu lutowanie/rycie
w metalu, itp. Niestety  sprawy  te  nie sa proste (dziwne by bylo gdyby
byly banalne - kompanie telekomunikacyjne tracily by wtedy milardy a nie
miliony dolarow jak to jest teraz ;) ). Z drugiej strony kazdy, kto jest
dobrym elektronikiem (formalnie na 3  roku Politechniki, ale moze to byc
tez  obcykany  z  tematem  i  wprawiony 16latek praktyk) nie bedzie mial
wiekszych problemow z prawidlowa interpretacja  i  wlasciwym  wykonaniem
opisywanych tu projektow.

Sekcja II.  Niezbedny software
------------------------------

a) czesc UUEnecode

W tej czesci pliku znajduja sie projekty drukowanych plytek wg standardu
Tango PCB.  Mozliwe  do  wydrukowania nawet pod DOSem ;) Znajduja sie tu
rowniez inne wersje kodu  zrodlowego,  gdyby  wasze programatory ukladow
PIC nie mogly sobie poradzic z 64 bajtowym  obszarem  danych programu na
EEPROMie. Co istotne: wszystko jest w oryginale, czyli po angielsku. Nie
spolszczalem zeby niczego  nie  zepsuc przez pomylke, a takze ze wzgledu
na szacunek dla goscia, ktory to opracowal. Byl to R.E.M. z Phrack Zine.


(Czesc UUEncode zostala wycieta, znajduje sie ona w oryginalnym pliku zip)


b) standardowy program do odczytu karty na PC
   (Zrodlo w Pascalu - nie dziala dla kart OSD)

Wystarczy  zbudowac  sobie  taki  czytnik  jak  w Sekcji III i uzyc tego
programu (najpierw trzeba oczywiscie skompilowac ;)).

******************************* cut here *******************************

USES crt,dos;
CONST port_address=$378;     (* wybierz port drukarki 1 *)
TYPE string8=string[8];
     string2=string[2];

VAR reg         : registers;
    i,j         : integer;
    Data        : array[1..32] of byte;
    car         : char;
    byte_number : integer;
    displaying  : char;

{ PROCEDURE Send(b:byte); - wyslij bajt do wybranego portu drukarki }

PROCEDURE Send(b:byte);
  BEGIN port[port_address]:=b;
  END;

{ FUNCTION Get:byte; - pobierz bajt ze stanu rejestru wybranego portu }

FUNCTION Get:byte;
  BEGIN get:=port[port_address+1];
  END;

{ FUNCTION dec2hexa_one(decimal_value):hexa_character_representation; }
{       konwersja liczby o dlugosci 4 bitow na wartosc szesnastkowa   }

FUNCTION dec2hexa(value:byte):char;
  BEGIN case value of
          0..9   : dec2hexa:=chr(value+$30);
          10..15 : dec2hexa:=chr(value+$37);
          END;
  END;

{ FUNCTION d2h(decimal_byte):string2;                                 }
{     konwersja wartosci dziesiatkowej bajtu na wartosc szesnastkowa. }

FUNCTION d2h(value:byte):string2;
  BEGIN d2h:=dec2hexa(value div $10) + dec2hexa(value and $0F);
  END;

{ FUNCTION Binary(byte):string8; konwersja bajtu na binarna wartosc   }

FUNCTION Binary( b : byte):string8;
  VAR weigth : byte;
      s      : string8;
  BEGIN weigth:=$80;
        s:='';
        while (weigth > 0) do
        BEGIN if ((b and weigth) = weigth) then s:=s+'1'
              else s:=s+'0';
              weigth:=weigth div $02;
        END;
        Binary:=s;
  END;

FUNCTION Units:byte;
  VAR  u, i : integer;
       s    : string8;
  BEGIN u:=0;
        i:=13;
        while (Data[i] = $FF) do
        BEGIN u:=u+8;
              i:=i+1;
        END;
        s:=Binary(Data[i]);
        while(s[1]='1') do
              BEGIN inc(u);
              s:=copy(s,2,length(s));
        END;
        units:=u;
  END;

FUNCTION Octal_Unit_Count:LongInt;
  FUNCTION BitCount( Data : integer ):integer;
    VAR    i : integer;
    BEGIN i:=0;
          while ((Data and $01)=$01) do
          BEGIN Data:=Data div 2;
                inc(i);
          END;
          BitCount:=i;
    END;
  BEGIN Octal_Unit_Count:= 4096*BitCount(Data[9])+512*BitCount(Data[10])
                           +64*BitCount(Data[11])+8*BitCount(Data[12])
                           +BitCount(Data[13]);
  END;

PROCEDURE Card_Type;
  BEGIN case Data[2] of
         $03: BEGIN write('Telecard - France - ');
                    case Data[12] of
                     $13: write('120 Units - ',units-130,' Units left');
                     $06: write('50 Units - ',units-60,' Units left');
                     $15: write('40 Units - ',units-40,' Units left');
                    END;
              END;
         $2F:write('Telecard - Germany - ', Octal_Unit_Count, ' Pfennigs left');
         $37:write('Telecard - Neitherland - ',Octal_Unit_Count,' Cents left');
         $3B:write('Telecard - Greece - ', Octal_Unit_Count, ' Units left');
         $83:BEGIN write('Telecard');
                   case Data[12] of
                     $1E: write(' - Sweden');
                     $30: write(' - Norway');
                     $33: write(' - Andorra');
                     $3C: write(' - Ireland');
                      $47: write(' - Portugal');
                      $55: write(' - Czech Republic');
                      $5F: write(' - Gabon');
                      $65: write(' - Finland');
                    END;
                    if (Data[12] in [$30,$33,$3C,$47,$55,$65]) then
                    BEGIN case ((Data[3] and $0F)*$100+Data[4]) of
                           $012: write (' - 10 Units - ',units-12,' Units left');
                           $024: write (' - 22 Units - ',units-24,' Units left');
                           $027: write (' - 25 Units - ',units-27,' Units left');
                           $032: write (' - 30 Units - ',units-32,' Units left');
                           $052: write (' - 50 Units - ',units-52,' Units left');
                           $067: write (' - 65 Units - ',units-62,' Units left');
                           $070: write (' - 70 Units - ',units-70,' Units left');
                           $102: write (' - 100 Units - ',units-102,' Units left');
                           $152: write (' - 150 Units -  ',units-152,' Units left');
                          END;
                     END;
                    { write(' - N0 ',Data[5]*$100+Data[6]);}
              END;
        END;
  END;

PROCEDURE waiting;
  BEGIN send($00);
        write('Enter a card in the reader and press a key ...');
        repeat until keypressed;
        gotoxy(1, wherey);
        clreol;
  END;

PROCEDURE Full_Displaying;
  BEGIN writeln('Memory dump:');
        for i:=1 to 80 do write('-');
        for i:=1 to (byte_number div 6 + 1) do
        BEGIN for j:=1 to 6 do
                if j+6*(i-1) <= byte_number then write(binary(Data[j+6*(i-1)]):9)
                else write('         ');
               write('    ');
               for j:=1 to 6 do
               if j+6*(i-1) <= byte_number then write(d2h(Data[j+6*(i-1)]),' ');
               writeln;
         END;
         for i:=1 to 80 do write('-');
         Card_Type;
         writeln;
   END;

PROCEDURE Short_Displaying;
  VAR j : integer;
  BEGIN for j:=1 to byte_number do
        BEGIN write(d2h(Data[j]),' ');
        END;
        writeln;
  END;

PROCEDURE Reading;
  VAR i, j  : integer;
      Value : byte;
  BEGIN send($FE);
        send($F8);
        for i:=1 to 32 do
        BEGIN Value:=0;
              for j:=1 to 8 do
              BEGIN Value:=Value*$02 + ((get and $08) div $08);
                    send($FB);
                    delay(1);
                    send($F8);
              END;
              Data[i]:=Value;
        END;
        case displaying of
          'F':full_displaying;
          'S':short_displaying;
        END;
  END;

PROCEDURE writting;
  VAR i,n:integer;
      car:char;
  BEGIN write('Which bit do you want to set to "1" : ');
        readln(n);
        waiting;
        car:=readkey;
        send($FA);
        send($F8);
        for i:=1 to n do
        BEGIN send($F9);
              if i=n then
              BEGIN send($FD);
                    delay(20);
                    send($FF);
                    delay(20);
              END;
              send($FB);
        END;
        reading;
  END;

PROCEDURE Saving;
  VAR filename : string;
      f        : text;
      i        : word;
  BEGIN write('Enter the filename: ');
        readln(filename);
        assign(f, filename);
        rewrite(f);
        writeln(f,'Memory dump:');
        for i:=1 to 80 do write(f,'-');
        for i:=1 to (byte_number div 6 + 1) do
        BEGIN for j:=1 to 6 do
                if j+6*(i-1) <= byte_number then write(f,binary(Data[j+6*(i-1)]):9)
                else write(f,'         ');
              write(f,'    ');
              for j:=1 to 6 do
              if j+6*(i-1) <= byte_number then write(f,d2h(Data[j+6*(i-1)]),' ');
              writeln(f);
        END;
         for i:=1 to 80 do write(f,'-');
         close(f);
   END;

PROCEDURE initialize;
  VAR i : integer;
  BEGIN byte_number:=32;
        displaying:='F';
        clrscr;
        writeln(' 1 - to dump a 256 bits card');
        writeln(' 2 - to dump a 128 bits card');
        writeln(' F - to display in full format');
        window(41,1,80,25);
        writeln(' S  - to display in short format');
        writeln(' F2 - to save in a file');
        writeln(' Q  - to exit the program');
        window(1,4,80,25);
        for i:=1 to 80 do write('=');
        window(1,5,80,25);
  END;

BEGIN initialize;
      repeat waiting;
             car:=upcase(readkey);
             case car of
              'W':writting;
              'Q':;
              '1':byte_number:=32;
              '2':byte_number:=16;
              'F','S':displaying:=car;
              #00: BEGIN car:=readkey;
                         if car=#60 then saving;
                   END;
              else reading;
             END;
      until car='Q';
END.

******************************* cut here *******************************

[ 4.  Linki zwiazane z tematem i bibliografia]
 ============================================

No dobra.  Poniewaz  tematu na pewno nie wyczerpalem, a jedynie liznalem
(bez skojarzen), przedstawiam  kilkanascie  linkow do stron, ktore warto
obejrzec aby poglebic swoja wiedze na temat kart  chipowych (i nie tylko
ich). Oprocz informacji znajdziecie tam programy, zdjecia,  schematy,  i
inne. Wiekszosc z nich jest po angielsku, chociaz zdarzaja sie tez  inne
wersje jezykowe.

a) http://members.tripod.com/telecardnews/index.html

(The  #1  News site for telecard security, emulation, hacking, programs,
cloning, piracy,  smartcards).  Jak  wskazuje na to nazwa, zbior roznego
rodzaju stuffu przydatnego do "dzialania"  z kartami chipowymi. Ale poza
tym  takze  wiele  innych  rzeczy. Naprawde profesjonalna  strona.  Moim
zdaniem najlepsza.

b) http://fearwall.lt.tula.net/   - w tym -
   http://fearwall.lt.tula.net/isocard.html

(Syrius Dire Service Information Site - w tym ISO 7816-2 card emulator).
Warte  odwiedzenia miejsce gdzie miesci sie wiele przydatnymi informacji
o kartach  chipowych  i  nie  tylko. Istnieje tam mozliwosc wyszukiwania
nowych dokumentow (takze oficjalnych) dotyczacych tego tematu.

c) http://cuba.xs4all.nl/hip/intro.html

(Hacking  in  Progress). Bardzo dobra strona z praktycznymi informacjami
typu jak zrobic wlasna karte. Poza tym inne sprawy zwiazane z grupa HiP.

d) http://perso.wanadoo.fr/telecard/
(Telecard Mapping Home  Page).  Jak  sama  nazwa wskazuje. Rowniez dobra
strona szczegolnie dla tych co maja jakies wieksze pojecie o elektronice
- czyli niestety nie dla mnie ;)

e) http://www.phrack.com
(Phrack Magazine). Ten link powinien znac kazdy szanujacy sie phreaker.
O  kartach chipowych jest mowa w numerach 48-10 i 48-11. Polecam. Kanal
#phrack na Efnecie jest oficjalnym kanalem tego magazynu.

f) http://www.ccc.de/
(Chaos  Computer  Club). Znana  grupa  hpac. Osatnio zajmuja sie glownie
roznymi kartami (w tym kartami chipowymi).  Oficjalny  kanal  to #ccc na
Efnecie,  niestety  najczesciej  +i. Minusem strony jest to ze wiekszosc
rzeczy jest po niemiecku (czesc po angielsku).

g) http://surf.to/telecracks
(The  Telecard  Crackers Club). Sama nazwa wskazuje na specjalizacje tej
grupy. Umiescilem ja pod koniec linkow, gdyz mimo wymownej nazwy, jakosc
materialow zaliczlbym raczej do drugiej kategorii. Ale zobaczyc mozna ;)

h) http://www.infowar.com/class_2/class2_091197a.html-ssi
(Documents, newsgroups and descriptions).  W miare przejrzyste i ciekawe
informacje dotyczace wielu dziedzin, w przewazajacej (!) wiekszosci kart
chipowych i innych. Pare rzeczy stamtad moze sie przydac.

Linkow do stron zwiazanych z zagadnieniem tego FAQu jest o wiele wiecej,
ale  nie  mialo  sensu wymieniac wiecej niz 10. Zreszta wiele informacji
zwykle sie pokrywa. Korzystajac  z  wyzej wymienionych stron i linkow od
nich trafic mozna do wszystkich miejsc zajmujacych sie kartami chipowymi
i wieloma innymi.

[ 5. Na koniec (podziekowania, etc...) ]
 ======================================

No  i  koniec ;) Nie  wiem jak przyjmiecie ten faq. Jesli sie spodoba to
bede zadowolony.  Jesli  nie to w leb sobie przeciez nie strzele ;) Mimo
to mam nadzieje, ze  do  czegos  sie  przyda.  Jesli  macie jakiekolwiek
komentarze, pytania (tylko rozsadne) czy uwagi lub  nawet  pretensje  to
slijcie  na  adres:  asturn@polbox.com  lub szukajcie mnie czasem na IRC
na kanalach #warszawa (Ircnet), i #phreak,  #phreakers oraz #cc (Efnet).
Moj nickname to zwykle as7urn lub asturn.

Teraz  czas  na podziekowania. No na razie nie mam komu dziekowac ;) ale
moge powiedziec,  ze  bardzo  mi  sie podobalo kilka faqow, ktore do tej
pory czytalem. Wymieniam tu: Faq  Hrabiego -  dotychczas najlepszy tekst
phreakerski w Polsce; faq Twittera - kompendium  wiedzy  o  phreaku, dla
poczatkujacych jak znalazl; faqi Viedzmina, grupy Lunarshake  a  takze z
innych  dziedzin  (hack)  Spacemana, P0wera i Lcumtufa oraz HellFire. Na
pewno  sa  warte  polecenia.  Szczegolnie  polecam  takze  "Phreak Zone"
Hrabiego http://hack.zone.to/hrabia - po prostu esencja ;)

O planach na przyszlosc nie pisze bo na razie nic mi sie nie chce ;)

Sorry  jesli  mi  sie cos pomerdalo w srodku w sensie formy. Praca z tak
dlugim tekstem (nawet jesli wiekszosc to zrodla, itp.) jest trudna.

as7urn
asturn@polbox.com