ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > Реверсинг
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

лечение программы под .net
  #1  
Старый 15.09.2009, 09:57
lis84
Познающий
Регистрация: 28.04.2009
Сообщений: 61
Провел на форуме:
103259

Репутация: 37
По умолчанию лечение программы под .net

Здравствуйте.

Решил тут на днях тряхнуть стариной, и зарегать на себя небольшую программку.
http://botva.onlinebots.net/

Программка триальная, на 80 запусков, и раз в 2 часа завершает работу.

Метод защиты - серийный номер, который генерится по аппаратному номеру привязанному к машине.

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

Но возникла вторая проблема. Теперь программа ломится на сайт разработчика http://botva.onlinebots.net/checkregistrationcode.php и скидывает ему через post 2 параметра, ключ и email (в программе который вводится)

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

Сама программа написанна на c#. Строки с адресом в экзешнике нет, скорее всего она как то кодирована. (чтобы тупо подменить адрес на свой).

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

Может кто нибудь подскажет как справляться с такими защитами?
Код:
               private string Method2_5(bool p1, bool p2, bool p3)
        {
            string s2;

            int i = 0;
            string s1 = System.String.Empty;
            try
            {
                System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Root.Class8.Method8_1(847480816) + Field2_139 + Field2_140 + Root.Class8.Method8_1(847481588));
                if (Field2_117)
                {
                    if (Field2_116)
                    {
                        System.Net.ICredentials icredentials = new System.Net.NetworkCredential(Field2_250, Field2_249);
                        httpWebRequest.Proxy = new System.Net.WebProxy(Field2_248 + Root.Class8.Method8_1(847489944) + Field2_90.ToString(), true, null, icredentials);
                    }
                    else
                    {
                        httpWebRequest.Proxy = new System.Net.WebProxy(Field2_248, Field2_90);
                    }
                }
                else
                {
                    httpWebRequest.Proxy = null;
                }
                httpWebRequest.Timeout = 30000;
                httpWebRequest.ServicePoint.Expect100Continue = false;
                httpWebRequest.AllowAutoRedirect = false;
                httpWebRequest.Accept = Root.Class8.Method8_1(847480721);
                httpWebRequest.Referer = Root.Class8.Method8_1(847480816) + Field2_139 + Field2_140 + Root.Class8.Method8_1(847481588);
                httpWebRequest.Headers.Add(Root.Class8.Method8_1(847480667), Root.Class8.Method8_1(847480693));
                httpWebRequest.Headers.Add(Root.Class8.Method8_1(847480599), Root.Class8.Method8_1(847480609));
                httpWebRequest.Headers.Add(Root.Class8.Method8_1(847480637), Root.Class8.Method8_1(847480520));
                httpWebRequest.Headers.Add(Root.Class8.Method8_1(847480561), Root.Class8.Method8_1(847480448));
                httpWebRequest.UserAgent = Field2_251;
                httpWebRequest.KeepAlive = true;
                httpWebRequest.Headers.Add(Root.Class8.Method8_1(847480984), Field2_162);
                System.Net.HttpWebResponse httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
                System.IO.StreamReader streamReader = new System.IO.StreamReader(httpWebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding(1251));
                s1 = streamReader.ReadToEnd();
                httpWebResponse.Close();
            }
            catch (System.Exception e)
            {
                Root.Class2.Class16 class16 = new Root.Class2.Class16();
                class16.Field16_1 = e;
                class16.Field16_3 = this;
                Field2_281 = System.Convert.ToInt32(Field2_53.Value * (1000M));
                class16.Field16_2 = (double)Field2_281;
                class16.Field16_2 /= 1000.0;
                Invoke(new System.Windows.Forms.MethodInvoker(class16.Method16_1));
                Invoke(new System.Windows.Forms.MethodInvoker(class16.Method16_2));
                return Root.Class8.Method8_1(847489664);
            }
            if (s1.IndexOf(Root.Class8.Method8_1(847482847)) > 0)
            {
                if (p1)
                {
                    Field2_190 = System.String.Empty;
                    while (s1[s1.IndexOf(Root.Class8.Method8_1(847482858)) + 16 + i] != 10)
                    {
                        Field2_190 = System.String.Concat(Field2_190, s1[s1.IndexOf(Root.Class8.Method8_1(847482858)) + 16 + i]);
                        i++;
                    }
                    Field2_190 = Field2_190.Replace(Root.Class8.Method8_1(847482755), System.String.Empty);
                }
                i = 0;
                if (p3)
                {
                    Field2_196 = System.String.Empty;
                    while (s1[s1.IndexOf(Root.Class8.Method8_1(847482763)) + 10 + i] != 32)
                    {
                        Field2_196 = System.String.Concat(Field2_196, s1[s1.IndexOf(Root.Class8.Method8_1(847482763)) + 10 + i]);
                        i++;
                    }
                }
                i = 0;
                if (p2)
                {
                    Field2_167 = System.String.Empty;
                    while (s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i] != 60)
                    {
                        Field2_167 = System.String.Concat(Field2_167, s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i]);
                        i++;
                    }
                    Field2_168 = System.String.Empty;
                    i = 0;
                    s1 = s1.Remove(0, s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i);
                    while (s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i] != 60)
                    {
                        Field2_168 = System.String.Concat(Field2_168, s1[s1.IndexOf(Root.Class8.Method8_1(847482784)) + 51 + i]);
                        i++;
                    }
                }
                return Root.Class8.Method8_1(847481052);
            }
            return Root.Class8.Method8_1(847503990);
        }
 
Ответить с цитированием

  #2  
Старый 15.09.2009, 11:44
0rs
Познающий
Регистрация: 30.12.2008
Сообщений: 64
Провел на форуме:
647156

Репутация: 76
Отправить сообщение для 0rs с помощью ICQ
По умолчанию

А что за отладчик?
 
Ответить с цитированием

  #3  
Старый 15.09.2009, 15:32
lis84
Познающий
Регистрация: 28.04.2009
Сообщений: 61
Провел на форуме:
103259

Репутация: 37
По умолчанию

syser.
А какая разница?
Раньше SoftIce юзил, в нём тоже бряки на память не срабатывали.
 
Ответить с цитированием

  #4  
Старый 15.09.2009, 16:48
PaCo
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
Провел на форуме:
1754802

Репутация: 380
По умолчанию

httpWebRequest - ставь в etc/host 127.0.0.1 botva.onlinebots.net , код по всей видимости после обфускации(хотя это не сильно то и важно), ну или man IL со всеми вытекающими.
 
Ответить с цитированием

  #5  
Старый 15.09.2009, 16:55
zeppe1in
Постоянный
Регистрация: 12.07.2006
Сообщений: 327
Провел на форуме:
1654818

Репутация: 117
По умолчанию

ws2_32.send
ws2_32.recv
сисером по netу это конечно сильно)
 
Ответить с цитированием

  #6  
Старый 15.09.2009, 17:22
neprovad
Постоянный
Регистрация: 19.10.2007
Сообщений: 794
Провел на форуме:
1013791

Репутация: 711


По умолчанию

Цитата:
Сообщение от zeppe1in  
ws2_32.send
ws2_32.recv
сисером по netу это конечно сильно)
если трудностей нет, то их надо создать, иначе ломать неинтересно)
 
Ответить с цитированием

  #7  
Старый 16.09.2009, 02:22
lis84
Познающий
Регистрация: 28.04.2009
Сообщений: 61
Провел на форуме:
103259

Репутация: 37
По умолчанию

Эммм, а чем .net лечат?
я просто других инструментов не знаю.
Попробовал дисшарп и рефлектор, они выдают кучу функций без названий, ну и + я в c# не сильно шарю.

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

А про подмену через hosts я в первую очередь подумал. Просто тут надо будет абсолютному валенку объяснить как ставить веб сервер. Брр... я лучше доломаю получше, мне на работе куриц в бухгалтерии хватает.
 
Ответить с цитированием

  #8  
Старый 16.09.2009, 17:04
zeppe1in
Постоянный
Регистрация: 12.07.2006
Сообщений: 327
Провел на форуме:
1654818

Репутация: 117
По умолчанию

lis84
ну да, рефлектором надо. любой деобфускатор заюзать что бы в читаемый вид переименовал все функции. потом тут все строки зашифрованы, если их расшифровать то всё будет как на ладони).
рипнуть функцию которая их расшифровывает не проблемма, но вручную каждую строку смотреть запара хотя я нашол таки место проверки серйника. надо теперь проитись по всем функциям и заменить вызов расшивровщика на саму строку.)
------
открываеш в рефлекторе, F3 и щеш строки и константы "-2048782763" он найдёт одну функцию
а вней
Код:
            if ((this.​  || this.  ) && (this.(this.  , this..Text) !=  .(-2048733781)))
                {
                    return;
                }
это и есть онлайн проверка.
вот декодер строк http://www.sendspace.com/file/lswugk
вставлять цифры без минуса. и должен лежать в папке с ботвой.

Последний раз редактировалось zeppe1in; 16.09.2009 в 18:01..
 
Ответить с цитированием

  #9  
Старый 17.09.2009, 03:20
lis84
Познающий
Регистрация: 28.04.2009
Сообщений: 61
Провел на форуме:
103259

Репутация: 37
По умолчанию

Блин, а я что то даже не подумал что строки зашифрованны автором. Думал это фишка .net
Даже кажется знаю какая функция шифрует, когда в коде рылся постоянно на вязов её натыкался там где строки должны были быть.

спасибо, щас ещё покопаюсь.

Вот ещё вопросик. Я первый раз сталкиваюсь с .net после того как я найду в рефлекторе нужную функцию, как её фиксить то? Рефлектор даёт сишный код, который по моему стойкому подозрению потом не компильнётся. Чтобы в бинарнике что то править в рефлекторе никаких зацепок .

ПыСы. Программа после декомпиляции как и ожидалось не компилится
Программа декодировщик строк не запускается

Последний раз редактировалось lis84; 17.09.2009 в 09:59..
 
Ответить с цитированием

  #10  
Старый 17.09.2009, 10:52
0rs
Познающий
Регистрация: 30.12.2008
Сообщений: 64
Провел на форуме:
647156

Репутация: 76
Отправить сообщение для 0rs с помощью ICQ
По умолчанию

Чтобы править код нужен плагин Reflexil.
Как его использовать можно тут почитать http://www.cumps.be/reverse-engineering-with-reflector-and-reflexil/
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хакер и закон! SladerNon Болталка 17 12.11.2009 09:42
Исследователь выпускает утилиту для сокрытия вредоносных программ в .Net --StraNger-- Мировые новости 0 21.04.2009 05:42
Хостинги под всё! »Atom1c« ПО для Web разработчика 29 10.02.2009 17:56
Установка Windoze глазами линуксоида (100% факты) nerezus Болталка 47 16.10.2005 15:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