eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: SecurAdmin (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› SenseLock ->DeviceIoControl
Посл.ответ Сообщение

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 9 сентября 2011 17:59 New!
Цитата · Личное сообщение · #1

Всем добрый день. вобщем уже продолжительное время мучаю этот ключ. Докопался. Есть результат. Возникла потребность обращаться напрямую к ключу, мимо долбанной проги. Нашел кусок, вызовы DeviceIoControl 3 шт. Взял пример из SenseLock SDK под делфи. подправил на свой вкус аля....
Code:
  1.  dwRet := S4_ERROR_UNKNOWN;
  2.   dwSize := 0;
  3.   pstS4Ctx := nil;
  4.  
  5.   //enumerate devices
  6.   WriteLn('Enumerate device...');
  7.   S4Enum(nil, dwSize);
  8.   pstS4Ctx := PSENSE4_CONTEXT(allocmem(dwSize));
  9.  
  10.   dwRet := S4Enum(pstS4Ctx, dwSize);
  11.   if (S4_SUCCESS <> dwRet) then
  12.     goto Err;
  13.  
  14.   //open device with exclusive mode
  15.   OpenDir_Info.dwS4OpenInfoSize := sizeof(S4OPENINFO);
  16.   OpenDir_Info.dwShareMode := S4_EXCLUSIZE_MODE;
  17.   dwRet := S4OpenEx(pstS4Ctx, @OpenDir_Info);
  18.   if (S4_SUCCESS <> dwRet) then
  19.     goto Err;
  20.   WriteLn('Open device...');
  21.  
  22.   pp:=0;
  23.   ZeroMemory(@OutResult[0],$FF);
  24.   DeviceIoControl( pstS4Ctx.hLock,$220028,@data1[0],$E,@OutResult[0],$FF,dwReturned,pp);
  25.   WriteLn('DeviceioSz.'+IntToHex(dwReturned,8));
  26.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[0])^,8));
  27.  
  28.    pp:=0;
  29.   ZeroMemory(@OutResult[0],$FF);
  30.   DeviceIoControl( pstS4Ctx.hLock,$220028,@data2[0],$F,@OutResult[0],$FF,dwReturned,pp);
  31.   WriteLn('DeviceioSz.'+IntToHex(dwReturned,8));
  32.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[0])^,8));
  33.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[4])^,8));
  34.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[8])^,8));
  35.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[12])^,8));
  36.  
  37.     pp:=0;
  38.   ZeroMemory(@OutResult[0],$FF);
  39.   DeviceIoControl( pstS4Ctx.hLock,$220028,@data3[0],$4F,@OutResult[0],$FF,dwReturned,pp);
  40.   WriteLn('DeviceioSz.'+IntToHex(dwReturned,8));
  41.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[0])^,8));
  42.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[4])^,8));
  43.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[8])^,8));
  44.   WriteLn('Deviceio...'+IntToHex(pDword(@OutResult[12])^,8));
  45.   dwRet := S4Close(pstS4Ctx);
  46.   if (S4_SUCCESS <> dwRet) then
  47.     goto Err;
  48.    WriteLn('Close device...');

Есть 2 ключа. один голый купленный. Второй этот... с привязанной к нему софтой.
Теперь собственно вопрос. пытался я рассматривать как через свой интерфес ключ работает. По факту каждая комманда(честный сдк к ключу) получаеца набор вызовов DeviceIoControl.
Ктонить проводил аналогии, копал в данном направлении. Т.Е. Есть конкретные 3 вызова DeviceIoControl с параметрами, КАК задетектить че это за команад сенсилока.. фух. сори если гдето невнятно...

Ранг: 576.5 (!)
Статус: Модератор

Создано: 9 сентября 2011 18:43 New!
Цитата · Личное сообщение · #2

В смысле как задетектить? Берешь либы СЛ и разбираешь АПИ. Каждое АПИ будет набором команд к ключу. В итоге у тебя получиться что-то типа набора команд ISO7816.

| Сообщение посчитали полезным: huckfuck


Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 9 сентября 2011 19:26 New!
Цитата · Личное сообщение · #3

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

Ранг: 576.5 (!)
Статус: Модератор

Создано: 9 сентября 2011 20:05 New!
Цитата · Личное сообщение · #4

Зачем что-то сопоставлять? Я тебе уже направление на ИСО дал. Работай сразу на низком уровне.

приветствуюца наработки, экзамплы работы с сенсилоком на делфи предпочтительно
Может сразу завернуть?

Ранг: 9.1 (гость)
Статус: Участник

Создано: 9 сентября 2011 23:27 New!
Цитата · Личное сообщение · #5

Толку то...
После потраченного времени вы в итоге упретесь в вызов S4Execute() или S4ExecuteEx().
На самом низком уровне это будет выглядеть как:
CLA 80
INS 32
P1 [File ID] – 2 bytes, ID исполняемого VM файла
P2
P3 Размер поля Data
DATA [Data] – Данные, передаваемые исполняемому модулю


Ранг: 127.3 (ветеран)
Статус: Участник

Создано: 10 сентября 2011 01:33 · Поправил: zeppe1in New!
Цитата · Личное сообщение · #6

Den2007

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 10 сентября 2011 10:02 · Поправил: VodoleY New!
Цитата · Личное сообщение · #7

Den2007 ай малаца.... именно S4Execute я вызвать и пытаюсь НО перед этим надо открыть ключь пройти идентификацию сделать текущим каталог ...

ISO/IEC 7816 - стандарт относится к смарт-картам (в первую очередь контактным).
честно говоря недогнал к чему это

З.Ы. Собрал полный протокол обмена с ключом с момента старта проги включительно с моментом обмена данными. Осталось востановить последовательность комманд инициализации ключа.

Ранг: 576.5 (!)
Статус: Модератор

Создано: 10 сентября 2011 11:30 New!
Цитата · Личное сообщение · #8

VodoleY
К тому что SenseLock - это смарткарта. Но для удобства пользования к ней прицепили обвес из USB интерфейса. Но в вариантах поставки есть и в виде обычной смарт-карты.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 10 сентября 2011 12:14 · Поправил: VodoleY New!
Цитата · Личное сообщение · #9

r_e в таком случае я б с удовольствием почитал варианты использования сенсилока на нэйтив левеле типа тот же мануал ток в другом виде
З.Ы. если конкретно каким хреном и че значат запросы типа

in:190f2a8: (e) 40 0 0 0 0 0 6 0 80 ca 7 0 1 0
Out:190f3f8: (3) 0 90 0
in:190f1a4: (f) 40 0 0 0 0 0 7 0 0 a4 2 0 2 a0 0
Out:190f2f4: (e) 6f a a5 8 9f c 5 a0 0 8 80 0 90 0

Ранг: 576.5 (!)
Статус: Модератор

Создано: 10 сентября 2011 12:59 New!
Цитата · Личное сообщение · #10

На нейтив левеле попробуйте помониторить usb point вместо перехвата DIOC. +Обратите внимание что при установке с драйверами устанавливается устройсто SmartCard reader. Возможно, унутрях идет конверсия протокола. А дальше стандарт в руки и медитировать.

Ранг: 9.1 (гость)
Статус: Участник

Создано: 10 сентября 2011 13:45 New!
Цитата · Личное сообщение · #11

VodoleY пишет:
in:190f2a8: (e) 40 0 0 0 0 0 6 0 80 ca 7 0 1 0
- получить тип ключа

VodoleY пишет:
in:190f1a4: (f) 40 0 0 0 0 0 7 0 0 a4 2 0 2 a0 0
- выбрать файл FID: A000

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 10 сентября 2011 14:49 New!
Цитата · Личное сообщение · #12

Den2007 такое есть. екзапл в студию. соотношение комманд хай левела сенси лока с нейтив кодом
пока все сходица

Ранг: 9.1 (гость)
Статус: Участник

Создано: 10 сентября 2011 14:58 New!
Цитата · Личное сообщение · #13

VodoleY пишет:
соотношение комманд хай левела сенси лока с нейтив кодомпока все сходица


Я не понимаю цели исследования.
Ведь всеравно всё упрется в код, исполняемый сенслоком внутри.
Через низкий уровень код не прочитать если вы не знаете PIN разработчика. 15 попыток подбора третьей части (DD) PIN разработчика заблокируют авторизацию по команде 00 20 00 (BB CC DD) навсегда.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 10 сентября 2011 15:13 New!
Цитата · Личное сообщение · #14

Den2007 МНЕ НЕ НАДО ПИН разраба я не хочу стырить код. я хочу использовать функу юзер мод ключа. пасс стандарнт 12345678 мне надо огранизовать обмен прога ключ крипто систему я победил могу этому файлу кормить нужные данные.

Ранг: 9.1 (гость)
Статус: Участник

Создано: 10 сентября 2011 15:20 New!
Цитата · Личное сообщение · #15

VodoleY пишет:
МНЕ НЕ НАДО ПИН разраба я не хочу стырить код


Теперь тем более не понимаю. В чем проблема использовать стандартное API
S4Enum()->S4OpenEx()->S4ChangeDir()->S4VerifyPIN()->S4Execute()
Зачем городить огород на низком уровне то ?

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 10 сентября 2011 15:22 · Поправил: VodoleY New!
Цитата · Личное сообщение · #16

проблема в том что большинство этого кода под ВМпротом рассмотреть не могу. могу лишь перехватить обмен. НУЖНА схеме детекта комманд Den2007 пишет:
S4Enum()->S4OpenEx()->S4ChangeDir()->S4VerifyPIN()->S4Execute()

т.е опыта работы с СЛ нету. надо по нейтив востановить хай левел работу

Ранг: 9.1 (гость)
Статус: Участник

Создано: 10 сентября 2011 19:05 New!
Цитата · Личное сообщение · #17

Так тогда надо ловить любым USB сниффером только команду S4Execute (80 32 [File ID] [Data Size] [Data])

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 10 сентября 2011 22:43 · Поправил: VodoleY New!
Цитата · Личное сообщение · #18

Den2007 а можно по подробней об описателях, которые в DeviceIoControl приходят ввиде входново буфера данных
З.Ы снифер уже не надо. надо по факту декодер нейтив данных.
S4Execute сам по себе уже не интересен. ключ отзываеца почти нормально ему надо скормить правильную последовательность комманд. лог есть еЁ расшифровать не могу (описать в хай левельном варианте) т.е чет делаю а че не понимаю

Ранг: 9.1 (гость)
Статус: Участник

Создано: 11 сентября 2011 12:08 New!
Цитата · Личное сообщение · #19

VodoleY логи покажи.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 12 сентября 2011 13:53 · Поправил: VodoleY New!
Цитата · Личное сообщение · #20

c подачи r_e и тыканием носом Den2007 набрел на http://www.ttfn.net/techno/smartcards/iso7816_4.html
по крайней мере коды CLA 80 INS 32 описаны, может комуто пригодица
PS прошли сутки. вроде делаю все правильно. вроде почти все оттдетекил. но беда. результат другой.вопрос по прежнему задан...
PSS прошел еще день. Сегодня получилось наладить работу с ключом. Высше перечисленным людям спасибо. Если ктото все же надыбает сканер на нэйтив левеле с коментариями для смарт девайсов плз кинуть в личку.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 17 июля 2015 08:03 New!
Цитата · Личное сообщение · #21

Спасибо модераторам за вновь открытый топик. Немного не по теме топика, но тут уж очень качественно обсуждался протокол iso7816.
Возникла необходимость опять порыться, вспоминал, читая этот топ. За 4 года оказывается появилось пару инструментов. Тыкнули меня немного носом, возможно и вам будет интересно. Все начилось с блога
http://blog.tataranovich.com/2014/09/virtual-smartcard-emulator.html
Оказалось на хитхабе лежит 2 утилитки итересных
http://sourceforge.net/projects/vsmartcard/?source=typ_redirect
http://sourceforge.net/projects/jsmartcard/files/
1ая на питоне.. 2ая на джаве

Добавлено спустя 8 минут
Code:
  1. //                push    esi             ; pcbRecvLength
  2. //                push    edi             ; pbRecvBuffer
  3. //                push    0               ; pioRecvPci
  4. //                push    edx             ; cbSendLength
  5. //                mov     edx, [eax+4]
  6. //                push    ecx             ; pbSendBuffer
  7. //                mov     ecx, [esp+pioSendPci]
  8. //                push    ecx             ; pioSendPci
  9. //                push    edx             ; hCard
  10. //addr1                call    ds:SCardTransmit
  11. //addr2                test    eax, eax
  12.  
  13. Var iSrc
  14. var iSrcSz
  15. Var iDest
  16. Var iDestSz
  17. VAR aAddr
  18. VAR aSz
  19. VAR al_tmp
  20. VAR header
  21. //bc
  22. BPHWS addr1, "x"
  23. BPHWS addr2, "x"
  24.  
  25. //RUN
  26. start:
  27. CMP eip, addr1  
  28. JNE nextLab1
  29.  
  30. MOV iSrc,[esp+8] 
  31. MOV iSrcSz,[esp+C]
  32. MOV iDest,[esp+14]
  33. MOV iDestSz,[esp+18]
  34. ITOA iSrc
  35. MOV aAddr, $RESULT   
  36. ITOA iSrcSz
  37. MOV aSz, $RESULT  
  38. WRTA "c:\DevIo.log","in:"+aAddr+":("+aSz+")"  
  39. MOV al_tmp,al
  40.  forIN:
  41.  MOV al,[iSrc]
  42.  ITOA al
  43.  WRTA "c:\DevIo.log",$RESULT, " "  
  44.  ADD  iSrc,1
  45.  SUB  iSrcSz,1 
  46.  CMP  iSrcSz,0 
  47.  Ja forIN 
  48. MOV al,al_tmp
  49. nextLab1: 
  50.  
  51. CMP eip, addr2
  52. JNE nextLab2
  53.  
  54. mov iDestSz,[iDestSz]
  55. ITOA iDest
  56. MOV aAddr, $RESULT   
  57. ITOA iDestSz
  58. MOV aSz, $RESULT  
  59. WRTA "c:\DevIo.log","Out:"+aAddr+":("+aSz+")" 
  60. MOV al_tmp,al
  61.  forOUT:
  62.  MOV al,[iDest]
  63.  ITOA al
  64.  WRTA "c:\DevIo.log",$RESULT, " "  
  65.  ADD  iDest,1
  66.  SUB  iDestSz,1 
  67.  CMP  iDestSz,0 
  68.  JA  forOUT  
  69. MOV al,al_tmp
  70. nextLab2:
  71. run
  72. JMP start


Добавлено спустя 10 минут
возможно будет кому то интересен скрипт. типа велосипед.. для сборки логов обмена с девайсом. он 1 в 1 подходит для DeviceIOContro ток адреса подправить. addr1 addr2 ставим по вкусу и в бой. Кстати.. 2 функи, запись в файл, тут слеплены не зря, в одбж скипте оказались ошибки, при сохранении области памяти в хекс строке, поэтому сделан залипон велосипед. Скрипт тормоз страшный, но с задачей справляется

Добавлено спустя 12 минут
http://www.hackersrussia.ru/Cards/ASyncro/ISO7816-3.php
для любителей более низкого уровня
 eXeL@B —› Программирование —› SenseLock ->DeviceIoControl

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS