Потрошение Videocrypt-а - стр. 2 - Обсуждение систем условного доступа(CA) - YARIK-SAT

закрыть X

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

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

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

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

# Потрошение Videocrypt-а

- 115 Ответов
- 9624 Просмотров

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #10: Понедельник 14 Марта 2022, 16:30:34 »
Цитата(Ethereal от Суббота 12 Марта 2022, 08:02:32)

> Измерять - а вот посредством AbortIfDxLo в промежутке между байтами в поисках первой точки в которой сработает как LO (пошел старт-бит). Между байтами будут поле HI и с появлением старт-бита сбросится в LO. Точка в которой это произошло - интервал между байтами.

Спернул ваш скрипт из Еврокрипта когда вы там измеряли промежутки между старт и стоп битами и изменил. Результатов не вижу.
Код: [Выделить]

Sub Main
Sc.Verbose = False
Sc.Write("B0 FF")
For I = 0 To 8999
If (I Mod 100) = 0 Then
Sc.Print(vbcr)
If I < 10 Then Sc.Print("0")
If I < 100 Then Sc.Print("0")
If I < 1000 Then Sc.Print("0")
Sc.Print(I & " : ")
End If
Sc.Write("08 0E 05 01 20 " & h(I,4) & "06 00")
RX
If Sc.GetByte(0) = &h08 Then
Sc.Print("0")
Else
If Sc.GetByte(0) <> &h07 Then Halt
Sc.Print("1")
End If
Next
End Sub

Выходят это одни единицы. Видимо что-то не так делаю...
По другому скрипту, вижу что начинает промазывать старт бит вот здесь (3F -> F8)
Код: [Выделить]

TX Data : 08 0E 05 01 20 0E BF 8E 00
RX Data : 08 0F 3F 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90
00
TX Data : 08 0E 05 01 20 0E C0 8E 00
RX Data : 08 0F F8 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90
00

Выходит 3775 точек.
Потом вообще промахивает весь первый байт. Почему целый байт, а не следующий бит?
Код: [Выделить]

TX Data : 08 0E 05 01 20 17 85 8E 00
RX Data : 08 0F F8 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90
00
TX Data : 08 0E 05 01 20 17 86 8E 00
RX Data : 07 0E 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90 00

1786 - 0EBF = 2446 точек
А здесь опять первый байт поехал...? Как он может появится если его совсем пропустили?
Код: [Выделить]

TX Data : 08 0E 05 01 20 2E FD 8E 00
RX Data : 07 0E 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90 00
TX Data : 08 0E 05 01 20 2E FE 8E 00
RX Data : 08 0F 3F 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90
00

2EFD - 1786 = 6007 точек
Здесь опять стоп бит начал промахивать.
Код: [Выделить]

TX Data : 08 0E 05 01 20 34 E8 8E 00
RX Data : 08 0F 3F 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90
00
TX Data : 08 0E 05 01 20 34 E9 8E 00
RX Data : 08 0F F8 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90
00

34E8 - 2EFD = 1515 точек
А здесь совсем перестала отвечать.
Код: [Выделить]

TX Data : 08 0E 05 01 20 55 39 8E 00
RX Data : 07 0E 6B 15 05 02 A0 08 80 00 4D 59 00 0C 90 00
TX Data : 08 0E 05 01 20 55 3A 8E 00
RX Data : 07 00

5539 - 34E8 = 8273 точек
Короче как вы поняли, я не понимаю что здесь происходит!
- Спасибо
Сказали Спасибо: DIverSA.T, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #11: Понедельник 14 Марта 2022, 20:02:09 »
А вот это вот интересно... Вот лог из одной из карт ТАС.
Код: [Выделить]

