![]() |
eXeL@B —› Вопросы новичков —› Подскажите как правильно сделать декодирование бин-файла. |
Посл.ответ | Сообщение |
|
Создано: 13 октября 2011 03:09 · Личное сообщение · #1 Суть в том, что имеется один файл (входной), из него получаем другой(выходной), путем операции XOR к каждому байту входного и константы полученной в результате определенной функции. Попробую проще написать. Значит есть входной бин-файл. Берем первый байт из входного файла, вычисляем функцию, получаем определенный байт. Делаем XOR между двумя этими байтами. Результат (байт) помещаем на место первого байта выходного файла. Все то-же самое проделываем и для второго байта и так далее, пока не получим полный выходной файл. Он естественно будет равен по размеру входному. Интересует вопрос, как это проделать в автоматическом режиме? Не пересчитывая на калькуляторе каждый раз, каждый байт. Может подскажите порядок действий. Как это делается. За ранее прошу прощения, я в правду новичек. ![]() |
|
Создано: 13 октября 2011 04:49 · Поправил: SReg · Личное сообщение · #2 |
|
Создано: 13 октября 2011 07:33 · Личное сообщение · #3 |
|
Создано: 13 октября 2011 09:19 · Личное сообщение · #4 Kuzya69 пишет: пересчитывая на калькуляторе Интересно если б файло был пару мег, чтоб ты делал?) прога в аттаче, сорцы там же... ![]() ![]() |
|
Создано: 13 октября 2011 10:28 · Личное сообщение · #5 |
|
Создано: 13 октября 2011 11:48 · Личное сообщение · #6 Kuzya69 пишет: Берем первый байт из входного файла, вычисляем функцию, получаем определенный байт. Делаем XOR между двумя этими байтами. Результат (байт) помещаем на место первого байта выходного файла. А Где эта функция ? На словах уже всё растолковали. На край, бери Питон и пиши скрипт с элементраным циклом на длинну файла, а в цикле сделаешь свои махинации. ![]() |
|
Создано: 13 октября 2011 13:33 · Личное сообщение · #7 Читал и плакал Интересно, а как человек, не знающий ни одного языка программирования, допёр, что там ксор, функция некая вычислят какие-то байты и т.д.? Да просто, дизассемблировал прошивку микроконтроллера. Нашел цикл по перекодировке входной последовательности, в ту, что потом пишется во флеш. А вот не знаю как это сделать под виндой, для АВР-ов могу написать, на асме. А вот с виндой не владею, поэтому и просил, думая что можно это как-то при помощи готовых программ(типа ВИН-Хекса, ХЕКС-Воркшопа....) организовать, написав какой-нибудь бат-файл, или скрипт. Как написать саму программу по отношению к массиву я понимаю, но вот как организовать связь с бин-файлом и этой программой не знаю. Поэтому и хотел спросить. Больше всего не понятно, почему ко мне такое отношение? Не хотите помогать, не пишите. Или лавры героя крякерства покоя не дают? ![]() |
|
Создано: 13 октября 2011 14:18 · Личное сообщение · #8 |
|
Создано: 13 октября 2011 15:00 · Личное сообщение · #9 |
|
Создано: 13 октября 2011 18:45 · Личное сообщение · #10 |
|
Создано: 13 октября 2011 20:21 · Личное сообщение · #11 Распиши алгоритм подробно, кто нибудь из местных студентов сваяет. Вон SReg уже набросал. Пример: R21:R20- это константа составленная из двух байт, два байта рассматриваются как одно слово (число). R21 - это половина (соответственно старшая часть), регистр. R20 - это вторая половина регистра (младшая часть) Значения этих регистров - шестнадцатиричные числа. А вот алгоритм Начало (инициализация) R16:R15=3Е00 (размер файлов, входного и выходного) , R13:R12=В658 , ZH:ZL=0000 (очищаем счетчик) 1) R13=86 2) Открываем цикл на 80h-циклов(128 раз) 3) а)Читаем байт по адресу ZH:ZL из исходного бин-файла. б) Делаем XOR этого байта со значением R13, и результат заносим в выходной бин-файл по тому-же адресу (ZH:ZL). в) В регистре R13:R12 делаем сдвиг бит (не байт) влево, добавив справа на свободное место 0. Это практически умножение на два. г) Проверяем получившийся R13 (старшая половина R13:R12), на равенство нулю. (перенос не учитываем). если равно нулю, то присваиваем значение В658 регистру R13:R12, и на шаг д) если не равно, то продолжаем с шага д) д) меняем адрес байта с которым работаем. ZH:ZL=ZH:ZL+1, и опять в цикл. с шага 3) 4) как только циклы закончились, сравниваем индекс ZH:ZL с регистром R16:R15. если ZH:ZL меньше чем размер бин-файла входного (R16:R15), то переходим к шагу 1) если ZH:ZL равно (или больше) R16:R15, то заканчиваем работу. В принципе алгоритм простой, там получается определенная последовательность из 13-ти повторяющихся аргументов к функции XOR. Можно сначала и эту маску расчитать, а потом побайтно ксорить в третий байт. Просто много значений, долго и муторно считать, хотелось-бы автоматизировать. ![]() |
|
Создано: 13 октября 2011 20:26 · Поправил: ARCHANGEL · Личное сообщение · #12 Kuzya69 Да какое отношение? Иногда на форум попадают люди, которые не знают, чего они хотят - хотят кого-то озадачить, вот и всё. Поэтому и спросил, чтоб понять, что вы хотите. Никаких лавров. ...бат-файл, или скрипт... Всё зависит от сложности функции, выдающей некие значения, с которым происходит ксор бинарника. З.Ы. О, пока писал, появилось описание функции. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 13 октября 2011 20:47 · Поправил: neomant · Личное сообщение · #13 |
|
Создано: 13 октября 2011 22:43 · Поправил: PE_Kill · Личное сообщение · #14 neomant насколько я понял из описания первая инициализация key = 8658 Kuzya69 почти натив ![]() Code:
Сорсы и exe для masm32 в атаче ![]() ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 13 октября 2011 23:47 · Личное сообщение · #15 Блин, прошу прощения, в самый ответственный момент, винда рухнула. По возможности проверю. Не хочу ничего плохого сказать. Скачал первый атач только запустил, и все. Грузится операционка, рабочий стол и ничего больше открыть нельзя. Короче, пока с другой ПК вышел. Подремонтирую винду и сообщу о результатах. Пардон, первая итеррация В658, не 8658. ![]() |
|
Создано: 13 октября 2011 23:48 · Поправил: Kuzya69 · Личное сообщение · #16 |
|
Создано: 14 октября 2011 00:00 · Личное сообщение · #17 |
|
Создано: 14 октября 2011 00:18 · Личное сообщение · #18 |
|
Создано: 14 октября 2011 00:30 · Личное сообщение · #19 Kuzya69 пишет: можно это как-то при помощи готовых программ Если сама гамма уже вычислена и сохранена в файл, то одно из двух ![]() ![]() ![]() |
|
Создано: 14 октября 2011 00:59 · Поправил: Kuzya69 · Личное сообщение · #20 Kuzya69 пишет: 1) R13=86 Т.е. при входе в цикл из 80h итераций R13:R12 == 8658 Это я прошу прощения, блок схемка всего дампа на бумаге карандашем расписана, в своем почерке не разобрался. В гугле, там есть ответы почти на все вопросы. Просто иногда надо ещё посидеть и подумать. И порой прилично подумать, но обычно оно того стоит. Ладно бы подумать, так сначала еще найти надо то над чем подумать, а то в первый-то раз и сформулировать-то правильно вопрос не знаешь как. Отписываюсь. Я вас ввел в заблуждение. Алгоритм оказался проще. Гамма формируется непрерывно на протяжении всего дампа, не прерываясь на циклах в 80h. Видимо дизассемблер криво отработал, или я где-то ошибся, при упрощениях алгоритма. Спасибо за помощь. gazlan А можно исходник Вашей проги посмотреть. Мне ваш вариант очень понравился. Можно на лету корректировать. Не меняя алгоритма кодировки. Одно неудобно, входной файл является и выходным. Но другие программы тоже помогли. Еще раз спасибо всем. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Подскажите как правильно сделать декодирование бин-файла. |