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

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

-

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

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

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

сделал кодировку как вы и сказали... так же ничего не пишет в поле логина, но зато пока эксперементировал с типами клиент бывало вылетал, следовательно данные пердаются, но поле все равно не заполняется, вот переделанный код
Код:
var
  Form1: TForm1;
  rw: Cardinal;
  hProcess: Dword;
  xByte: ByteArray;
  prov:array[0..255] of WideChar;

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;
    i:integer;
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);
      i:=1;
      while mass[i]<>'' do
       begin
         name:=name+mass[i];
         inc(i);
       end;
      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);
      i:=1;
      while mass[i]<>'' do
       begin
         name:=name+mass[i];
         inc(i);
       end;
      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 WriteLogin(login: String): pointer;
var
    ThreadAddr: pointer;
begin
  StringToWideChar(login, prov, Length(login)+1);
  ThreadAddr := VirtualAllocEx(hProcess, nil, 256, MEM_COMMIT, PAGE_READWRITE);
  WriteProcessMemory(hProcess, ThreadAddr, @prov, sizeof(prov), 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
     begin
       WriteProcessMemory(hProcess, ptr(CtrlEditTextPtr(WinStruct('Win_Login'), 8)), WriteLogin('proba'), sizeof(prov),rw);
     end
  else
    showmessage('îøèáêà');
end;
голова кругом уже

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

Такие вот моменты..
prov:array[0..255] of WideChar;
WideChar - двухбайтный по размеру, итого 256*2=512
Вы выделяете 256 байт
VirtualAllocEx(hProcess, nil, 256, MEM_COMMIT, PAGE_READWRITE);
и помоему записываете 512, проверьте какое число получается из sizeof(prov).
Так же попробуйте заполнять prov нулями перед этим..
StringToWideChar(login, prov, Length(login)+1);
чтобы всё кроме логина было нулями.
Так же после ThreadAddr := VirtualAllocEx(hPro...
проверьте ThreadAddr на NILL, так как VirtualAllocEx почему то время от времени не выделяет память а возвращает ноль, а дальше идёт запись по нулевому адресу в данные клиента. Часто косяки бывают из-за отсутствия проверки, и у меня такое было, и у других замечал.

Блин, хоть делфи устанавливать))
Ещё попробуйте вместо result:=ThreadAddr;
Создать глобальную переменную DWORD Addr, и возвращать в неё значение ThreadAddr, а затем уже использовать в WriteProcess, так, чтобы записать именно значение адреса а не сам текст, почему то мне думается, что у вас пишется не адрес а данные текста. К тому же вот что проверьте
WriteProcessMemory(hProcess, ptr(CtrlEditTextPtr(WinStruct('Win_Login'), 8)), WriteLogin('proba'), sizeof(prov),rw);
сколько байт возвращает sizeof(prov), нам нужно 4 байта адреса, а если sizeof(prov) возвращает размер всего массива, то тогда получается так, что в структуру контрола пишется не только адрес, а дофига байт, перекрывая данные контрола. Ещё раз замечу, нам нужно записать здесь не сам текст а АДРЕС текста - 4 байта.
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

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

prov полностью обнуляю размеры подправил... есть одно но вы пишете Addr присвоить ThreadAddr этого не получится так как ThreadAddr имеет тип pointer или вы имели ввиду сделать так:
Код:
addr := read_32(ThreadAddr);
проверку сделал память выделяется нормально
  Ответить с цитированием
Старый 24.07.2012, 19:42   #34
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
или вы имели ввиду сделать так:
Код:

addr := read_32(ThreadAddr);

Нет нет, именно значение addr := ThreadAddr, как вот только тип преобразовать..
а read_32(ThreadAddr) вроде как вернёт первые 4 байта текста, который мы заинжектили)
Скачал делфи, щас буду экспериментировать, если конечно установится и не начнёт конфликтовать с с++, как оно было когдато давно, после чего я его снёс)))

Вот, всё работает
Код:
var
  Form1: TForm1;

  rw: Cardinal;
  hProcess: Dword;
  xByte: Array of byte;
  prov:array[0..255] of WideChar;

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;
    i:integer;
begin
  arr := Read_32($00A57ACC);
  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);
      i:=1;
      while mass[i]<>'' do
       begin
         name:=name+mass[i];
         inc(i);
       end;
      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);
      i:=1;
      while mass[i]<>'' do
       begin
         name:=name+mass[i];
         inc(i);
       end;
      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 WriteLogin(login: String): dword;
var
    ThreadAddr: pointer;
begin
  StringToWideChar(login, prov, Length(login)+1);
  ThreadAddr := VirtualAllocEx(hProcess, nil, 256, MEM_COMMIT, PAGE_READWRITE);
  WriteProcessMemory(hProcess, ThreadAddr, @prov, sizeof(prov), rw);

  result:=dword(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);
var addr, textptr: dword;
begin
  connect;
  if hProcess<>0 then
     begin
       addr:=WriteLogin('proba');
       textptr:=CtrlEditTextPtr(WinStruct('Win_Login'), 8);
       WriteProcessMemory(hProcess, ptr(textptr), @addr, 4,rw);
     end
  else
    showmessage('хз');
end;
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

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

ппц... рука лицо и все это из-за этой строчки result:=dword(ThreadAddr); спасибо огромное за помощь теперь буду разбираться с чекбоксом усиленно и нажатием кнопок))
  Ответить с цитированием
Старый 24.07.2012, 20:47   #36
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
ппц... рука лицо и все это из-за этой строчки result:=dword(ThreadAddr); спасибо огромное за помощь теперь буду разбираться с чекбоксом усиленно и нажатием кнопок))

Секунду, чего-то вылетать стало у меня.. где то косяк
Чего-то не пойму в чём мистика, то пишет, то крашится..
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

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

Цитата:
Сообщение от 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 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
Пользователь сказал cпасибо:
dwa83 (24.07.2012)
Старый 24.07.2012, 22:20   #38
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от krukovisПосмотреть сообщение
А перед строчкой логина и пароля есть что то или они пишутся в самое начало выделенной памяти?

что именно там должно быть? не догоняю чуть-чуть сути вопроса

извиняюсь уже понял

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

Точно) если не с начала выделенной памяти, то норм, что то типа того)
Код:
StringToWideChar(login, prov, Length(login)+1);
  ThreadAddr := VirtualAllocEx(hProcess, nil, 1024, MEM_COMMIT, PAGE_READWRITE);
  WriteProcessMemory(hProcess, pointer(dword(ThreadAddr)+100), @prov, sizeof(prov), rw);

  result:=dword(ThreadAddr)+100;
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Старый 16.06.2013, 02:05   #40
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Извиняюсь за некропост, но все же.
в функции function WinStruct(WinName: AnsiString): Dword;
переменную name нужно обнулять после
Код:
if (name = WinName) then
begin
result := res;
exit;
end;
Так как в нее постоянно прибавлялось новое значение и ее текст становился только больше, поэтому поиск был бы неудавшимся.


и вот сделал , точнее переделал функцию для выбора контрола. может кому понадобится
Код:
function StrActCtrl(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 + $4);
addr := Read_32(addr + $8);
addr := Read_32(addr + $1C);
result :=addr;
end;

вызывается вот так

StrActCtrl(WinStruct('Win_Manage2'), 1);
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2

Последний раз редактировалось Ginrey; 16.06.2013 в 02:50.
  Ответить с цитированием
Пользователь сказал cпасибо:
dwa83 (06.03.2015)
Старый 24.05.2016, 22:36   #41
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: Инъекция нужного значения в клиент

Плиз! Поясните, откуда берете nomctrl?(программа ведь не работает, как его достать из клиента?)
Код:
client.mem.Write_32(client.mem.CtrlEditTextPtr(client.mem.WinStruct("Win_Login"),8),(DWORD)client.inject.pLogin);
client.mem.Write_32(client.mem.CtrlEditTextPtr(client.mem.WinStruct("Win_Login"),10),(DWORD)client.inject.pPass);
Откуда взялись цифры 8 и 10? Как прочитать с клиента?(Обидно то, что все нашел, разобрался как читать, нашел все офзеты, инжекты, а спросить не у кого. Если знаете, напишите цепочку офзетов до этих цифр или как рассчитать?). Как читается в программе №20? ([Ссылки могут видеть только зарегистрированные пользователи. ].)

Последний раз редактировалось diagnost; 30.05.2016 в 22:34.
  Ответить с цитированием
Старый 19.11.2018, 04:46   #42
 Разведчик
Аватар для Kavaii^_^
 
Kavaii^_^ неизвестен в этих краяхKavaii^_^ неизвестен в этих краяхKavaii^_^ неизвестен в этих краяхKavaii^_^ неизвестен в этих краяхKavaii^_^ неизвестен в этих краяхKavaii^_^ неизвестен в этих краях
Регистрация: 07.01.2011
Сообщений: 38
Популярность: -517
Сказал(а) спасибо: 50
Поблагодарили 7 раз(а) в 7 сообщениях
Отправить сообщение для Kavaii^_^ с помощью Skype™
 
По умолчанию Re: Инъекция нужного значения в клиент

Цитата:
Сообщение от diagnostПосмотреть сообщение
Плиз! Поясните, откуда берете nomctrl?(программа ведь не работает, как его достать из клиента?)
Код:
client.mem.Write_32(client.mem.CtrlEditTextPtr(client.mem.WinStruct("Win_Login"),8),(DWORD)client.inject.pLogin);
client.mem.Write_32(client.mem.CtrlEditTextPtr(client.mem.WinStruct("Win_Login"),10),(DWORD)client.inject.pPass);
Откуда взялись цифры 8 и 10? Как прочитать с клиента?(Обидно то, что все нашел, разобрался как читать, нашел все офзеты, инжекты, а спросить не у кого. Если знаете, напишите цепочку офзетов до этих цифр или как рассчитать?). Как читается в программе №20? ([Ссылки могут видеть только зарегистрированные пользователи. ].)

Привет, а нет обновленной ссылки случайно?
  Ответить с цитированием
Ответ


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

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, время: 15:23.

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