закрыть X

### Опции скрытого текста

%field должно быть только числовым
%field необходимо
По меньшей мере, один параметр требуется

Следующие ошибки возникли при попытке отправки сообщения:

Скрыть по количеству сообщений
Требуется сообщений
Скрыть от гостей
Скрыть от всех групп, кроме выбранных
Группы
Глобальный модератор
Модератор раздела
Новичок
Начинаю писать
Постоялец
Знающий
Старожил
Модератор
ВИП
Ветеран
Неприкасаемый
Проходил мимо
Прохожий
Друзья
Новичок
Ветераны форума
Новичок
Скрыть по количеству Спасибо поставленных пользователю
Кол-во сказанных пользователю Спасибо
Скрыть пока не скажут Спасибо
« предыдущая тема следующая тема »
Страницы: « 1 ... 20 21 22 23 24 ... 44 » Вниз

# Иформация о Eurocrypt (помните такое?)

- 436 Ответов
- 32699 Просмотров

#### Shurik406

- Начинаю писать
- 232
- 488 раз
- 58W |-----| 55E
  Много чего
  UK

##### Иформация о Eurocrypt (помните такое?)

« Ответ #210: Вторник 19 Октября 2021, 12:01:15 »
Цитата(Ethereal от Вторник 19 Октября 2021, 03:14:33)

> Если CLA = CA то и должно уйти на аппликацию в EEPROM

Это я поглупил... вот с INS B0.
Код: [Выделить]

TX Data : 09 0E 03 01 20 16 B8 09 8F 00
RX Data : 09 10 3F 6C 00 00 25 A0 30 A7 58 00 00 01 01 84
90 00
Running code in ROM...
TX Data : 0A 0E 03 C4 DB B0 00 20 20 8F 00
RX Data : 09 02 6D 00

CLA DD
Код: [Выделить]

TX Data : 09 0E 03 01 20 16 B8 09 8F 00
RX Data : 09 10 3F 6C 00 00 25 A0 30 A7 58 00 00 01 01 84
90 00
Running code in ROM...
TX Data : 0A 0E 03 C4 DD 00 00 00 00 81 00
RX Data : 09 02 6E 00

- Спасибо
Жалоба Записан

#### Ethereal

- ВИП
- Старожил
- 1.581
- 8.611 раз

##### Иформация о Eurocrypt (помните такое?)

« Ответ #211: Вторник 19 Октября 2021, 13:42:31 »
Цитата(Shurik406 от Вторник 19 Октября 2021, 12:01:15)

> CLA DD

Класс DD на карте с ATR 25 нет смысла проверять. Ведь
Цитата(Ethereal от Вторник 19 Октября 2021, 03:14:33)

> Класс DD проверил ? Зачем-то он отвергается аппликацией CTV

И что, ты убедился, что действительно отвергается ?
Имелось ввиду, а может в карте ATR 24 класс команд операционки DD ? Ну раз он отвергается аппликацией из карты с ATR 25 может быть где-то на другой карте он использовался ? Может на карте с ATR 24 ?
И аналогично про класс 00

Подумал(a) и добавил(a): Вторник 19 Октября 2021, 15:04:58

Хотя не надо проверять, собака рылась не тут. А вот где.
Первое чтение состояния карты здесь
Код: [Выделить]

404e c6 e0 0e lda $E00E
4051 a4 8f and #$8F
4053 b7 22 sta $22

Это до выдачи ATR и результат этого чтения виден в ATR
А после выдачи ATR (а точнее перед каждым приемом заголовка команды CLA INS P1 P2 P3) состояние карты освежается
Код: [Выделить]

4123 c6 e0 0e lda $E00E
4126 a4 8f and #$8F
4128 ba 22 ora $22
412a b7 22 sta $22

Если до кучи выбить это освежение, то результат проявится в том, что будет доступна одна команда операционки.
А раз первое чтение выбивается в один удар и гарантированно, то и второе будет также. Надо только точку найти.
Так-что найди точку выбивания освежения. На коцанной карте лучше. Правда мы многого про ее ROM не знаем, но тренироваться лучше на ней. Хуже ей трудно будет сделать. Найти точку после удара в которую на команду READ BINARY
DB B0 00 00 01
к примеру, ответом карты будет не ноль байт и меньше чем десять байт. Наверное по длине ответа ловить лучше всего. А то коцанная аппликация в EEPROM у тебя на что угодно рыгает длинный ATR около шестнадцати байт, а операционка должна ответить четырьмя байтами B0 xx 90 00. А в случае зависалова ответом будет ноль байт. Короче самый простой способ отбраковывать ответы по длине.
Сказали Спасибо: balton
« Последнее редактирование: Вторник 19 Октября 2021, 15:10:25 от Ethereal »
Жалоба 178.19.253.189

#### Shurik406

- Начинаю писать
- 232
- 488 раз
- 58W |-----| 55E
  Много чего
  UK

##### Иформация о Eurocrypt (помните такое?)

« Ответ #212: Вторник 19 Октября 2021, 15:20:34 »
Код: [Выделить]

TX Data : 09 0E 03 01 20 11 3D 09 8F 00
RX Data : 09 10 3F 6C 00 00 24 A0 30 A7 58 00 00 01 01 00
90 00
Running code in ROM...
TX Data : 0A 0E 03 C4 DD B0 00 20 20 8F 00
RX Data : 09 02 6E 00
..
TX Data : 09 0E 03 01 20 11 3D 09 8F 00
RX Data : 09 10 3F 6C 00 00 24 A0 30 A7 58 00 00 01 01 00
90 00
Running code in ROM...
TX Data : 0A 0E 03 C4 DB B0 00 20 20 8F 00
RX Data : 0A 10 3F 6C 00 00 24 A0 30 A7 58 00 00 01 01 8C
90 00

Может быть там еще что то нужно что бы перекинулся на ROM?
А вот это вот можете объяснить?
lda $E010, x <- ст.байт адреса точки входа аппликации
sta $29
lda $E011, x <- мл.байт адреса точки входа аппликации
sta $2A
lda #$CC ; '�' <- первый байт инструкции процессора jmp hilo
sta $28 <- доформировали в ОЗУ инструкцию jmp hilo
jmp $28 <- jmp на jmp на точку входа аппликации в EEPROM
Старшие и младшие байты адреса в $E010/11 = FF FF (из дампа CTV), т.е. получается JMP FF FF для первой аппликации (которой, конечно, нет)? Точка входа вроде-бы $E060. ИЛИ так как сначала идет проверка первой аппликации в $E010 (ищет байт E0), а далее incx incx, выходит что LDA $,x смешивается с адресом $E010 и получается ст.байт адр в $E012 (E0), а мл в $E013 (68), вот и выходит JMP E0 68. А там еще один jmp на $Е070... А почему тогда сразу на $E070 не перейти? Или это для баг-кетчера?
- Спасибо
Жалоба Записан

#### Ethereal

- ВИП
- Старожил
- 1.581
- 8.611 раз

##### Иформация о Eurocrypt (помните такое?)

« Ответ #213: Вторник 19 Октября 2021, 15:38:53 »
Цитата(Shurik406 от Вторник 19 Октября 2021, 15:20:34)

> Может быть там еще что то нужно что бы перекинулся на ROM?

Я выше-же написал. В
Подумал(a) и добавил(a): Сегодня в 15:04
Жалоба 178.19.253.189

#### Shurik406

- Начинаю писать
- 232
- 488 раз
- 58W |-----| 55E
  Много чего
  UK

##### Иформация о Eurocrypt (помните такое?)

« Ответ #214: Вторник 19 Октября 2021, 15:42:07 »
Цитата(Ethereal от Вторник 19 Октября 2021, 15:38:53)

> Я выше-же написал. В
> Подумал(a) и добавил(a): Сегодня в 15:04

Не увидел - посты скрестились. Щас почитаю.
- Спасибо
Жалоба Записан

#### Ethereal

- ВИП
- Старожил
- 1.581
- 8.611 раз

##### Иформация о Eurocrypt (помните такое?)

« Ответ #215: Вторник 19 Октября 2021, 15:47:32 »
Цитата(Shurik406 от Вторник 19 Октября 2021, 15:20:34)

> А вот это вот можете объяснить?

Код: [Выделить]

E010 : FF FF E0 68 20 DF 00 00 00 00 00 00 00 00 00 00
^^^^^

У цикла два оборота. При первом обороте x = 0
Читается
E010 : FF
и не проходит вот эту проверку
Код: [Выделить]

loc_4167: lda $E010,x
and #$F0
cmp #$E0
bne loc_4186

Ко второму обороту из-за
Код: [Выделить]

loc_4186: incx
incx

становится x = 2
lda $E010,x
читает
E012: E0
проверка проходит и дальше
Код: [Выделить]

lda $E010,x
sta $29
lda $E011,x
sta $2A
lda #$CC
sta $28
jmp $28

через сформированную в ОЗУ процессорную инструкцию
28: CC E0 68 jmp $E068
прыгает на точку входа аппликации $E068

Подумал(a) и добавил(a): Вторник 19 Октября 2021, 15:53:23

Цитата(Shurik406 от Вторник 19 Октября 2021, 15:20:34)

> А там еще один jmp на $Е070... А почему тогда сразу на $E070 не перейти? Или это для баг-кетчера?

Чтобы ответить надо мысли программиста Франц-Телоком прочитать. А я не умею.
Он так сделал. Почему ? А фиг его знает.
Видимо стурктура аппликации была задумана такая - есть заранее оговренная, фиксированная точка входа второй аппликации куда должен кидать управление ROM и пусть создатель аппликации в этой точке входа ставит jmp или bra на истинную точку входа. Нормальное явление, если ОС и аппликацию писали разные программисты и для них была заранее подготовлена спецификация по интерфейсам.
Сказали Спасибо: kurag, balton, Sergio, lift-man, FGHXZ, Shurik406
Жалоба 178.19.253.189

#### Shurik406

- Начинаю писать
- 232
- 488 раз
- 58W |-----| 55E
  Много чего
  UK

##### Иформация о Eurocrypt (помните такое?)

« Ответ #216: Вторник 19 Октября 2021, 16:51:22 »
Цитата

> А после выдачи ATR (а точнее перед каждым приемом заголовка команды CLA INS P1 P2 P3) состояние карты освежается

Блин - а эту мы как раз и не видем в ATR... Ясно. Нет бы им читать состояние карты с регистра, так надо в EEPROM лезть каждый раз...
Короче, как понимаю, удар по ATR не нужен совсем и не важно какой в нем байт выводится, а просто его штатно принять.
А точку искать и удар делать *перед* приeмом байта CLA... т.е. где-то сразу после приема ATR. Типа..
0E 01 8F 20 xx xx 09 C4 DB B0 00 00 01 85 00
- Спасибо
Жалоба Записан

#### Ethereal

- ВИП
- Старожил
- 1.581
- 8.611 раз

##### Иформация о Eurocrypt (помните такое?)

« Ответ #217: Вторник 19 Октября 2021, 23:54:09 »
Цитата(Shurik406 от Вторник 19 Октября 2021, 16:51:22)

> Короче, как понимаю, удар по ATR не нужен совсем и не важно какой в нем байт выводится, а просто его штатно принять.

МоСК включи глядя на это
4123 c6 e0 0e lda $E00E
4126 a4 8f and #$8F
4128 ba 22 ora $22
412a b7 22 sta $22
Я те все объяснил, разжевал, в рот затолкал и утрамбовал, а ты умудряешься все равно "понять" так, что хоть стой, хоть падай. И опять в голову приходит мысль про коня и корм.

Подумал(a) и добавил(a): Среда 20 Октября 2021, 00:30:50

Состояние карты это запреты. Бит 3 запрещает команды ОС с классом DB
OR - это логическое ИЛИ
Логическим ИЛИ объединяются результаты чтения запретов, старый и новый.
Если хоть раз бит 3 из ячейки EEPROM $E00E прочтется выставленным, он останется в ячейке ОЗУ $22 выставленным до конца, до сброса карты. Ранняя борьба с унлупером или что.
Поэтому надо выбить чтения $E00E ОБОЕ-ДВА чтобы добраться до ОС.
Одно найдено и его результат наглядно виден в ATR, дело за малым - нащупать второе.
Сказали Спасибо: kurag, balton, Sergio, skad163, Shurik406
« Последнее редактирование: Среда 20 Октября 2021, 05:41:16 от Ethereal »
Жалоба 178.19.253.189

#### Ethereal

- ВИП
- Старожил
- 1.581
- 8.611 раз

##### Иформация о Eurocrypt (помните такое?)

« Ответ #218: Среда 20 Октября 2021, 08:29:56 »
Ага, в полном соответствии с ISO 7816 part 4 запись в EEPROM это команда ОС
WRITE BINARY
CLA D0 P1 P2 P3
которая стирает, а потом прописывает данные в EEPROM начиная с адреса
E000 + P1:P2 длиной P3 байт, где P3 не ноль и не больше $20.
Короче, параметры в заголовке точно такие-же как и у READ BINARY CLA B0
Интересно, что первый $20 байт EEPROM это OTP-зона и чтобы не пытаться
ее стереть это явно проверяется в обработчике WRITE BINARY :
Код: [Выделить]

INS_DBD0_4256: jsr sub_5309 ; Проверка допустимости P1 P2 P3
jsr sub_5378 ; и проверка не выхода адресов за рамки
jsr Answer_5070 ; Квитанция если OK или ответ ошибкой если нет
lda P3_2F
ldx #$40 ; Адрес ОЗУ-шного буферка
jsr RECVstr_5058 ; Принять a=P3 байт и уложить в ОЗУ с адреса x=$40
lda P1_2D
bne loc_4270 ; Если P1 не ноль прыг стирать
lda P2_2E
cmp #$20
bcs loc_4273 : Если P1 = 0 и P2 < $20 не стирать
loc_4270: jsr sub_5297 ; Стирание участка EEPROM
loc_4273: jmp sub_5246 ; Запись участка EEPROM данными с адреса $40

Короче, все что практически нужно в ОС найдено.
Сказали Спасибо: balton, Sergio, lift-man, Shurik406
Жалоба 178.19.253.189

#### Shurik406

- Начинаю писать
- 232
- 488 раз
- 58W |-----| 55E
  Много чего
  UK

##### Иформация о Eurocrypt (помните такое?)

« Ответ #219: Среда 20 Октября 2021, 13:31:10 »
Цитата(Ethereal от Вторник 19 Октября 2021, 23:54:09)

> 4123 c6 e0 0e lda $E00E
> 4126 a4 8f and #$8F
> 4128 ba 22 ora $22
> 412a b7 22 sta $22

Я когда смотрю на ассембли, у меня глаза разбегаются и мозг начинает кипеть и сам глитчит. Надо бы все нужные функции в pseudo-C перевести - будет легче читать.
Выделенный код можно просто вот так выставить.
include "eprom.h"
uint8_t reg_22;
const int ee_offset = 0xE000;
...
reg_22 |= ee[ee_offset + 0x0E];
Теперь понятно. Я не вижу где именно прописывается бит 3 в рег. $22 или в $E00E - значит или в аппликации (еще не смотрел) или софтом используя комманду D0 в ROMе. Это наверное самый последний этап персонализации, так как после этого в ROM не проникнуть (без глитча).
Цитата

> Интересно, что первый $20 байт EEPROM это OTP-зона

Ну вот - а я уже собирался спрашивать "почему-бы не стереть этот байт и прописать со стертым 3м битом"...
Еще один глуповатый вопрос - прошу не ругать :)
В каком месте бить по мозгам в карте во второй раз? Изначально думаю что вот здесь после глитча в ATR.
0C 20 xx xx 09 C4 DB B0 00 00 01 85 00
^^^^^^^^ пауза
^^ бить перед посыланием первого байта в заголовке (DB)
Это сочитается с тем что рег $22 обновляется перед приемом байта CLA. Значит бить там... Но это препологается что когда карта "спит", то она ходит по кругу и получает 5 байтов CLA INS P1 P2 P3. В упрощенном псевдо-коде выглядит вот так.
/* infinite loop */
while(1)
{
/* Glitch here */
reg_22 |= ee[ee_offset + 0x0E];
reg_2B_CLA = rec_bytes(1); // receive CLA byte
reg_2C_CLA = rec_bytes(1); // receive INS byte
reg_2D_CLA = rec_bytes(1); // receive P1 byte
reg_2E_CLA = rec_bytes(1); // receive P2 byte
reg_2F_CLA = rec_bytes(1); // receive P3 byte
if(reg_2B_CLA == 0xDB) checkINSinROM();
else checkINSinEEPROM();
}
Или, когда карта дрыхнет, она ждет старт бит (по циклу или через прерывание/interrupt), а потом уже заходит на рутину на получение байтов. т.е. вот так.
/* infinite loop */
while(1)
{
/* Send CLA byte and glitch here */
if(startBit)
{
reg_22 |= ee[ee_offset + 0x0E];
reg_2B_CLA = rec_bytes(1); // receive CLA byte
reg_2C_CLA = rec_bytes(1); // receive INS byte
reg_2D_CLA = rec_bytes(1); // receive P1 byte
reg_2E_CLA = rec_bytes(1); // receive P2 byte
reg_2F_CLA = rec_bytes(1); // receive P3 byte
if(reg_2B_CLA == 0xDB) checkINSinROM();
else checkINSinEEPROM();
}
}
Во втором случае надо будет бить после передачи байта CLA. т.е. безтолку бить ДО если ПО не заходит на рутину по адресу $40FE до тех пор пока не получил старт бит.
0D C0 DB 20 xx xx 09 C3 B0 00 00 01 85 00
^^^^^ CLA байт
^^^^^^^ пауза
^^ бить после передачи первого байта в заголовке (DB)
Или я бред опять несу?
- Спасибо
Жалоба Записан

Страницы: « 1 ... 20 21 22 23 24 ... 44 » Вверх
« предыдущая тема следующая тема »
Перейти в:

### Кто онлайн

Просматривают тему:
Ethereal и 1 Гость

### Быстрый ответ

В быстром ответе можно использовать BB-теги и смайлы.

Предупреждение: в данной теме не было сообщений более 120 дней.
Если не уверены, что хотите ответить, то лучше создайте новую тему.

- Базовые
- Дополнительные

[дополнительные смайлы]
Ошибка во время нажатия Спасибо
Спасибо...

Загружается...