Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2012, 22:29   #1
alumium
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 17
Вопрос [DLL Injection] Чтение AnsiString чужого процесса

Добрый день форумчане! Сегодня возникла необходимость прочитать из процесса игры, при помощи DLL библиотеки, статический адрес - типа AnsiString (скорее именно он, т.к. отводится 1 байт на симол), где хранится ник игрока и записать его в свою переменную AnsiString. Чтение и запись уже разрешены, а ошибка заключается в том, что читается какой-то "левый" адрес (иногда нули). Надеюсь на вашу помощь)))))

Исходный код:
Код:
library NicknameReader;

uses
  windows, sysutils, ShareMem;

const
      LoginAddr:cardinal=$00C6AA40; // Статический адрес
      MAX_LENGTH_LOGIN:integer=304;
var ansi_login:ansistring;

procedure GetNickname;
    OldPPLogin:cardinal;
begin
      // Снятие защиты на запись и чтение
      VirtualProtect(Pointer(LoginAddr),MAX_LENGTH_LOGIN,PAGE_READWRITE,OldPPLogin);
      // Нижняя инструкция выдаёт ошибку как на скриншоте ((((
      ansi_login:=PAnsiString(LoginAddr)^; // ошибка
     // Возврат защиты
      VirtualProtect(Pointer(LoginAddr),MAX_LENGTH_LOGIN,OldPPLogin,OldPPLogin);   
end;

exports
  GetNickname;

begin
end.
Screenshot ошибки:

Последний раз редактировалось alumium; 18.08.2012 в 22:32.
alumium вне форума Ответить с цитированием
Старый 18.08.2012, 23:24   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почитайте про то что такое С-строки.
а именно PAnsiChar/PChar.
ради них не особо нужно инжектиться в общем то.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.08.2012, 23:29   #3
alumium
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 17
По умолчанию

Мне DLL инъекция в любом случае будет необходима, это будущий бот для игры
------ Добавлено позже ------
PAnsiChar исправил ситуацию, однако как мне узнать длину "ника" той самой AnsiString и как в последствии преобразовать в полноценную AnsiString??
Жду ответа, спасибо)

Последний раз редактировалось alumium; 19.08.2012 в 00:04.
alumium вне форума Ответить с цитированием
Старый 19.08.2012, 00:09   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

PAnsiChar отлично присваеваться к AnsiString это раз.
а второе есть strlen(lstrlenA из АПИ, а паскальный аналог не помню)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.08.2012, 16:40   #5
alumium
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 17
По умолчанию

Вопрос еще открыт, помогите написать функцию чтения AnsiString строки из чужого процесса через DLL.
Типо такой: function ReadAnsiString(Address: Cardinal):AnsiString;

Последний раз редактировалось alumium; 19.08.2012 в 16:44.
alumium вне форума Ответить с цитированием
Старый 19.08.2012, 16:44   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я уже ответил же, достаточно инфы.
Код:
Login:=PAnsiChar(LoginAddr);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.08.2012, 17:07   #7
alumium
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 17
Радость

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я уже ответил же, достаточно инфы.
Код:
Login:=PAnsiChar(LoginAddr);
Спасибо выручил, вот так заработало.
login:=AnsiString(PAnsiChar(LoginAd dr));


Тему можно закрывать.
alumium вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись в память чужого процесса dacorp Общие вопросы Delphi 0 13.01.2011 22:39
Общение DLL чужого процесса с програмой Johnson Общие вопросы Delphi 0 27.12.2010 10:19
Общение с DLL чужого процесса? Johnson Работа с сетью в Delphi 2 26.12.2010 12:57
закрытие чужого процесса Dimon Win Api 7 12.05.2010 12:01
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47