Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Взлом dotNET программ
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 49 . 50 . >>
Посл.ответ Сообщение

Ранг: 60.6 (постоянный), 20thx
Активность: 0.070
Статус: Участник

Создано: 30 августа 2010 22:59 · Поправил: s0l
· Личное сообщение · #1

Со времени создания топика много обсудили, во много м разобрались и много осталось за кадром. Решил подшить выкладываемый софт и линки

Инструменты:

dnSpy - бодрый декомпилятор и отладчик тут беты

Gray Wolf - DE-ObfuScatE / Edit IL(Live) / Add payloads / Edit attributes(public/privet) / Copy strong names signing on EXE/DLL
ReSharper 6.0 Build 2093 Pre-Release - Очень навороченый декомпилер, побробности --> ТУТ <--.
Рег-данные:
Code:
  1. User Name: ReSharper EAP User
  2. License Key: 0-A60kqsqDMPkvPrLC3bz1/jmns4/DAUV6
  3. which is valid until 31 March 2010

Reflector 8.3.3.115 - платный декомпилятор .NET 8.3.0.95 + (дополнение к нему)
Седьмая версия рефлектора - думаю все знают
Сборка Add-in'ов для Reflector - есть много полезных вещей
.Net ID 1.0.0.3 - определение защиты
DNiD by Rue - сигнатурный анализатор
Dotnet IL Editor (DILE)- Opensource дизассемблер и дебаггер
Xenocode Fox Code Analyzer- профайлер и дизассемблер
Reactor Decryptor 1.7 - что то декриптит, но что не понятно(с) zeppe1in
Simple Assembly Explor (SAE) - Assembler, Disassembler, Deobfuscator, IL editor and more...
DotNet Dumper 1.0 - Дампер .net'овских приложений. Подробное описание
Kurapica dotNET Tracer 1.1 - трейсер от известного автора инструментов для .net
ILSpy 1.0.0.481 - Opensource комбайн, на подобие SAE. Подробности тут
dotTrace Performance 4.0.665.4 - Неплохой трейсер для .Net приложений. Умеет делать трейсы не смешивая потоки как KDT. Умеет сравнивать трейсы двух запусков программы
Рег-данные:
Code:
  1. Name: exelab
  2. Serial: OLgDSHG0hJghkLdXYJh1IjM3ytMrqKcn

Universal Fixer 1.0 - fix dumps after dumping them whit Dotnet Dumper or other similiar tools and will also fix nasty things: multiple assembly/module definitions, wrong extends, etc.
iMPROVE .NET Deobfuscator - деобфускатор


ConfuserDumper
ConfuserDelegateKiller
CodeCrackerTools: ConfuserMethodsDecryptor, ConfuserDelegateKiller, ConfuserStringDecryptor, MegaDumper, etc.

Статьи с хабры:
Защита .NET приложений - Субъективная теоретическая муть с хабры, выдаваемая за обзор обфускаторов(только для фанатов)
Как обмануть NET.Reflector - вот это уже годная статья, в которой рассматривается ручная обфускация в стихах и картинках
Взлом программ для чайников - ну не знаю...прописные истины, но приятно, что все это есть на русском языке и нормально оформлено
Реверс-инжиниринг обфусцированной сборки .NET - один только заголовок чего стоит. По сути статья информативная
Инъекции MSIL кода в стороннюю сборку при помощи Mono.Cecil. Реализация принципов АОП в NET
Избавление .NET программы от регистрации на примере BEM
Снимаем дамп объектов с памяти .Net приложения

Другое:
.NET Reflector v7.0.0.198 (C# Source by wangshy)
[url=http://lifeinhex.com/string-decryption-with-de4dot/]String decryption with de4dot[/url

-

Last edit: 2012-02-17, Links fixed. Jupiter]



Ранг: 4.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 12 сентября 2011 12:34
· Личное сообщение · #2

sendersu
Я знаю, сам быстро привык к ней, очень удобно. Но после него exe-шник весом в 311 kb становится 216 kb



Ранг: 15.1 (новичок), 5thx
Активность: 0.010
Статус: Участник

Создано: 12 сентября 2011 13:03
· Личное сообщение · #3

EiDeNaR
Это нормально, после деобфускации такое может быть.
EiDeNaR пишет:
После загрузки в SAE сборка не запускается. Т.е. если загрузить в SAE и без изменений просто сохранить, то сборка не запустится. Что можно сделать в этом случае? Или чем можно деобфусцировать сборку, кроме SAE?

Насколько я понимаю САЕ перестраивает заголовок. После этого сборка может не запуститься если она подписана, или имеет ссылки на другие подписанные сборки, или если есть проверка на целостность. Если сборка была обфусцирована или запротекчена могут остаться зашифрованые ресурсы, методы, что так же может мешать запуску. Мне к примеру не удавалось запускать деобфусцированые сборки после smartassembly и net reactor, но как правило деобфусцированые сборки хорошо помогают в анализе кода.

| Сообщение посчитали полезным: EiDeNaR

Ранг: 4.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 12 сентября 2011 14:13
· Личное сообщение · #4

manco
В моем случае был как раз реактор. В итоге просто пропатчил в hex-редакторе и все. Теперь буду знать.



Ранг: 4.2 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 13 сентября 2011 09:32 · Поправил: EiDeNaR
· Личное сообщение · #5

Есть компонент для VS2008. Он не защищен и не обфусцирован. Нашел метод проверки серийника, где введенный код сравнивается с нужным. Собственно вопрос - как можно отследить тот самый "нужный" ключ? Т.е. можно ли чем-нибудь поставить что-то типа Watch на переменную?



Ранг: 60.6 (постоянный), 87thx
Активность: 0.060
Статус: Участник

Создано: 13 сентября 2011 12:12
· Личное сообщение · #6

EiDeNaR пишет:
Есть компонент для VS2008. Он не защищен и не обфусцирован. Нашел метод проверки серийника, где введенный код сравнивается с нужным. Собственно вопрос - как можно отследить тот самый "нужный" ключ? Т.е. можно ли чем-нибудь поставить что-то типа Watch на переменную?

Если виден код - разберись с алгоритмом генерации ключа. Или добавь, например, вывод MessageBox с ключом



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 сентября 2011 16:02
· Личное сообщение · #7

Дабы не плодить тем спрошу здесь.
Подскажите пожалуйста возможно ли, и если да, то как, деобфусцировать вот такие вещи:
есть строка
Code:
  1. eHTud9b6wqjVOEsKJn.eddH93paWHCpgLjiA4o(eHTud9b6wqjVOEsKJn.ewsclspNMhdH7ZpQYqS(binaryReader), 0L);

если пройтись по указанным функциям - то становится понятно, что это не что иное как
Code:
  1. binaryReader.BaseStream.Positions = 0L;

делал деобфускацию через SAE, убрал 95% свитчей и пустых функций, типа return true/false; но вот такие штуки остались. А функция, которую разбираю на несколько тысяч строк и если каждую строку так разбирать - пол года понадобится.




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

Создано: 26 сентября 2011 16:27
· Личное сообщение · #8

tonyrood пишет:
если пройтись по указанным функциям - то становится понятно, что это не что иное как

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

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




Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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 можно писать плагины для деобфускатора, но документации подробной что-то не видел. Печально, придется руками перелопачивать.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 26 сентября 2011 20:54
· Личное сообщение · #10

tonyrood пишет:
но документации подробной что-то не видел

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

| Сообщение посчитали полезным: tonyrood


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

Создано: 26 сентября 2011 22:10
· Личное сообщение · #11

tonyrood пишет:
Ну как чисто логически. Если упростить имена, то получится примерно так:

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

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




Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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-ю неделю ковыряю-ковыряю



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 27 сентября 2011 14:21
· Личное сообщение · #13

tonyrood
сомневаюсь, что кейген получиться там кажется используется ассиметричная криптография. Как делаю я, разбираюсь через SAE и Reflector, и через ILDASM\ILASM розбираю\собираю и патчу с наименьшими изменениями файл. Если патчить через Reflexil, то он заново пересобирает всю сборку, что не очень хорошо.

| Сообщение посчитали полезным: tonyrood


Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 27 сентября 2011 15:34
· Личное сообщение · #14

yanus0 пишет:
Если патчить через Reflexil, то он заново пересобирает всю сборку, что не очень хорошо.

Да, у реактора бывают трюки, что после пересборки ничего не будет работать. Теже проблемы и с САЕ.
PE_Kill пишет:
Просто найти и заменить тулзы не могут, надо знать параметры и типы, чтобы понять что это

Могут).
tonyrood
С этими вызовами всё просто, смотришь если там ldarg 0,1 - n а потом call/calvirt и ret. то смело делаешь замену. Руками конечно это делать не стоит)
Самое простое было бы не разбиратся в вызовах реактора, а просто выпилить их) Если у тебя нет зашифрованного кода то должно прокатить.

-----
zzz




Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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
я написал небольшую программку для тестов (--> исходники и бинарник тут <--) в SAE метод выглядит так:

Code:
  1. 0             L_0000:    nop         
  2. 1             L_0001:    ldarg.0     
  3. 2             L_0002:    callvirt    TestFunctionsWalker.cls1 TestFunctionsWalker.cls2::get_field2()
  4. 3             L_0007:    stloc.0     
  5. 4             L_0008:    br.s        5 -> ldloc.0 
  6. 5             L_000a:    ldloc.0     
  7. 6             L_000b:    ret         


Я немного не догоняю. При вызове ret снимается значение с evaluation stack вызванной функции и помещается на evaluation stack вызывающей функции. К чему тогда 3-5 строчки.

UPD в итоге вся соль заключается в поиске инструкции call, входе в нее, если она ничего не содержит кроме ldarg.n, call/callvirt, ret то исходный call тупо меняется на внутренний call/callvirt.
Какие подводные камни такого метода? Я просто с IL кодом на прямую не работал никогда, может есть какие-то исключительные ситуации?




Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 27 сентября 2011 16:24
· Личное сообщение · #16

Если там последняя версия IntelliLock, то патчить не получиться, т.к в последних релизах Reactor делает в большинстве методах некую проверку CRC, и если она не проходит то и код работать не будет (как вариант искать и обходить в каждом методе эту проверку вручную, т.к по маске даже не выходит патчить и если таких методов куча - то это будет очень напряжно). Но если версия не последняя, то должно все получиться.

Кейген тоже не прокатит, т.к там RSA.

Кстати, через САЕ можно все очень красиво деобфусцировать и код будет понятным в Reflector или ILSpy...



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 сентября 2011 16:52
· Личное сообщение · #17

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

Я заметил при отладке в DILE, что пропатченный файл вылетает с Exception'ом, причем в Exception'е как раз что-то говорилось про длину файла, надо будет попробовать так поотлаживать и пропатчить места, где этот Exception возникает. Как то я об этом сразу не подумал.
Версию reactor'а не знаю, версия проги сделана в августе.




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 27 сентября 2011 16:57
· Личное сообщение · #18

tonyrood пишет:
Какие подводные камни такого метода?

никаких) всё верно. Ну таких извратов как у тя я ещо не встречал значит) всё равно можно попробовать сделать типо масок или про анализировать какнить и отличить фэйковый колл.

-----
zzz




Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 сентября 2011 18:15
· Личное сообщение · #19

Все-таки, видимо какие-то подводные камни есть.
Написал небольшой плагин для SAE, на тестовом приложении (линк выше) работает на ура.
Изначальный код
Code:
  1. Program.m1(Program.GetCls1(obj), "123");


благополучно превратился в

Code:
  1. cls.field2.field1 = "123";


Ищет все call, берет внутренности, пропускает все nop'ы в начале, пропускает начальный ldarg (в т.ч. ldarg.s и ldarg). Дальше работает по шаблонам.

1.
Code:
  1. call/callvirt
  2. stloc.0
  3. br.s
  4. ldloc.0
  5. ret

2. просто call/callvirt, ret
3. call/callvirt, nop, ..., nop, ret

На боевом приложении - после обработки, при открытии через ILSpy или Reflector - исключение... хз в чем там дело.
Тем не менее на простых извратах, может кому-то пригодится:
--> Плагин <--
--> Исходник <--

мозг уже весь сломал. Если есть желающие помочь с этой канителью - буду признателен, могу скинуть в ЛС линк на жертву.



Ранг: 15.1 (новичок), 5thx
Активность: 0.010
Статус: Участник

Создано: 29 сентября 2011 19:25
· Личное сообщение · #20

Новый деобфускатор Dea4dot с сырцами.
https://github.com/0xd4d/de4dot



Ранг: 85.4 (постоянный), 51thx
Активность: 0.090
Статус: Участник

Создано: 30 сентября 2011 11:26
· Личное сообщение · #21

ну тогда до кучи... с того же форума, что и de4dot

strong name helper 1.5x

http://rghost.net/23015101
pass : bs




Ранг: 76.9 (постоянный), 116thx
Активность: 0.060
Статус: Участник

Создано: 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

| Сообщение посчитали полезным: sierra

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 07 октября 2011 21:54
· Личное сообщение · #23

BAHEK
Косячный патч какой-то. После запуска грузит сборки и тихо падает.
Если запускать непатченную версию, то грузит сборки и спрашивает активацию.

-----
старый пень




Ранг: 18.8 (новичок), 5thx
Активность: 0.010
Статус: Участник

Создано: 07 октября 2011 22:07
· Личное сообщение · #24

Первый раз тоже упала а потом нормально работает.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 октября 2011 13:34
· Личное сообщение · #25

Привет. А какому нибудь удалось деобфусцировать smartassambly 6.2 ? dumbassembly-0.5.7 ничего не меняет. а после DeSmart эффект есть, но прога потом не запускается и я не могу понять почему.




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 09 октября 2011 19:22 · Поправил: zeppe1in
· Личное сообщение · #26

Привет.
astalavista пишет:
dumbassembly-0.5.7 ничего не меняет

Может чтото не так делаеш, потому, что круче dumbassembly ничего нет).
astalavista пишет:
а после DeSmart эффект есть, но прога потом не запускается

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

-----
zzz




Ранг: 18.8 (новичок), 5thx
Активность: 0.010
Статус: Участник

Создано: 11 октября 2011 23:25
· Личное сообщение · #27

А где можно скачать DumbAssembly?



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 11 октября 2011 23:36
· Личное сообщение · #28

sierra
а кнопка Искать вам знакома?
ответ - в етом же топике!!



Ранг: 18.8 (новичок), 5thx
Активность: 0.010
Статус: Участник

Создано: 11 октября 2011 23:47 · Поправил: sierra
· Личное сообщение · #29

В этом топике только один линк, по которому файл удален, больше не нашел.



Ранг: 88.6 (постоянный), 50thx
Активность: 0.040.02
Статус: Участник

Создано: 12 октября 2011 00:48
· Личное сообщение · #30

sierra
--> Здесь <--



Ранг: 85.4 (постоянный), 51thx
Активность: 0.090
Статус: Участник

Создано: 12 октября 2011 12:04
· Личное сообщение · #31

board.b-at-s.info <- там есть dumbassembly и много чего другого интересного по теме

| Сообщение посчитали полезным: sierra
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 49 . 50 . >>
 eXeL@B —› Основной форум —› Взлом dotNET программ
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати