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

 eXeL@B —› Дневники и блоги —› ARCHANGEL's blog
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 13 июля 2012 18:28
· Личное сообщение · #1

Добрый день, уважаемые форумчане. Ни для кого не секрет, что решил я с недавних пор пойти учиться программированию. Поэтому стали меня интересовать практические аспекты кодинга, иногда весьма далёкие от вопросов реверсинга. Поэтому чтоб не засорять форум, решил создать этот блог. Стоит сказать, что вопросы, которые планируется тут разбирать, не такие уж и бесполезные. Они часто могут возникать при написании тех же кейгенов или тулз для реверсинга, так что, надеюсь, каждый сможет найти здесь что-нибудь интересное. Как некоторые уже догадались, вопросы Common Controls, простым числам, и сегодняшний вопрос по OpenGL как раз из серии учебных. Теперь о самом вопросе.

На днях выполнял задание про отрисовку простых фигур: треугольника, квадрата и т.д. Решено было выполнять рисование средствами OpenGL. Литературы по этому делу много, поэтому я разобрался, что и как. Т.е. в литературе советовали использовать бибилиотеку glut.dll, которая сама не относится к стандартному OpenGL, но её применение, как я понял, упрощает использование OpenGL в своих проектах. Далее я решил создать базовый класс для отрисовки треугольника, а от него создать производные классы для отрисовки других геометрических фигур. Но на практике получилась вот такая сложность. Дело в том, что glut, по сути, инкапсулирует функции Windows и OpenGL, что упрощает операции с ними. Но от базовых вещей же никуда не деться. Т.е. если процедура обработки оконных сообщений (CALLBACK WindowProc) должна присутствовать, то в классе она должна быть статической. Так и здесь:
Code:
  1. glutDisplayFunc(Draw); //где Draw - колбэк, а значит не может быть простым методом класса


Но вот проблема - мне нужно передать внутрь Draw несколько параметров. Являясь статическим методом, Draw не имеет указателя this, а значит не видит обычных полей. Статические поля он видит, но при попытке в конструкторе присвоить значения этим полям появляется ошибка линковки. Понятное дело, что по-хорошему, можно обойтись совсем без классов, но это превратит код в кашу - большое количество глобальных переменных, почти одинаковые функции со схожим функционалом принесут путаницу раньше, чем будут отрисованы несколько фигур. Кто посоветует, как быть в такой ситуации и как решить проблему со статическими функциями-членами?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 апреля 2013 11:48
· Личное сообщение · #2

Сейчас попытаюсь описать способ создания кастомного виджета в Qt Designer с его последующим добавлением к проекту. У Шлее есть прекрасный раздел, где он описывает, как создаются формы (виджеты) в среде Qt Designer, но очень туманно расписано, как эти формы потом прикреплять к проекту. Поэтому представим, что форма у нас уже есть, нужно как-то всунуть её в проект. Представим, что у нас есть некий MyForm.ui. Открыв его в дизайнере, выбираем в меню Форма -> Показать код. Когда код отображён, в окне с кодом давим кнопку Сохранить. Получаем файл с расширением .h. Потом запускаем Qt Creator, жмём "Создать проект", выбираем "другой проект", "пустой проект Qt. Когда создана директория пустого проекта, копируем туда файлы с расширением .ui и .h - т.е. нашу форму и код. Потом добавляем эти два файла к проекту, для этого правой кнопкой жмём на корневой узел дерева проекта и выбираем "Добавить существующие файлы..". Потом добавляем .cpp с кодоми дальше опять работаем по книге Шлее.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 24 апреля 2013 13:13
· Личное сообщение · #3

--> Алгоритмы на С++ <--

Вот недавно открыл для себя. Может, кому-то будет полезно.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 02 июня 2013 21:26
· Личное сообщение · #4

Вот решил на досуге почитать про новый стандарт С++0x (он же 11). Если кому тоже интересно, то --> Вот <--

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 июня 2013 11:16
· Личное сообщение · #5

Почему --> Эта ссылка <-- не добавлена в топике Опять .Net?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 12 июня 2013 16:42
· Личное сообщение · #6

ARCHANGEL пишет:
Почему --> Эта ссылка <-- не добавлена в топике Опять .Net?

Добавлена, но не в топик-старт: --> Link <--

-----
One death is a tragedy, one million is a statistic.


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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 июня 2013 16:48
· Личное сообщение · #7

Терзаю бедный C# - пытаюсь залогиниться на лабе программно.

Code:
  1.             HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(@"http://exelab.ru/f/");
  2.             wr.KeepAlive = true;
  3.             wr.Method = "POST";
  4.             wr.AllowAutoRedirect = false;
  5.             wr.UserAgent = @"Opera/9.80 (Windows NT 6.1; WOW64; Edition Indonesian Local) Presto/2.12.388 Version/12.14";
  6.             wr.Accept = @"text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
  7.             wr.ContentType = "application/x-www-form-urlencoded";
  8.             wr.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
  9.             wr.Headers.Add(HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.9,en;q=0.8");
  10.  
  11.  
  12.             byte[] buffer = Encoding.UTF8.GetBytes("user_usr=ARCHANGEL&user_pwd=here_was_my_pass&mode=login");
  13.             wr.ContentLength = buffer.Length + wr.Headers.ToByteArray().Length;
  14.             Stream ss = wr.GetRequestStream();
  15.  
  16.             ss.Write(buffer, 0, buffer.Length);
  17.             ss.Close();
  18.  
  19.             HttpWebResponse wa = (HttpWebResponse)wr.GetResponse();
  20.             CookieCollection cookies = wa.Cookies;
  21.             Encoding code = Encoding.GetEncoding(wa.CharacterSet);
  22.  
  23.             StreamReader strReader = new StreamReader(wa.GetResponseStream(), code);
  24.             string htmlText = strReader.ReadToEnd();
  25.             File.WriteAllText("D:\exelab.html", htmlText);


Expectation Failed получаю. Грустно. Что делать и чё такое может быть? Пасс, естественно, ненастоящий.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 20 июня 2013 17:23 · Поправил: neomant
· Личное сообщение · #8

Code:
  1.             wr.ContentLength = buffer.Length;
  2.             Stream ss = wr.GetRequestStream();
  3.  
  4.             ss.Write(buffer, 0, buffer.Length);
  5.  
  6.             HttpWebResponse wa = (HttpWebResponse)wr.GetResponse();

Длина - это только самого тела, без заголовков.
Закрывать поток не надо.

-----
Следуй за белым кроликом


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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 июня 2013 21:40
· Личное сообщение · #9

neomant
Да, точно. Запрос завершился успешно. Но ответ так и не записался на диск. Я так полагаю, что проблема в том, что Responce Header содержит поле Content-Length, в котором передаётся ноль. Пойду погуглю.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 21 июня 2013 11:27 · Поправил: ARCHANGEL
· Личное сообщение · #10

Что-то в книгах по шарпу тема работы с сетью не раскрыта. Может, кто посоветует статьей или книг каких-то, где всё нормально описывается, потому что вопросов масса с этими классами и методами. Например, нагуглил, в чём была проблема с вышеприведенным кодом при работе через прокси. Оказывается, для прокси нужно выставить

Code:
  1. System.Net.ServicePointManager.Expect100Continue = false;


Теперь следующая проблема - не получается заюзать куки (cookies) после авторизации. Смотрел через Http Analyzer - не пойму, как Опера решает, какие куки нужно передавать в следующем за POST-запросом GET-запросе. Как вообще создать GET-запрос? В гугле куча ссылок на одн и тот же код: --> Вот он <--. Но это совсем не то, если, к примеру, у меня уже есть объект HttpWebRequest, и мне нужно в нём исправить свойство Method на GET, но как потом отправить GET запрос с нужным мне набором кукисов и получить ответ? И сами кукисы - то это контейнер, то коллекция, то вообще строка (если извлекать через WebHeaderCollection.Get("Set-Cookie"). Но вот как с этой хренотенью разобраться?

Спустя некоторе время
Нагуглил книгу .NET сетевое программирование для профессионалов - Кровчик и др.. Пробую читать.

Спустя ещё некотроое время
С авторизацией и кукисами разобрался. Давайте кратенько рассмотрим суть проблемы. Если я в чём-то неправ, поправьте.

Code:
  1.                class NetConnector
  2.         {
  3.             private HttpWebRequest wr;
  4.             private CookieCollection cookies;
  5.             public Encoding responseEncoding
  6.             {
  7.                 get;
  8.                 set;
  9.             }
  10.  
  11.             public NetConnector(string UriAddress)
  12.             {                
  13.                 wr = (HttpWebRequest)WebRequest.Create(UriAddress);
  14.                 System.Net.ServicePointManager.Expect100Continue = true;
  15.                 wr.Accept = @"text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
  16.                 wr.KeepAlive = true;
  17.                 wr.AllowAutoRedirect = false;
  18.                 wr.UserAgent = @"Opera/9.80 (Windows NT 6.1; WOW64; Edition Indonesian Local) Presto/2.12.388 Version/12.14";
  19.                 wr.ContentType = "application/x-www-form-urlencoded";
  20.                 wr.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
  21.                 wr.Headers.Add(HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.9,en;q=0.8");
  22.             }
  23.             public NetConnector(string UriAddress, string ProxyAddress, int ProxyPort)
  24.             {                
  25.                 wr = (HttpWebRequest)WebRequest.Create(UriAddress);
  26.                 System.Net.ServicePointManager.Expect100Continue = false;
  27.                 WebProxy proxy = new WebProxy(ProxyAddress, ProxyPort);
  28.                 wr.Proxy = proxy;
  29.                 wr.Accept = @"text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
  30.                 wr.KeepAlive = true;
  31.                 wr.AllowAutoRedirect = false;
  32.                 wr.UserAgent = @"Opera/9.80 (Windows NT 6.1; WOW64; Edition Indonesian Local) Presto/2.12.388 Version/12.14";
  33.                 wr.ContentType = "application/x-www-form-urlencoded";
  34.                 wr.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
  35.                 wr.Headers.Add(HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.9,en;q=0.8");
  36.             }
  37.             public void PostRequest(string RequestParam)
  38.             {
  39.                 wr.Method = "POST";
  40.                 byte[] buffer = Encoding.UTF8.GetBytes(RequestParam);
  41.                 wr.ContentLength = buffer.Length;
  42.                 CookieContainer cook = new CookieContainer();
  43.                 wr.CookieContainer = cook;
  44.                 Stream stream = wr.GetRequestStream();
  45.                 stream.Write(buffer, 0, buffer.Length);
  46.                 HttpWebResponse answer = (HttpWebResponse)wr.GetResponse();
  47.                 cookies = answer.Cookies;
  48.             }
  49.             public string GetRequest(string AddrToAsk)
  50.             {
  51.                 HttpWebRequest r = (HttpWebRequest)HttpWebRequest.Create(AddrToAsk);
  52.                 r.CookieContainer = new CookieContainer();
  53.                 r.CookieContainer.Add(cookies);
  54.                 HttpWebResponse response = (HttpWebResponse)r.GetResponse();
  55.                 responseEncoding = Encoding.GetEncoding(response.CharacterSet);
  56.                 Stream s = response.GetResponseStream();
  57.                 StreamReader reader = new StreamReader(s, responseEncoding);
  58.                 string content = reader.ReadToEnd();
  59.                 reader.Close();
  60.                 s.Close();
  61.                 return content;
  62.             }
  63.         }


У класса NetConnector есть два конструктора - один для прямого соединения, другой - для прокси без авторизации. Есть два метода - один для отправки запроса POST, другой - для GET. Заголовки http типа accept, user-Agent и других устанавливаются в конструкторе. Сразу оговорюсь, что класс предназначен для разовой авторизации с последующей загрузкой с сервера одной страницы с персональными данными.
Далее краеугольный камень работы с кукисами опишу подробнее.

Экземпляр HttpWebRequest создаётся в конструкторе:

Code:
  1. wr = (HttpWebRequest)WebRequest.Create(UriAddress);


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

Code:
  1.                 CookieContainer cook = new CookieContainer();
  2.                 wr.CookieContainer = cook;


Ели этого не сделать, то куки не получится достать из ответа через свойство. И вот тут интерес, достаём мы уже коллекцию:

Code:
  1.                 HttpWebResponse answer = (HttpWebResponse)wr.GetResponse();
  2.                 cookies = answer.Cookies;


Её мы храним для использования в следующем запросе. Как я понял, в дотнете для HttpWebRequest поддерживается правило "один экземпляр - один тип запроса", т.е. выбрав в конструкторе метод POST, мы его уже не изменим. Поэтому для GET создаётся ещё один экземпляр. Явно писать тип запроса не нужно, GET идёт по умолчанию. Создав новый экземпляр, мы создаём в нём пустой контейнер для куки, и добавляем туда нашу коллекцию, полученную выше:

Code:
  1.                 HttpWebRequest r = (HttpWebRequest)HttpWebRequest.Create(AddrToAsk);
  2.                 r.CookieContainer = new CookieContainer();
  3.                 r.CookieContainer.Add(cookies);


Если ответ нужно записать на диск (например, как html страницу), то нужно помнить, что для записи в файл нужно применять объект Encoding отдельно - неважно, что строа уже была преобразована при чтении из потока. Для этого responseEncoding и сделан свойством. Т.е. пример записи может выглядеть так:

Code:
  1. File.WriteAllText(@"D:\exelab.html",connect.GetRequest(@"http://exelab.ru/f/"),connect.responseEncoding); // NetConnector connect


-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 21 июня 2013 18:53 · Поправил: ARCHANGEL
· Личное сообщение · #11

Странно, теперь - другая проблема. Строка:

Code:
  1. wr.CookieContainer = new CookieContainer();


как бы отрабатывает, но в POST запросе нет заголовка с куками. Соответственно и в ответе нет. И не получается указать серверу, что я залогинился. Что за дела?

Добавлено

Переделал код:

Code:
  1.         public string GetRequest(string AddrToAsk)
  2.         {
  3.             HttpWebRequest r = (HttpWebRequest)HttpWebRequest.Create(AddrToAsk);
  4.             r.CookieContainer = new CookieContainer();
  5.             r.CookieContainer.Add(cookies);
  6.             r.Accept = wr.Accept;
  7.             r.ContentType = wr.ContentType;
  8.             r.UserAgent = wr.UserAgent;
  9.             r.KeepAlive = wr.KeepAlive;
  10.             r.AllowAutoRedirect = wr.AllowAutoRedirect;
  11.  
  12.             HttpWebResponse response = (HttpWebResponse)r.GetResponse();
  13.             responseEncoding = Encoding.GetEncoding(response.CharacterSet);
  14.             Stream s = response.GetResponseStream();
  15.             StreamReader reader = new StreamReader(s, responseEncoding);
  16.             string content = reader.ReadToEnd();
  17.             reader.Close();
  18.             s.Close();
  19.             return content;
  20.         }


И добавил вручную содержимое куки перед отправкой пост-запроса:

Code:
  1.             wr.CookieContainer = new CookieContainer();
  2.             wr.CookieContainer.Add(new Uri(@"http://exelab.ru/f"), new Cookie("old_conf_time","1371889122"));


Но сервак лабовский мне не возвращает куки. Их тупо нет. Что делать и почему это может быть? Вот весь ответ сервера.

Code:
  1. (Status-Line):HTTP/1.1 301 Moved Permanently
  2. Date:Fri, 21 Jun 2013 20:35:20 GMT
  3. Server:Apache/2.4.3
  4. Location:http://exelab.ru/f/
  5. Content-Length:227
  6. Content-Type:text/html; charset=iso-8859-1


Блин, чуваки, вы не поверите
Запостил сюда ответ от сервака и стал думать, что же имелось ввиду под фразой Moved Permanently. И подумал, что перемещён он не очень-то и далеко - на адрес Location:http://exelab.ru/f/. Так я ж по нему и обращаюсь. А нет! Я (Василий Алибабаевич, нехороший человек) слэш последний удалил случайно. Вернул слэш, и всё стало прекрасно работать.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 25 июня 2013 16:31
· Личное сообщение · #12

Блин, очередной трабл с куками. Перед отправкой GET запроса хочу записать куки вида __utma=69486357.837012945.1372160233.1372160233.1372160233.1; и т.д. Делаю так:

Code:
  1.             wr.Headers.Add(HttpRequestHeader.Cookie,
  2.                 @"__utma=69486357.837012945.1372160233.1372160233.1372160233.1;
  3.                             __utmb=69486357.3.10.1372160233; __utmc=69486357;
  4.                             __utmz=69486357.1372160233.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)");


Не работает, или так:

Code:
  1.           WebReq.Headers["Cookie"] = @"__utma=69486357.837012945.1372160233.1372160233.1372160233.1;
  2.               __utmb=69486357.3.10.1372160233; __utmc=69486357;
  3.             __utmz=69486357.1372160233.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)";


Тоже не работает. И даже так:

Code:
  1. //WebReq.CookieContainer.Add(new Cookie("__utma", "69486357.837012945.1372160233.1372160233.1372160233.1", "/", @"здесь нормальный IP"));
  2.             //WebReq.CookieContainer.Add(new Cookie("__utmb", "69486357.3.10.1372160233", "/", @"здесь нормальный IP"));


Тоже не работает. Без ошибок выполняется, но куки тупо не записываются в заголовок. Почему? Какого хера? Уже всю башку сломал и весь гугл прогуглил.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 25 июня 2013 17:01 · Поправил: neomant
· Личное сообщение · #13

Не проверял, но могу предложить:
- создать контейнер для куки, добавить в него переменные по одной и присвоить контейнер запросу;
- добавлять по одной переменной с помощью Headers.Add(HttpRequestHeader.Cookie, ...);
- может быть проблемы с форматом строки куков(лишние разделители при переносе строки).

Можно после добавления куков выпасть на точке останова и просмотреть контейнер.

-----
Следуй за белым кроликом





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 25 июня 2013 22:24
· Личное сообщение · #14

neomant
Попробую. Сейчас в контексте выполняемого тз нет необходимости эти гугловские куки юзать, но мне важен сам факт - почему они не записываются. Буду пытаться.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 27 июня 2013 09:15 · Поправил: ZaZa
· Личное сообщение · #15

ARCHANGEL
Я делал так:
Отправляем по POST на форму логина. Соответственно, при правильном логине и пароле, возвращается контейнер Cookies...
При последующем запросе, будь то GET или POST, указываем контейнер...
У меня работало

Примерно вот так:
Code:
  1.     Public Sub LogonPage(ByVal UserName As String, ByVal Password As String, ByVal IsInvisible As Boolean)
  2.         Dim PostData As String = "user_usr=" & UserName & "&user_pwd=" & Password & "&mode=login&invisible=" & IIf(IsInvisible = True, "1", "0")
  3.         Dim CookieJar As New CookieContainer
  4.  
  5.         Dim Request As HttpWebRequest = HttpWebRequest.Create(clsSettings.URL_FORUM)
  6.  
  7.         Request.Method = "POST"
  8.         Request.UserAgent = "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.00"
  9.         Request.Host = "exelab.ru"
  10.         Request.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
  11.         Request.Headers.Add("Accept-Language", "ru")
  12.         Request.Headers.Add("Accept-Encoding", "gzip, deflate")
  13.         Request.Referer = clsSettings.URL_FORUM
  14.         Request.CookieContainer = CookieJar
  15.         Request.AllowAutoRedirect = False
  16.         Request.ContentLength = PostData.Length
  17.         Request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"
  18.  
  19.         Dim requestStream As Stream = Request.GetRequestStream()
  20.         Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData)
  21.  
  22.         requestStream.Write(postBytes, 0, postBytes.Length)
  23.         requestStream.Close()
  24.  
  25.         Dim Response As HttpWebResponse = Request.GetResponse()
  26.  
  27.         CookieJar.Add(Response.Cookies)
  28.         Settings.MAIN_Cookies = CookieJar
  29.  
  30.         Dim AnsReader As String = (New StreamReader(Response.GetResponseStream(), Encoding.Default)).ReadToEnd
  31.  
  32.         Response.Close()
  33.     End Sub


-----
One death is a tragedy, one million is a statistic.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 июня 2013 10:19
· Личное сообщение · #16

ZaZa
Та не - на форуме экзелаба у меня уже всё работает. Я логинился после этого на другой ресурс. Там обязательно надо было указать Referer, без этого не хотело логиниться, а я сразу как-то просмотрел этот момент. Плюс ещё в качестве дополнительного небольшого напряга там на форме логина сделали один скрытый элемент с атрибутом, который сервер постоянно меняет при каждом GET-запросе. Но и эта проблема легко решалась - я просто парсил с помощью регэкспов страницу, находил этот атрибут и подставлял в пост-запрос. Естественно, также подставлял куки, полученные при первом GET. Если интересует, что за ресурс, могу в личку отписать.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 27 июня 2013 15:15 · Поправил: ZaZa
· Личное сообщение · #17

ARCHANGEL пишет:
Если интересует, что за ресурс, могу в личку отписать.

Спасибо, но пока нет времени!

-----
One death is a tragedy, one million is a statistic.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 июля 2013 23:35 · Поправил: ARCHANGEL
· Личное сообщение · #18

На днях искал одно, а нашёл --> Это <--. На последней странице есть список используемой литературы. Особенно радует фамилия автора в третьем пункте, причём у автора же есть и сайт, могли уже и посмотреть, даже из доменного имени --> http://www.ricardonarvaja.info/ <-- видно, что писать в методичке Нарваха как-то нехорошо. Особенно если универ методичку составлял.

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

Code:
  1. //пример 1
  2. push first_param
  3. xor ecx,ecx 
  4. push 5
  5. pop eax
  6. push second_param
  7. lea ecx,[edx + 5]
  8. call Need_Function


Или так:

Code:
  1. //пример 2 - по-простому
  2. push first_param
  3. push second_param
  4. call Need_Function


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

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 23 июля 2013 10:06
· Личное сообщение · #19

В идеале хорошо бы было сначала как-то снять обфускацию.

-----
Следуй за белым кроликом





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 23 июля 2013 10:12 · Поправил: ARCHANGEL
· Личное сообщение · #20

neomant
Там обфускации нет, инструкции между push first_param и push second_param тоже полезные и нужные, в дальнейшем используются. Просто компилятор сгенерил в одном случае такой код, а в другом - немного другой. Ну это как в студионом компиляторе, например, API может вызываться через call dword ptr, а может например, так:

Code:
  1. mov esi, ApiAddress
  2. ...
  3. call esi


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

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 23 июля 2013 11:52
· Личное сообщение · #21

Меня эта конструкция смутила:
Code:
  1. xor ecx,ecx 
  2. ...
  3. lea ecx,[edx + 5]

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

-----
Следуй за белым кроликом





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 24 июля 2013 13:31
· Личное сообщение · #22

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

Code:
  1. MessageBoxA(NULL,"\0x41\0x42\0x00","error",MB_OK);


Должно на выходе показать мне сообщение AB, но в памяти студийный компилятор формирует мне вот такую хрень:

Code:
  1. 00C72384 >00 78 34 31 00 78 34 32 00 78 30 30              .x41.x42.x00


Как в памяти получить 00C72384 >41 42 00 ???

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 24 июля 2013 13:57
· Личное сообщение · #23

ARCHANGEL пишет:
"\0x41\0x42\0x00"

"\x41\x42\x00" ?

-----
http://ntinfo.biz


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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 24 июля 2013 14:51
· Личное сообщение · #24

hors
Спасибо, очень помогли. Сделал, и всё сразу заработало. А так, видимо символ "" к нулю применялся, а остальное тупо шло как строка.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 26 июля 2013 10:07
· Личное сообщение · #25

--> C# регулярные выражения - справочник <--. Всё собираюсь почитать и забываю, пусть тут будет ссылка, может, кому пригодится, и я хоть буду знать, где искать, если что.

-----
Stuck to the plan, always think that we would stand up, never ran.


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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 30 июля 2013 14:56
· Личное сообщение · #26

--> Коллекция примеров 64-битных ошибок в реальных программах <--

Весьма занимательное чтиво, не лишённое косяков, но занимательное.

-----
Stuck to the plan, always think that we would stand up, never ran.


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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 01 августа 2013 13:29 · Поправил: ARCHANGEL
· Личное сообщение · #27

--> TiGa's Video Tutorial Series on IDA Pro <--

Когда решил начать смотреть, то делал это больше от "нечего делать", типа, да что там нового может быть? А вот и нет, уроки очень занимательны, всем, даже тем, кто юзает иду и так, советую глянуть. Я, например, после этого переосмыслил использование иды как дебаггера.

-----
Stuck to the plan, always think that we would stand up, never ran.


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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 сентября 2013 16:03
· Личное сообщение · #28

Эх, продолжается моя нелёгкая учёба. На этот раз возник у меня вопрос по графам. Точнее, есть у меня связный неориентированный граф. Города и расстояния. Хочу (ну, не я, азадание такое) найти все пути из пункта А в пункт Б. Да, пользовался гуглом. Решения не нашлось. Если кто-то нашёл, киньте ссылкой. Также был бы признателен за любые комментарии вплоть до описания алгоритма на пальцах или на любых других подручных средствах. Суть вещей я понимаю, т.е. есть реализация обхода в глубину и поиска первого попавшегося пути. А вот со всеми путями что-то пока не получилось. Велосипед изобретать не хочется, хочется какого-то правильного грамотного решения. Надеюсь на ваши предложения.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 08 сентября 2013 16:53
· Личное сообщение · #29

не верю что в гугле ничего нет по ключевым словам
graph find all paths




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 сентября 2013 18:04
· Личное сообщение · #30

reversecode
По этому запросу гугл выдал много всего. По самой первой ссылке нашёл вот это:

One possible solution to find all paths [or all paths up to a certain length] from s to t is BFS, without keeping a visited set

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

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

Далее допустим, обхожу я граф в глубину. И тут во время обхода нашёл я один из путей. Текущая реализация, которая есть у меня, тут же завершает свою работу и возвращает этот путь. А нужно вернуть путь, но продолжать обход. Т.е. при выходе из функции обхода нужно удалять текущую вершину из списка пройденных. Попробую всё это реализовать...

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 сентября 2013 00:10
· Личное сообщение · #31

--> FaQ по IDA Pro <--
Вполне годится для ответов на многие простые вопросы.

-----
Stuck to the plan, always think that we would stand up, never ran.



<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Дневники и блоги —› ARCHANGEL's blog
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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