 |
Инъекция нужного значения в клиент - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
17.07.2012, 10:17
|
#16
|
|
|
|
Пехотинец
|
 Регистрация: 31.08.2010
 Сообщений: 64
 Популярность: 129
 Сказал(а) спасибо: 30
Поблагодарили 12 раз(а) в 7 сообщениях
|
Re: Инъекция нужного значения в клиент
Последний раз редактировалось Nek1t; 17.07.2012 в 10:42.
|
|
|
17.07.2012, 23:42
|
#17
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инъекция нужного значения в клиент
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
18.07.2012, 10:39
|
#18
|
|
|
|
Пехотинец
|
 Регистрация: 31.08.2010
 Сообщений: 64
 Популярность: 129
 Сказал(а) спасибо: 30
Поблагодарили 12 раз(а) в 7 сообщениях
|
Re: Инъекция нужного значения в клиент
|
|
|
18.07.2012, 23:30
|
#19
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инъекция нужного значения в клиент
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
21.07.2012, 17:07
|
#20
|
|
|
|
Разведчик
|
 Регистрация: 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
|
|
|
|
Пехотинец
|
 Регистрация: 21.03.2012
 Сообщений: 83
 Популярность: 1178
 Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Инъекция нужного значения в клиент
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
в чем плюсы 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;
можно заменить на
При присвоении самообрежется по окончании "правильных" символов(в с++ это точно, насчёт делфи не знаю)
И ещё, если в mass считывается юникод, то простым приравниванием отрежется только первый символ, так как каждый символ юникода 2 байта, а ансистринг 1, потому каждый второй байт будет восприниматься как код непечатоемого символа и соответственно как конец строки.
Кстати строка скорее всего не пробелом заканчивается..
ПС: в темке, что я давал, указано какие строки по каким оффсетам в юникоде.
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 21.07.2012 в 23:22.
|
|
|
Пользователь сказал cпасибо:
|
|
21.07.2012, 23:30
|
#22
|
|
|
|
Разведчик
|
 Регистрация: 23.02.2011
 Сообщений: 19
 Популярность: 18
 Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
|
Re: Инъекция нужного значения в клиент
Последний раз редактировалось vladoscom93; 22.07.2012 в 00:43.
Причина: Добавлено сообщение
|
|
|
22.07.2012, 00:58
|
#23
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Инъекция нужного значения в клиент
Конец строки - это #10, или я не в теме?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: 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
|
|
|
|
Пехотинец
|
 Регистрация: 21.03.2012
 Сообщений: 83
 Популярность: 1178
 Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Инъекция нужного значения в клиент
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
dwa83, а как выглядит у тебя процедура readmass?
|
|
 |
|
 |
|
void READER::Read_Mass(DWORD addr, char* mass, int len)
{
ReadProcessMemory(hProcess,(void*)addr,mass,len,0) ;
}
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Конец строки - это #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пасибо:
|
|
23.07.2012, 03:42
|
#25
|
|
|
|
Разведчик
|
 Регистрация: 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
|
|
|
|
Пехотинец
|
 Регистрация: 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 минут
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Конец строки - это #10, или я не в теме?
|
|
 |
|
 |
|
Кстати проверил я, не знаю везде ли так, но в описании скиллов точно, ни 10 ни 13 символы текст не оканчивают, после них дальше выводится текст. В тексте скиллов например такое вот сочетание между строчек \r\n\r\n (13 10 13 10). Так там делается пустая строка между строками. А весь текст уже заканчивается нулём, ну тоесть двумя нулями. так как юникод.
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 23.07.2012 в 05:42.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
23.07.2012, 17:18
|
#27
|
|
|
|
Разведчик
|
 Регистрация: 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
|
|
|
|
Пехотинец
|
 Регистрация: 21.03.2012
 Сообщений: 83
 Популярность: 1178
 Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Инъекция нужного значения в клиент
Попробуйте после всего этого..
result[i]:=IntToByte(ord(S[I]));
в массив после логина 2 нуля добавить..
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
|
|
|
Пользователь сказал cпасибо:
|
|
23.07.2012, 20:59
|
#29
|
|
|
|
Разведчик
|
 Регистрация: 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
|
|
|
|
Пехотинец
|
 Регистрация: 21.03.2012
 Сообщений: 83
 Популярность: 1178
 Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Инъекция нужного значения в клиент
И кстати, логин должен быть строкой юникода а не ascii
+13FC+0 - EditText (unicode string)
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 03:43.
|
 |