информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаПортрет посетителяВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft сообщила о 44 миллионах... 
 Множественные уязвимости в VNC 
 Шестой Perl превратится в Raku,... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Не так :) 26.06.02 10:20  Число просмотров: 688
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Не так.
SELECT
Получаешь 9F XX
command[0]=0xA0; // CLA
command[1]=0xC0; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=0xXX; // L

> res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
> после этого в lenr будет хранится длина файла?
НЕТ, в len будет ко-во байт в response
Далее расскладываешь этот response по полочкам. Его формат можно найти в спецификации.
Выгребаешь из него тип файла и количество байт доступных для чтения.
И после этого делаешь либо READ BINARY, либо READ RECORD.
Но можно сделать и более криво. Для чтения в P3 засунуть FF. Тогда тебе вернется 67 YY, где YY то количество байт которое карточка от тебя ждала.


> тут вопрос на счет длины у меня карта считывает все сразу,
> не указывая длины поэтому command[4] должен быть равен
> Empty?
Не встречались такие карточки. По идее рекорд файлы можно читать только по одному рекорду. Бинарники - тем количеством, которое карточка может вернуть за раз.
В любом случае - более чем 256 байт за раз ты не прочтешь ;)
Ну а если карточка действительно позволяет прочесть сразу все, неограниченного размера - тут надо смотреть спецификацию именно к этой карте.
Совет, не лезь пока в специфик, пользуйся стандартом. Читай по столько, по сколько тебя просят в респонсе или во втором байте ошибки 67.

Перебором - это почти шутка. Тебе нужно перебрать имена файлов от 0000 до FFFF, исключив жестко заданные в стандартах, и сделать на каждый SELECT. Причем все это сделать для каждой директории. Только карточка у тебя не третий пень, да и ридер - вещь тормозная.
<programming>
[C++] CT-API и inter-industry Commands 24.06.02 04:18  
Автор: Full shrize Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Люди помогите любителю:-)
Выбирая файл на карте все нормально возвращает 90:00
Начинаю считывать на х.. ошибка CT-API 11(типа выделенный буфер слишком мал для читаемых данных) бл.. увеличиваю буфер он мне возвращает Err Parametr. Бл. какой буфер у меня карта(Сименс) на х.. позволяет читать файл целиком на х.. Если кто встречался с такой бородой помогите.
Каким API пользуешся ? 24.06.02 10:01  
Автор: PS <PS> Статус: Elderman
Отредактировано 24.06.02 10:27  Количество правок: 1
<"чистая" ссылка>
Какой ридер ? Пример программы можешь дать ?
И еще: почему у тебя select выдает 90 00 ? Такой код он не должен возвращать. При нормальном завершении операции он возвращает 9F xx.
[C++] Каким API пользуешся ? 25.06.02 04:15  
Автор: Full shrize Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Какой ридер ? Пример программы можешь дать ?
> И еще: почему у тебя select выдает 90 00 ? Такой код он не
> должен возвращать. При нормальном завершении операции он
> возвращает 9F xx.
1) Я извиняюсь да он возвращает 9F.:-)
2)ридер ECO5000 (ORGA).
синхронная передача
3)
sad=2;
dad=00;

fprintf(fil_out,"SELECT FILE\n");

command[0]=0x00; // CLA
command[1]=0xA4; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=0x02; // L
command[5]=0x2F;
command[6]=0x00;
res=CT_data (ctn,&dad,&sad,7,command,&lenr,response);

if( res==-1)fprintf(fil_out,"ERR_INVALID PARAMETR\n");else fprintf (fil_out,"res %d\n",res);

for (i=0;i<lenr;i++){

fprintf(fil_out,"response [ %d ] %d\n",i,response[i]);
//if(response[lenr-1]==144) fprintf(fil_out,"function completed");;
}
//if(response[lenr-2]==144) fprintf(fil_out,"function completed\n");

fprintf(fil_out,"command[2] %d\n",command[2]);
fprintf(fil_out,"command[3] %d\n",command[3]);
fprintf(fil_out,"command[4] %d\n",command[4]);
fprintf(fil_out,"command[5] %d\n",command[5]);
fprintf(fil_out,"command[6] %d\n",command[6]);
fprintf(fil_out,"command[7] %d\n",command[7]);
fprintf(fil_out,"command[8] %d\n",command[8]);
fprintf(fil_out,"command[9] %d\n",command[9]);
fprintf(fil_out,"sad %d\n",sad);
fprintf(fil_out,"dad %d\n",dad);
fprintf(fil_out,"lenr %d\n",lenr);

fprintf(fil_out,"READ BINARY\n");

sad=2; /* source = host */
dad=00;

command[0]=0x00; // CLA
command[1]=0xB0; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=0x00; // L
//command1[5]=0x00;
//command1[6]=0x00;


res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
Здесь вызываю CT_API.dll
Наскоко мне удалось найти то READ BINARY не читает МФ и Дир секции(но это у GSM)у карты нет никаких security. Вот и как прочитать эту Дир потому что мне кажется на этой карте до х.. апликаций:-) (карта -страховой полис)
Так 25.06.02 12:08  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
> 2)ридер ECO5000 (ORGA).
Сочувствую.

> command[0]=0x00; // CLA
правильно A0
> command[1]=0xA4; // INS
> command[2]=0x00; // P1
> command[3]=0x00; // P2
> command[4]=0x02; // L
> command[5]=0x2F;
> command[6]=0x00;
Что за файл ?
> command[0]=0x00; // CLA
A0
> command[1]=0xB0; // INS
> command[2]=0x00; // P1
> command[3]=0x00; // P2
> command[4]=0x00; // L
тут длинна
> //command1[5]=0x00;
> //command1[6]=0x00;
Эти два нафиг не нужны.

> Наскоко мне удалось найти то READ BINARY не читает МФ и Дир
> секции(но это у GSM)
Не читает, только двоичные файлы. Для MF используй READ RECORD.
Какой именно файл - GET RESPONSE после SELECT. Там же и длинна доступная для чтения.
Прочесть дирестории нельзя. Узнать файлы в директории - можно, но комманда специфична для каждого производителя. Либо полным перебором.
Еще один Так 26.06.02 09:11  
Автор: Full shrize Статус: Незарегистрированный пользователь
<"чистая" ссылка>
fprintf(fil_out,"GET RESPONCE\n");

sad=2; /* source = host */
dad=00;

command[0]=0x00; // CLA
или опять A0
command[1]=0xC0; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=0x10; // L
res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
после этого в lenr будет хранится длина файла?

fprintf(fil_out,"READ RECORD\n");

sad=2; /* source = host */
dad=00;

command[0]=0xA0; // CLA
command[1]=0xB2; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=lenr; // L
res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
тут вопрос на счет длины у меня карта считывает все сразу, не указывая длины поэтому command[4] должен быть равен Empty?
Не так :) 26.06.02 10:20  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Не так.
SELECT
Получаешь 9F XX
command[0]=0xA0; // CLA
command[1]=0xC0; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=0xXX; // L

> res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
> после этого в lenr будет хранится длина файла?
НЕТ, в len будет ко-во байт в response
Далее расскладываешь этот response по полочкам. Его формат можно найти в спецификации.
Выгребаешь из него тип файла и количество байт доступных для чтения.
И после этого делаешь либо READ BINARY, либо READ RECORD.
Но можно сделать и более криво. Для чтения в P3 засунуть FF. Тогда тебе вернется 67 YY, где YY то количество байт которое карточка от тебя ждала.


> тут вопрос на счет длины у меня карта считывает все сразу,
> не указывая длины поэтому command[4] должен быть равен
> Empty?
Не встречались такие карточки. По идее рекорд файлы можно читать только по одному рекорду. Бинарники - тем количеством, которое карточка может вернуть за раз.
В любом случае - более чем 256 байт за раз ты не прочтешь ;)
Ну а если карточка действительно позволяет прочесть сразу все, неограниченного размера - тут надо смотреть спецификацию именно к этой карте.
Совет, не лезь пока в специфик, пользуйся стандартом. Читай по столько, по сколько тебя просят в респонсе или во втором байте ошибки 67.

