• Как правильнее изучить ассемблер(дизассемблер) для написания бота(ММО)?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    old_mamont: содержимое данных игры тоже не хранится в ассемблере, это просто цифровые данные, с которыми можно работать на любом языке.

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

    А так, для пользования ollydbg, например было бы полезно знать стандартные виндовые функции, чтобы делать удобные брейкпоинты.
    Ответ написан
    5 комментариев
  • Как правильнее изучить ассемблер(дизассемблер) для написания бота(ММО)?

    GavriKos
    @GavriKos
    Ботов для игр на ассемблере не пишут. И вообще приложения под современные ОС и домашние архитектуры крайне редко пишут на ассемблере.
    Поэтому - учите С/С++. Как учить - гугл в помощь, вопросы поднимались сто раз.
    Но, для понимания - я бы не советовал эти языки для старта, вообще. Но это отдельная тема холивара - как и с чего учиться программировать.
    Ответ написан
    3 комментария
  • С чего начать обучение C# для разработки софта под соц.сети и дальнейшей работы с API этих соц.сетей?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Работа с API - это просто веб-запросы.

    Подготовка запросов и обработка ответов - это в большинстве своем сериализация/десериализация, в основном JSON-данных, реже XML.

    Все остальное будет зависеть от типа приложений, которые вы планируете разрабатывать.

    По работе с API социальных сетей лучше читать официальную документацию.

    У меня есть библиотека для авторизации по протоколу OAuth (используется многими, если не всеми, социальными сетями), которая помимо прочего, имеет унифицированные механизмы работы с API. Посмотреть на работу библиотеки можно по следующей ссылке: demo-oauth.nemiro.net

    Для многих крупных проектов (сайтов) можно найти готовые узкопрофильные решения.

    Ниже представлен небольшой пример использования библиотеки Nemiro.OAuth в проекте Windows Forms для авторизации через Instagram и использование полученного маркера доступа для загрузки списка последних изображений текущего пользователя. Изображения загружаются в ImageList и затем выводятся в ListView:
    using System;
    using System.Drawing;
    using System.Net.Http;
    using System.Windows.Forms;
    using Nemiro.OAuth;
    using Nemiro.OAuth.LoginForms;
    
    namespace InstagramWinForms
    {
    
      public partial class Form1 : Form
      {
    
        // базовый адрес API
        private const string API_BASE_URL = "https://api.instagram.com/v1";
    
        // элемент для хранения полученных изображений
        private ImageList ImageList = new ImageList();
    
        // элемент для вывода изображений
        private ListView ListView1 = new ListView();
    
        private string AccessToken;
    
        public Form1()
        {
          InitializeComponent();
    
          // размер изображений 150x150px, 16bit
          this.ImageList.ImageSize = new Size(150, 150);
          this.ImageList.ColorDepth = ColorDepth.Depth16Bit;
    
          // настраиваем список для вывода
          this.ListView1.View = View.LargeIcon;
          this.ListView1.LargeImageList = this.ImageList;
    
          this.ListView1.Dock = DockStyle.Fill;
    
          // добавляем список на форму
          this.Controls.Add(this.ListView1);
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
          // запрос на получение маркера доступа
          this.GetAccessToken();
        }
    
        private void GetAccessToken()
        {
          // создаем форму для Instagram
          // ВНИМАНИЕ: используйте собственный идентификатор и ключ
          // получить идентификатор и ключ можно на сайте instagram:
          // https://www.instagram.com/developer/clients/manage/
          var login = new InstagramLogin
          (
            // client id вашего приложения
            "9fcad1f7740b4b66ba9a0357eb9b7dda", 
            // client key вашего приложения
            "3f04cbf48f194739a10d4911c93dcece", 
            // требуется адрес возврата, 
            // можно использовать указанный, 
            // но лучше сделать свой
            "http://oauthproxy.nemiro.net/",
            // права доступа
            // https://www.instagram.com/developer/authorization/
            // для public_content (и возможно других) убедитесь, 
            // что в настройках приложения (на сайте instagram) 
            // в разделе Permissions нет никаких требований 
            // (если требования есть, то чтобы все работало, 
            // нужно их удовлетворить :-) ...)
            scope: "basic public_content",
            // требуем получить данные профиля пользователя
            loadUserInfo: true
          );
    
          // привязываем форму авторизации к текущей форме
          login.Owner = this;
    
          // показываем форму
          login.ShowDialog();
    
          if (login.IsSuccessfully)
          {
            // все прошло успешно, запоминаем маркер доступа
            this.AccessToken = login.AccessToken.Value;
    
            // выводим в заголовок текущей формы имя пользователя
            this.Text = (login.UserInfo.DisplayName ?? login.UserInfo.UserName);
    
            // получаем изображения
            this.GetRecentMedia();
          }
          else
          {
            MessageBox.Show("Error...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
        }
    
        private void GetRecentMedia()
        {
          // отправляем запрос на получение изображений
          OAuthUtility.GetAsync
          (
            String.Format
            (
              "{0}/users/self/media/recent?access_token={1}", 
              API_BASE_URL, 
              this.AccessToken
            ),
            // результат запроса будет передан в метод GetRecentMedia_Result
            callback: GetRecentMedia_Result
          );
        }
    
        private async void GetRecentMedia_Result(RequestResult result)
        {
          if (result.StatusCode == 200)
          {
            // получили успешный ответ
            // обрабатываем его
            foreach (UniValue item in result["data"])
            {
              // загружаем текущую картинку
              using (var client = new HttpClient())
              {
                var s = await client.GetStreamAsync(item["images"]["thumbnail"]["url"].ToString());
    
                // добавляем изображение в список
                Invoke(new Action(() => this.ImageList.Images.Add(Image.FromStream(s))));
              }
    
              // создаем элемент для вывода в список 
              var image = new ListViewItem();
              // название изображения
              image.Text = item["caption"]["text"].ToString();
              // индекс изображения в списке (ImageList)
              image.ImageIndex = this.ImageList.Images.Count - 1;
    
              // добавляем элемент в список
              Invoke(new Action(() => this.ListView1.Items.Add(image)));
            }
          }
          else
          {
            this.ShowError(result);
          }
        }
    
        private void ShowError(RequestResult result)
        {
          if (result["meta"]["error_message"].HasValue)
          {
            MessageBox.Show
            (
              result["meta"]["error_message"].ToString(), 
              "Error", 
              MessageBoxButtons.OK, 
              MessageBoxIcon.Error
            );
          }
          else
          {
            MessageBox.Show
            (
              result.ToString(), 
              "Error", 
              MessageBoxButtons.OK, 
              MessageBoxIcon.Error
            );
          }
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          this.GetRecentMedia();
        }
    
      }
    
    }

    preview.gif?raw=true
    Код проекта можно найти по следующей ссылке:
    https://github.com/alekseynemiro/nemiro.oauth.dll/...
    Ответ написан
    2 комментария