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

 eXeL@B —› Программирование —› Что это за алгоритм?
Посл.ответ Сообщение

Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 18 июля 2012 20:21 · Поправил: Vovan666
· Личное сообщение · #1

Наткнулся на игру (кому интересно jigs@w puzzle 2), без ключа там Blowfish хрен сбрутишь, но меня интересует другое.
Есть процедура, чем-то напомнила Base32, но явно не оно.
Делал через брутфорс, вроде генерируется, но все-равно может зависнуть или не правильно сбрутить.
Можно-ли как-то обратить этот алгоритм?

Сделал простенький очищенный пример (см. аттач)
Code:
  1. 004010CD  |.  68 48324000                                 PUSH base.00403248 ;(длинна выходного хэша-1)
  2. 004010D2  |.  68 58324000                                 PUSH base.00403258 ;(хэш)
  3. 004010D7  |.  68 34304000                                 PUSH base.00403034  ;(входная строка)
  4. 004010DC  |.  BB 0C000000                                 MOV EBX,0C
  5. 004010E1  |.  E8 75010000                                 CALL base.0040125B


Что самое интересное внутренняя функция
Code:
  1. 0040128E  |> \6A 05                                       |PUSH 5
  2. 00401290  |.  50                                          |PUSH EAX
  3. 00401291  |.  57                                          |PUSH EDI                                                      ; ntdll.7C910228
  4. 00401292  |.  55                                          |PUSH EBP
  5. 00401293  |.  E8 C7FEFFFF                                 |CALL base.0040115F  ; эта функция


Используется в игре несколько раз с разным количеством раундов(PUSH 5).

PS. Защита в игре это пример девелоперам как надо делать защиту.

a889_18.07.2012_EXELAB.rU.tgz - base.exe




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 18 июля 2012 21:01
· Личное сообщение · #2

насколько я понял, прога действует так:
берёт символ из строки
получает индекс этого символа в своём алфавите
и сохраняет этот индекс в хэш по пять бит на индекс



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 18 июля 2012 21:08 · Поправил: Vovan666
· Личное сообщение · #3

-=AkaBOSS=-
Поподробнее




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 18 июля 2012 21:22 · Поправил: -=AkaBOSS=-
· Личное сообщение · #4

строка для примера: GNLKVWKZ7VTS
алфавит: ABCDEFGHJKLMNPQRSTUVWXYZ23456789

индексы символов строки согласно алфавиту в hex и bin:
G - 0x06 00110
N - 0X0C 01100
L - 0x0A 01010
K - 0x09 01001
V - 0x13 10011
W - 0x14 10100
K - 0x09 01001
Z - 0x17 10111
7 - 0x1D 11101
V - 0x13 10011
T - 0x11 10001
S - 0x10 10000

объединяем:
100001000110011111011011101001101001001101001010100110000110

разбиваем по восемь:
1000 01000110 01111101 10111010 01101001 00110100 10101001 10000110

переворачиваем и переводим в хекс:
0x86, 0xA9, 0x34, 0x69, 0xBA, 0x7D, 0x46, 0x08

хэш получен!

зы. сталкивался с похожей шнягой, когда ковырял BlueBerry Flashback

/ADD
ARCHANGEL пишет:
это и не хэш, ибо обратим

Aбсолютно верно! Это просто такой компактный способ хранения данных
По сути напоминает ASCII7



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 18 июля 2012 21:23 · Поправил: VodoleY
· Личное сообщение · #5

Vovan666 я тут бился об стену головой. учти что бейс есть не только 32
З.Ы. у бейса 32 пару тройки алфовитов
http://en.wikipedia.org/wiki/Base32

0040128E |> \6A 05 |PUSH 5
имхо разрядность битовая 2^5=32 алго должен быть штатный

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





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

Создано: 18 июля 2012 21:27
· Личное сообщение · #6

Из описания -=AkaBOSS=- следует, что это и не хэш, ибо обратим. Ведь можно перевернуть обратно, перевести в двоичную систему, объединить октеты и разделить на строки по пять символов, далее эти короткие строки переводим в число, используем числа как индескы для алфавита, восстанавливая тем самым входную строку.

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




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 18 июля 2012 21:32 · Поправил: VodoleY
· Личное сообщение · #7

ARCHANGEL пишет:
Из описания -=AkaBOSS=- следует, что это и не хэш, ибо обратим.

а все бейсы обратимы по определению. это не хеш, это видимо один из алфовитов бейс32
З.Ы. все бейсы 32 отличаюца алфовитом где L l заменена на 1 0 O тоже заменены и там еще пару символов под разным соусом выкинуты. аля для читаемости хеша, и чтоб было труднее попутать символы

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 19 июля 2012 00:07 · Поправил: FrenFolio
· Личное сообщение · #8

Сейчас ради интереса глянул в отладчике, - это стандартный алгоритм Base32, только с собственной таблицей символов. Единственный нюанс, сбивающий с толку, состоит в том, что здесь не сопоставляется каждому 5-битному блоку в бинарном виде (0d (=00000b) - это 1-ый символ в таблице, а 31d (=11111b) - последний) соответствующий ему по индексу символ из таблицы, а результат будет форматированным - в виде числа 64 бита длиной, без строкового представления.
Для примера выше, из массива 8 hex-чисел = {0x08, 0x46, 0x7D, 0xBA, 0x69, 0x34, 0xA9, 0x86} получаем строку "STV7ZKWVKLNG". Поэтому для написания обратной функции (Decrypt Base32) после ее вызова с этим массивом байт (восстановления исходной строки 12 символов) получившуюся строку еще предстоит переписать с обратным порядком символов. Вот, для наглядности:



Vovan666 пишет:
Используется в игре несколько раз с разным количеством раундов(PUSH 5).

А разное количество раундов тут говорит о том, что будет использоваться другое основание для расчета (там универсальная функция). То есть в общем случае так: Base2^X, где X - это число раундов (точнее, размер блока, в битах, для определенного основания).

-----
Программист SkyNet




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 19 июля 2012 09:26
· Личное сообщение · #9

FrenFolio
Тьфу-ты блин, сколько раз эту прогу запускал, на Custom table ума не хватило.
Всем спасибо!


 eXeL@B —› Программирование —› Что это за алгоритм?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати