Шаг третий. Джин в
бутылке или Считываем инфу.

Ну а теперь перейдем от
теории к практике. И первым нашим шагом
будет сбор
ка ридера
карточки (card reader), т.е. считывающего
устройства.
Наиболее
простым вариантом является сборка ридера
для подключения его к
LPT-порту
компьютера. Схема элементарна (тут).
Дальше следует написать простейшую прогу,
которая будет считывать с карточки инфу и
выдавать ее в бо
лее или
менее удобочитаемом виде. Пример такой
программы приведен ниже.

program Phonecard_reader;
uses Crt;

const

LPT=$378; {Базовый адрес порта LPT}

del=1; {константа задержки в 1 мс}
procedure Clk(v:byte); {Clk(1) - устанавливает высокий
уровень CLK

Clk(0) - устанавливает низкий уровень CLK}

var
tmp:byte;
begin
tmp:=Port[LPT];

if v=0 then

tmp:=tmp and $FE

else
tmp:=tmp or 1;

Port[LPT]:=tmp;

end;

procedure Reset(v:byte); {Reset(1) -
устанавливает высокий уровень RST
Reset(0) - устанавливает низкий уровень RST}

var

tmp:byte;

begin

tmp:=Port[LPT];

if v=0 then

tmp:=tmp and $FD

else
tmp:=tmp or 2;

Port[LPT]:=tmp;

end;

function GetData:Byte;
var

tmp:Byte;
begin
tmp:=Port[LPT+1];

if tmp=120 then

GetData:=1
else

GetData:=0;

end;

procedure SetData(v:byte);
var
tmp:byte;

begin

tmp:=Port[LPT];
if v=0 then

tmp:=tmp and $FB

else
tmp:=tmp or 4;

Port[LPT]:=tmp;

end;

var
arr:array[0..1024] of byte;

idx:word;
f:text;

begin

assign(f,'con'); {По умолчанию вывод идет на экран.
Вместо con
можно поставить имя
файла, и вывод будет
направлен в него}

rewrite(f);

idx:=0;

textmode(Font8x8 or CO80);

clrscr;

Clk(0);Reset(0);delay(del);

Reset(1);delay(del);

Clk(1);delay(del);Clk(0);delay(del);Reset(0);delay(del);

repeat
begin

if (idx mod 8)=0 then

write(f,#13#10+'Byte ',(idx div 8):2,' :')

else

if (idx mod 4)=0 then
write(f,' ');

Clk(1);delay(del);

arr[idx]:=GetData;

Clk(0);delay(del);
write(f,arr[idx]);

inc(idx);

end;
until idx=1024;

while keypressed do readkey;

writeln(#13#10'Press any key to exit ...');readkey;
close(f);

end.

Для тех, кто весьма ленив
и не любит топтать клавиатуру, могу пореко
мендовать
готовую прогу, называемую SmartLab.
Комменты, как говорится, излишни.
Вся
дополнительная информация находится в help-файле
этой проги.
Ну, а теперь
разберем, что же означают все эти байтики,
болтики и винтики,
которые
мы выгребли из карточки. (Несущественные
данные пропущены).

Байт Биты Значение/Описание
1 1-8 D8 старые карты
DD новыекарты
2 9-16 код страны
5 33-36 номинал
карточки
5 37-40 последняя цифра
года выпуска
6 41-44 № месяца
выпуска
6-9 45-64 серийный номер
9 65-72 4096* NBS единиц
10 73-80 512* NBS единиц
11 81-88 64* NBS единиц
12 89-96 8* NBS единиц
13 97-104 1* NBS единиц (NBS-число
установленных битов)
14-40 105-320 FF - проверочная
область

Итак, можно выделить
следующие информационные области на карте:
заголовок,
счетчик и
фуфел. Заголовок содержит 40 бит информации,
которые жестко прог
раммируются
изготовителем карт. Обычно эта область
содержит чисто служебные данные, которые в
принципе нам нужны только для
информативности. Следует иметь в виду, что
некоторые производители в битах 36-64 пишут
копию даты выпуска и серийного номера.
Кроме этого, интересной фишкой является то,
что первыми четыремя цифрами серийного
номера всегда будет дата выпуска, т.е., 0600
будет означать июнь 2000 года. Назначение
счетчика понятно: вначале все биты
установлены в 00, потом как только таксофон
"съедает" единицу времени,
соответствующий
бит принимает значение FF. Проверочная
область - область,
на
которой производитель проверяет
работоспособность чипа. И, наконец, все,
что
находится после 40 байта, не имеет для нас
никакого значения. Последние две области и
есть тот фуфел, который только мешает и
вносит кучу неразбе
рихи
в этот вопрос.

Значение счетчика
определяется по следующему принципу:

Байт               
9            
10         
11        
12            13

8-езначение  00000001 00011111
01111111 00000011 00011111

10-езначение   
1            
5           
7          
2             5

Переводим из 1*8^4  + 5*8^3 
+ 7*8^2   + 2*8^1   + 5*8^0

8-й СС в 10-ю  4096  + 
2560  +     448    +  
16           +
5      =7125

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии