Подключение ПК к смарт-карте

Hacker

Professional
Messages
1,048
Reputation
9
Reaction score
712
Points
113
Пока смарт-карты и параллельный порт компьютеров используют одинаковые электрические уровни, можно установить прямое соединение между обоими устройствами. Мой личный подход был следующим:

DB-25S (внутренняя) ISO 7816-2

, ------------- + -------------,
13 12 11 10 9 8 7 6 5 4 3 2 1 | 1 | 5 |
_________________________________________ + ------- \ | / ------- +
\ ooooooooooooo / | 2 + ---- + + 6 |
\ oooooooooooo / + -------- | | -------- +
\ ___________________________________ / | 3 + ---- + ---- + 7 |
25 24 23 22 21 20 19 18 17 16 15 14 + ------- / | \ ------- +
| 4 | 8 |
`------------- + ------------- '

Параллельный порт Смарт-карта
--------------------- ----------------------------- ----

контакт 2 (бит данных 0) -----------> контакт 1 (Vcc)
контакт 3 (бит данных 1) -----------> контакт 2 (запись или сброс) *
контакт 4 (бит данных 2) -----------> контакт 3 (часы)
контакт 5 (бит данных 3) -----------> контакт 4 (сброс или не подключен) *
контакт 25 (Gnd) ------------ контакт 5 (Gnd)
контакт 6 (бит данных 4) -----------> контакт 6 (Vpp или не подключен) *
контакт 15 (ошибка) <----------- контакт 7 (ввод / вывод)
контакт 7 (бит данных 5) -----------> контакт 8 (предохранитель или не подключен) *

* Зависит от смарт-карты (поколение, компания и т. д.). Другие пины тоже могут измениться, но вряд ли.

Обратите внимание, что в этой схеме смарт-карта электрически питается от одного из выводов данных параллельного порта. С этим нет проблем, потому что энергопотребление смарт-карты очень низкое.

Также обратите внимание, что с этой схемой вы не можете записывать на смарт-карты, которым требуется напряжение Vpp выше +5 вольт. Многие карты требуют для записи программирующего напряжения +21 вольт. Если вы хотите написать им, вы должны изменить дизайн, как показано на следующем рисунке, который я взял из журнала Minotauro. Обратите внимание, что моя схема отличается от этой, я включаю рисунок только в качестве ориентира.
lector.gif


Самое сложное - это устройство интерфейса, то есть устройство, в которое вы вставляете карту и которое физически устанавливает электрический контакт между смарт-картой и параллельным портом. Вы можете купить его (если знаете где) или сделать его самостоятельно.

Вы можете создать собственное интерфейсное устройство следующим образом. Отрежьте кусок жесткого пластика или картона размером со смарт-карту. Разрезать его пополам на две части (разрезать перпендикулярно самой длинной стороне). Одна часть вставляется поверх другой, и считываемая смарт-карта вставляется между обеими частями (стороной с чипом, идущей внутрь). Три части должны быть выровнены. Теперь проделайте отверстие в одной из частей так, чтобы контакты микросхемы смарт-карты, которую необходимо прочитать, отчетливо просматривались через отверстие. Закройте отверстие прозрачным и тонким (но жестким) пластиком со стороны детали, соприкасающейся с микросхемой. Теперь вы должны увидеть чип через отверстие, закрытое прозрачным пластиком. Отметьте на этом пластике иглой положение контактов. Сделайте две отметки для каждого контакта, по одной на каждом конце. После того, как вы сделали отметки, извлеките смарт-карту и преобразуйте отметки в отверстия с помощью иглы. Теперь пропустите через эти отверстия тонкий кабель, по одному кабелю на контакт. Сначала введите кабель сверху вниз через одно из отверстий контакта, затем введите кабель снизу вверх через другое отверстие. Скрутите отходящий конец кабеля с остальной частью кабеля. Таким образом, часть кабеля сбоку от карты должна проходить параллельно контакту микросхемы. Сделайте это для восьми контактов и припаяйте кабели к разъему DB-25P (папа), следуя схеме выше. Осталось только скрепить обе части скотчем. Не забывайте выровнять все части во время всего этого процесса. один кабель на контакт. Сначала введите кабель сверху вниз через одно из отверстий контакта, затем введите кабель снизу вверх через другое отверстие. Скрутите отходящий конец кабеля с остальной частью кабеля. Таким образом, часть кабеля сбоку от карты должна проходить параллельно контакту микросхемы. Сделайте это для восьми контактов и припаяйте кабели к разъему DB-25P (папа), следуя схеме выше. Осталось только скрепить обе части скотчем. Не забывайте выровнять все части во время всего этого процесса. один кабель на контакт. Сначала введите кабель сверху вниз через одно из отверстий контакта, затем введите кабель снизу вверх через другое отверстие. Скрутите отходящий конец кабеля с остальной частью кабеля. Таким образом, часть кабеля сбоку от карты должна проходить параллельно контакту микросхемы. Сделайте это для восьми контактов и припаяйте кабели к разъему DB-25P (папа), следуя схеме выше. Осталось только скрепить обе части скотчем. Не забывайте выровнять все части во время всего этого процесса. Таким образом, часть кабеля сбоку от карты должна проходить параллельно контакту микросхемы. Сделайте это для восьми контактов и припаяйте кабели к разъему DB-25P (папа), следуя схеме выше. Осталось только скрепить обе части скотчем. Не забывайте выровнять все части во время всего этого процесса. Таким образом, часть кабеля сбоку от карты должна проходить параллельно контакту микросхемы. Сделайте это для восьми контактов и припаяйте кабели к разъему DB-25P (папа), следуя схеме выше. Осталось только скрепить обе части скотчем. Не забывайте выровнять все части во время всего этого процесса.

Чтобы использовать интерфейсное устройство, вам нужно только вставить смарт-карту между обоими частями. Если устройство было изготовлено правильно, вы должны увидеть чип смарт-карты, который нужно прочитать через отверстие, и поэтому вы можете немного подвигать карту, пока она не войдет в контакт со всеми кабелями. Подключите DB-25P (вилка) к параллельному порту вашего ПК и запустите программу для чтения / записи смарт-карты. Рекомендуется запустить программу перед установкой карты, чтобы убедиться, что параллельный порт имеет низкий уровень на всех линиях.

Это интерфейсное устройство стабильно и относительно надежно, однако это лишь один из многих подходов, которые вы можете выбрать. Просто используйте свое воображение и импровизируйте, чтобы получить собственное устройство.

Изучать смарт-карты интересно не только для удовлетворения любопытства и развлечения. Их можно использовать в серьезных приложениях, например, телефонные карты имеют уникальный серийный номер, который нельзя изменить, и некоторые случайные данные, которые можно изменять. Эту функцию можно использовать для управления доступом в комнату или к компьютеру, для хранения ключа, который кодирует и декодирует данные и т. д. Подумайте немного, и вы можете найти свое собственное приложение для использованных смарт-карт, которые люди выбросили.

Программа для чтения / записи 1 - го поколения телефонных карт с прямым подключением:
Code:
10 REM *** Program that reads/writes 1st generation smart-cards ***
20 REM *** through a direct connection with the parallel port.  ***
30 REM *** L. Padilla (e-mail: padilla at domain "gae ucm es")  ***
40 REM ***             Madrid, 1996, Ver 2.3 (1997)             ***
50 OPTION BASE 1 : DIM BYTE%(32)
60 OUT 888, 0 : REM *** 0v data pins ***
70 PRINT "Insert card and hit F5 (CONT)." : STOP
80 REM *** Reset card: ***
90 OUT 888, 2^4 + 2^0 : REM *** +5v pins 2(Vcc),6(Vpp) ***
100 OUT 888, 2^4 + 2^2 + 2^0 : REM *** +5v 2,4(Clock),6 ***
110 OUT 888, 2^4 + 2^0 : REM *** +5v 2,6 ***
120 OUT 888, 2^4 + 2^3 + 2^0 : REM *** +5v 2,5(Reset),6 ***
130 REM *** Go through all the addresses: ***
140 PRINT "By b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A |Byt b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A"
150 PRINT "-- -- -- -- -- -- -- -- --  --- ---  - |--- -- -- -- -- -- -- -- --  --- ---  -"
160 FOR I% = 1 TO 32
170 BYTE%(I%) = 0
180 IF (I% MOD 2 = 0) THEN PRINT " ";
190 PRINT USING "## "; I%;
200 FOR J% = 7 TO 0 STEP -1
210 BITCOUNT% = I% * 8 - J%
220 REM *** Write if required (only for old G+D telecards): ***
230 IF (BITCOUNT% >= 1000 AND BITCOUNT% <= 1000) THEN GOSUB 910
240 BIT% = INP (889) AND 8 : REM *** Read pin 15 (I/O) ***
250 BIT% = BIT%/8 : PRINT BIT%;
260 BYTE%(I%) = BYTE%(I%) + BIT% * 2^J%
270 GOSUB 970
280 NEXT J%
290 PRINT USING " ###  "; BYTE%(I%);
300 IF (BYTE%(I%) < 16) THEN PRINT " ";
310 PRINT HEX$ (BYTE%(I%));
320 PRINT "  ";
330 IF (BYTE%(I%) > 0 AND (BYTE%(I%) < 9 OR (BYTE%(I%) > 13 AND BYTE%(I%) <> 29 AND BYTE%(I%) <> 30 AND BYTE%(I%) <> 31))) THEN PRINT CHR$ (BYTE%(I%)); ELSE PRINT " ";
340 IF (I% MOD 2 <> 0) THEN PRINT " |"; ELSE PRINT ""
350 NEXT I%
360 OUT 888, 0 : REM *** 0v data pins ***
370 BIT% = 0
380 FOR I% = 2 TO 12
390 FOR J% = 0 TO 7
400 BIT% = BIT% + (BYTE%(I%) AND 2^J%)/2^J%
410 NEXT J%
420 NEXT I%
430 BIT% = 216 - BIT%
440 IF (BIT% = BYTE%(1)) THEN PRINT "Checksum OK.", ELSE PRINT "Checksum error.",
450 IF (BYTE%(5) = &H30 OR BYTE%(5) = &HA0) THEN PRINT USING "& ########"; "Serial number:"; CDBL (BYTE%(6) * 256^2 + BYTE%(7) * 256 + BYTE%(8)) ELSE PRINT ""
460 IF (BYTE%(2) <> &H83 OR BYTE%(3) <> &HFF OR BYTE%(4) <> &HFF OR BYTE%(11) <> &H1E OR BYTE%(13) <> &HFF OR ((BYTE%(13)AND(2^7+2^6))/2^6) <> 3) THEN PRINT "Error in byte 2, 3, 4, 11, 13 or 14.",
470 IF (BYTE%(5) = &H90) THEN PRINT "Telecard: Oberthur.", : GOTO 530
480 IF (BYTE%(5) = &H9E) THEN PRINT "Telecard: Oberthur (Argentina).", : GOTO 530
490 IF (BYTE%(5) = &H30) THEN PRINT "Telecard: G+D.", : GOTO 530
500 IF (BYTE%(5) = &H5A) THEN PRINT "Telecard: Gemplus.", : GOTO 530
510 IF (BYTE%(5) = &HA0) THEN PRINT "Telecard: Solaic.", : GOTO 530
520 PRINT "Telecard: unknown.",
530 IF (BYTE%(9) = &H14 AND BYTE%(10) = &H8A) THEN PRINT "Type: 1000 pesetas (Spain).", : GOTO 610
540 IF (BYTE%(9) = &H25 AND BYTE%(10) = 4) THEN PRINT "Type: 2000 pesetas (Spain).", : GOTO 610
550 IF (BYTE%(9) = &H25 AND BYTE%(10) = 6) THEN PRINT "Type: 2100 pesetas (Spain).", : GOTO 610
560 IF (BYTE%(9) = &H14 AND BYTE%(10) = &HCA) THEN PRINT "Type: N$ 25.00 (Mexico).", : GOTO 610
570 IF (BYTE%(9) = 0 AND BYTE%(10) = 3) THEN PRINT "Type: 25 (Argentina).", : GOTO 610
580 IF (BYTE%(9) = 0 AND BYTE%(10) = &HA) THEN PRINT "Type: 100u (Croatia).", : GOTO 610
590 IF (BYTE%(9) = &H2A AND BYTE%(10) = &H85) THEN PRINT "Type: 1000u (Croatia).", : GOTO 610
600 PRINT "Type: unknown.",
610 IF (BYTE%(12) = &H22) THEN PRINT "Country: Spain." : GOTO 660
620 IF (BYTE%(12) = &H24) THEN PRINT "Country: Mexico." : GOTO 900
630 IF (BYTE%(12) = &H26) THEN PRINT "Country: Croatia." : GOTO 900
640 IF (BYTE%(12) = &H28) THEN PRINT "Country: Argentina." : GOTO 900
650 PRINT "Country: unknown." : GOTO 900
660 COUNT% = 0
670 FOR I% = 14 TO 26
680 FOR J% = 7 TO 0 STEP -1
690 BIT% = I% * 8 - J%
700 IF (BIT% < 107) THEN GOTO 760
710 IF (BYTE%(10) = 4 AND BIT% < 127) THEN GOTO 760
720 IF (BYTE%(9) = &H25 AND BIT% > 166) THEN GOTO 780
730 IF (BIT% > 206) THEN GOTO 780
740 IF (((BYTE%(I%) AND 2^J%)/2^J%) = 1) THEN GOTO 780
750 COUNT% = COUNT% + 1
760 NEXT J%
770 NEXT I%
780 FOR I% = 21 TO 32
790 FOR J% = 7 TO 0 STEP -1
800 BIT% = I% * 8 - J%
810 IF (BIT% < 167) THEN GOTO 860
820 IF (BYTE%(10) = &H8A AND BIT% < 207) THEN GOTO 860
830 IF (((BYTE%(I%) AND 2^J%)/2^J%) = 1) THEN GOTO 880
840 COUNT% = COUNT% + 2
850 IF (BYTE%(9) = &H25) THEN COUNT% = COUNT% + 2
860 NEXT J%
870 NEXT I%
880 COUNT% = COUNT% * 5
890 PRINT "Money left:"; COUNT%; "pesetas."
900 PRINT "Hit F6 (SYSTEM) + <enter> to quit." : END
910 REM *** Writing routine (only for old G+D telecards): ***
920 OUT 888, 2^4 + 2^3 + 2^1 + 2^0 : REM *** +5v 2,3(R/W),5,6 ***
930 OUT 888, 2^4 + 2^3 + 2^2 + 2^1 + 2^0 : REM *** +5v 2,3,4,5,6 ***
940 OUT 888, 2^4 + 2^3 + 2^2 + 2^0 : REM *** +5v 2,4,5,6 ***
950 OUT 888, 2^4 + 2^3 + 2^0 : REM *** +5v 2,5,6 ***
960 RETURN
970 REM *** Increment address routine: ***
980 OUT 888, 2^4 + 2^3 + 2^2 + 2^0 : REM *** +5v 2,4,5,6 ***
990 OUT 888, 2^4 + 2^3 + 2^0 : REM *** +5v 2,5,6 ***
1000 RETURN

Карта памяти из испанской телефонной карточки чтения с программой выше:
Code:
Insert card and hit F5 (CONT).
Interrumpido en 70я
Okя
CONT
By b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A |Byt b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A
-- -- -- -- -- -- -- -- --  --- ---  - |--- -- -- -- -- -- -- -- --  --- ---  -
 1  1  0  1  0  1  1  1  1  175  AF  Ї |  2  1  0  0  0  0  0  1  1  131  83  ѓ
 3  1  1  1  1  1  1  1  1  255  FF  я |  4  1  1  1  1  1  1  1  1  255  FF  я
 5  0  0  1  1  0  0  0  0   48  30  0 |  6  0  1  1  1  0  0  0  1  113  71  q
 7  1  0  0  0  0  0  1  1  131  83  ѓ |  8  1  1  0  0  0  0  0  0  192  C0  А
 9  0  0  0  1  0  1  0  0   20  14   | 10  1  0  0  0  1  0  1  0  138  8A  Љ
11  0  0  0  1  1  1  1  0   30  1E    | 12  0  0  1  0  0  0  1  0   34  22  "
13  1  1  1  1  1  1  1  1  255  FF  я | 14  1  1  0  0  1  0  0  1  201  C9  Й
15  1  1  0  0  0  1  0  0  196  C4  Д | 16  1  1  0  0  1  1  0  1  205  CD  Н
17  0  0  1  1  1  0  0  0   56  38  8 | 18  0  0  1  0  0  1  0  0   36  24  $
19  0  1  0  0  1  1  0  1   77  4D  M | 20  0  0  1  1  0  1  0  0   52  34  4
21  1  1  0  0  0  1  0  0  196  C4  Д | 22  1  1  0  0  1  1  0  0  204  CC  М
23  1  1  0  0  1  0  0  0  200  C8  И | 24  1  0  0  1  1  0  0  1  153  99  ™
25  1  1  0  1  0  1  0  0  212  D4  Ф | 26  0  0  1  0  0  1  1  0   38  26  &
27  1  1  0  1  0  1  1  0  214  D6  Ц | 28  1  0  0  0  1  1  1  1  143  8F  Џ
29  1  1  1  1  1  1  1  1  255  FF  я | 30  0  1  1  1  1  1  1  1  127  7F
31  0  1  1  1  0  1  1  1  119  77  w | 32  1  1  1  1  1  1  1  0  254  FE  ю
Checksum OK.  Serial number:  7439296
Telecard: G+D.              Type: 1000 pesetas (Spain). Country: Spain.
Money left: 10 pesetas.
Hit F6 (SYSTEM) + <enter> to quit.
Okя
SYSTEM

Программа для чтения / записи 2 - го поколения телефонных карт с прямым подключением:
Code:
10 REM *** Program that reads/writes 2nd generation smart-cards ***
20 REM *** through a direct connection with the parallel port.  ***
30 REM *** L. Padilla (e-mail: padilla at domain "gae ucm es")  ***
40 REM ***             Madrid, 1996, Ver 2.1 (1997)             ***
50 OPTION BASE 1 : DIM BYTE%(64)
60 OUT 888, 0 : REM *** 0v data pins ***
70 PRINT "Insert card and hit F5 (CONT)." : STOP
80 REM *** Reset card: ***
90 OUT 888, 2^0 : REM *** +5v pins 2(Vcc) ***
100 OUT 888, 2^1 + 2^0 : REM *** +5v 2,3(Reset) ***
110 OUT 888, 2^2 + 2^1 + 2^0 : REM *** +5v 2,3,4(Clock) ***
120 OUT 888, 2^1 + 2^0 : REM *** +5v 2,3 ***
130 OUT 888, 2^0 : REM *** +5v 2 ***
140 REM *** Go through all the addresses: ***
150 PRINT "By b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A |Byt b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A"
160 PRINT "-- -- -- -- -- -- -- -- --  --- ---  - |--- -- -- -- -- -- -- -- --  --- ---  -"
170 FOR I% = 1 TO 64
180 BYTE%(I%) = 0
190 IF (I% MOD 2 = 0) THEN PRINT " ";
200 PRINT USING "## "; I%;
210 FOR J% = 7 TO 0 STEP -1
220 BITCOUNT% = I% * 8 - J%
230 NUM% = 1 : REM *** Choose write or writecarry ***
240 REM *** Write if required: ***
250 IF (BITCOUNT% >= 1000 AND BITCOUNT% <= 1000) THEN GOSUB 630
260 BIT% = INP (889) AND 8 : REM *** Read pin 15 (I/O) ***
270 BIT% = BIT%/8 : PRINT BIT%;
280 BYTE%(I%) = BYTE%(I%) + BIT% * 2^J%
290 GOSUB 710
300 NEXT J%
310 PRINT USING " ###  "; BYTE%(I%);
320 IF (BYTE%(I%) < 16) THEN PRINT " ";
330 PRINT HEX$ (BYTE%(I%));
340 PRINT "  ";
350 IF (BYTE%(I%) > 0 AND (BYTE%(I%) < 9 OR (BYTE%(I%) > 13 AND BYTE%(I%) <> 29 AND BYTE%(I%) <> 30 AND BYTE%(I%) <> 31))) THEN PRINT CHR$ (BYTE%(I%)); ELSE PRINT " ";
360 IF (I% MOD 2 <> 0) THEN PRINT " |"; ELSE PRINT ""
370 NEXT I%
380 OUT 888, 0 : REM *** 0v data pins ***
390 IF (BYTE%(2) = &H2F) THEN PRINT "Country: Germany.", ELSE PRINT "Country: unknown.",
400 IF (BYTE%(4) = &H2A) THEN PRINT "Telecard: Solaic.", : GOTO 450
410 IF (BYTE%(4) = &H4A) THEN PRINT "Telecard: ODS.", : GOTO 450
420 IF (BYTE%(4) = &H8A) THEN PRINT "Telecard: G+D.", : GOTO 450
430 IF (BYTE%(4) = &HCA) THEN PRINT "Telecard: Gemplus.", : GOTO 450
440 PRINT "Telecard: unknown.",
450 IF (BYTE%(2) = &H2F AND (BYTE%(5) AND &HF0) = &HE0) THEN PRINT "Type: 50 DM." : GOTO 480
460 IF (BYTE%(2) = &H2F AND (BYTE%(5) AND &HF0) = &HA0) THEN PRINT "Type: 12 DM." : GOTO 480
470 PRINT "Type: unknown."
480 PRINT "Serial number:";
490 PRINT (BYTE%(4) AND &H10)/16 * 2^3 + (BYTE%(4) AND &H20)/32 * 2^2 + (BYTE%(4) AND &H40)/64 * 2^1 + (BYTE%(4) AND &H80)/128 * 2^0;
500 PRINT (BYTE%(5) AND &H01)/01 * 2^3 + (BYTE%(5) AND &H02)/02 * 2^2 + (BYTE%(5) AND &H04)/04 * 2^1 + (BYTE%(5) AND &H08)/008 * 2^0;
510 PRINT " 0 ";
520 PRINT (BYTE%(6) AND &H10)/16 * 2^3 + (BYTE%(6) AND &H20)/32 * 2^2 + (BYTE%(6) AND &H40)/64 * 2^1 + (BYTE%(6) AND &H80)/128 * 2^0;
530 PRINT (BYTE%(8) AND &H01)/01 * 2^3 + (BYTE%(8) AND &H02)/02 * 2^2 + (BYTE%(8) AND &H04)/04 * 2^1 + (BYTE%(8) AND &H08)/008 * 2^0;
540 PRINT (BYTE%(8) AND &H10)/16 * 2^3 + (BYTE%(8) AND &H20)/32 * 2^2 + (BYTE%(8) AND &H40)/64 * 2^1 + (BYTE%(8) AND &H80)/128 * 2^0;
550 PRINT (BYTE%(7) AND &H01)/01 * 2^3 + (BYTE%(7) AND &H02)/02 * 2^2 + (BYTE%(7) AND &H04)/04 * 2^1 + (BYTE%(7) AND &H08)/008 * 2^0;
560 PRINT (BYTE%(7) AND &H10)/16 * 2^3 + (BYTE%(7) AND &H20)/32 * 2^2 + (BYTE%(7) AND &H40)/64 * 2^1 + (BYTE%(7) AND &H80)/128 * 2^0;
570 PRINT (BYTE%(6) AND &H01)/01 * 2^3 + (BYTE%(6) AND &H02)/02 * 2^2 + (BYTE%(6) AND &H04)/04 * 2^1 + (BYTE%(6) AND &H08)/008 * 2^0;
580 PRINT " X  X"
590 PRINT "Money left:";
600 PRINT USING " ##.## "; (LOG (BYTE%(9) + 1.0)/LOG (2.0) * 8^4 + LOG (BYTE%(10) + 1.0)/LOG (2.0) * 8^3 + LOG (BYTE%(11) + 1.0)/LOG (2.0) * 8^2 + LOG (BYTE%(12) + 1.0)/LOG (2.0) * 8^1 + LOG (BYTE%(13) + 1.0)/LOG (2.0) * 8^0)/100.0;
610 PRINT "DM"
620 PRINT "Hit F6 (SYSTEM) + <enter> to quit." : END
630 REM *** Writing routine: ***
640 FOR K% = 1 TO NUM% : REM *** NUM% = 1 -> write, 2 -> writecarry ***
650 OUT 888, 2^6 + 2^1 + 2^0 : REM *** +5v 2,3,8(I/O) ***
660 OUT 888, 2^6 + 2^0 : REM *** +5v 2,8 ***
670 OUT 888, 2^6 + 2^2 + 2^0 : REM *** +5v 2,4,8 ***
680 OUT 888, 2^0 : REM *** +5v 2 ***
690 NEXT K%
700 RETURN
710 REM *** Increment address routine: ***
720 OUT 888, 2^2 + 2^0 : REM *** +5v 2,4 ***
730 OUT 888, 2^0 : REM *** +5v 2 ***
740 RETURN

Карта памяти из старой немецкой телефонной карточки чтения с программой выше:
Code:
Insert card and hit F5 (CONT).
Interrumpido en 70
Ok
CONT
By b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A |Byt b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A
-- -- -- -- -- -- -- -- --  --- ---  - |--- -- -- -- -- -- -- -- --  --- ---  -
 1  1  1  1  1  0  0  1  0  242  F2  |  2  0  0  1  0  1  1  1  1   47  2F  /
 3  1  1  1  1  1  1  1  1  255  FF  |  4  1  1  0  0  1  0  1  0  202  CA
 5  1  1  1  0  1  0  1  0  234  EA   |  6  0  1  1  0  1  0  1  0  106  6A  j
 7  0  1  0  0  1  1  1  0   78  4E  N |  8  1  0  0  1  0  1  0  0  148  94
 9  0  0  0  0  0  0  0  0    0   0    | 10  0  0  0  0  0  0  0  0    0   0  
11  0  0  0  0  0  0  0  0    0   0    | 12  0  0  0  0  0  0  0  0    0   0  
13  0  0  0  0  0  0  0  0    0   0    | 14  1  1  1  1  1  1  1  1  255  FF
15  1  1  1  1  1  1  1  1  255  FF   | 16  1  1  1  1  1  1  1  1  255  FF
Country: Germany.           Telecard: Gemplus.          Type: 50 DM.
Serial number: 3  5  0  6  2  9  7  2  5  X  X
Money left:  0.00 DM
Hit F6 (SYSTEM) + <enter> to quit.
Ok
SYSTEM

Карта памяти о новой немецкой телефонной карточке чтения с программой выше:
Code:
Insert card and hit F5 (CONT).
Interrumpido en 70я
Okя
CONT
By b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A |Byt b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A
-- -- -- -- -- -- -- -- --  --- ---  - |--- -- -- -- -- -- -- -- --  --- ---  -
 1  1  1  0  1  1  0  0  0  216  D8  Ш |  2  0  0  1  0  1  1  1  1   47  2F  /
 3  1  1  1  1  1  1  0  0  252  FC  ь |  4  1  1  0  0  1  0  1  0  202  CA  К
 5  1  1  1  0  0  1  1  0  230  E6  ж |  6  1  0  0  0  1  1  1  0  142  8E  Ћ
 7  0  1  1  0  1  1  0  0  108  6C  l |  8  1  0  0  1  0  0  0  0  144  90  ђ
 9  0  0  0  0  0  0  0  0    0   0    | 10  0  0  0  0  0  0  0  0    0   0  
11  0  0  0  0  0  0  0  0    0   0    | 12  0  0  0  0  0  0  0  0    0   0  
13  0  0  0  0  0  1  1  1    7   7   | 14  1  1  1  1  1  1  1  1  255  FF  я
15  1  1  1  1  1  1  1  1  255  FF  я | 16  1  1  1  1  1  1  1  1  255  FF  я
17  1  1  1  1  1  1  1  1  255  FF  я | 18  1  1  1  1  1  1  1  1  255  FF  я
19  1  1  1  1  1  1  1  1  255  FF  я | 20  1  1  1  1  1  1  1  1  255  FF  я
21  1  1  1  1  1  1  1  1  255  FF  я | 22  1  1  1  1  1  1  1  1  255  FF  я
23  1  1  1  1  1  1  1  1  255  FF  я | 24  1  1  1  1  1  1  1  1  255  FF  я
25  1  1  1  1  1  1  1  1  255  FF  я | 26  1  1  1  1  1  1  1  1  255  FF  я
27  1  1  1  1  1  1  1  1  255  FF  я | 28  1  1  1  1  1  1  1  1  255  FF  я
29  1  1  1  1  1  1  1  1  255  FF  я | 30  1  1  1  1  1  1  1  1  255  FF  я
31  1  1  1  1  1  1  1  1  255  FF  я | 32  1  1  1  1  1  1  1  1  255  FF  я
33  1  1  1  1  1  1  1  1  255  FF  я | 34  1  1  1  1  1  1  1  1  255  FF  я
35  1  1  1  1  1  1  1  1  255  FF  я | 36  1  1  1  1  1  1  1  1  255  FF  я
37  1  1  1  1  1  1  1  1  255  FF  я | 38  1  1  1  1  1  1  1  1  255  FF  я
39  1  1  1  1  1  1  1  1  255  FF  я | 40  1  1  1  1  1  1  1  1  255  FF  я
41  0  0  0  0  0  0  0  0    0   0    | 42  0  0  0  0  0  0  0  0    0   0  
43  0  0  0  0  0  0  0  0    0   0    | 44  0  0  0  0  0  0  0  0    0   0  
45  0  0  0  0  1  0  0  0    8   8   | 46  1  0  0  0  1  1  1  0  142  8E  Ћ
47  1  0  0  0  1  1  1  1  143  8F  Џ | 48  1  1  1  1  1  1  1  1  255  FF  я
49  1  1  1  1  1  1  1  1  255  FF  я | 50  1  1  1  1  1  1  1  1  255  FF  я
51  1  1  1  1  1  1  1  1  255  FF  я | 52  1  1  1  1  1  1  1  1  255  FF  я
53  1  1  1  1  1  1  1  1  255  FF  я | 54  1  1  1  1  1  1  1  1  255  FF  я
55  1  1  1  1  1  1  1  1  255  FF  я | 56  1  1  1  1  1  1  1  1  255  FF  я
57  1  1  1  1  1  1  1  1  255  FF  я | 58  1  1  1  1  1  1  1  1  255  FF  я
59  1  1  1  1  1  1  1  1  255  FF  я | 60  1  1  1  1  1  1  1  1  255  FF  я
61  1  1  1  1  1  1  1  1  255  FF  я | 62  1  1  1  1  1  1  1  1  255  FF  я
63  1  1  1  1  1  1  1  1  255  FF  я | 64  1  1  1  1  1  1  1  1  255  FF  я
Country: Germany.           Telecard: Gemplus.          Type: 50 DM.
Serial number: 3  6  0  1  0  9  3  6  7  X  X
Money left:  0.03 DM
Hit F6 (SYSTEM) + <enter> to quit.
Okя
SYSTEM

Карта памяти из одной и тех же карт после того как я написала все записываемые биты с программой выше:
Code:
Insert card and hit F5 (CONT).
Interrumpido en 70
Ok
CONT
By b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A |Byt b7 b6 b5 b4 b3 b2 b1 b0  Dec Hex  A
-- -- -- -- -- -- -- -- --  --- ---  - |--- -- -- -- -- -- -- -- --  --- ---  -
 1  1  1  0  1  1  0  0  0  216  D8   |  2  0  0  1  0  1  1  1  1   47  2F  /
 3  1  1  1  1  1  1  0  0  252  FC   |  4  1  1  0  0  1  0  1  0  202  CA
 5  1  1  1  0  0  1  1  0  230  E6   |  6  1  0  0  0  1  1  1  0  142  8E
 7  0  1  1  0  1  1  0  0  108  6C  l |  8  1  0  0  1  0  0  0  0  144  90
 9  0  0  0  0  0  0  0  0    0   0    | 10  0  0  0  0  0  0  0  0    0   0  
11  0  0  0  0  0  0  0  0    0   0    | 12  0  0  0  0  0  0  0  0    0   0  
13  0  0  0  0  0  0  0  0    0   0    | 14  1  1  1  1  1  1  1  1  255  FF
15  0  0  0  0  0  0  0  0    0   0    | 16  0  0  0  0  0  0  0  0    0   0  
17  1  1  1  1  1  1  1  1  255  FF  | 18  1  1  1  1  1  1  1  1  255  FF
19  1  1  1  1  1  1  1  1  255  FF  | 20  1  1  1  1  1  1  1  1  255  FF
21  1  1  1  1  1  1  1  1  255  FF   | 22  1  1  1  1  1  1  1  1  255  FF
23  1  1  1  1  1  1  1  1  255  FF   | 24  1  1  1  1  1  1  1  1  255  FF
25  1  1  1  1  1  1  1  1  255  FF   | 26  1  1  1  1  1  1  1  1  255  FF
27  1  1  1  1  1  1  1  1  255  FF   | 28  1  1  1  1  1  1  1  1  255  FF
29  1  1  1  1  1  1  1  1  255  FF   | 30  1  1  1  1  1  1  1  1  255  FF
31  1  1  1  1  1  1  1  1  255  FF   | 32  1  1  1  1  1  1  1  1  255  FF
33  1  1  1  1  1  1  1  1  255  FF   | 34  1  1  1  1  1  1  1  1  255  FF
35  1  1  1  1  1  1  1  1  255  FF   | 36  1  1  1  1  1  1  1  1  255  FF
37  1  1  1  1  1  1  1  1  255  FF   | 38  1  1  1  1  1  1  1  1  255  FF
39  1  1  1  1  1  1  1  1  255  FF   | 40  1  1  1  1  1  1  1  1  255  FF
41  0  0  0  0  0  0  0  0    0   0    | 42  0  0  0  0  0  0  0  0    0   0  
43  0  0  0  0  0  0  0  0    0   0    | 44  0  0  0  0  0  0  0  0    0   0  
45  0  0  0  0  0  0  0  0    0   0    | 46  0  0  0  0  0  0  0  0    0   0  
47  0  0  0  0  0  0  0  0    0   0    | 48  0  0  0  0  0  0  0  0    0   0  
49  1  1  1  1  1  1  1  1  255  FF  | 50  1  1  1  1  1  1  1  1  255  FF
51  1  1  1  1  1  1  1  1  255  FF  | 52  1  1  1  1  1  1  1  1  255  FF
53  1  1  1  1  1  1  1  1  255  FF  | 54  1  1  1  1  1  1  1  1  255  FF
55  1  1  1  1  1  1  1  1  255  FF  | 56  1  1  1  1  1  1  1  1  255  FF
57  1  1  1  1  1  1  1  1  255  FF  | 58  1  1  1  1  1  1  1  1  255  FF
59  1  1  1  1  1  1  1  1  255  FF  | 60  1  1  1  1  1  1  1  1  255  FF
61  1  1  1  1  1  1  1  1  255  FF  | 62  1  1  1  1  1  1  1  1  255  FF
63  1  1  1  1  1  1  1  1  255  FF  | 64  1  1  1  1  1  1  1  1  255  FF
Country: Germany.           Telecard: Gemplus.          Type: 50 DM.
Serial number: 3  6  0  1  0  9  3  6  7  X  X
Money left:  0.00 DM
Hit F6 (SYSTEM) + <enter> to quit.
Ok
SYSTEM

Кодирование новой 512-битной немецкой телефонной карты
Code:
Байт (биты) Hex

               + ---- +
 1 (1 ... 8) | D8 |
               + ---- +
 2 (9 ... 16) | 2F | -> Германия
               + ---- +
 3 (17 ... 24) | FC |
               + ---- +
 4 (25 ... 32) | CA | -> Gemplus
               + ---- +
 5 (33 ... 40) | AX | -> 12 DM
               | EX | -> 50 DM
               + ---- +
 6 (41 ... 48) | XX |
 7 (49 ... 56) | XX | -> Серийный номер *
 8 (57 ... 64) | XX |
               + ---- +
 9 (65 ... 72) | | -> # 1s x 4096 +)
10 (73 ... 80) | | -> # 1с x 512 +)
11 (81 ... 88) | | -> # 1s x 64 +) 5-ступенчатый восьмеричный счетчик *
12 (89 ... 96) | | -> # 1с x 8 +)
13 (97 ... 104) | | -> # 1s x 1 = 100 * DM)
               + ---- +
14 (105 ... 112) | FF |
               + ---- +
15 (113 ... 120) | FF | -> Стираемый
               + ---- +
16 (121 ... 128) | FF | -> Стираемый
               + ---- +
17 (129 ... 136) | FF |
.. ... | .. | -> Область битов установлена на 1
40 (313 ... 320) | FF |
               + ---- +
41 (321 ... 328) | 00 |
.. ... | .. | -> Область битов установлена на 0
44 (345 ... 352) | 00 |
               + ---- +
45 (353 ... 360) | 08 | -> Стираемый
               + ---- +
46 (361 ... 368) | 8E | -> Стираемый
               + ---- +
47 (369 ... 376) | 8F | -> Стираемый
               + ---- +
48 (377 ... 384) | FF | -> Стираемый
               + ---- +
49 (385 ... 392) | FF |
.. ... | .. | -> Область битов установлена на 1
64 (505 ... 512) | FF |
               + ---- +
 
Last edited:
Top