Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определение алгоритма CRC8
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
TONAL
Доброго времени суток All!

Имеется некоторый контроллер декодирующий сигналы от местной клавиатуры, пульта ДУ и передающий соответствующие пакеты через USB мост в PC.
Каждый пакет состоит из шапки-3байта+данные-2байта+данные-2байта(повтор)+СRC.

Пакет CRC

53 4B 08 E0 00 E0 00 - AB
53 4B 08 E0 02 E0 02 - 3A
53 4B 08 E0 01 E0 01 - 6F
53 4B 08 E0 08 E0 08 - DD
53 4B 08 E0 10 E0 10 - 47
53 4B 08 E0 04 E0 04 - 90
53 4B 08 E0 24 E0 24 - 51
53 4B 08 E0 20 E0 20 - 6A
53 4B 08 E0 40 E0 40 - 30

53 4D 08 00 01 00 01 - DD

53 49 08 10 00 10 00 - D1
53 49 08 10 08 10 08 - A7
53 49 08 11 00 11 00 - 24
53 49 08 11 08 11 08 - 52
53 49 08 0D 00 0D 00 - EB
53 49 08 0D 08 0D 08 - 9D
53 49 08 00 00 00 00 - 06
53 49 08 00 08 00 08 - 70
53 49 08 01 00 01 00 - F3
53 49 08 01 08 01 08 - 85
53 49 08 02 00 02 00 - F5
53 49 08 02 08 02 08 - 83
53 49 08 03 00 03 00 - 00
53 49 08 03 08 03 08 - 76
53 49 08 04 00 04 00 - F9
53 49 08 04 08 04 08 - 8F
53 49 08 05 00 05 00 - 0C
53 49 08 05 08 05 08 - 7A
53 49 08 06 00 06 00 - 0A
53 49 08 06 08 06 08 - 7C
53 49 08 07 00 07 00 - FF
53 49 08 07 08 07 08 - 89
53 49 08 08 00 08 00 - E1
53 49 08 08 08 08 08 - 97
53 49 08 09 00 09 00 - 14
53 49 08 09 08 09 08 - 62

Хотя есть все основания полагать что используется класический алгоритм СRC8 с неизвестным полиномом и начальным заполнением - вследствие линейности:

53 49 08 01 00 01 00 - F3
53 49 08 02 00 02 00 - F5
XOR 00 00 00 03 00 03 00 - 06 !!!

53 49 08 00 00 00 00 - 06
53 49 08 03 00 03 00 - 00
XOR 00 00 00 03 00 03 00 - 06 !!!


Но перебор всех возможных полиномов и начальных заполнений по процедуре:

BYTE crc8_sft_buf(BYTE * buf, BYTE poly8, BYTE crc, BYTE len)
{
for (BYTE i = 0; i < len; i++)
{
crc ^= buf[i];
for (BYTE j = 0; j < 8; j++ )
crc = crc & 0x80 ? (crc << 1) ^ poly8 : crc << 1;
// crc = crc & 0x01 ? (crc >> 1) ^ poly8 : crc >> 1;
}
return crc;
}
Не принес результата sad.gif

Ранее здесь подымалась подобная тема (http://electronix.ru/forum/index.php?showtopic=22188&st=0), но до победы как я понял не дошло.

Надеюсь на помощь, заранее спасибо!
TONAL
+
Приведенная таблица пакетов является почти полной, то есть это почти все команды(системная клавиатура ДУ не используются).
Соответственно возможности "проверить любые пакеты" для построения "хорошей" таблицы нет sad.gif
00 00 00 00 00 00 00 - seed sad.gif
00 00 00 00 00 00 01 - pol8 ^ seed sad.gif

Но используя линейные комбинации (точно так же как указывалось выше) можно сильно "прорядить" таблицу
Попробуем так

00 00 00 00 01 00 01 - C4
00 00 00 00 02 00 02 - 91
00 00 00 00 04 00 04 - 3B
00 00 00 00 08 00 08 - 76
00 00 00 00 10 00 10 - EC
00 00 00 00 20 00 20 - C1
00 00 00 00 40 00 40 - 9B
00 00 00 00 80 00 80 - ?? нема де взять!!!
00 00 00 01 00 01 00 - F5
00 00 00 02 00 02 00 - F3
00 00 00 04 00 04 00 - FF
00 00 00 08 00 08 00 - E7
00 00 00 10 00 10 00 - D7

При более детальном рассмотрении этой таблицы можно обнаружить интересные свойства алгоритма
Смотреть слева только расположение пакетов, справа XOR треугольник A^B=C

00 00 00 00 01 00 01 - C4
00 00 00 00 04 00 04 - 3B
00 00 00 04 00 04 00 - FF C4^3B=FF

00 00 00 00 02 00 02 - 91
00 00 00 00 08 00 08 - 76
00 00 00 08 00 08 00 - E7 91^76=E7

00 00 00 00 04 00 04 - 3B
00 00 00 00 10 00 10 - EC
00 00 00 10 00 10 00 - D7

Если экстраполировать эту закономерность расположения пакетов для получения прогноза то получим

00 00 00 00 08 00 08 - 76
00 00 00 00 20 00 20 - C1
00 00 00 20 00 20 00 - B7 прогноз!!!

00 00 00 00 10 00 10 - EC
00 00 00 00 40 00 40 - 9B
00 00 00 40 00 40 00 - 77 прогноз!!!

Продолжаем

00 00 00 20 00 20 00 - B7
00 00 00 40 00 40 00 - 77
00 00 00 80 00 80 00 - ?? нет прогноза!!!
00 00 01 00 01 00 00 - 6E
00 00 02 00 02 00 00 - ?? тем более нема де взять!!!
00 00 04 00 04 00 00 - 0A
00 00 08 00 08 00 00 - 14
00 00 10 00 10 00 00 - 28
00 00 20 00 20 00 00 - 50
00 00 40 00 40 00 00 - A0
00 00 80 00 80 00 00 - ?? нема!!!


В результате получается

00 00 00 00 01 00 01 - C4
00 00 00 00 02 00 02 - 91
00 00 00 00 04 00 04 - 3B
00 00 00 00 08 00 08 - 76
00 00 00 00 10 00 10 - EC
00 00 00 00 20 00 20 - C1
00 00 00 00 40 00 40 - 9B
00 00 00 00 80 00 80 - ??
00 00 00 01 00 01 00 - F5
00 00 00 02 00 02 00 - F3
00 00 00 04 00 04 00 - FF
00 00 00 08 00 08 00 - E7
00 00 00 10 00 10 00 - D7
00 00 00 20 00 20 00 - B7
00 00 00 40 00 40 00 - 77
00 00 00 80 00 80 00 - ??
00 00 01 00 01 00 00 - 6E
00 00 02 00 02 00 00 - ??
00 00 04 00 04 00 00 - 0A
00 00 08 00 08 00 00 - 14
00 00 10 00 10 00 00 - 28
00 00 20 00 20 00 00 - 50
00 00 40 00 40 00 00 - A0
00 00 80 00 80 00 00 - ??

Интересно достаточно этой информации для проведения кокого нибудь дальнейшего анализа?
Если да, то кокого? Если нет, то почему!

Вообщето совсем не сложно хранить в памяти всю таблицу, но очень интересно КАК это работает.
TONAL
Можно спрогнозировать еще один такой елемент, дальше опять дырка.

00 00 00 40 00 40 00 - 77
00 00 01 00 01 00 00 - 6E
00 01 00 01 00 00 00 - 19 прогноз!!!

Имеющиеся дырки закрыть пока нечем sad.gif
Через какую еще мясорубку можно пропустить имеющиеся данные 1111493779.gif
Ivan_Petrov
То что вы привели в качестве прогноза, свойственно для операций над GF (+*).

Уточните пожалуйста, эти данные идут по USB или идут от пульта до переходника?
TONAL
Цитата(Ivan_Petrov @ Oct 17 2007, 14:13) *
То что вы привели в качестве прогноза, свойственно для операций над GF (+*).

Какие еще характерные свойства можно использавать для анализа?
Если выполняются свойства операций над GF (+*), то это CRC?
Как же выковырять образующий полином?


Цитата(Ivan_Petrov @ Oct 17 2007, 14:13) *
Уточните пожалуйста, эти данные идут по USB или идут от пульта до переходника?

Данные идут по СОМ порту(ТТЛ) от контроллера в USB мост.
Пульт ДУ обычный инфракрасный от телевизора с кодировкой RC5.

Если посмотреть на таблицу пакетов

Клавиатура
53 4B 08 E0 00 E0 00 - AB
53 4B 08 E0 02 E0 02 - 3A
53 4B 08 E0 01 E0 01 - 6F
53 4B 08 E0 08 E0 08 - DD
53 4B 08 E0 10 E0 10 - 47
53 4B 08 E0 04 E0 04 - 90
53 4B 08 E0 24 E0 24 - 51
53 4B 08 E0 20 E0 20 - 6A
53 4B 08 E0 40 E0 40 - 30

Сброс
53 4D 08 00 01 00 01 - DD

ДУ
53 49 08 00 00 00 00 - 06
53 49 08 00 08 00 08 - 70
53 49 08 01 00 01 00 - F3
53 49 08 01 08 01 08 - 85
53 49 08 02 00 02 00 - F5
53 49 08 02 08 02 08 - 83
53 49 08 03 00 03 00 - 00
53 49 08 03 08 03 08 - 76
53 49 08 04 00 04 00 - F9
53 49 08 04 08 04 08 - 8F
53 49 08 05 00 05 00 - 0C
53 49 08 05 08 05 08 - 7A
53 49 08 06 00 06 00 - 0A
53 49 08 06 08 06 08 - 7C
53 49 08 07 00 07 00 - FF
53 49 08 07 08 07 08 - 89
53 49 08 08 00 08 00 - E1
53 49 08 08 08 08 08 - 97
53 49 08 09 00 09 00 - 14
53 49 08 09 08 09 08 - 62
53 49 08 0D 00 0D 00 - EB
53 49 08 0D 08 0D 08 - 9D
53 49 08 10 00 10 00 - D1
53 49 08 10 08 10 08 - A7
53 49 08 11 00 11 00 - 24
53 49 08 11 08 11 08 - 52

то можно увидеть что для команд клавиатуры и Пульта ДУ разные шапки.
Ivan_Petrov
Цитата(TONAL @ Oct 17 2007, 15:33) *
Какие еще характерные свойства можно использавать для анализа?
Если выполняются свойства операций над GF (+*), то это CRC?
Как же выковырять образующий полином?


Я могу только дополнить операции над начальным состоянием которые не испортят зависимость.
1. Булевое сложение (XOR) с одинаковым значением на каждом шаге.
2. Перестановка бит местами.

Также здесь может быть не CRC8, а например CRC16 или CRC32 с уплотнением или отсечкой избыточных бит.

Цитата(TONAL @ Oct 17 2007, 15:33) *
Данные идут по СОМ порту(ТТЛ) от контроллера в USB мост.
Пульт ДУ обычный инфракрасный от телевизора с кодировкой RC5.


Может проще выложить програмный модуль PC, который обрабатывает этот поток, дизасемблирование и обратное востановление алгоритма будет гораздо быстрее.
TONAL
Цитата(Ivan_Petrov @ Oct 17 2007, 14:43) *
Я могу только дополнить операции над начальным состоянием которые не испортят зависимость.
1. Булевое сложение (XOR) с одинаковым значением на каждом шаге.
2. Перестановка бит местами.

Также здесь может быть не CRC8, а например CRC16 или CRC32 с уплотнением или отсечкой избыточных бит.

А какие в моем случае возможны(если возможны) варианты реверса?

Цитата(Ivan_Petrov @ Oct 17 2007, 14:43) *
Может проще выложить програмный модуль PC, который обрабатывает этот поток, дизасемблирование и обратное востановление алгоритма будет гораздо быстрее.

Програмный модуль работает под Linux 07.gif
Самый быстрый и простой вариант я уже сделал. Заграбил целиком таблицу пакетов, зашил ее в свой контроллер АТ89с2051 (оригинал AVR) вместе с алгоритмом работы и все работает!!!

Но хочется научится формировать пакеты, а не считывать их из таблицы
VslavX
Цитата(TONAL @ Oct 17 2007, 15:03) *
А какие в моем случае возможны(если возможны) варианты реверса?

Если это CRC-8,то всего 512 вариантов полинома (или 256, если старший бит всегда единичный) , можно просто попробовать перебором.
TONAL
Цитата(VslavX @ Oct 17 2007, 15:13) *
Если это CRC-8,то всего 512 вариантов полинома (или 256, если старший бит всегда единичный) , можно просто попробовать перебором.


Перебором уже пробовал(в самом начале темы), причем двигал как влево так и вправо.
Может можно как то по другому?
Ivan_Petrov
Цитата(TONAL @ Oct 17 2007, 16:03) *
А какие в моем случае возможны(если возможны) варианты реверса?

Ну очень сильно бы помогли пакеты в которых изменяется только последний байт,
либо те, у которых CRC одинаковый. Но таких пакетов нужно не 1 пара.

Цитата(TONAL @ Oct 17 2007, 16:03) *
Програмный модуль работает под Linux 07.gif

Выложи куда нибудь. (можно на рапиду под паролем).
Если для USB устройства есть дрова, то тоже выкладывай. Если используется стандартный класс устройства, например HID, то укажи какой.
TONAL
Цитата(Ivan_Petrov @ Oct 17 2007, 15:27) *
Ну очень сильно бы помогли пакеты в которых изменяется только последний байт,

Таких вообще нема sad.gif

Цитата(Ivan_Petrov @ Oct 17 2007, 15:27) *
либо те, у которых CRC одинаковый. Но таких пакетов нужно не 1 пара.

К сожалению много таких пакетов получить не удается sad.gif

Цитата(Ivan_Petrov @ Oct 17 2007, 15:27) *
Выложи куда нибудь. (можно на рапиду под паролем).
Если для USB устройства есть дрова, то тоже выкладывай. Если используется стандартный класс устройства, например HID, то укажи какой.

Как его (модуль) оттуда вытащить?
Этот линукс сам грузится сам стартует программу(без моего участия)
Причем хавает разные типы мостов (FTDI232RL, CP2101, OTI6858, Prolifik2303) других не прбовал.
Ivan_Petrov
Цитата(TONAL @ Oct 17 2007, 16:45) *
Как его (модуль) оттуда вытащить?
Этот линукс сам грузится сам стартует программу(без моего участия)


Имя программы известно?
как вытащить? wacko.gif
Дак запустить консоль и вытащить, или подмонтировать диск к другому линуху, и вытащить с ФС.
TONAL
Цитата(Ivan_Petrov @ Oct 17 2007, 16:08) *
Имя программы известно?
как вытащить? wacko.gif
Дак запустить консоль и вытащить, или подмонтировать диск к другому линуху, и вытащить с ФС.

Имя программы неизвестно(можно тольео догадыватся).

Имеется образ этого линуха вместе с прогой ВПЕРЕМЕШКУ!!! 200MB
тоесть я могу его просматривать но не знаю как посмотреть авторан, и т.д.

Но всетаки ломать со стороны РС прогу не тот интерес, я ж говорю что уже "клонировал" контроллер методом черного ящика(оригинал AVR -> клон MCS51) работает отлично но...
Ivan_Petrov
Цитата(TONAL @ Oct 17 2007, 17:10) *
Имя программы неизвестно(можно тольео догадыватся).

Имеется образ этого линуха вместе с прогой ВПЕРЕМЕШКУ!!! 200MB
тоесть я могу его просматривать но не знаю как посмотреть авторан, и т.д.


Образ тоже пойдет.
Азтозагрузка делается через init обычно, и прилегающие к нему скрипты.
TONAL
Ну как оно???
Ivan_Petrov
Цитата(TONAL @ Oct 17 2007, 18:46) *


то что было выдернул.
сейчас посмотрю еще ньюансы с подсчетами, может там байты переставляются предварительно или еще чтонибудь.
Код
static unsigned char \
crc8_tab[256] = \
{
    0x00,0x5E,0xBC,0xE2,0x61,0x3F,0xDD,0x83,0xC2,0x9C,0x7E,0x20,0xA3,0xFD,0x1F,
0x41,
    0x9D,0xC3,0x21,0x7F,0xFC,0xA2,0x40,0x1E,0x5F,0x01,0xE3,0xBD,0x3E,0x60,0x82,
0xDC,
    0x23,0x7D,0x9F,0xC1,0x42,0x1C,0xFE,0xA0,0xE1,0xBF,0x5D,0x03,0x80,0xDE,0x3C,
0x62,
    0xBE,0xE0,0x02,0x5C,0xDF,0x81,0x63,0x3D,0x7C,0x22,0xC0,0x9E,0x1D,0x43,0xA1,
0xFF,
    0x46,0x18,0xFA,0xA4,0x27,0x79,0x9B,0xC5,0x84,0xDA,0x38,0x66,0xE5,0xBB,0x59,
0x07,
    0xDB,0x85,0x67,0x39,0xBA,0xE4,0x06,0x58,0x19,0x47,0xA5,0xFB,0x78,0x26,0xC4,
0x9A,
    0x65,0x3B,0xD9,0x87,0x04,0x5A,0xB8,0xE6,0xA7,0xF9,0x1B,0x45,0xC6,0x98,0x7A,
0x24,
    0xF8,0xA6,0x44,0x1A,0x99,0xC7,0x25,0x7B,0x3A,0x64,0x86,0xD8,0x5B,0x05,0xE7,
0xB9,

    0x8C,0xD2,0x30,0x6E,0xED,0xB3,0x51,0x0F,0x4E,0x10,0xF2,0xAC,0x2F,0x71,0x93,
0xCD,
    0x11,0x4F,0xAD,0xF3,0x70,0x2E,0xCC,0x92,0xD3,0x8D,0x6F,0x31,0xB2,0xEC,0x0E,
0x50,
    0xAF,0xF1,0x13,0x4D,0xCE,0x90,0x72,0x2C,0x6D,0x33,0xD1,0x8F,0x0C,0x52,0xB0,
0xEE,
    0x32,0x6C,0x8E,0xD0,0x53,0x0D,0xEF,0xB1,0xF0,0xAE,0x4C,0x12,0x91,0xCF,0x2D,
0x73,
    0xCA,0x94,0x76,0x28,0xAB,0xF5,0x17,0x49,0x08,0x56,0xB4,0xEA,0x69,0x37,0xD5,
0x8B,
    0x57,0x09,0xEB,0xB5,0x36,0x68,0x8A,0xD4,0x95,0xCB,0x29,0x77,0xF4,0xAA,0x48,
0x16,
    0xE9,0xB7,0x55,0x0B,0x88,0xD6,0x34,0x6A,0x2B,0x75,0x97,0xC9,0x4A,0x14,0xF6,
0xA8,
    0x74,0x2A,0xC8,0x96,0x15,0x4B,0xA9,0xF7,0xB6,0xE8,0x0A,0x54,0xD7,0x89,0x6B,
0x35
};

static unsigned char \
crc8_update (unsigned char crc, unsigned char v)
{
#if 0

    crc ^= v;
    crc  = crc8_tab[crc];

#else

    int i;

    crc ^= v;

    for (i = 0; i < 8; i++)
    {
        crc = (crc >> 1) ^ ((crc & 0x01) ? 0x8C : 0x00);
    }

#endif

    return crc;
}

static unsigned char \
crc8 (const unsigned char *ptr, int len)
{
    unsigned char crc;

    crc = 0;

    while (len--)
    {
        crc = crc8_update (crc, *ptr++);
    }

    return crc;
}


P.S.
Добавил...
CRC считается для блоков 2, 3, 4 байта при записи в устройство, при чтении из него ничего не считается.
остальное посмотрю чуь позже.
TONAL
Цитата(Ivan_Petrov @ Oct 17 2007, 18:36) *
то что было выдернул.


Круто!!! как это ты его так быстро ???


Цитата(Ivan_Petrov @ Oct 17 2007, 18:36) *
P.S.
Добавил...
CRC считается для блоков 2, 3, 4 байта при записи в устройство, при чтении из него ничего не считается.
остальное посмотрю чуь позже.


Спасибо папробую посчитать по этим процедурам.
Ivan_Petrov
Все перепровирил, при чтении CRC не проверяется. Читается всегда по 8 байт с порта "/dev/usb/tts/0" на скорости 9600, 8 бит данных. Вторым байтом идут идентификаторы, которые могут принимать значения: 0x4B,0x4D,0x42.
Для идентификатора 0x4B 4 и 5 байты пакета раскладываются в массив int значений, примерно вот так:
Код
for (i = 0; i < 8; i++)
{
    array[i] = (packet[4] & (1 << i)) ? 1 : 0;
}

Для других идетификаторов проверяются внутренние состояния. Дальше копать не стал.

при открытии порта посылаются вот такие пакеты инициализации
Цитата
0x52,0x03, CRC
0x41,0x04,0xFF, CRC


и есть еще пакет на запись вот такого формата:
Цитата
val = <expr> ? 3 : 0
0x4D,0x05, val, 0x00, CRC

когда точно отсылается тоже не стал копать.

все smile.gif

p.s.
я еще вот что думаю, а может в пакете на прием это не CRC, а неочищенный перед заполнением буфер, выделенный на стеке? Тоже самое объяснение может быть и для повторных полей с данными.
TONAL
Пересчитал по твоему коду:
CRC расчитаный таблично и через LSFR совпадают(это хорошо), но не совпадают с тем шо надо(это плохо).



Цитата(Ivan_Petrov @ Oct 17 2007, 20:50) *
Все перепровирил, при чтении CRC не проверяется. Читается всегда по 8 байт с порта "/dev/usb/tts/0" на скорости 9600, 8 бит данных. Вторым байтом идут идентификаторы, которые могут принимать значения: 0x4B,0x4D,0x42.
Для идентификатора 0x4B 4 и 5 байты пакета раскладываются в массив int значений, примерно вот так:
Код
for (i = 0; i < 8; i++)
{
    array[i] = (packet[4] & (1 << i)) ? 1 : 0;
}

Для других идетификаторов проверяются внутренние состояния. Дальше копать не стал.


Точно так и есть:
Идентификатор 0x4B это клавиатура а в четвертом байте упакованы побитно состояния кнопок 8шт.
Идентификатор 0x4D это тоже команда smile.gif
Идентификатор 0x49(42 ошибка?) это команды ДУ.

Цитата(Ivan_Petrov @ Oct 17 2007, 20:50) *
при открытии порта посылаются вот такие пакеты инициализации
Init0 - 52 03 04
Init1 - 41 04 FF 94

и есть еще пакет на запись вот такого формата:
Start - 4D 05 03 00 1D

когда точно отсылается тоже не стал копать.


ТОЧНО!!!
А вот для этих пакетов восстановленный тобой алгоритм полностью подходит (я проверил)!!!


Цитата(Ivan_Petrov @ Oct 17 2007, 20:50) *
p.s.
я еще вот что думаю, а может в пакете на прием это не CRC, а неочищенный перед заполнением буфер, выделенный на стеке?
Тоже самое объяснение может быть и для повторных полей с данными.


Да непохоже скорее всего эта фича контроллера которую РС не юзает(или юзает в другом месте).
А повтор нормальное явление

Мусор от стека кажется маловероятным (этож однокристалка)(тем более выполняются свойства опереций в (GF2*))
То есть там CRC но другой!
Ivan_Petrov
Цитата(TONAL @ Oct 17 2007, 23:12) *
Идентификатор 0x49(42 ошибка?) это команды ДУ.


Нет не ошибка.

вот CASE блок комманд.

Код
.text:0807C5BA                 mov     eax, [ebp+pObj]
.text:0807C5BD                 cmp     byte ptr [eax+135h], 4Bh
.text:0807C5C4                 jnz     @loop1_end     ; not 4B
...
.text:0807C6EE                 mov     eax, [ebp+pObj]; not 4B
.text:0807C6F1                 cmp     byte ptr [eax+135h], 4Dh
.text:0807C6F8                 jnz     loc_807C7B1    ; not 4D
...
.text:0807C7B1                 mov     eax, [ebp+pObj]; not 4D
.text:0807C7B4                 cmp     byte ptr [eax+135h], 42h
.text:0807C7BB                 jnz     @end_case      ; not 42

вот 49 комманды тут точно нет, или ана обрабатывается другим модулем.
TONAL
Цитата(Ivan_Petrov @ Oct 17 2007, 22:44) *
Нет не ошибка.
вот CASE блок комманд.

Код
.text:0807C5BA                 mov     eax, [ebp+pObj]
.text:0807C5BD                 cmp     byte ptr [eax+135h], 4Bh
.text:0807C5C4                 jnz     @loop1_end    ; not 4B
...
.text:0807C6EE                 mov     eax, [ebp+pObj]; not 4B
.text:0807C6F1                 cmp     byte ptr [eax+135h], 4Dh
.text:0807C6F8                 jnz     loc_807C7B1; not 4D
...
.text:0807C7B1                 mov     eax, [ebp+pObj]; not 4D
.text:0807C7B4                 cmp     byte ptr [eax+135h], 42h
.text:0807C7BB                 jnz     @end_case     ; not 42

вот 49 комманды тут точно нет, или ана обрабатывается другим модулем.


Согласен, но я ни разу не видел команды 42, а 49 это точно ДУ.
Может 49 выведет на этот хитрый CRC?
Качаю VMWare.
a14.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.