Перебором - это почти шутка. Тебе нужно перебрать имена файлов от 0000 до FFFF, исключив жестко заданные в стандартах, и сделать на каждый SELECT. Причем все это сделать для каждой директории. Только карточка у тебя не третий пень, да и ридер - вещь тормозная.
походу что-то не так:-) 27.06.02 05:10  
Автор: Full shrize Статус: Незарегистрированный пользователь
<"чистая" ссылка>
command[0]=0xA0; // CLA
command[1]=0xA4; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
command[4]=0x02; // L
command[5]=0x3F;
command[6]=0x00;
res=CT_data (ctn,&dad,&sad,7,command,&lenr,response);


if( res==-1)fprintf(fil_out,"ERR_INVALID PARAMETR\n");
else fprintf(fil_out,"res %d\n",res);

for (i=0;i<7;i++){
fprintf(fil_out,"response [ %d ] %c\n",i,response[i]);
}
После выбора MF у меня возвращаются в HEX вот такие числа 90, 00, 10, 88, 90, 00
вот эти 10, 88 у меня находятся в ATR header.

sad=2;
dad=00;

command[0]=0xA0; // CLA
command[1]=0xC0; // INS
command[2]=0x00; // P1
command[3]=0x00; // P2
тогда какое число в ?
command[4]=0x??; // L
res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
for (i=0;i<7;i++){
fprintf(fil_out,"response [ %d ] %d\n",i,response[i]);
}
После get responce. responce мне ничего возвращает
очень странно 27.06.02 16:39  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
> command[0]=0xA0; // CLA
> command[1]=0xA4; // INS
> command[2]=0x00; // P1
> command[3]=0x00; // P2
> command[4]=0x02; // L
> command[5]=0x3F;
> command[6]=0x00;
> res=CT_data
> (ctn,&dad,&sad,7,command,&lenr,response);
>
>
> if( res==-1)fprintf(fil_out,"ERR_INVALID PARAMETR\n");
> else fprintf(fil_out,"res %d\n",res);
>
> for (i=0;i<7;i++){
> fprintf(fil_out,"response [ %d ] %c\n",i,response[i]);
> }
> После выбора MF у меня возвращаются в HEX вот такие числа
> 90, 00, 10, 88, 90, 00
> вот эти 10, 88 у меня находятся в ATR header.

Command code: A0 A4
Parameters: P1: 00 P2: 00 P3: 02
Command data: Directory/EF identifier
Response data: None
Return codes:
67 02 Wrong P3
6B 00 Wrong P1 or P2
94 04 Wrong identifier
9F xx Successful, xx = number of response data available for GET RESPONSE

Как видишь 90 00 в стандарте нет (gsm), и response data быть не должно. Если ты ничего не напутал - значит у тебя совершенно не gsm карта.
Попробуй ради прикола в ридер засунуть карточку от своего мобильника.

> sad=2;
> dad=00;
>
> command[0]=0xA0; // CLA
> command[1]=0xC0; // INS
> command[2]=0x00; // P1
> command[3]=0x00; // P2
> тогда какое число в ?
> command[4]=0x??; // L
> res=CT_data (ctn,&dad,&sad,5,command,&lenr,response);
> for (i=0;i<7;i++){
> fprintf(fil_out,"response [ %d ] %d\n",i,response[i]);
> }
> После get responce. responce мне ничего возвращает

Тады ой. Попробуй command[4]=0xff и посмотри, если вернет 67 xx, то xx и будет то что тебе надо.

Но это с 3f00, а на другие файлы ? Тебе же нужно было прочитать данные. Попробуй с другими файлами сделать чтение так как я в предыдущем ответе описал.
А тут просто возникло не допонимание 28.06.02 04:06  
Автор: Full shrize Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А тут просто возникло не допонимание, карта то не мобильника, простая карта Сименс, там хранятся данные толи пациентов толи еще кого-то. Так что я делаю все чисто по IS0-7816. :-)
по ИСО 7816-4 если 9000 то комманда успешна.
Вот еще здесь что-то я не врубился, тут в ИСО для переключения передачи от карты к ридеру нуно сбросить карту, А какой командой?:-)
Так 26.06.02 08:49  
Автор: Full shrize Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Прочесть дирестории нельзя. Узнать файлы в директории -
> можно, но комманда специфична для каждого производителя.
> Либо полным перебором.
Ух ты, а как это перебором?
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2019 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach