Сейчас на форуме: Slinger, Rio (+5 невидимых)

 eXeL@B —› Основной форум —› как покрывают быков - обсудим тему?!
<< . 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 08 апреля 2006 16:38
· Личное сообщение · #1

вот один забавный прием взлома.
1) прогоняем программу через трейсер, вводим правильный параль (не окончена дата триала)
2) прогоняем программу через трейсер, вводим _не_правильный параль (окончена дата триала)
3) получаем два лога трейсера, которые в чем-то схожи, а в чем-то различны

методика взлома сводится к поиску различий:

* решение для "богатых"
===================
берем любой coverage-инструмент
(например, плагин для ида, www.hexblog.com/2006/03/coverage_analyzer.html)
или numega coverage или другие инструменты для измерения покрытия.
сравниваем покрытие до и после оконочания триала,
делаем выводы, мотаем на ус.

* решение для "бедных"
==================
берем ollybdg, грузим программу (допустим demo-simple.exe),
говорим debug -> open or clear trace,
view -> run trace;
F10 -> log to file;
CTRL-11,
и дождавшись "enter password" вводим _не_ правильный прароль типа fuck off

теперь нажимаем Ctrl-F2 для рестарта дебагера,
говорим view -> run trace;
F10 -> clore file
F10 -> log to file;
CTRL-11,
и дождавшись "enter password" вводим правильный прароль типа nezumi
говорим view -> run trace;
F10 -> clore file

ок. мы получили два файла,
пусть это будет 1.log и 2.log.

* как сравнивать файлы
==================
берем утилиту windiff (входит в ms vc и еще хрен знает куда),
выбираем файлы, говорим [expand]
и жем F8 для поиска изменнений. вот, смотрите, что мы нашли:
(см. аттач). это и есть тот условный переход, который рулит ;)))


в отсуствии windiff (ну что за срань?! юниховый diff намного лучше)
с некоторой черезжопицей файлы можно сравнивтаь и FC.EXE.

а вообеще, но "науке" надо написать несложную программу,
которая берет EIP адреса, пройдеденные файлови ложит их в базу
(для ускорения поиска можно использовать двоичное дерево),
а затем показывает какие адреса _НЕ_ совпадают в обоих файлах.

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

критика, замечания, дополнения - только приветствуются





ff2b_08.04.2006_CRACKLAB.rU.tgz



Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 08 апреля 2006 22:01
· Личное сообщение · #2

Bad_guy
по поводу jx.
были у меня схожие идеи. и как ни странно на старых программах они рулили ;)
опять-таки через трассер.
1) если бряк выполнился более одного раза - это цикл, не трогаем его
2) если бряк не выполнился, смотрим куда он позывает (условно обозначает этот код trgt)
3) если trgt был покрыт, этот jx отбрасывается
4) оставшиемся jx - подвергается экспериментированию.

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


но сейчас стало хуже. сейчас стало встречается куча
call eax, где если предварительно грузиться либо из:
"хорошей" либо из "плохой" процедуры...

и такой метод стал бесполезен...




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

Создано: 08 апреля 2006 23:27
· Личное сообщение · #3

А я даже пытался писать свой трейсер. Обрабатывая листинг windasm-а выковыривал все адреса jx с интересующего момента, далее расставлял int3 и потом анализировал путь программы. Предполагал использовать для борьбы с триалами а так же для обнаружения разницы при вводе пароля разной длины и содержания. Даже наивно полагал, что на одной из 10 программ может получится подобрать пароль перебирая по одному символу и смотря на реакцию трейсера. По типу того как сейфы в фильмах вскрывают прослушивая характерный щелчок при проходе нужной цифры...
У всех кто слышал всю эту идею это вызывало только смех... Сейчас мне особенно приятно, что такой уважаемый человек успешно пользуется похожим методом.



Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 08 апреля 2006 23:33
· Личное сообщение · #4

elraton
Хочу рассказать сразу на грабли, которые изначально не видать при таком способе взлома.
1. Это проги с рандомными значениями, которые например генерят случайную строку при выводе на экран: программы напоминалки и т.п.
2. Огромные циклы, которые нередко встречаются в последнее время. Из-за чего файл принимает гиганские рамеры, гб отлетают на ура.
3. Могу предположить, что полиморфники будут давать кривые листинги, если у них есть привязка ко времени и т.п.
4. Есть проги которые генерят файл в зависимости от времени, это всё конечно можно скриптами обработать, но всё же это лишние напряги.

SeDoYHg
Вполне рабочий вариант, я так же применял уго на практике и весьма успешно, хотя феназепам не употребляю
Иногда быстрее отрэйсить и сравнить чем лазить по ужасному коду с отладчиком. Любую методику стоит иметь на вооружении ;)
Плю с к таму, позволяет быстро локализовать механизм генерации и проверки пароля ;)

-----
Подписи - ЗЛО! Нужно убирать!





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 09 апреля 2006 05:53 · Поправил: Nimnul
· Личное сообщение · #5

elraton пишет:

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


много хочешь, мало получишь...

-----
have a nice day





Ранг: 199.9 (ветеран), 4thx
Активность: 0.120.02
Статус: Участник

Создано: 09 апреля 2006 11:31
· Личное сообщение · #6

nice пишет:
Хочу рассказать сразу на грабли, которые изначально не видать при таком способе взлома.
1. Это проги с рандомными значениями, которые например генерят случайную строку при выводе на экран: программы напоминалки и т.п.
2. Огромные циклы, которые нередко встречаются в последнее время. Из-за чего файл принимает гиганские рамеры, гб отлетают на ура.

А зачем делать полный трейс? Достаточно по заданному диапазону адресов, где приблизительно происходит искомая проверка, который вычисляется уже при первом исследовании проги в дизассемблере/отладчике. Т.е. для реализации идеи достаточно трейсера, выводящего EIP-ы с воможностью выбора их диапазона для трейса, а затем - ccompare логов.

elraton пишет:
немного более конкретно:
soft-ice ... выдает трассу программы,

Вот здесь бы поподробнее - какими средствами?



Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 09 апреля 2006 12:09
· Личное сообщение · #7

YDS
Указание одной пары адресов не достаточно.
В коде праверки как правило вызывают стандартные АПИ ф-ии, и лог при этом растет весьма быстро, загромождая не нужной информацией.

-----
Подписи - ЗЛО! Нужно убирать!




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

Создано: 09 апреля 2006 12:50
· Личное сообщение · #8

elratonelraton пишет:
olly выдает трассу программы

Увы. Не помогло - проверка идет либо слишком далеко, либо в генерируемом thread-e.
Трасса программы без ключа и без ключа+эмулятор совпадают.
А thread-ов у них аж 11 штук. Не исключено, что для проверки генерят
спец-thread. А сообщение про демо глубоко зарыто в недрах MFC42.
Место-то я нашел, где текст вытаскивают, но оно в DLL, а в программу
всплыть не удалось - точнее попал на обработку событий
=========================
Но тем не менее согласен - идея очень здравая. Открыл для себя очередные возможности
olly и ищу нужный thread Возможно и трассировка пригодится.




Ранг: 199.9 (ветеран), 4thx
Активность: 0.120.02
Статус: Участник

Создано: 09 апреля 2006 16:35
· Личное сообщение · #9

nice пишет:
Указание одной пары адресов не достаточно.
В коде праверки как правило вызывают стандартные АПИ ф-ии, и лог при этом растет весьма быстро, загромождая не нужной информацией.

И что из того? Ты же не будешь этот лог (логи) руками ковырять.



Ранг: 54.0 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 09 апреля 2006 20:09
· Личное сообщение · #10

YDS пишет:
И что из того? Ты же не будешь этот лог (логи) руками ковырять.


виндовый дифф можно взять здесь www.fsci.fuk.kindai.ac.jp/kakuto/soft.html
или здесь unxutils.sourceforge.net/

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




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 10 апреля 2006 04:26
· Личное сообщение · #11

Хороший метод. Как вариант в некоторых случаях реально быстрее, чем искать руками
Я тоже раньше над этим думал, но не догонял как реализовать




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 10 апреля 2006 10:41 · Поправил: Nimnul
· Личное сообщение · #12

Вот еще вариант ситуации в котором мне понадобился этот метод. В реестре есть bool флаг. Мне нужно сравнить разницу работы между true\false что бы узнать где она содержится в проге. Можно конечно поставить хуки на реестр, а потом искать, но так ведь проще.

-----
have a nice day




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

Создано: 10 апреля 2006 21:19
· Личное сообщение · #13

где же взять этот чудо-трэйсер?




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

Создано: 10 апреля 2006 22:12
· Личное сообщение · #14

elraton пишет:
soft-ice ... выдает трассу программы

Не мне одному это интересно. Как ?



Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 11 апреля 2006 00:18
· Личное сообщение · #15

ToBad
1] soft-ice:
========
NuMega SoftIce Symbol Loader->soft-ice inital. setting->History Buffer Size [увеличиваем размер до хрена]
:wc; /* отключаем окно кода, если оно было включено, если это не слелать нихрена не получится */
:MACRO NEZUMI="t;NEZUMI;"
NEZUMI
когда надоесть трассировать, давим esc
затем <Ctrl-D>
и в лоадере "safe soft-ice history as..."

как вриант, можно обойтись без макроса, просто дать t FFFFFFFF
только кодовое окно долно быть отключено!!!!


2] olly
debug -> open or clear trace
view -> run trace
F10 -> log to file
<Ctrl-F11>
view -> run trace
F10 -> close file


3] syser
information -> run trace list

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



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 11 апреля 2006 00:43
· Личное сообщение · #16

по Ctrl-F11 в олли под NT можно глубоко в дебри системных библиотек уйти, а вот
пропускать call'ы Win API олли кажется не умеет, а по Ctrl-F12 он вообще все call'ы
обходит




Ранг: 221.8 (наставник)
Активность: 0.150
Статус: Участник

Создано: 11 апреля 2006 01:17
· Личное сообщение · #17

Asterix пишет:
по Ctrl-F11 в олли под NT можно глубоко в дебри системных библиотек уйти, а вот
пропускать call'ы Win API олли кажется не умеет, а по Ctrl-F12 он вообще все call'ы
обходит

угу я 300кб прогу попробовал протрейсить на втором часу работы прога еще не запустилась мне надоело ждать и я отрубил ольку и покилял 200метровый лог ;) скрипт нужен короче 100%



Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 11 апреля 2006 01:33 · Поправил: elraton
· Личное сообщение · #18

Asterix
Olly 1.10
вот врагмент лога


01006564 Main PUSH EAX ; Arg4 = 0000000A
01006565 Main PUSH ESI ; Arg3 = 00072B5C
01006566 Main PUSH 0 ; Arg2 = 00000000
01006568 Main PUSH 0 ; pModule = NULL
0100656A Main CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>]; EAX=01000000
01006570 Main PUSH EAX ; Arg1 = 01000000

01006571 Main CALL notepad.0100299E
0100299E Main PUSH EBP
0100299F Main MOV EBP,ESP ; EBP=0006FF24
010029A1 Main SUB ESP,1C
010029A4 Main PUSH EBX
010029A5 Main PUSH ESI
010029A6 Main PUSH EDI
010029A7 Main CALL DWORD PTR DS:[<&KERNEL32.GetCommandLineW>]; EAX=000208A4
010029AD Main PUSH notepad.010013D8 ; ProcNameOrOrdinal = "RegisterPenApp"
010029B2 Main PUSH 29 ; Index = SM_PENWINDOWS
010029B4 Main MOV EDI,EAX ; Index = SM_PENWINDOWS; EDI=000208A4


смотрите! по CTRL-F11 olly входит только в юзерские функции,
но пропускает системные библиотеки



Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 11 апреля 2006 01:41
· Личное сообщение · #19

Red Bar0n
ну не знаю, что вы такого трейсили...
наверное что-то жутко упакованное
приложение типа блокнота на P-III 733 чуть тормозят но трейсятся быстро.

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

короче, каждый случай требует своего подхода.
кто не хочет думать - нехай берет numega coverage
там все будет видно визуально ;)

кстати, читайте блок ильфака ссылку на который я давал,
он там приводит понятие "базового" блока, то есть блока
лишеного ветвлений. нам не нужно трассировать кажую
инструкцию базового блока, нам достаточно только
поставить бряк в его конец ;)
это в _сотни_ раз ускоряет работу трейсера
и скоращает размер лога чуть ли не на порядок ;)



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 11 апреля 2006 02:43
· Личное сообщение · #20

elraton пишет:
смотрите! по CTRL-F11 olly входит только в юзерские функции,
но пропускает системные библиотеки


Ага, а я не попробовал прежде чем написать, да? ;)
600Мб был лог файл когда я отрубил трейс, все системные библиотеки пропахал

Олли не заходи в АПИ только под 9х !




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

Создано: 11 апреля 2006 03:11
· Личное сообщение · #21

elraton пишет:
1] soft-ice:
========
NuMega SoftIce Symbol Loader->soft-ice inital. setting->History Buffer Size [увеличиваем размер до хрена]
:wc; /* отключаем окно кода, если оно было включено, если это не слелать нихрена не получится */
:MACRO NEZUMI="t;NEZUMI;"
NEZUMI
когда надоесть трассировать, давим esc
затем <Ctrl-D>
и в лоадере "safe soft-ice history as..."

Спасибо ! Буду испытывать.

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

Для небольших участков кода внутренний трейсер вполне хорош, причём в настройках есть хорошая опция: Trace over library function.




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 11 апреля 2006 09:38
· Личное сообщение · #22

Asterix пишет:
Олли не заходи в АПИ только под 9х !

Почему только под 9х? У меня ХР про сп2 - тоже пропускает API. Мои настройки в аттаче.


062e_11.04.2006_CRACKLAB.rU.tgz

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться





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

Создано: 11 апреля 2006 09:49 · Поправил: PE_Kill
· Личное сообщение · #23

А у меня на ХР PRO SP2 всегда в АПИ заходит. Да и в SP1 и в SP0 тоже. Это наверное от настроек зависит...

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





Ранг: 199.9 (ветеран), 4thx
Активность: 0.120.02
Статус: Участник

Создано: 11 апреля 2006 10:51
· Личное сообщение · #24

nikitosk пишет:
где же взять этот чудо-трэйсер?


Написать самому Или попросить кого-нибудь это сделать



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 11 апреля 2006 12:01 · Поправил: Asterix
· Личное сообщение · #25

Таки есть в опциях Olly функция
Always trace over system DLLs %)
но в моем случае не спасает, т.к. трейсер заходит во всякие rtl60.bpl, vcl60.bpl
не считая их системными

Добавлено:
и на этот случай есть опция Пометить DLL как системную, так что Olly рулит

но вот что делать с циклами...



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 11 апреля 2006 19:53
· Личное сообщение · #26

elraton пишет:
вводим правильный параль

А откуда правильный пароль? или я чего-то не понял? В чем смысл-то?

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 апреля 2006 19:57
· Личное сообщение · #27

AlexZ пишет:
А откуда правильный пароль?

С руборда




Ранг: 104.1 (ветеран)
Активность: 0.070
Статус: Участник
искатель истЕны

Создано: 11 апреля 2006 23:35
· Личное сообщение · #28

AlexZ перечитай всю тему с начала



Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 12 апреля 2006 00:26
· Личное сообщение · #29

Asterix
> но вот что делать с циклами...
вариант первый: let them be!
достаточно выставить большой размер лога
(я ставил в айсе с десяток метров и этого хватало),
а у ольки он похоже вообще не ограничен.

теперь. имеем два Log'a.
пишем несложную программку, которая просто-напросто
считывает какие адреса были покрыты (вырезает первое число из лога)
и кладет в его дазу банных (или самопальное двоичное дервево)

то же самое повторяет и с другим логом.

затем две дазы сравниваются и находятся адреса,
которые есть в одном логе, но нет в другом!
вот это и есть то, что нам нужно!!!

далее пишется нехитрий скрипт к ида,
который в комменатриях отмечает покытие,
указаывая на покрытий/непокрытый код
чтобы ускорить навигацию, там же в комментариях
делается ссылка на "jmp to next not mactch".
крррасота!!!

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

p.s. у кого установлена numega coverage?
(или аналогичный инструмент)
попробуйте эту идею на ней...
мне лень ставить...

======================================
Nimnul
> Есть еще один способ локализовать место проверки,
> введя два неправильных ключа разной длинны.
> В логах будет различие только в том месте где происходят
> определенные манипуляции с ним.
мужик ты просто гений!!!! разрываю в честь тебя свой хвост на пополам
я сам до этого не допер, но сейчас проверил твою идею на практике!
и она рулит!!! логи... нет, логи по _коду_ получаются одинаковые,
особенно если программа работает по следующему приниципу
(я конечено, все очень утрирую) if (CRC32MD5(user_str)!=VALID_CRC) .....
то в любом случае код один и тот же!!!!
это только в strcmp мы получаем разницу в логах, но!!!
_данные_ будет разные!!! если одной и той же программе
скормить один и тот же пароль, то данные в обоих логах трейсера будут одинаковые,
а вот если скормить разные пароли, то... данные изменятся!!!! и изменяться они,
как нетрудно догадаться в процедуре CRC32MD5.

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

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

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


какие еще будут идеи?



Ранг: 54.0 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 12 апреля 2006 03:13
· Личное сообщение · #30

elraton пишет:
единственная прооблема - циклы выборки сообщений.
в них можно легко утонуть и не выплыть, поэтому
надо научиться игнорировать их. а как?!
пока я думаю написать плагин для ольки...
который позволит отсеивать все заведомо
незначимые функции....

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



Ранг: 15.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 12 апреля 2006 03:28
· Личное сообщение · #31

n1kto
а это идея!
так что скоро ждите новой статьи с пошаговым описанием нового метода взлома ;)


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


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