Сейчас на форуме: -Sanchez- (+8 невидимых) |
![]() |
eXeL@B —› Основной форум —› Взлом dotNET программ |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 49 . 50 . >> |
Посл.ответ | Сообщение |
|
Создано: 30 августа 2010 22:59 · Поправил: s0l · Личное сообщение · #1 Со времени создания топика много обсудили, во много м разобрались и много осталось за кадром. Решил подшить выкладываемый софт и линки ![]() Инструменты: Рег-данные: Code:
Рег-данные: Code:
Статьи с хабры: Другое: [url=http://lifeinhex.com/string-decryption-with-de4dot/]String decryption with de4dot[/url - Last edit: 2012-02-17, Links fixed. Jupiter] ![]() |
|
Создано: 12 сентября 2011 12:34 · Личное сообщение · #2 |
|
Создано: 12 сентября 2011 13:03 · Личное сообщение · #3 EiDeNaR Это нормально, после деобфускации такое может быть. EiDeNaR пишет: После загрузки в SAE сборка не запускается. Т.е. если загрузить в SAE и без изменений просто сохранить, то сборка не запустится. Что можно сделать в этом случае? Или чем можно деобфусцировать сборку, кроме SAE? Насколько я понимаю САЕ перестраивает заголовок. После этого сборка может не запуститься если она подписана, или имеет ссылки на другие подписанные сборки, или если есть проверка на целостность. Если сборка была обфусцирована или запротекчена могут остаться зашифрованые ресурсы, методы, что так же может мешать запуску. Мне к примеру не удавалось запускать деобфусцированые сборки после smartassembly и net reactor, но как правило деобфусцированые сборки хорошо помогают в анализе кода. ![]() |
|
Создано: 12 сентября 2011 14:13 · Личное сообщение · #4 |
|
Создано: 13 сентября 2011 09:32 · Поправил: EiDeNaR · Личное сообщение · #5 |
|
Создано: 13 сентября 2011 12:12 · Личное сообщение · #6 EiDeNaR пишет: Есть компонент для VS2008. Он не защищен и не обфусцирован. Нашел метод проверки серийника, где введенный код сравнивается с нужным. Собственно вопрос - как можно отследить тот самый "нужный" ключ? Т.е. можно ли чем-нибудь поставить что-то типа Watch на переменную? Если виден код - разберись с алгоритмом генерации ключа. Или добавь, например, вывод MessageBox с ключом ![]() |
|
Создано: 26 сентября 2011 16:02 · Личное сообщение · #7 Дабы не плодить тем спрошу здесь. Подскажите пожалуйста возможно ли, и если да, то как, деобфусцировать вот такие вещи: есть строка Code:
если пройтись по указанным функциям - то становится понятно, что это не что иное как Code:
делал деобфускацию через SAE, убрал 95% свитчей и пустых функций, типа return true/false; но вот такие штуки остались. А функция, которую разбираю на несколько тысяч строк и если каждую строку так разбирать - пол года понадобится. ![]() ![]() |
|
Создано: 26 сентября 2011 16:27 · Личное сообщение · #8 tonyrood пишет: если пройтись по указанным функциям - то становится понятно, что это не что иное как Если понятно чисто логически, то никак, профи пока не пишут тулзов под .нет, если где то исходные классы проскакивают, то нужно разбираться почему тулзы не видят. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 26 сентября 2011 17:01 · Поправил: tonyrood · Личное сообщение · #9 Ну как чисто логически. Если упростить имена, то получится примерно так: class1.method1(class1.method2(reader),0L); где код method2: object method2(BinaryReader obj){ return obj.BaseStream; } а код method1: void method2(BaseStream stream, long p) { stream.Position = p; } Видел, что вроде как в SAE можно писать плагины для деобфускатора, но документации подробной что-то не видел. Печально, придется руками перелопачивать. ![]() |
|
Создано: 26 сентября 2011 20:54 · Личное сообщение · #10 tonyrood пишет: но документации подробной что-то не видел и не надо - возьмите исходники, там есть пример плагина от автора - все события Before/After - есть, только взять да и написать! нужна помощь - спрашивайте ![]() |
|
Создано: 26 сентября 2011 22:10 · Личное сообщение · #11 tonyrood пишет: Ну как чисто логически. Если упростить имена, то получится примерно так: Ну это и есть логически. Просто найти и заменить тулзы не могут, надо знать параметры и типы, чтобы понять что это. Действительно напиши плуг и выложи для народа, получишь много респектов ![]() ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 27 сентября 2011 13:40 · Личное сообщение · #12 sendersu пишет: возьмите исходники, там есть пример плагина от автора - все события Before/After - есть, только взять да и написать! Спасибо, уже сливаю. Буду смотреть/разбираться. Тем не менее в первую очередь мне нужно отучить программу от триала. И я немного встал в тупик. Буду благодарен любой помощи или совету. Лицензии реализованы через IntelliLock, сам код частично запакован .NET Reactor. Я спокойно могу его просмотреть в SAE, на некоторых функциях Reflector и ILSpy (их поддержка встроена в SAE) - вылетают. Решилось простым применением деобфускатора и уничтожением строк .try По сути, изучив код увидел 3 пути решения: 1. Восстановить алгоритм генерации лицензии и сделать кейген 2. Сделать рабочий дамп и пропатчить 3. Дизассемблировать в IL, поправить что нужно и собрать обратно. Сперва пошел вторым путем, создал дамп, заставил его запускаться, начал пробовать патчить, но обнаружил, что часть функциональности перестала работать. Под отладчиком - никаких исключений, все отлично работает. Причины так и не смог найти. Попробовал открыть через SAE прогу для установки лицензии (есть рабочая, правда триальная, пара HardwareID-License) - получилось, нашел нужную функцию, там несколько тысяч строк кода, даже после деобфускации не слишком читабельны они (тут попробую написать плагин). Был вариант прогнать эту функцию через отладчик, но DILE и PEBrowse при открытии листинга этой функции наглухо зависают. 3-й вариант с дизассемблированием отпадает, т.к. прога после изменения вылетает с исключением (проверяет себя на целостность) И собственно вопрос: какой метод самый быстрый - попытаться найти почему пропала часть функциональности и пропатчить или восстановить алгоритм проверки лицензии и написать кейген? А то уже 3-ю неделю ковыряю-ковыряю ![]() ![]() |
|
Создано: 27 сентября 2011 14:21 · Личное сообщение · #13 tonyrood сомневаюсь, что кейген получиться там кажется используется ассиметричная криптография. Как делаю я, разбираюсь через SAE и Reflector, и через ILDASM\ILASM розбираю\собираю и патчу с наименьшими изменениями файл. Если патчить через Reflexil, то он заново пересобирает всю сборку, что не очень хорошо. ![]() |
|
Создано: 27 сентября 2011 15:34 · Личное сообщение · #14 yanus0 пишет: Если патчить через Reflexil, то он заново пересобирает всю сборку, что не очень хорошо. Да, у реактора бывают трюки, что после пересборки ничего не будет работать. Теже проблемы и с САЕ. PE_Kill пишет: Просто найти и заменить тулзы не могут, надо знать параметры и типы, чтобы понять что это Могут). tonyrood С этими вызовами всё просто, смотришь если там ldarg 0,1 - n а потом call/calvirt и ret. то смело делаешь замену. Руками конечно это делать не стоит) Самое простое было бы не разбиратся в вызовах реактора, а просто выпилить их) Если у тебя нет зашифрованного кода то должно прокатить. ----- zzz ![]() |
|
Создано: 27 сентября 2011 16:01 · Поправил: tonyrood · Личное сообщение · #15 zeppe1in пишет: смотришь если там ldarg 0,1 - n а потом call/calvirt и ret. то смело делаешь замену. Я сейчас думаю накидать небольшой плагинчик для SAE для этого. В принципе думаю логика проста: На каждый BeforeHandleMethod вешать обработку метода. Далее 2 варианта: либо прочесывать весь код и находить вложенные функции с содержанием ldarg 0,1 - n и их упрощять, либо определять, что текущая функция, есть не что иное как ldarg 0,1 - n и находить ее вызовы и упрощать. Второй кажется более оптимальным, но не силен я в Mono.Cecil, честно, первый раз разбираюсь с ним, пока не нашел как найти все вызовы текущей функции. Подумаю еще ![]() P.S> кстати не всегда шаблон ldarg 0,1 - n а потом call/calvirt и ret я написал небольшую программку для тестов ( Code:
Я немного не догоняю. При вызове ret снимается значение с evaluation stack вызванной функции и помещается на evaluation stack вызывающей функции. К чему тогда 3-5 строчки. UPD в итоге вся соль заключается в поиске инструкции call, входе в нее, если она ничего не содержит кроме ldarg.n, call/callvirt, ret то исходный call тупо меняется на внутренний call/callvirt. Какие подводные камни такого метода? Я просто с IL кодом на прямую не работал никогда, может есть какие-то исключительные ситуации? ![]() |
|
Создано: 27 сентября 2011 16:24 · Личное сообщение · #16 Если там последняя версия IntelliLock, то патчить не получиться, т.к в последних релизах Reactor делает в большинстве методах некую проверку CRC, и если она не проходит то и код работать не будет (как вариант искать и обходить в каждом методе эту проверку вручную, т.к по маске даже не выходит патчить и если таких методов куча - то это будет очень напряжно). Но если версия не последняя, то должно все получиться. Кейген тоже не прокатит, т.к там RSA. Кстати, через САЕ можно все очень красиво деобфусцировать и код будет понятным в Reflector или ILSpy... ![]() |
|
Создано: 27 сентября 2011 16:52 · Личное сообщение · #17 Airenikus пишет: как вариант искать и обходить в каждом методе эту проверку вручную, т.к по маске даже не выходит патчить и если таких методов куча - то это будет очень напряжно Я заметил при отладке в DILE, что пропатченный файл вылетает с Exception'ом, причем в Exception'е как раз что-то говорилось про длину файла, надо будет попробовать так поотлаживать и пропатчить места, где этот Exception возникает. Как то я об этом сразу не подумал. Версию reactor'а не знаю, версия проги сделана в августе. ![]() |
|
Создано: 27 сентября 2011 16:57 · Личное сообщение · #18 |
|
Создано: 27 сентября 2011 18:15 · Личное сообщение · #19 Все-таки, видимо какие-то подводные камни есть. Написал небольшой плагин для SAE, на тестовом приложении (линк выше) работает на ура. Изначальный код Code:
благополучно превратился в Code:
Ищет все call, берет внутренности, пропускает все nop'ы в начале, пропускает начальный ldarg (в т.ч. ldarg.s и ldarg). Дальше работает по шаблонам. 1. Code:
2. просто call/callvirt, ret 3. call/callvirt, nop, ..., nop, ret На боевом приложении - после обработки, при открытии через ILSpy или Reflector - исключение... хз в чем там дело. Тем не менее на простых извратах, может кому-то пригодится: мозг уже весь сломал. Если есть желающие помочь с этой канителью - буду признателен, могу скинуть в ЛС линк на жертву. ![]() |
|
Создано: 29 сентября 2011 19:25 · Личное сообщение · #20 |
|
Создано: 30 сентября 2011 11:26 · Личное сообщение · #21 |
|
Создано: 07 октября 2011 20:59 · Поправил: BAHEK · Личное сообщение · #22 .NET Reflector 7.4.114 & Patch http://rghost.ru/24610001 r_e брал здесь - http://forum.exetools.com/showthread.php?t=13793 ![]() |
|
Создано: 07 октября 2011 21:54 · Личное сообщение · #23 |
|
Создано: 07 октября 2011 22:07 · Личное сообщение · #24 |
|
Создано: 09 октября 2011 13:34 · Личное сообщение · #25 |
|
Создано: 09 октября 2011 19:22 · Поправил: zeppe1in · Личное сообщение · #26 Привет. astalavista пишет: dumbassembly-0.5.7 ничего не меняет Может чтото не так делаеш, потому, что круче dumbassembly ничего нет). astalavista пишет: а после DeSmart эффект есть, но прога потом не запускается Смотри код, а патч делай в обфусцированной сборке. Ну тут можно и сае заюзать и любой другой деобфускатор. Хотя лучше бы dumbassembly пофиксил. ----- zzz ![]() |
|
Создано: 11 октября 2011 23:25 · Личное сообщение · #27 |
|
Создано: 11 октября 2011 23:36 · Личное сообщение · #28 |
|
Создано: 11 октября 2011 23:47 · Поправил: sierra · Личное сообщение · #29 |
|
Создано: 12 октября 2011 00:48 · Личное сообщение · #30 |
|
Создано: 12 октября 2011 12:04 · Личное сообщение · #31 board.b-at-s.info <- там есть dumbassembly и много чего другого интересного по теме ![]() |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 49 . 50 . >> |
![]() |
eXeL@B —› Основной форум —› Взлом dotNET программ |
Эта тема закрыта. Ответы больше не принимаются. |