Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 25.05.2015, 12:19   #1
 Разведчик
Аватар для Sergej7
 
Sergej7 никому не известный тип
Регистрация: 25.05.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Здравствуйте! Экспериментирую с различными обфускаторами, чтобы защитить свой код от повторного использования. Основная задача - сделать анализ с целью повторного использования настолько трудоемким, чтобы дешевле было написать свой код, а не использовать мой. Уточню - не преследую цель сделать анализ НЕвозможным,- просто, максимально усложнить! Пока остановился на SmartAssembly (версии 6). Деобфусцировал с помощью de4dot. Результат оценивал в Reflector. В связи с этим есть ряд вопросов. В вопросах подразумевается, что анализируемый exe или dll был ранее обфусцирован SmartAssembly.

Вопросы:
1. Можно ли с помощью какого либо метода (деобфускация, создание дампа процесса, отладка или что либо другое) без значительных трудозатрат восстановить исходный код (можно без имен переменных) internal и private функций с условием, что они не вызываются из public функций? Если можно, то как?
2. Аналогичный вопрос по поводу исходных имен параметров функций и локальных переменных, используемых в internal и private функциях.
3. Какой обфускатор посоветуете использовать вместо SmartAssembly (только чтобы лицензия была не дороже 150-200$)?

Несколько наблюдений (исходя из моих экспериментов):
1. De4dot не восстанавливает имена локальных переменных после SmartAssembly (только переименовывает исходя из их типов [Ссылки могут видеть только зарегистрированные пользователи. ] для облегчения анализа). А вот структуру кода нормально восстанавливает. Еще восстанавливает имена параметров публичных функций.
2. internal и private функций я не нашел [Ссылки могут видеть только зарегистрированные пользователи. ] в восстановленном с помощью De4dot файле. Причем, их код не находится даже если вызываешь прямо из него (из кода internal или private функции) public функцию [Ссылки могут видеть только зарегистрированные пользователи. ] (в то время как ее вызов из публик функции виден [Ссылки могут видеть только зарегистрированные пользователи. ] и [Ссылки могут видеть только зарегистрированные пользователи. ])
3. Однако если приватная функция вызывается публичной, то ее можно обнаружить [Ссылки могут видеть только зарегистрированные пользователи. ] и распознать структуру .
  Ответить с цитированием
Старый 25.05.2015, 13:07   #2
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

я использую Appfuscator, регаем каждые 14 дней новую почту и пользуемся пробной версией, которая никак не ограничивает конечный результат, или ILProtector, тоже не плохой обфускатор, Det4Dot не снимет его
Ну а для защиты можете сделать некий лаунчер, который будет воссоздавать саму программу, код которой будет у вас на сервере.

Вот гляньте работу AppFuscator
[Ссылки могут видеть только зарегистрированные пользователи. ] - обфусцированная программа(накляпал за 5 мин, показывает скорость работы циклов)

исходный код
Код:
using System;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication1
{
    internal class Program
    {
        static int Count = 100000000;

        static void DWhile()
        {
            int TestInt = 0;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            do TestInt++; while (TestInt <= Count);
            sw.Stop();
            float DoWhileTick = sw.ElapsedTicks;
            float DoWhileMs = sw.ElapsedMilliseconds;
            Console.WriteLine("Do_WhileTick = {0}\tDo_WhileMs = {1}", DoWhileTick, DoWhileMs);
        }

        static void WhileD()
        {
            int TestInt = 0;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            while (TestInt <= Count) TestInt++;
            sw.Stop();
            float WhileDoTick = sw.ElapsedTicks;
            float WhileDoMs = sw.ElapsedMilliseconds;
            Console.WriteLine("While_DoTick = {0}\tWhile_DoMs = {1}", WhileDoTick, WhileDoMs);
        }

        static void For()
        {

            Stopwatch sw = new Stopwatch();
            int TestInt = 0;
            sw.Start();
            for (int i = 0; i <= Count; i++)
                TestInt++;
            sw.Stop();
            float ForTick = sw.ElapsedTicks;
            float ForMs = sw.ElapsedMilliseconds;
            Console.WriteLine("ForTick = {0}\tForMs = {1}", ForTick, ForMs);
        }

        static void Foreach()
        {
            Stopwatch sw = new Stopwatch();
            int TestInt = 0;
            sw.Start();
            byte[] bt = new byte[Count];
            foreach (byte b in bt)
                TestInt++;
            sw.Stop();
            float ForeachTick = sw.ElapsedTicks;
            float ForeachMs = sw.ElapsedMilliseconds;
            Console.WriteLine("ForeachTick = {0}\tForeachMs = {1}", ForeachTick, ForeachMs);

        }


        static Thread[] threads;
        public static void Main()
        {
             threads = new Thread[4];
             threads[0] = new Thread(DWhile); 
             threads[1] = new Thread(WhileD);
             threads[2] = new Thread(For);
             threads[3] = new Thread(Foreach);
            foreach (Thread t in threads)
                t.Start();
                Console.ReadLine();
        }
    }
}
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2

Последний раз редактировалось Ginrey; 25.05.2015 в 14:07.
  Ответить с цитированием
Старый 30.05.2015, 23:20   #3
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Appfuscator, .Net Reactor, .SmartAssembly... всё это снимается, да, сложно, но, снимается.
Откуда я знаю? Опыт.
Вывод: писать что-то своё. Что? Ну сейчас видел реализации так называемого "облачного" кода.
Сериализируется функция, записывается в облако, из облака десериализируется и вызывается. Можно вытянуть код, но если прицепить к этому ещё пару проверок, то желание что-то крякать - отпадает.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 31.05.2015, 19:07   #4
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Nickitee, ну все в этом мире, что можно собрать, то можно и разобрать. Вопрос лишь в ценности затраченного времени
  Ответить с цитированием
Старый 31.05.2015, 22:17   #5
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
Сообщение от GinreyПосмотреть сообщение
Nickitee, ну все в этом мире, что можно собрать, то можно и разобрать. Вопрос лишь в ценности затраченного времени

Конечно можно, но когда стоит вопрос о ценности, то эти защиты отходят на 2 план.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.

Последний раз редактировалось Nickitee; 29.06.2015 в 20:39.
  Ответить с цитированием
Старый 19.06.2015, 13:56   #6
 Разведчик
Аватар для lxxl
 
lxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауру
Регистрация: 14.10.2011
Сообщений: 13
Популярность: 559
Сказал(а) спасибо: 0
Поблагодарили 16 раз(а) в 2 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
видел реализации так называемого "облачного" кода.

А можете ссылочки на примеры скинуть?
  Ответить с цитированием
Старый 19.06.2015, 14:24   #7
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
А можете ссылочки на примеры скинуть?

Сериализация/Десериализация пробейте в гугле, а облаком может быть любое хранилище данных
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 19.06.2015, 15:26   #8
 Разведчик
Аватар для lxxl
 
lxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауру
Регистрация: 14.10.2011
Сообщений: 13
Популярность: 559
Сказал(а) спасибо: 0
Поблагодарили 16 раз(а) в 2 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
Сериализация/Десериализация пробейте в гугле

Аа понял) Была тут задумка сделать нечто такое:
Вин форм проект связывается с ASP MVC(сервер) и передает ему некоторые данные, на стороне сервера данные обрабатываются и возвращается некий Action. Вот только интересно на сколько будет хромать быстродействие и можно ли вообще так делать?) А если можно, то где можно покурить мануалы на эту тему?
  Ответить с цитированием
Старый 21.06.2015, 13:24   #9
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
Вин форм проект связывается с ASP MVC(сервер) и передает ему некоторые данные, на стороне сервера данные обрабатываются и возвращается некий Action. Вот только интересно на сколько будет хромать быстродействие и можно ли вообще так делать?)

да можно, по такому принципу у меня все работает, на быстродействии это никак не сказывается ибо время нужно затратить только при запуске программы, чтобы от сервера получить данные и достроить программу, в остальном же она работает как и всегда. Как все это передавать, спросите вы - смотрите темы в интернете по созданию чатов на уровне сокетов, а дальше уже от сервера сможете передавать клиенту любые данные.
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 21.06.2015, 15:48   #10
 Разведчик
Аватар для lxxl
 
lxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауру
Регистрация: 14.10.2011
Сообщений: 13
Популярность: 559
Сказал(а) спасибо: 0
Поблагодарили 16 раз(а) в 2 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

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

Про сокеты я информацию нагуглю, но может вы посоветуете что то для новичков(никогда с ними не работал). И в каком виде хранить функции которые будут встраиваться в клиент на самом сервере?
  Ответить с цитированием
Старый 22.06.2015, 13:56   #11
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
И в каком виде хранить функции которые будут встраиваться в клиент на самом сервере?

смотря какая сериализация, если бинарная то в bin, если Xml-сериализация, то собственно в xml. В результате все равно передаете массив байт, а дальше уже с ним работаете
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 22.06.2015, 15:20   #12
 Разведчик
Аватар для lxxl
 
lxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауруlxxl излучает ауру
Регистрация: 14.10.2011
Сообщений: 13
Популярность: 559
Сказал(а) спасибо: 0
Поблагодарили 16 раз(а) в 2 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

Цитата:
В результате все равно передаете массив байт, а дальше уже с ним работаете

Погуглил про сокеты, во всех материалах говорилось что для закрытия канала нужно указать сокету что данные переданы в полном объеме, например так:
Код:
...if (data.IndexOf("<TheEnd>") > -1)
{
    Console.WriteLine("Сервер завершил соединение с клиентом.");
    break;
}
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
Где <TheEnd> передаем вручную или дописываем его автоматически к строке(в случае чата), а как быть с функцией?
  Ответить с цитированием
Старый 22.06.2015, 18:09   #13
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Несколько вопросов по C# обфускации (SmartAssembly, internal функции)

если вы на TCP протоколе устанавливаете соединение, то он гарантирует, что пакет придет и в правильном порядке, так что просто вставить асинхронный прием данных и все. Ну а класс у вас есть, данные с него храните у себя на сервер, а после того как передадите все эти данные на клиента в переводите их в текст, а дальше десериализуете их в нужный класс
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Ответ

Метки
de4dot, обфускация, internal, reflector, smartassembly


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] пару вопросов по wh( только функции) bagouser1 Общение и обсуждение, архив Point Blank 5 14.05.2012 20:08
Несколько вопросов. chelseaclub Свободное обсуждение 3 07.04.2012 10:24
WPF несколько вопросов Sinyss Вопросы и ответы, обсуждения 5 08.02.2012 23:18
Несколько вопросов. Wadik_111 Общение и обсуждение Perfect World 3 21.03.2011 18:34
[Помогите!] Несколько вопросов Sm0ky Lineage 2 4 14.03.2011 11:14

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 17:41.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net