Сейчас на форуме: vsv1, NIKOLA, r0lka, johnniewalker (+4 невидимых) |
eXeL@B —› Крэки, обсуждения —› Помогите определить метод шифрования. |
Посл.ответ | Сообщение |
|
Создано: 25 июля 2019 22:18 · Поправил: prorokk · Личное сообщение · #1 Всем привет! Есть прога на delphi (была накрыта SF 5, часть данных в базе накрыто TCrypt с этим за 15 дней разобрался...). Осталось: В ней шифруется числовое значение (Ключиком является другое числовое значение). Нашел IDA-ой где расшифровывается, получил такой псевдокод: Code:
Прошу подсказки как определить шифрование, а может кто сталкивался с таким. Если можно объясните что и как считается тут: v33 += (*(v32 + 2 * v39 - 2) - 48) << 3 * (v22 - v39); Отладчиком вижу все значения, считаю в калькуляторе, ответ не сходиться с v33. * это не умножение а ссылка на переменную? Если кто возьмется переписать этот код на что-то более читабельное или рипнуть ASM из IDA за ₽... Приветствую в ЛС |
|
Создано: 25 июля 2019 22:45 · Личное сообщение · #2 |
|
Создано: 26 июля 2019 02:01 · Личное сообщение · #3 ... << 3 * ... Возможно в этой части выражения порядок действий применил не тот. Хз вообще как можно на один только декомпиль полагаться не сверяясь с листингом. ----- 2 оттенка серого | Сообщение посчитали полезным: BlackCode |
|
Создано: 26 июля 2019 07:57 · Личное сообщение · #4 |
|
Создано: 26 июля 2019 08:55 · Поправил: prorokk · Личное сообщение · #5 plutos да именно про это я и говорю.. в С а тем более в С от HexRays не бум бум.. f13nd BlackCode Code:
|
|
Создано: 26 июля 2019 09:04 · Личное сообщение · #6 продолжение: Code:
|
|
Создано: 26 июля 2019 09:11 · Личное сообщение · #7 |
|
Создано: 26 июля 2019 09:26 · Поправил: f13nd · Личное сообщение · #8 Code:
Вот выборка слова по адресу var_14*2 + var_30 - 2, вычитание из него 48 (очевидно преобразование из символа 0..9 в число) и сдвиг на (var_58 - var_14)*3 влево. var_14 очевидно номер символа в строке (начиная с 1), var_30 указатель на строку. ----- 2 оттенка серого |
|
Создано: 26 июля 2019 10:32 · Личное сообщение · #9 GroundHog DiE особо не помог... только сказал что Delphi 2010. Проходил и x3chuns crypto searcher, чего он только не нашел... но все не в той области что разбираю я (хотя это наверно не показатель) про Сишный листинг не знал не знал... Я первый раз) f13nd Спасибо! Теперь попытаюсь это понять и применить... |
|
Создано: 26 июля 2019 16:27 · Личное сообщение · #10 немного <offtop> Code:
вопрос: зачем дельфи так поступает? копирует с увеличением счётчика ссылок, когда в коде просто берётся длина строки? я просто железобетонно уверен, что в исходнике ничего такого нет - это всё компиляторная придурь </offtop> prorokk псевдокод после опускания бессмысленных перетасовок выглядит примерно так Code:
|
|
Создано: 26 июля 2019 18:45 · Поправил: user99 · Личное сообщение · #11 |
|
Создано: 26 июля 2019 19:34 · Поправил: -=AkaBOSS=- · Личное сообщение · #12 user99 пишет: код в стиле а, так копирование строк в нигде больше не используемую переменную перед тем как её длину взять - это такой стиль? ну ок тогда. // оффтоп вышел из-под контроля. user99 Я Вам на больное место наступил штоль? Вопрос был не о том, может ли кодер написать такие грабли, и раскопипастить их три-четыре раза в пределах одной функции - безусловно, кодер может всё. Просто не первый раз встречаю подобные шаблонные конструкции в дельфячьих бинарях, и удивляюсь их избыточности. |
|
Создано: 26 июля 2019 20:17 · Личное сообщение · #13 -=AkaBOSS=-, т.е. все программисты на 100% идеальны и говнокодеров не существует? а может быть у вас не бывает говнокода в ваших проектах? может быть где-то что-то воткнули для отладки, а потом забыли? может быть планировался другой функционал, но его не написали (удалили)? ну да, верю, в идеального программиста |
|
Создано: 27 июля 2019 02:25 · Личное сообщение · #14 -=AkaBOSS=- > в дельфячьих бинарях, и удивляюсь их избыточности. А что удивляться, это же дельфя. Компилер, который используют школьники, что бы собрать апп из говна и палок. При этом не нужно знать ничего, кроме самого скрипта и как его сбилдить. У всех норм прогеров дельф вызывает аллергическую реакцию. ----- vx |
|
Создано: 27 июля 2019 05:00 · Личное сообщение · #15 Тут десятичные числа опорной таблицы для шифрования хранятся в юникод-строке и сам по себе алгоритм страшный как моя жизнь. По теореме эскобара, будь он на цэ написан и скомпилен ржавчиной или еще какой-нибудь перхотью, это ничего бы не изменило. Мы живем в эпоху постпрограммирования, когда программы пишут мышью и все их недостатки компенсируются мощностью проца и объемом памяти, а вы еще чему-то удивляетесь. ----- 2 оттенка серого |
|
Создано: 27 июля 2019 08:28 · Личное сообщение · #16 -=AkaBOSS=- пишет: Я Вам на больное место наступил штоль? Ни в коем случае. Уже очень много раз слышал подобные безапелляционные рассуждения в стиле "делфи - говно" (посмотрите на difexacaw), если задача обосрать делфи и немного возвыситься самому, то все ок, я умываю руки. Если все-таки хочется чутка приблизиться к истине, то я вам высказал свое наблюдение относительно делфи и его кода. При этом я не говорю "делфи - идеальный компилятор", но как показывает практика: говеного скомпилированного кода в нем появляется не чаще, чем в том же с++, и большая часть говна идет от программиста |
|
Создано: 27 июля 2019 11:37 · Поправил: cppasm · Личное сообщение · #17 Внезапно, ты сам и показал что дельфовый компилятор оптимизирует фигово. Все нормальные плюсовые компиляторы при коде с копированием строки в другую только для того чтобы получить длину копии весь этот код выбросят нафиг и возьмут длину оригинала. Даже если программист по какой-то причине написал такой бред. |
|
Создано: 27 июля 2019 12:32 · Личное сообщение · #18 cppasm, резонное замечание о недостаточно полной оптимизации и вычистки мусора за программистом. Но ради интереса взял визуал студио и скомпилил примитивный код Code:
дальше добавил объявление неиспользуемой переменной s2: Code:
дальше ввел ненужное присваивание: Code:
и на выходе получилось 3 бинарника с различным количество вызываемых функции для обработки строк, хотя вроде как бинарники должны были быть идентичными, т.к. сишный компилятор должен все ненужное вырезать. Сборка релизная с включенной оптимизацией по минимальному размеру и пробовал оптимизацию по скорости. Может там еще какие-то особые настройки, которые позволяют убирать избыточный код, но я такие не видел. |
|
Создано: 29 июля 2019 11:16 · Поправил: prorokk · Личное сообщение · #19 f13nd -=AkaBOSS=- Большое спасибо за Ваше участие! Вот еще часть которую не могу понять Code:
sub_16EADC0(long double encrypted_val, int a2, int a3, __int16 a4) на входе у нее: encrypted_val = 85.482331014442110018 a2 = 0 (ebp+14) a3 = 0x84000000 (ebp+18) a4 = 0x4004 (ebp+1C) a3,a4 появляются после: .text:0135859B fstp tbyte ptr [esp+0FCh+var_FC] ; х.з. |
|
Создано: 29 июля 2019 12:05 · Поправил: int_256 · Личное сообщение · #20 user99 пишет: Ни в коем случае. Уже очень много раз слышал подобные безапелляционные рассуждения в стиле "делфи - говно" (посмотрите на difexacaw), если задача обосрать делфи и немного возвыситься самому, то все ок, я умываю руки. Если все-таки хочется чутка приблизиться к истине, то я вам высказал свое наблюдение относительно делфи и его кода. При этом я не говорю "делфи - идеальный компилятор", но как показывает практика: говеного скомпилированного кода в нем появляется не чаще, чем в том же с++, и большая часть говна идет от программиста у дельфе всегда финальный код был куском неоптимизированного говна. Даже 6 вижуал студия с прошлого века генерировала лучше код, чем дельфи щас. Дельфе всегда был любим в постсовке школоло, преподами-старперами и пенсионерами, за то что можно было прогать мышкой и из говна и палок наляпать прототип за час. Жирный бинарь хелоуворлд был минимум в 1,5МБ длиной то что тупой компилятор прикручивал всю VCL и не мог собрать граф зависимостей и убрать мертвый код |
|
Создано: 29 июля 2019 12:18 · Личное сообщение · #21 int_256 Перестаньте ерунду писать и поднимать флеймы 20 летней давности. У людей с прямыми руками и бинари были тонкие и даже драйвера на делфях писали. ----- старый пень | Сообщение посчитали полезным: SReg |
|
Создано: 29 июля 2019 12:32 · Личное сообщение · #22 prorokk пишет: Меняем формат на 3.3e1 грузим в ST0 А как это написать в Delphi? желательно одной строкой) Code:
В более менее свежих делфи можешь написать код, поставить на него бряк и когда выполнение остановится, то нажать Ctrl+Alt+C - увидишь асм-код, иногда помогает при исследовании. |
|
Создано: 29 июля 2019 13:42 · Поправил: prorokk · Личное сообщение · #23 |
|
Создано: 30 июля 2019 11:26 · Поправил: prorokk · Личное сообщение · #24 |
|
Создано: 30 июля 2019 13:51 · Поправил: -=AkaBOSS=- · Личное сообщение · #25 насколько мне известно, инструкция bt напрямую никаким оператором не генерится. скорее всего в оригинале было сравнение байтовой переменной с диапазоном или набором констант, а уж компилятор оптимизировал это до битовой таблицы. надо посмотреть что находится по адресу 178B23C, размер карты 256/8 = 0х40 байт prorokk пишет: если первый параметр это ссылка на arry тогда там: в приведённом отрывке установлены биты с 0х30 по 0х37 включительно (символы '0'-'7'). этот диапазон можно закодировать тремя битами, и это соответствует тому что там дальше в алгоритме происходит. prorokk пишет: eax = 0x38 однозначно даст в результате ZF=1 |
|
Создано: 30 июля 2019 16:18 · Поправил: prorokk · Личное сообщение · #26 |
|
Создано: 30 июля 2019 19:37 · Поправил: cppasm · Личное сообщение · #27 -=AkaBOSS=- пишет: однозначно даст в результате ZF=1 BT изменяет CF, ZF вообще не трогает. -=AkaBOSS=- пишет: насколько мне известно, инструкция bt напрямую никаким оператором не генерится. Булева арифметика же. Code:
эквивалентно по сути Code:
при eax=0x38 Code:
dword_178B23C - указатель на массив байт, если брать для массива dword надо пересчитать индекс и маску. |
|
Создано: 31 июля 2019 06:28 · Поправил: -=AkaBOSS=- · Личное сообщение · #28 cppasm пишет: BT изменяет CF, ZF вообще не трогает. моя ошибка.. почему-то всегда казалось что оно работает как AND для конкретно взятого бита. не доводилось пользоваться cppasm пишет: эквивалентно по сути суть-то ясна, только вот вряд ли кто-то такое наворотил на дельфе особенно исходя из общей "продвинутости" алгоритма prorokk пишет: а можно на пальцах объяснить: в приведённом отрывке установлены биты с 0х30 по 0х37 включительно (символы '0'-'7'). командой считывается определённый бит из памяти. в качестве индекса бита используется символ из строки. если символ находится в диапазоне '0' >= x <= '7', будет считана единица, в остальных случаях 0 не нужно заморачиваться на эту таблицу, чёрт с ней. проверяйте непосредственно цифры: Code:
проверка на 0х100 не нужна, это ограничитель unsigned char чтоб по таблице не пролететь |
eXeL@B —› Крэки, обсуждения —› Помогите определить метод шифрования. |