Главная Телефон gsm [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [ 32 ] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] 280 N=ASC(MID$(C$.K, 1)) * 290 GOSUB 370 300 D$=HEX$(M)+" •• 310 IF LEN(D$)<3 THEN D$="0"+D$ 320 PRINT D$; 330 NEXT К 340 IF L0C{1)<>0 THEN C$-INPUT$(L0C(1), #1) :GOTO 270 350 PRINT 360 RETURN 370 M=255 - 380 IF N>127 THEN N=N-128:M=M-1 390 IF N>63 THEN N=N-64:M=M-2 400 IF N>31 THEN N=N-32:M=M-4 410 IF N>15 THEN N=N-16:M=M-8 420 IF N>7 THEN N=N-8:M=M-16 430 IF N>3 THEN N=N-4: M=M-32 440 IF N>1 THEN N=N-2:M=M-64 450 IF N>0 THEN M=M-128 460 RETURN 470 REM (c)1997. 1999 Patrick GUEULLE 10 REM----DIRISO. BAS---- 20 KEY OFF:CLS 30 PRINTДиaлoг с картами no прямому соглашению ISO" 40 PRINT:PRINT 50 OPEN C0M1:9600.e.8.2" AS #1 60 PRINT"BcTaBMTb карту и ввести команду ISO" 70 PRINT-ESCAPE для выхода": PRINT 80 GOSUB 110 90 PRINT ft1,M$. .NL>JNPUT$(LEN(M$).#1) 100 GOTO 80 110 M$=- 120 A$=INKEY$:IF A$<>"" THEN 150 130 IF L0C(1)>0 THEN GOSUB 210 140 GOTO 120 150 IF A$=CHR$(27) THEN END 160 PRINT A$; 170 B$=INKEY$;IF B$="" THEN 170 180 PRINT B$+" "; 190 M$=CHR$(VAL("&H"+A$+B$)) 200 RETURN 210 T$=TIME$ 220 IF T$=TIME$ THEN 220 230 IF L0C(1)=0 THEN RETURN 240 C$=INPUT$(L0C(1).ft1): PRINT : PRINT " * 250 FOR К=1 TO LEN(C$) 260 D$-HEX$(ASC(MID$(C$. К. 1 )))+•• ••• , . • 270 IF LEN(D$)<3 THEN D$="0"+D$ - . 280 PRINT D$; 290 NEXT К 300 IF LOC(1)<>0 THEN C$=INPUT$(L0C(1).#1):G0T0 250 . 310 PRINT . .• . , , 320 RETURN • . " . * . . ;. -i i. ... 330 REM (c)1997. 1999 Patrick GUEULLE . ...... Программа INVISO.EXE позволяет проводить любые манипуляции с картами, работающими по обратному соглашению (ответ на сброс начинается с байта 3Fh). Для карт, работающих по прямому соглашению (ответ на сброс начинается с байта 3Bh), используется программа DIRISO.EXE. Как только карта вставлена в устройство для считывания (по приглашению, поступившему от программы), она непроизвольно выдает группу байтов - ответ на сброс, или ATR (Answer То Reset). Этот ответ появляется на экране, и часто он оканчивается на 90 00 (но это не обязательно). • , • ->••.. . » Затем карта ждет команд, которые необходимо ввести с клавиатуры. Все ответы карты будут постепенно отображаться на экране в окружении звездочек (во избежание путаницы с тем, что набиралось на клавиатуре). Любая команда протокола Т = О состоит из заглавного блока (заголовка) из пяти байт, за которым следует блок данных. Все выражается в шестнадцатеричном формате. Пять байт заголовка соответственно именуются СЕД INS, PI, Р2 и LEN и представляют собой следующее: • CLA - «класс» карты, например, BCh для банковской карты или карты VITALE, и ДОП для SIM-карты; • • • INS - операционный код команды, которую должна выполнить карта. Для SIM-карт эти коды ужр были рассмотрены в главе 3 (см. раздел «SIM-карта»); • Р1 и Р2 уточняют, что должна делать карта, или по умолчанию остаются в виде 00 00; • LEN указывает длину блока данных, посылаемых карте или ожида- - емыхотнее. " • . . . В случае «входящей» команды байты данных отправляются после кода LEN, но только после того, как карта ответила байтом процедуры (часто это бывает просто повторением операционного кода команды). В слздае «выходящей» команды блок данных посылается картой по получении байта LEN и передачи байта процедуры. Практически во всех слздаях карта завершает выполнение команды отправкой двух байт отчета (SW1 и SW2). Если все прошло удачно, то отчет будет послан в виде 90 00. Таким образом, с SIM-картой можно сделать многое. Но следует иметь в виду, что некоторые некорректные манипуляции могут надолго или окончательно заблокировать карту или даже повредить ее физически. Стандарт GSM 11.11 содержит детальное описание файлов и команд, позволяющих проводить операции считывания и записи. Этот вопрос будет рассмотрен в следующей главе. Прежде всего необходимо ввести (или просто нейтрализовать раз и навсегда) конфиденциальный код, защищающий доступ к карте (тот, который обычно набирается во время каждого включения телефона). Предположим, что кодом является 1234 (в новой карте 0000). Переведем код ASCII в шестнадцатеричный формат и дополним его до восьми цифр, набрав FFh. Ползим: 31 32 33 34 FF FF FF FF , Чтобы представить код карте (после ползения ее ответа на сброс), набираем: АО 20JlQm I Как только карта ответит 20 (байт процедуры), введем: 31 32 33 34 FF FF FF FF Если код верный, то в ответ карта отправит 90 00. Если код уже был дезактивирован и карте больше не нужен - 98 08. Чтобы дезактивировать этот код, только создающий неудобства для проводимых экспериментов, можно набрать следующее: АО 26 00 01 08 Затем, после ползения байта 26, введите: 31 32 33 34 FF FF FF FF Код всегда можно снова активировать, если набрать: АО 28 00 01 08 А затем, после получения байта 28, опять ввести: 31 32 33 34 FF FF FF FF [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [ 32 ] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] 0.1738 |