RX ATR : 3F FA 11 25 10 00 01 B0 02 49 49 4D 59 00 81 80 <-- ATR тот-же что и на карте Скай 07
TX Data : 53 74 00 00 20
RX Data : 74
TX Data : E8 29 3A 00 17 14 01 24 F8 A4 E2 FB 97 89 E6 45
8C D1 B6 1E 31 4F B1 71 AD 37 28 22 95 EA 86 9B
RX Data : 90 00
TX Data : 53 78 00 00 FF <<-- карта послушная - дала столько байт сколько спросил
RX Data : 78
RX Data : 90 5F F8 16 73 61 6A B5 00 4F 00 FB 29 37 4C 00
01 00 01 A5 7C 29 83 01 42 07 00 00 00 00 24 F8
A4 E2 28 00 E8 17 14 86 04 00 29 00 00 00 00 00
00 80 40 00 00 40 00 50 00 00 06 00 00 00 00 00
00 20 80 00 20 20 00 00 00 00 40 04 00 00 00 00
00 02 40 00 00 08 04 00 00 00 80 00 00 84 10 00
08 00 00 00 00 00 11 00 17 01 16 D9 18 BC 18 C2
19 5D 1A A1 00 00 00 00 00 00 00 00 00 00 00 00 <<-- стек тот-же

Другая карта ТАС.
Код: [Выделить]

RX ATR : 3F FA 11 25 04 00 01 B0 02 00 00 4D 59 00 81 80 <<-- 5й байт ATR отличается одним битом
TX Data : 53 74 00 00 20
RX Data : 74
TX Data : E8 29 3A 00 17 14 01 24 F8 A4 E2 FB 97 89 E6 45
8C D1 B6 1E 31 4F B1 71 AD 37 28 22 95 EA 86 9B
RX Data : 90 00
TX Data : 53 78 00 00 FF
RX Data : 78
RX Data : 90 5F F8 16 73 61 6A B5 00 4F 00 FB 0D 37 37 00
01 00 01 A5 7C 29 83 01 42 07 00 00 00 00 24 F8
A4 E2 28 58 E8 17 14 86 00 11 22 80 00 02 11 80
00 00 9A 20 25 C4 E8 12 88 01 02 10 40 AA 10 09
01 90 04 00 00 80 20 10 34 00 0A 28 80 8D 00 08
A0 00 70 82 44 2C D0 A0 30 09 C6 8C 08 08 10 90
40 20 10 A0 52 20 01 89 17 01 16 D9 18 BC 18 C2
19 5D 1A A1 00 00 00 00 00 00 00 00 00 00 00 00

А вот эта карта ТАС байт LEN не слушает. Но больше различий в ATR.
Код: [Выделить]

RX ATR : 3F 7E 11 25 05 24 B0 05 00 00 4D 59 00 01 80 48 56 03 10
TX Data : 53 74 00 00 20
RX Data : 74
TX Data : E8 29 3A 00 17 14 01 24 F8 A4 E2 FB 97 89 E6 45
8C D1 B6 1E 31 4F B1 71 AD 37 28 22 95 EA 86 9B
RX Data : 90 00
TX Data : 53 78 00 00 FF
RX Data : 78
RX Data : 90 5F F8 16 73 61 6A B5 90 00

А вот ATR в дампе...
Код: [Выделить]

ROM:15D8 sub_15D8: ; CODE XREF: ROM:loc_163Ep
ROM:15D8 A6 3F lda #$3F
ROM:15DA AD 35 bsr j_s_sendByteWithDelay
ROM:15DC A6 7E lda #$7E
ROM:15DE AD 31 bsr j_s_sendByteWithDelay
ROM:15E0 C6 10 D6 lda byte_10D6
ROM:15E3 26 02 bne loc_15E7
ROM:15E5 A6 11 lda #$11
ROM:15E7
ROM:15E7 loc_15E7: ; CODE XREF: sub_15D8+Bj
ROM:15E7 AD 28 bsr j_s_sendByteWithDelay
ROM:15E9 A6 25 lda #$25
ROM:15EB AD 24 bsr j_s_sendByteWithDelay
ROM:15ED C6 10 D4 lda byte_10D4
ROM:15F0 AD 1F bsr j_s_sendByteWithDelay
ROM:15F2 A6 24 lda #$24
ROM:15F4 AD 1B bsr j_s_sendByteWithDelay
ROM:15F6 A6 B0 lda #$B0
ROM:15F8 AD 17 bsr j_s_sendByteWithDelay
ROM:15FA A6 05 lda #5
ROM:15FC 5F clrx
ROM:15FD loc_15FD: ; CODE XREF: sub_15D8+2Dj
ROM:15FD AD 12 bsr j_s_sendByteWithDelay
ROM:15FF D6 10 D7 lda $10D7, x ; SEND 00 00 4D 59
ROM:1602 5C incx
ROM:1603 A3 07 cpx #7
ROM:1605 26 F6 bne loc_15FD
ROM:1607 AE 03 ldx #3
ROM:1609
ROM:1609 loc_1609: ; CODE XREF: sub_15D8+37j
ROM:1609 AD 06 bsr j_s_sendByteWithDelay
ROM:160B D6 10 E0 lda $10E0, x
ROM:160E 5A decx
ROM:160F 2A F8 bpl loc_1609
ROM:10D7 00 fcb 0
ROM:10D8 00 fcb 0
ROM:10D9 4D fcb $4D ; M
ROM:10DA 59 fcb $59 ; Y
ROM:10DB 00 fcb 0
ROM:10DC 01 byte_10DC: fcb 1 ; DATA XREF: sub_1598r
ROM:10DC ; sub_1798r
ROM:10DD 80 fcb $80 ; Ç
ROM:10E0 10 fcb $10
ROM:10E1 03 fcb 3
ROM:10E2 56 fcb $56
ROM:10E3 48 fcb $48

т.е. дамп из карты которая не слушает LEN байт в команде 78. Стек виден в дампе и мы знаем какой там адрес SEND.. так что попробуем...
- Спасибо
Сказали Спасибо: DIverSA.T, lift-man, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #12: Вторник 15 Марта 2022, 18:24:23 »
Вот смотрите, эту карту я убил с первого удара. Дело том что если глитчем перепрыгиваешь в функцию для обработки команды 0х20, то прописываются биты байта по адресу $10DB. Этот байт отражается в ATR на 14м месте - в штатном состоянии только нулевой бит поставлен. Если команда заканчивается удачно, то биты стираются. Если нет, то капец. Вот что сказал Phil P насчет этих бит.
0 - enable CF0 table in hidden INS 20
1 - ?
2 - ?
3 - prevent access to hidden commands B6, 42, D0, D4 and D8
4 - infinite loop card with 0x69...
5 - random delay before and after ISO7816 bytes - видимо это для того что бы глитчи не всегда попадали туда, куда надо
6 - ?
7 - а вот этот зверь велит стереть EEPROM от 0xD00 до 0x10DB! В этом месте находится практически весь ОС Видеокрипта.
Кстати вот это и случилось. Сейчас стоят два бита, 0й и 4й. А значит зайдет в цикл 69. Еще EEPROM стерт, а значит часть програмки отсутствует - именно туда идет направление после ATR.
Код: [Выделить]

1FF0 : 8C AB 04 97 A6 10 CC 19 8B 00 16 20 16 20 16 20

После сброса, управление падает на адрес 1620.
Код: [Выделить]

ROM:1620 ENTRY_POINT:
ROM:1620 sei
ROM:1621 rsp
ROM:1622 jsr s_checkEEPROMCanary ; Loop 99 if value at $10FE == 0
ROM:1625 bsr f_ClearRAM ; Clear 0x80 -> 0xED
ROM:1627 jsr s_randDelay
ROM:162A lda #$81
ROM:162C sta $8D
ROM:162E jsr s_check69LoopBit ; address 10DC and 10DE must be inverse of each other - else loop
; это надо перепрыгнут
ROM:1631 lda $CE0
ROM:1634 sta $9E ; EEPROM programming timeout
ROM:1636 ldx addr_LSB ; address LSB (D2) <<< десь у нас 0
ROM:1639 lda addr_MSB ; address MSB (0D) <<< здесь у нас 0
ROM:163C bsr s_jmpIfAXNonZero ; jump to A,X if address <> 0 << тк у нас 0, мы едем дальше
ROM:163E loc_163E:
ROM:163E bsr s_SendATR
ROM:1640 jsr sub_1400 ; ???
ROM:1643 loc_1643:
ROM:1643 rsp ; reset stack pointer
ROM:1644 jsr s_checkCanaries ; another check... loop 69 if fails
; это тоже надо перепрыгнут
ROM:1647 brclr 7, $82, loc_164D ; тут бит 7 = 0 у нас, так что все ОК
ROM:164A jsr s_eraseEEPROM ; если тут окажемся то хуже ничего не сделаем
ROM:164D loc_164D:
ROM:164D ldx unk_10D3 ; X = D7
ROM:1650 lda byte_10D2 ; A = 0D
ROM:1653 jsr s_jmpIfAXNonZero ; jump to A,X if address <> 0 << прыг на адрес $0DD7 - Видеокрипт
ROM:1656 bsr sub_1614 ; read iso header < у нас там ноль, значит сразу сюда
ROM:1658 l_osCommands:
ROM:1658 jsr sub_1491 ; ???
ROM:165B lda $86 ; load INS
ROM:165D cmp #$F0 ; Воспользуемся вот этой командой - она дает проверучную сумму EEPROMа без всяких заковычек
ROM:165F beq l_INSF0 ; если сюда перепрыгнем, то поедем дальше
ROM:1661 cmp #$20
ROM:1663 beq l_INS20
ROM:1665 brset 3, $82, loc_167C
ROM:1668 cmp #$B6
ROM:166A beq l_INSB6
ROM:166C cmp #$42
ROM:166E beq l_INS42
ROM:1670 cmp #$D8
ROM:1672 beq l_INSD8
ROM:1674 cmp #$D0
ROM:1676 beq l_INSD0_D4
ROM:1678 cmp #$D4
ROM:167A beq l_INSD0_D4

Подумал(a) и добавил(a): Вторник 15 Марта 2022, 20:47:57

Первая точка находится здесь.
Код: [Выделить]

ROM:1622 jsr s_checkEEPROMCanary ; Loop 99 if value at $10FE == 0

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

TX Data : 20 00 1E 0A 9F 00
RX Data : 09 20 99 99 99 99 99 99 99 99 99 99 99 99 ...

Выходит что тут проваливается проверка и идет в тупик. Идем дальше.
Код: [Выделить]

ROM:162E jsr s_check69LoopBit ; address 10DC and 10DE must be inverse of each other - else loop
; это надо перепрыгнут

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

TX Data : 20 00 2E 0A 9F 00
RX Data : 09 20 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 11
80 48 56 03 10 69 69 69 69 69 69 69 69 69 69 69

Проехали первую проверку, но натыкаемся на вторую. Ее тоже надо проскакать.
Код: [Выделить]

ROM:1644 jsr s_checkCanaries ; another check... loop 69 if fails
; это тоже надо перепрыгнут

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

TX Data : 0D 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 22 0A 9F 00
RX Data : 0D 13 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 11
80 48 56 03 10

Таких точек несколько, но это самая первая.
Еще вот эту увидел:
Код: [Выделить]

TX Data : 0D 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 BA 0A 9F 00
RX Data : 0D 13 6D 00 69 69 69 69 69 69 69 69 69 69 69 69
69 69 69 69 69

Здесь видимо SW1/2 6D 00, но без ATR. Точно не знаю почему, но видимо перепрыгивает вот это?
Код: [Выделить]

ROM:1656 bsr sub_1614 ; read iso header

@Ethereal - я на правильном пути или у меня бред?
- Спасибо
Сказали Спасибо: DIverSA.T, Robin-Hood
« Последнее редактирование: Вторник 15 Марта 2022, 20:47:57 от Shurik406 »
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #13: Вторник 15 Марта 2022, 23:44:18 »
А вот дальше не пробивается... останавливается на ATR и все.
Код: [Выделить]

TX Data : 18 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 22 0A
TX Data : 20 00 01 0A C4 00 F0 00 00 02 83 00
RX Data : 17 13 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 11
80 48 56 03 10

Но случайно по ошибке набил вот такое - последний байт глитчеру сразу после глитча 0x20, хотя не понятно что это делает. Это-же вроде начало Ins2x_Delay? Похож на 0F, но эта так не раскручивает.
Код: [Выделить]

TX Data : 0D 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 21 0A 20
RX Data : 16 44 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 10
00 48 56 03 10 F4 00 90 00 69 69 69 69 69 69 69 << F4 00 90 00 - это похоже покатилось на команду F0, у нее 2х байтный ответ + SW1/2

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

TX Data : 0D 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 22 0A 20
RX Data : 16 44 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 10
00 48 56 03 10 6D 00 69 69 69 69 69 69 69 69 69 - а тут 6D 00, может не понятный INS в регистре $86 сидит

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

TX Data : 0D 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 21 0A 20
RX Data : 16 44 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 10
00 48 56 03 10 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 90 00 69 69 69 69 69 69 69 69 69 <- а тут раскрутка на 16 байт, хотя все и нули

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

TX Data : 0D 0E 05 01 20 00 2E 0A 92
TX Data : 20 00 21 0A 20
RX Data : 16 44 3F 7E 11 25 00 24 B0 05 00 00 00 00 00 10
00 48 56 03 10 F4 10 90 00 69 69 69 69 69 69 69 <- чуть другой ответ

6D 00 посылается по адресу 167С, а 90 00 по 1687. Может я слишком далеко прыгнул?
Код: [Выделить]

ROM:167C l_send6D:
ROM:167C lda #$6D
ROM:167E jmp l_sendSW1
ROM:1681 l_INS20:
ROM:1681 jmp l_enableHiddenCommands
ROM:1684 l_INSF0:
ROM:1684 jmp l_getEEChecksum
ROM:1687 l_INS42:
ROM:1687 lda #$90
ROM:1689 bsr j_s_sendByteWithDelay
ROM:168B clra
ROM:168C bsr j_s_sendByteWithDelay

@Ethereal рабочий стол для вас открыт если хотите потыкаться.
- Спасибо
Сказали Спасибо: DIverSA.T, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #14: Среда 16 Марта 2022, 16:44:44 »
Увеличил промежуток стоп-бита вот здесь
Код: [Выделить]

CardTx9600:
rcall WaitForDxHigh
rcall GetParity
ldi r22, 0x9D ;
ldi r24, 0x09 ; was 0x05
rcall Delay ;

Теперь живые карты все принимаю полностью.
Код: [Выделить]

TX Data : 35 0E 02 01 8F C4 53 74 00 00 20 80
TX Data : DF E8 20 3E
ED F0 1C 00 6F E9 06 D6 00 67 F1 FC 3B BF 9A AA
6B 5B 42 86 F4 D8 35 BE 01 B3 D2 7F A9 81
TX Data : C4 53 78 00 00 FF 0F 00
RX Data : 78 37 12 32 31 BE 0B 95 29 00 4F 00 FB 20 33 51
4F 01 00 01 00 9B 18 00 00 24 07 00 00 00 00 27
E9 06 C7 00 00 E8 00 F0 1C 04 7F 00 F9 00 F0 1C
00 00 20 00 00 00 00 00 00 00 00 00 00 40 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 08 00 00 00 00 00 17 01 16 D9 18 BC 18
C2 19 5D 1A A1 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90 00 34 13 3F FA 11 25 05 00 01 B0 02 3B FA 4D
59 00 00 80 74 90 00

Подумал(a) и добавил(a): Среда 16 Марта 2022, 19:03:35

Вот проехали дальше...
Код: [Выделить]

TX Data : 15 0E 05 01 20 00 31 0A 0A 92 20 00 5B 0A C4 00
F0 00 00 02 8F 00
RX Data : 14 14 3F 7E 4D 25 0D 24 B0 05 00 00 00 00 00 18
00 48 56 03 10 F0 << INS
TX Data : 15 0E 05 01 20 00 31 0A 0A 92 20 00 5B 0A C4 00
D8 00 00 02 8F 00
RX Data : 14 14 3F 7E 4D 25 0D 24 B0 05 00 00 00 00 00 18
00 48 56 03 10 27 << ~INS (D8) byte-by-byte - еще не разгадал что эта команда делает

Теперь мы тут.
Код: [Выделить]

ROM:1658 l_notCLA53: ; CODE XREF: ROM:0DE6J
ROM:1658 jsr sub_1491
ROM:165B lda $86
ROM:165D cmp #$F0
ROM:165F beq l_INSF0
ROM:1661 cmp #$20
ROM:1663 beq l_INS20
ROM:1665 brset 3, $82, l_send6D
ROM:1668 cmp #$B6
ROM:166A beq l_INSB6
ROM:166C cmp #$42
ROM:166E beq l_INS42
ROM:1670 cmp #$D8
ROM:1672 beq l_INSD8
ROM:1674 cmp #$D0
ROM:1676 beq l_INSD0_D4
ROM:1678 cmp #$D4
ROM:167A beq l_INSD0_D4

- Спасибо
Сказали Спасибо: balton, DIverSA.T, lift-man, Robin-Hood
« Последнее редактирование: Среда 16 Марта 2022, 19:44:22 от Shurik406 »
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #15: Четверг 17 Марта 2022, 18:32:14 »
Команды D0 и D4 прописывают данные по 4 байта. Есть большое но... перед пропиской КАЖДОГО байта идет проверка на хешь/пароль который вводится командой 0x20. Хешь 64-битный и можно в принципе-то вычислить, но долго будет. Еще перед каждой проверкой идет задержка случайного времени. т.е. если одну проверку проскачешь, не значит что та-же точка сработает для следующих байтов.
Сама проверка хеша не просто проверка флажка, а целое вычисление хеша каждый раз.

Подумал(a) и добавил(a): Четверг 17 Марта 2022, 18:54:51

Опа!
А вот и наткнулся на свое управление командой 20! Всего 8 байт в буфере, но должно хватить.
Код: [Выделить]

TX Data : 22 0E 05 01 20 00 31 0A 92 20 00 5B 0A C4 00 20
00 00 08 80 C7 9D A6 56 CD 14 C7 20 F8 20 00 1D
0A 88 00
RX Data : 22 1D 3F 7E 4D 25 0D 24 B0 05 00 B0 00 00 00 30
00 48 56 03 10 20 80 56 56 56 56 56 56 56 56

Сейчас посмотрим что там!
- Спасибо
Сказали Спасибо: DIverSA.T, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #16: Четверг 17 Марта 2022, 22:15:25 »
Прогресс.. Вот что вычитал. Не все ячейки читаются.. надо найти более подходящую точку.
Код: [Выделить]

TX Data : 21 0E 05 01 20 00 31 0A 92 20 00 5B 0A C4 00
20 00 00 08 80 C7 5F C6 14 C0 CD 14 C2 8E 20 00
1F 0A 9F 00
RX Data : 21 15 3F 7E 4D 25 0D 24 B0 05 4F B0 00 00 00 31
01 48 56 03 10 20 4D
14C0 : 4D

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

14C0 : 4D ** 12 ** CD 15 ** ** ** ** ** ** ** ** ** **
14D0 : ** ** B7 81 11 04 01 00 ** ** ** ** ** ** ** **
14E0 : ** ** ** 00 ** ** ** ** ** ** ** ** ** 00 ** **
14F0 : ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
1500 : 00 3C 84 ** ** 0C 83 08 9D 0E ** ** AD A1 AD A0
1510 : ** ** 49 5A 26 E0 0E ** 03 9D AD ** ** 84 ** 10
1520 : ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

Все что вычитало полностью совпадает с дампом.
- Спасибо
Сказали Спасибо: balton, DIverSA.T, lift-man, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #17: Пятница 18 Марта 2022, 11:05:06 »
Сейчас надо найти способ запустить побольше вирус. Команда 20 проверят P3 на длину - не больше не меньше 8 байт.
Но если сначала запустить команду с Р3 = 08 с вирусом который делает Р3 = 16 (или что хочешь), то можно перепрыгнуть сюда.
Код: [Выделить]

ROM:17D9 l_enableHiddenCommands:
ROM:17D9 bsr l_checkLen8 ; check P3 = 8
ROM:17DB jsr s_sendByte
ROM:17DE clrx
ROM:17DF
ROM:17DF l_INS20ReadByteLoop:
ROM:17DF jsr s_readByte ; <<<<< надо прыг сюда
ROM:17E2 sta $A0, x ; store byte in $A0 + x
ROM:17E4 lda $10E8, x ; get XOR byte and store in $8E + x
ROM:17E7 sta $8E, x
ROM:17E9 incx
ROM:17EA cpx $89 ; P3/LEN
ROM:17EC bne l_INS20ReadByteLoop

Тогда возможно будет перекрыть стек... ну а дальше вопрос техники.
Монолог на 3 дня заканчивается. @Ethereal - стол все еще открыт. Там и IDA стоит с дампом.
- Спасибо
Сказали Спасибо: balton, DIverSA.T, lift-man, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #18: Среда 23 Марта 2022, 12:53:03 »
Перекрыть стек не удается, так что пришлось импровизировать.
Код: [Выделить]

TX Data : 38 0E 05 01
20 00 31 0A 92 <- skip first EEPROM canary check (69 loop)
20 00 5B 0A <- skip second EEPROM canary check (69 loop)
C4 00 20 00 00 08 80 <- send "hidden" 0x20 INS - LEN byte is checked and must be 8
C7 9D 9D 48 B7 89 CC 17 DB <- "virus" in 0x20 payload
^^ glitch lands here - left shift $89 (P3/LEN) takes it from 8 to 16
20 00 07 0A 80 <- and glitch to it
CF 9D 9D 9D 9D 9D 9D C6 00 80 3C A8 CD 14 C7 20 F1 <- longer virus to read out memory space
20 00 00 0A 0F 00 <- glitch to it and receive
RX Data : D8 00 00 00 00 00 00 00 00 00 00 9D 9D 9D 9D 9D <- virus in RAM
9D C6 00 A8 3C A8 CD 14 C7 20 F1 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 56 00 00 00 19 69 19 59
18 14 AC 15 49 00 AE 19 A8 16 25 01 0F 02 03 04
00 06 07 40 87 0A 0B 0C 0D 0E 0F 10 11 12 13 14
15 16 17 18 19 1A 1B 1C
RAM:
0090 : ... D8 00 00 00 00 00 00 00 00 00 00
00A0 : 9D 9D 9D 9D 9D 9D C6 00 A8 3C A8 CD 14 C7 20 F1
00B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 56 00 00
00F0 : 00 19 69 19 59 18 14 AC 15 49 00 AE 19 A8 16 25 <- stack
0100 : 01 0F 02 03 04 00 06 07 40 87 0A 0B 0C 0D 0E 0F <- EEPROM
0110 : 10 11 12 13 14 15 16 17 18 19 1A 1B 1C ...

В принципе можно вычитать все, но хочу засунуть свою програмку в EEPROM - типа Ethereal OS - что бы можно было манипулировать картой без глитчера.
- Спасибо
Сказали Спасибо: balton, DIverSA.T, lift-man, Robin-Hood
Жалоба Записан

#### Shurik406

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

##### Потрошение Videocrypt-а

« Ответ #19: Четверг 24 Марта 2022, 20:38:01 »
Короче способ выкачивания данных что описан выше - х3рьня. Надо бить по 20-30 раз что бы наткнутся на все точки и выбить то что надо.
В дисассемблере вот такой кусочек для принятия 5 байтов CLA INS P1 P2 LEN:
Код: [Выделить]

ROM:1614 s_readISOHeader:
ROM:1614 5F clrx
ROM:1615 loc_1615:
ROM:1615 CD 14 34 jsr s_readByte
ROM:1618 E7 85 sta $85, x
ROM:161A 5C incx
ROM:161B A3 05 cpx #5
ROM:161D 26 F6 bne loc_1615
ROM:161F 81 rts

Но... если перепрыгнуть clrx и сделать LDX #0x5B, то относительный адрес где будут сохранятся данные не $85, а $E0. При этом можно перекрыть стек.
Вот намутил такие команды.
Код: [Выделить]

TX Data : 43 0E 05 01 20 00 31 0A 92 <- glitch to skip first 69 loop check
20 00 5B 0A <- glitch to skip second 69 loop check
C4 00 20 00 00 00 80 C7 9D 9D 9D AE 5B CC 16 15
^^^^^^^^^^^^^^ первый вирь с перепрыгом на getISOheader
20 00 07 0A <- глитч для запуска первого виря
DF
9D 9D 9D 9D 9D 9D 9D A6 73 CD 14 C7 5C 20 F8 8E <- адрес Е0..F
00 E0 00 E0 00 E0 00 E0 00 E0 00 E0 00 E0 00 E0 <- адрес F0..F со стеком
8F 00
RX Data : 43 25
3F 7E 4D 25 0D 24 B0 05 4F 00 00 00 00 BA 00 00 00 00 00 <- ATR
67 00 <- SW1/2
69 69 69 69 69 69 69 69 69 69 69 69 69 69 69 69 .. <- 69 loop

Что тут не так? Стек говорит что следующий адрес 00 0E. Почему туда не переходит?
- Спасибо
Сказали Спасибо: DIverSA.T, Robin-Hood
« Последнее редактирование: Четверг 24 Марта 2022, 22:33:32 от Shurik406 »
Жалоба Записан

Страницы: « 1 2 3 4 ... 12 » Вверх
« предыдущая тема следующая тема »
Перейти в:

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

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

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

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

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

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

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

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