Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Подскажите как правильно сделать декодирование бин-файла.
Посл.ответ Сообщение

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 13 октября 2011 03:09
· Личное сообщение · #1

Суть в том, что имеется один файл (входной), из него получаем другой(выходной), путем операции XOR к каждому байту входного и константы полученной в результате определенной функции.
Попробую проще написать.
Значит есть входной бин-файл. Берем первый байт из входного файла, вычисляем функцию, получаем определенный байт. Делаем XOR между двумя этими байтами. Результат (байт) помещаем на место первого байта выходного файла.
Все то-же самое проделываем и для второго байта и так далее, пока не получим полный выходной файл. Он естественно будет равен по размеру входному.
Интересует вопрос, как это проделать в автоматическом режиме? Не пересчитывая на калькуляторе каждый раз, каждый байт.
Может подскажите порядок действий. Как это делается. За ранее прошу прощения, я в правду новичек.



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 13 октября 2011 04:49 · Поправил: SReg
· Личное сообщение · #2

Kuzya69 пишет:
пересчитывая на калькуляторе каждый раз, каждый байт.

ужснах

Kuzya69
читаешь первый файл например в массив, потом в цикле ксоришь, и пишешь потом в файл, делов то...




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 октября 2011 07:33
· Личное сообщение · #3

SReg он видимо не знает ни одного языка программирования. Kuzya69 если так то хотя бы бейсик выучи, делов на 2 часа.

-----
Yann Tiersen best and do not fuck




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 13 октября 2011 09:19
· Личное сообщение · #4

Kuzya69 пишет:
пересчитывая на калькуляторе

Интересно если б файло был пару мег, чтоб ты делал?)

прога в аттаче, сорцы там же...

92df_13.10.2011_EXELAB.rU.tgz - Project1.rar




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 13 октября 2011 10:28
· Личное сообщение · #5

Читал и плакал
Интересно, а как человек, не знающий ни одного языка программирования, допёр, что там ксор, функция некая вычислят какие-то байты и т.д.?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 13 октября 2011 11:48
· Личное сообщение · #6

Kuzya69 пишет:
Берем первый байт из входного файла, вычисляем функцию, получаем определенный байт. Делаем XOR между двумя этими байтами. Результат (байт) помещаем на место первого байта выходного файла.

А Где эта функция ?
На словах уже всё растолковали.
На край, бери Питон и пиши скрипт с элементраным циклом на длинну файла, а в цикле сделаешь свои махинации.



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 13 октября 2011 13:33
· Личное сообщение · #7

Читал и плакал
Интересно, а как человек, не знающий ни одного языка программирования, допёр, что там ксор, функция некая вычислят какие-то байты и т.д.?

Да просто, дизассемблировал прошивку микроконтроллера. Нашел цикл по перекодировке входной последовательности, в ту, что потом пишется во флеш. А вот не знаю как это сделать под виндой, для АВР-ов могу написать, на асме. А вот с виндой не владею, поэтому и просил, думая что можно это как-то при помощи готовых программ(типа ВИН-Хекса, ХЕКС-Воркшопа....) организовать, написав какой-нибудь бат-файл, или скрипт. Как написать саму программу по отношению к массиву я понимаю, но вот как организовать связь с бин-файлом и этой программой не знаю. Поэтому и хотел спросить. Больше всего не понятно, почему ко мне такое отношение? Не хотите помогать, не пишите. Или лавры героя крякерства покоя не дают?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 октября 2011 14:18
· Личное сообщение · #8

Распиши алгоритм подробно, кто нибудь из местных студентов сваяет. Вон SReg уже набросал.

-----
Yann Tiersen best and do not fuck




Ранг: 25.6 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 13 октября 2011 15:00
· Личное сообщение · #9

Kuzya69 пишет:
думая что можно это как-то при помощи готовых программ(типа ВИН-Хекса, ХЕКС-Воркшопа....) организовать, написав какой-нибудь бат-файл, или скрипт

можно, с учетом что скрипты винхекса поддерживают простейшие мат операции. примеров и справки не достаточно и нужен готовый шаблон что ли?



Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 13 октября 2011 18:45
· Личное сообщение · #10

Kuzya69 пишет:
Нашел цикл по перекодировке входной последовательности

Ну так приведи его !
Воду в ступе толчем.
Был Вопрос Как. Ответов Куча.
Выкладывайте функцию обработки Байта и приблизительный АЛГО работы проги !



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 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. Можно сначала и эту маску расчитать, а потом побайтно ксорить в третий байт. Просто много значений, долго и муторно считать, хотелось-бы автоматизировать.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 13 октября 2011 20:26 · Поправил: ARCHANGEL
· Личное сообщение · #12

Kuzya69
Да какое отношение? Иногда на форум попадают люди, которые не знают, чего они хотят - хотят кого-то озадачить, вот и всё. Поэтому и спросил, чтоб понять, что вы хотите. Никаких лавров.

...бат-файл, или скрипт...
Всё зависит от сложности функции, выдающей некие значения, с которым происходит ксор бинарника.

З.Ы. О, пока писал, появилось описание функции.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 13 октября 2011 20:47 · Поправил: neomant
· Личное сообщение · #13

Code:
  1. char buf[0x3e00];
  2. unsigned short key;
  3. for (int i = 0; i < sizeof(buf); ++i, key <<= 1;) {
  4.   if ((% 16) == 0) key = 0xB658;
  5.   buf[i] ^= (char)(key >> 8);
  6. }


-----
Следуй за белым кроликом





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 октября 2011 22:43 · Поправил: PE_Kill
· Личное сообщение · #14

neomant насколько я понял из описания первая инициализация key = 8658
Kuzya69 почти натив :
Code:
  1. DecryptBuffer PROC USES esi edi lpBuffer :DWORD
  2.          _ZH_ZL   EQU EAX
  3.          _R13_R12         EQU DX
  4.          _R13       EQU DH
  5.          _R16_R15         EQU EDI
  6.          
  7.          mov         ESI, lpBuffer
  8.          mov         _R16_R15, BufSize
  9.          mov         _ZH_ZL, 0000h
  10.          mov         _R13_R12, 0B658h
  11.   @step1:
  12.          mov         _R13, 86h
  13.          mov     ecx, 80h
  14.   @loop_80:
  15.          xor         BYTE PTR [ESI + _ZH_ZL], _R13
  16.          shl         _R13_R12, 1
  17.          cmp         _R13, 0
  18.          jne         @next_byte
  19.          mov         _R13_R12, 0B658h
  20.   @next_byte:
  21.          add     _ZH_ZL, 1
  22.          loop  @loop_80
  23.          cmp     _ZH_ZL, _R16_R15
  24.          jb       @step1
  25.          ret
  26. DecryptBuffer ENDP


Сорсы и exe для masm32 в атаче

18d4_13.10.2011_EXELAB.rU.tgz - kuzya69.zip

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: Kuzya69

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 13 октября 2011 23:47
· Личное сообщение · #15

Блин, прошу прощения, в самый ответственный момент, винда рухнула. По возможности проверю. Не хочу ничего плохого сказать. Скачал первый атач только запустил, и все. Грузится операционка, рабочий стол и ничего больше открыть нельзя. Короче, пока с другой ПК вышел. Подремонтирую винду и сообщу о результатах.
Пардон, первая итеррация В658, не 8658.



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 13 октября 2011 23:48 · Поправил: Kuzya69
· Личное сообщение · #16

А про обиды, тоже извините! Просто первую тему создал, так послали чуть не к черту. Ей богу даже не знаю как вы сами учитесь. Где информацию берете?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 октября 2011 00:00
· Личное сообщение · #17

В гугле, там есть ответы почти на все вопросы. Просто иногда надо ещё посидеть и подумать. И порой прилично подумать, но обычно оно того стоит.
З.Ы. Пользуйся кнопкой "Правка", не создавай сообщения подряд.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 14 октября 2011 00:18
· Личное сообщение · #18

Kuzya69 пишет:
Пардон, первая итеррация В658, не 8658.


Смотри:
Kuzya69 пишет:
Начало (инициализация)
*** R13:R12=В658

Т.е. при начале работы алгоритма R13:R12 == B658

Kuzya69 пишет:
1) R13=86

Т.е. при входе в цикл из 80h итераций R13:R12 == 8658

-----
Yann Tiersen best and do not fuck





Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 14 октября 2011 00:30
· Личное сообщение · #19

Kuzya69 пишет:
можно это как-то при помощи готовых программ


Если сама гамма уже вычислена и сохранена в файл, то одно из двух


4c36_13.10.2011_EXELAB.rU.tgz - xor.rar

| Сообщение посчитали полезным: Kuzya69

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 14 октября 2011 00:59 · Поправил: Kuzya69
· Личное сообщение · #20

Kuzya69 пишет:
1) R13=86
Т.е. при входе в цикл из 80h итераций R13:R12 == 8658

Это я прошу прощения, блок схемка всего дампа на бумаге карандашем расписана, в своем почерке не разобрался.
В гугле, там есть ответы почти на все вопросы. Просто иногда надо ещё посидеть и подумать. И порой прилично подумать, но обычно оно того стоит.
Ладно бы подумать, так сначала еще найти надо то над чем подумать, а то в первый-то раз и сформулировать-то правильно вопрос не знаешь как.




Отписываюсь. Я вас ввел в заблуждение. Алгоритм оказался проще. Гамма формируется непрерывно на протяжении всего дампа, не прерываясь на циклах в 80h. Видимо дизассемблер криво отработал, или я где-то ошибся, при упрощениях алгоритма. Спасибо за помощь.
gazlan
А можно исходник Вашей проги посмотреть. Мне ваш вариант очень понравился. Можно на лету корректировать. Не меняя алгоритма кодировки. Одно неудобно, входной файл является и выходным.
Но другие программы тоже помогли. Еще раз спасибо всем.


 eXeL@B —› Вопросы новичков —› Подскажите как правильно сделать декодирование бин-файла.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати