Русский / Russian English / Английский

Сейчас на форуме: galenkane (+7 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Крэки, обсуждения —› CrackMe 3
Посл.ответ Сообщение


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 4 декабря 2006 04:52 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #1

наконец-то нашёл время и дописал...

Значит так:
цель - найти валидную пару под своё имя или пропатчить (первое лучше)
не паковано, написано на дельфи 7 (не пинать сам всё знаю )
для среднего уровня.

что интересного? реализовал в этом крекми потчи всё что знаю единственное
антиотладку не стал делать... (т.к. сообщения, типа "деббагер детектед" тока раздражают) Ну вот вроде бы и всё, оставил несколько лазеек, да и строки там не пошифрованы удачи!

{ Атач доступен только для участников форума } - CrackMe3.zip


Ранг: 631.1 (!)
Статус: Участник
Автор VB Decompiler

Создано: 4 декабря 2006 09:28 New!
Цитата · Личное сообщение · #2

Открываем сорцы DeDe, находим модуль DeDe Classes в нем ищем код:

15C, $160
: if GlobCBuilder then Result:='BCB6?'
else Result:='D6';

Меняем BCB6? на D7 и перекомпиляем.
Теперь крякмис декомпиляется и можно смотреть код


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 4 декабря 2006 10:00 New!
Цитата · Личное сообщение · #3

молоток) но можно было и проще... это так, от самых маленьких, но деде особо не поможет...
а вот ида


Ранг: 631.1 (!)
Статус: Участник
Автор VB Decompiler

Создано: 4 декабря 2006 10:09 New!
Цитата · Личное сообщение · #4

Кому охота это исследовать в аттаче events.txt для IDA и код после dede

{ Атач доступен только для участников форума } - CrackMe3.exe.rar


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 4 декабря 2006 11:17 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #5

да лан вам) ну хоть какие-то наработки выложите, я подскажу как дальше быть...
а то просмотров куча, а инфы пока 0,1

Ранг: 22.1 (новичок)
Статус: Участник

Создано: 4 декабря 2006 11:47 · Поправил: Balthasar_magus New!
Цитата · Личное сообщение · #6

Hellspawn

короче

рег коде не меньше 11 char

1) дальше контрольная сумма по нейму
2) два "-"
3) последние 3 char от нэйма и сравнивается с регкодом

все проверки прошел, застрял на мессаге о регистрации

name:Balthasar_ma
regcode: 7A29EB85-2764-63B

"2764 " отвечает за рег мессагу

дальше "2764" имулятся,хорятся и должно быть valid address где мессага зашифрована или функция которая эму мессагу расшифровывает


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 4 декабря 2006 11:54 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #7

Balthasar_magus

молодец
мессага от 0450000 до 0460000
ну последний рывок остался, очень близко...

в принципе дальше будет самое интересное.. если ты понял принцип как выводились плохие мессаги,
то дальше разберёшься... (там массивчик есть не обычный)

з.ы. если добъёшь скинь мне в пм поздравительную мессагу тут не пости

Ранг: 22.1 (новичок)
Статус: Участник

Создано: 4 декабря 2006 13:10 New!
Цитата · Личное сообщение · #8

Hellspawn

в проге должна появится новая ф-ция мессаги или заменить уже существующие?


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 4 декабря 2006 13:13 New!
Цитата · Личное сообщение · #9

не только мессага, там ещё будет текст регистеред...
она есть щас в файле

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 5 декабря 2006 04:38 New!
Цитата · Личное сообщение · #10

Hellspawn

Короч вот что я нарыл по этому крэкми:

Серийный номер имеет вид: XXXXXXXX-XXXX-XXX
A B C

1) По адресу 00454F88 начинается первая функция проверки

2) Часть А проверяется по адресу 00455238
( она равна xor Dword ptr ss:[ebp-8],1357912h ) у меня = 008C2177

3) Часть С проверяется по адресу 004552E0
( она равна значению в [EBP-38]) у меня = 3E0

4) Часть B разбивается на 2 части младшую и старшую

Старшая часть должна быть от 01 до FF, она возводится в куб и пишется в [458C70],
Младшая часть должна быть от 01 до 0F, она без изменений записывается в [458C74]

5) Если все что выше совпало, то переходим ко 2 проверке - более сложной

Начинается по адресу 455955:

по адресу 00458С30 находится массив из 0F чисел ( назовем его mas)

Затем

mov EAX,mas[458С74] -> в 458С74 - наша младшая часть B

const_1 = xor EAX,[458C70] -> ксорим eax со старшей частью B в кубе

const_2 = xor [458c70],57A9357h -> ключ для расшифровки

в EAX - должен получится адрес какой-то функции (в перделах от 00450000 до 00460000),

которую мы должны расшифровать и туда перейти, но вот вопрос какой адрес???

Вот алгоритм расшифровки:

MOV DWORD PTR SS:[EBP-18],1
MOV EAX, const_1
MOV EAX,DWORD PTR DS:[EAX] -> читаем 4 байта из [const_1]
XOR EAX, const_2 -> ксорим с const_2
MOV EDX, const_1
MOV DWORD PTR DS:[EDX],EAX -> пишем 4 байта в [const_1]
ADD const_1, 4 -> наращиваем const_1 на 4
INC DWORD PTR SS:[EBP-18]
CMP DWORD PTR SS:[EBP-18],1A
JNZ SHORT CrackMe3.00454A17

После такого цикла должно быть расшифровано 4*1А = 68h байт функции, после этого мы
переходим в расшифрованную функцию и там наверное должны нас поздравить.....

Но вот проблема я никак не могу подобрать правильную часть B кода(чтобы расшифровать процедуру)

name: RSI
serial: 008C2177-XX0X-3E0

P.S. Похожую замуту применил bad_guy в своем crackme1


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 5 декабря 2006 06:38 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #11

мда всё самое сложное раскопал осталось то...

RSI пишет:
по адресу 00458С30 находится массив из 0F чисел ( назовем его mas)


вот к этому присмотрись, почти все dword'ы в этом массиве не случайны...
и там есть поксоренный адресс заветной процедуры, которую можно найти без брута...

Ранг: 24.9 (новичок)
Статус: Участник

Создано: 5 декабря 2006 06:57 New!
Цитата · Личное сообщение · #12

Hellspawn пишет:
осталось то...

Ага 250 вариантов, пальцы сломаешь.

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


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 5 декабря 2006 07:32 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #13

я скажу так, дельфи не откомпилит процедуру если на неё нет ссылок)) эт раз...
диапозон известен, есть массив, половина элементов из него используется
значит 15-7 остаётся не так много вариантов

у мну встречный вопросл, отлаживал сосулькой или олькой?

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 5 декабря 2006 07:50 New!
Цитата · Личное сообщение · #14

Hellspawn
В этом массиве постоянны элементы - 1,2,3,5,7,9

Причем 1,3,5,7,9 - это указатели "плохие" мессаги,

Остается 2 = 454С24

Буду дальше копать...

Ранг: 24.9 (новичок)
Статус: Участник

Создано: 5 декабря 2006 07:53 New!
Цитата · Личное сообщение · #15

Hellspawn пишет:
у мну встречный вопросл, отлаживал сосулькой или олькой?


Дельфи отладчик, только второй поток немного мешает.

Ret-оф почему-то больше ста.


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 5 декабря 2006 08:05 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #16

вообще в исходном была 2 потока и антиотладка, но я подумал это слишком и убрал...
смотрите осторожнее, попробуйте колч без запуска отладчика, может не подойти

RSI пишет:
Остается 2 = 454С24


адресс поксорен) главное узнать номер ячейки... дальше будет легче

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 5 декабря 2006 08:05 New!
Цитата · Личное сообщение · #17

Xserg
Я сначала думал что вся процедура поксорена

Прошел весь код от 450000 до 460000 и ничего подозрительного не нашел ( ни каких левых инструкций),
конечно мож где пропустил...

Ты на ret не сморти, я думаю что там хитрее сделано

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

Создано: 5 декабря 2006 08:42 New!
Цитата · Личное сообщение · #18

Name:Triton
Code:13206481-0002-7C6
Status: Reg data checking...


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 5 декабря 2006 08:47 New!
Цитата · Личное сообщение · #19

мой косяк одну проверку потёр нечаянно, но сообщения то никакого нету
давай дальше...

Ранг: 24.9 (новичок)
Статус: Участник

Создано: 5 декабря 2006 09:15 New!
Цитата · Личное сообщение · #20

RSI пишет:
Ты на ret не сморти, я думаю что там хитрее сделано


Я не стал брать частный случай, а
скопировал дамп на диск в файл с 450000 по 460000 , далее по алгоритму программы Hellspawn хорю все возможные места по очереди, и ищу похожее на код инструкции
Например xor eax,eax в 5 местах у Hellspawn случайность. Ввожу пароли вручную ,мог и ошибиться.

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 5 декабря 2006 23:13 New!
Цитата · Личное сообщение · #21

Xserg
Во во! я почти тож самое делаю... тока ничего не получается, ручками дошел уже до 30
(Там константа на должна быть большой походу иначе вылазит за границы 450000-460000)

Hellspawn Зря ты его в начале недели выложил... мля и посмотреть охота и времени все мало!!!

Кста насчет Status: Reg data checking... у меня такая штука при 5 вариантах вылазит, но енто не то что надо.

Можно былобы брутануть, но надо знать какое должно быть расшфрованное начало этой функции, а так мне кажется ничего не получится - тока ручками...

По коду с 450000 по 460000 я нашел ну наверное 8 - 10 место где может бть эта шняга, но где именно начнется функция эт ВОПРОС!!!

Так что Hellspawn ты конечно молодес, но ты садист!!!


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 6 декабря 2006 02:32 New!
Цитата · Личное сообщение · #22

RSI пишет:
Кста насчет Status: Reg data checking... у меня такая штука при 5 вариантах вылазит, но енто не то что надо.


вместе с антиотладкой потёр 1 процедуру))) ну лан вот это очень сильно должно
помочь... главное индекс массива узнать

If (dwXorKey <> 0) and (bNumber <> 0) and (n = REG_VALID) then
begin
dw3:=RegFunc[bNumber] xor dwXorKey;
dw2:=dwXorKey xor 91919191;
DexoringReg(POINTER(dw3),dw2);
end;

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 6 декабря 2006 03:17 New!
Цитата · Личное сообщение · #23

Hellspawn

Эт кусок и так был понятен, тут даже вопрос не о индексе массива а именно о dwXorKey какой должен быть - эт самое тяжолое!

P.S. но пока не говори, будем пробовать сами

Ранг: 24.9 (новичок)
Статус: Участник

Создано: 7 декабря 2006 11:00 New!
Цитата · Личное сообщение · #24

Hellspawn
Ай риал год кракер.


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 7 декабря 2006 11:05 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #25

Xserg пишет:
Ай риал год кракер.


мои поздравления, у нас есть первый, взломавший...
было интересно, сложно?

Ранг: 260.2 (наставник)
Статус: Участник

Создано: 7 декабря 2006 11:13 New!
Цитата · Личное сообщение · #26

HellSpawn, давай колись.
Уже надоел твой crackme.

Ранг: 24.9 (новичок)
Статус: Участник

Создано: 7 декабря 2006 11:17 New!
Цитата · Личное сообщение · #27

Hellspawn пишет:
было интересно, сложно?


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

Понравилось.

Ранг: 260.2 (наставник)
Статус: Участник

Создано: 7 декабря 2006 11:38 New!
Цитата · Личное сообщение · #28

Xserg пишет:
Не очень сложно было написать программу, которая генерила все возможные комбинации


Переберал...
А научно?

Ранг: 24.9 (новичок)
Статус: Участник

Создано: 7 декабря 2006 12:27 New!
Цитата · Личное сообщение · #29

sniperZ пишет:
А научно?

Алгоритм моей программы которая нашла нужный ключ.

Входные данные:
Дамп памяти программы CrackMe3.exe c $450000 по $460000 после пустого нажатия [RegMe =)]

var
buf:array[0..$10000] of byte;
bufw:array[0..$10000 div 4] of dword absolute buf;
fbuf:file;
i,j,x,y,d,l,Z,k:dword;
pb:^byte;
pd:^dword;
for i:=1 to 15 do begin
for j:=1 to $fff do begin
y:=j*j*j;
x:=bufw[($8C30 div 4) + i];
x:= x xor y;
y:=y xor 91919191;
if y<>91919191 then
if (x>=$450000) and (x<=$460000) then begin
for L:=0 to $1a-1 do begin
dword(pd):=dword(addr(buf[L*4]))+(x-$450000);
pd^:=pd^ xor y;
end;
тут я искал в полученном коде прямое обращение к сегменту $0045xxxх
из нужного участка кода их было 4- 0045487B,00454886,00454890,0045489B
считайте это подсказкой.
Но это мне повезло в идеале такое шифрование взломать не возможно.
end;
 eXeL@B —› Крэки, обсуждения —› CrackMe 3

Видеокурс ВЗЛОМ