Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Инъекция нужного значения в клиент

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 17.07.2012, 10:17   #16
 Пехотинец
Аватар для Nek1t
 
Nek1t на правильном путиNek1t на правильном пути
Регистрация: 31.08.2010
Сообщений: 64
Популярность: 129
Сказал(а) спасибо: 30
Поблагодарили 12 раз(а) в 7 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от dwa83Посмотреть сообщение
Если не получится, попробуй не pString а (void*)(&pString )

Вот за это спасибо, в этом была проблема.

Ну что, будет обещанная функция нажатия кнопки? Ну или хотя бы наводку дайте.

Последний раз редактировалось Nek1t; 17.07.2012 в 10:42.
  Ответить с цитированием
Старый 17.07.2012, 23:42   #17
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от Nek1tПосмотреть сообщение
Вот за это спасибо, в этом была проблема.

Ну что, будет обещанная функция нажатия кнопки? Ну или хотя бы наводку дайте.

Я надеялся что вы сами это все напишите, разберетесь, прочувствуете, а не dwa83 замучаете, что он вам все свои наработки отдаст, лишь бы отстали )).
Ладно, выложу... попозже... Вникайте пока в то что dwa83 написал.
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
Старый 18.07.2012, 10:39   #18
 Пехотинец
Аватар для Nek1t
 
Nek1t на правильном путиNek1t на правильном пути
Регистрация: 31.08.2010
Сообщений: 64
Популярность: 129
Сказал(а) спасибо: 30
Поблагодарили 12 раз(а) в 7 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от krukovisПосмотреть сообщение
Я надеялся что вы сами это все напишите, разберетесь, прочувствуете, а не dwa83 замучаете, что он вам все свои наработки отдаст, лишь бы отстали )).
Ладно, выложу... попозже... Вникайте пока в то что dwa83 написал.

Вникнул уже давно. Я уже неделю с этим кодом сижу, а оказывается то не хватало лишь "&".
  Ответить с цитированием
Старый 18.07.2012, 23:30   #19
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от Nek1tПосмотреть сообщение
Ну что, будет обещанная функция нажатия кнопки?

Вот http://zhyk.ru/forum/showthread.php?t=458202
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Nek1t (19.07.2012), vladoscom93 (27.07.2012)
Старый 21.07.2012, 17:07   #20
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

у меня вопрос нельзя ли вместо
Код:
addr = Read_32(addr+0x08)
использовать
Код:
readprocessmemory(hProcess,ptr(addr+$8),@addr,sizeof(addr),rw)
в чем плюсы Read_32?

Добавлено через 4 минуты
и еще как перевести этот код в Delphi?
Код:
char mass[20]={0};
Read_Mass(addr,mass,20);
AnsiString name=mass;
так будет верно?
Код:
var mass:array[1..20] of char;
     name:AnsiString;
begin
    readprocessmemory(hProcess,ptr(addr),@mass,sizeof(mass),rw);
    i:=1;
    while mass[i]<>' ' do
       begin
         name:=name+mass[i];
         inc(i);
       end;
end;

Последний раз редактировалось vladoscom93; 21.07.2012 в 17:16. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 21.07.2012, 23:11   #21
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
в чем плюсы Read_32?

Запись проще, по сути эта функция - то же самое, что вы и написали, вот так она выглядит
Код:
DWORD READER::Read_32(DWORD addr)
{
  DWORD value;
  ReadProcessMemory(hProcess,(void*)addr,&value,4,0);
  return value;
}
Хотя, лучше бы её сделать inline

По сути
Код:
i:=1;
    while mass[i]<>' ' do
       begin
         name:=name+mass[i];
         inc(i);
       end;
можно заменить на
Код:
name:=mass;
При присвоении самообрежется по окончании "правильных" символов(в с++ это точно, насчёт делфи не знаю)
И ещё, если в mass считывается юникод, то простым приравниванием отрежется только первый символ, так как каждый символ юникода 2 байта, а ансистринг 1, потому каждый второй байт будет восприниматься как код непечатоемого символа и соответственно как конец строки.
Кстати строка скорее всего не пробелом заканчивается..
ПС: в темке, что я давал, указано какие строки по каким оффсетам в юникоде.
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 21.07.2012 в 23:22.
  Ответить с цитированием
Пользователь сказал cпасибо:
vladoscom93 (27.07.2012)
Старый 21.07.2012, 23:30   #22
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от dwa83Посмотреть сообщение
Кстати строка скорее всего не пробелом заканчивается..

я ошибся )) я хотел указать пустой символ тоесть так
Код:
''
Добавлено через 1 час 12 минут
dwa83, а как выглядит у тебя процедура readmass?

Последний раз редактировалось vladoscom93; 22.07.2012 в 00:43. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 22.07.2012, 00:58   #23
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Инъекция нужного значения в клиент

Конец строки - это #10, или я не в теме?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 22.07.2012, 01:28   #24
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
dwa83, а как выглядит у тебя процедура readmass?

void READER::Read_Mass(DWORD addr, char* mass, int len)
{
ReadProcessMemory(hProcess,(void*)addr,mass,len,0) ;
}
Цитата:
Сообщение от VeTaL_UAПосмотреть сообщение
Конец строки - это #10, или я не в теме?

Я точно не в курсе, но мне кажется что там строки с завершающим нулём.
Я считываю с запасом, с лишним хвастиком, а при приравнивании само определяет конец строки
char mass[20]={0};
Read_Mass(addr,mass,20);
AnsiString name=mass;
if (name==winname) return result;
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 22.07.2012 в 01:33.
  Ответить с цитированием
Пользователь сказал cпасибо:
vladoscom93 (27.07.2012)
Старый 23.07.2012, 03:42   #25
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

извиняюсь за тупость, а как выглядит процедура
Код:
client.mem.Write_32(client.mem.CtrlEditTextPtr(client.mem.WinStruct("Win_Login"),8),(DWORD)client.inject.pLogin);
в общем суть вроде ясна ее 1 параметр ее это адрес по которому запишем, а 2 параметр адрес по которому записан наш логин в выделенной памяти... процедура внутри не так выглядит случайно
Код:
WriteProcessMemory(hProcess,ptr(наш 1 параметр),@2 параметр,sizeof(2 параметр),rw)
еще раз заранее извиняюсь за тупняки уже глаза слипаются)

за 2 параметр сойдет такая функция?
Код:
function WriteLogin(ProcessID: Cardinal; login:AnsiString):Dword;
begin
ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ThreadAddr, @StrToByte(login), 256, lpNumberOfBytes);
result:=ThreadAddr;
end;

Последний раз редактировалось vladoscom93; 23.07.2012 в 03:52.
  Ответить с цитированием
Старый 23.07.2012, 05:36   #26
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

вот немного разберу функцию по кусочкам, а то нечитабельно совсем
Код:
DWORD winstruct=client.mem.WinStruct("Win_Login");
DWORD textpointer=client.mem.CtrlEditTextPtr(winstruct,8);
client.mem.Write_32(textpointer, (DWORD)client.inject.pLogin); 
// тут мы записываем по адресу в структуре контрола где лежит АДРЕС начала текста(указатель на текст) своё значение(наш адрес)

CtrlStruct+0x13FC; - если просто сложить и не читать по сумме значение, то получим адрес, куда подставлять свой
если мы считаем по этой сумме, то получим адрес уже текста, а не указателя на него


DWORD READER::CtrlEditTextPtr(DWORD winstruct, int nomctrl)
{  
  DWORD addr = Read_32(winstruct+0x1C8);
  for (int i=0; i<nomctrl; i++)
  addr = Read_32(addr+0x04);
  addr = Read_32(addr+0x08);
  return addr+0x13FC;
}
return addr+0x13FC; // тут просто складываем и возвращаем без считывания адрес указателя а не адрес самого текста

Добавлено через 6 минут
Цитата:
Сообщение от VeTaL_UAПосмотреть сообщение
Конец строки - это #10, или я не в теме?

Кстати проверил я, не знаю везде ли так, но в описании скиллов точно, ни 10 ни 13 символы текст не оканчивают, после них дальше выводится текст. В тексте скиллов например такое вот сочетание между строчек \r\n\r\n (13 10 13 10). Так там делается пустая строка между строками. А весь текст уже заканчивается нулём, ну тоесть двумя нулями. так как юникод.
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 23.07.2012 в 05:42. Причина: Добавлено сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
vladoscom93 (27.07.2012)
Старый 23.07.2012, 17:18   #27
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

помогите плиз слепил пробную программку, которая вставляет текст в поле логина, но при нажатии на кнопку она виснет, есть подозрения, что в конце я неправильно делаю подмену указателей, вот код:
Код:
type ByteArray = array of byte;

const
    GA = $00A57ACC;

var
  Form1: TForm1;
  rw: Cardinal;
  hProcess: Dword;
  xByte: ByteArray;

implementation

{$R *.dfm}


function Read_32(Addr: Dword): Dword;
var value: Dword;
begin
  ReadProcessMemory(hProcess, ptr(addr), @value, sizeof(value), rw);
  result := value;
end;


function WinStruct(WinName: AnsiString): Dword;
var
    arr, addr, next, res: Dword;
    mass: array[1..20] of Char;
    name: AnsiString;
begin
  arr := Read_32(GA);
  arr := Read_32(arr + $18);
  arr := Read_32(arr + $08);
  addr := Read_32(arr + $AC);
  while (addr <> null) do
    begin
      next := Read_32(addr);
      addr := Read_32(addr+$08);
      res := addr;
      addr := Read_32(addr+$4C);
      ReadProcessMemory(hProcess, ptr(addr), @mass, sizeof(mass), rw);
      name := mass;
      if (name = WinName) then
        begin
          result := res;
          exit;
        end;
      addr := next;
    end;
  addr := Read_32(arr+$8C);
  while (addr <> null) do
    begin
      next := Read_32(addr);
      addr := Read_32(addr+$08);
      res := addr;
      addr := Read_32(addr+$4C);
      ReadProcessMemory(hProcess, ptr(addr), @mass, sizeof(mass), rw);
      name := mass;
      if (name = WinName) then
        begin
          result := res;
          exit;
        end;
      addr := next;
    end;
  result := 0;
end;


function CtrlEditTextPtr(winstruct: Dword; nomctrl: integer): Dword;
var
    addr: Dword;
    i: integer;
begin
  addr := Read_32(winstruct + $1C8);
  for i:=1 to nomctrl do
    addr := Read_32(addr + $04);
  addr := Read_32(addr + $08);
  result := addr + $13FC;
end;

function IntToByte(Value:Integer): Byte;
begin
  if Value<0 then
    Result:=0
  else
    if Value>255 then
      Result:=255
    else
      Result:=Value;
end;

function StrToAscii(const S: string): ByteArray;
var
  I: Integer;
begin
  SetLength(Result, Length(S));
  for I := 1 to Length(S) do
  begin
    result[i]:=IntToByte(ord(S[I]));
  end;
end;

function WriteLogin(login: String): pointer;
var
    ThreadAddr: pointer;
begin
  xByte := StrToAscii(login);
  ThreadAddr := VirtualAllocEx(hProcess, nil, 256, MEM_COMMIT, PAGE_READWRITE);
  WriteProcessMemory(hProcess, ThreadAddr, @xByte, sizeof(xByte), rw);
  result:=ThreadAddr;
end;

procedure connect;
var
  PID: dword;
  WID: Thandle;
begin
  WID:=FindWindow(nil,'Perfect World');
  GetWindowThreadProcessId(WID, @PID);
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  connect;
  if hProcess<>0 then
    WriteProcessMemory(hProcess, ptr(CtrlEditTextPtr(WinStruct('Win_Login'), 8)), WriteLogin('proba'), sizeof(xByte),rw);
end;

Последний раз редактировалось vladoscom93; 23.07.2012 в 21:15.
  Ответить с цитированием
Старый 23.07.2012, 19:55   #28
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Попробуйте после всего этого..
result[i]:=IntToByte(ord(S[I]));
в массив после логина 2 нуля добавить..
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Пользователь сказал cпасибо:
vladoscom93 (27.07.2012)
Старый 23.07.2012, 20:59   #29
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

все равно тоже самое... еще в панели уведомлений почему-то выскакивают сообщения
Код:
[Hint] Unit1.pas(74): Value assigned to 'WinStruct' never used
[Hint] Unit1.pas(69): Value assigned to 'res' never used
[Hint] Unit1.pas(61): Value assigned to 'WinStruct' never used
[Hint] Unit1.pas(56): Value assigned to 'res' never used
решил проблему с ошибками добавив exit в цикл при выполнении условия, но программа виснет все равно...

программа перестала виснуть Оо но логин все также не добавляет

Последний раз редактировалось vladoscom93; 23.07.2012 в 21:27.
  Ответить с цитированием
Старый 23.07.2012, 22:05   #30
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

И кстати, логин должен быть строкой юникода а не ascii
+13FC+0 - EditText (unicode string)
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет нужного кол-ва побед rallySasha85 Общение и обсуждение по World of Tanks 2 30.05.2012 04:25
[Статья] SQL инъекция 6a4a Баги и читы Lineage 2 48 01.02.2011 15:44
[Уязвимость] [VIP] Инъекция некоторых птс Hummel Подполье Lineage 2 (0 уровень) 0 22.11.2008 19:01

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

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

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