В теме оффсетов где-то на последних страницах искали флаг пригласа в патьку.
Я думаю, когда приходит приглас, то флаг пригаса меняется.
затем выполняется какая-то ф-я, в которой 100% в качестве аргумента
будет присутствовать ID того, кто приглашает (т.к. выводится имя того, кто приглас кидает). Я не сильно силён в asm, поэтому сам с этим помочь не могу
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). | Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
не понял вопроса на счет алгаритма. а пакет состоит из 3 составляющих это{1C00} {ID отправляющего}+{ID пати} по 8 байт от каждого. ID всегда разный
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
Gorrilaz, в том и суть что неизвестно как вы хотите их собрать , возможностей есть несколько, но для этого надо уметь находить нужные области памяти для дальнейшего инжектинга
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
Как то так. (Взято из этой темы)
type
PParams = ^TParams;
TParams = packed record
Packet: array [0..100] of byte;
Param1,Param2,Param3: DWord;
Param4: array [1..100] of widechar;
end;
Код:
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
aParamsSize: DWord);
var
hThread: THandle;
lpNumberOfBytes: DWord;
ThreadAddr, ParamAddr: Pointer;
begin
if ProcessID<>0 then
begin
// ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);
// ---- Также запишем параметры к ней
ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
// ---- Создаем поток, в котором все это будет выполняться.
hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);
// ---- Ожидаем завершения функции
WaitForSingleObject(hThread, INFINITE);
// ---- подчищаем за собой
CloseHandle(hThread);
VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
end
end;
Код:
procedure PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacketointer;
LenWord;
begin
CallAddress:=Pointer($0060E310); // Старый адрес - $005D7C30
Len:=aPParams^.Param1;
pPacket:=@aPParams^.Packet;
asm
pushad
mov ecx, dword ptr [PW_BASE_ADDRESS]
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
end;
procedure StrToByte(Packet:string; var aParams:TParams);
var
i:integer;
begin
i:=(length(Packet) div 2)-1;
aParams.Param1:=i+1;
for i:=0 to i do
aParams.Packet[i]:=strtoint('$'+bytecode[i*2+1]+bytecode[i*2+2]);
end;
procedure Packet(Packet: string);
var
aParams: TParams
begin
StrToByte(Packet,aParams);
InjectFunc(ProcessID,@PacketCall,@aParams,sizeof(a Params));
end;
1B 00 E1 0E 56 00 - Пригласить в пати. Песочный - id персонажа.
Как то хочется вот из этого соорудить сбор пати)
________________
Три рубля много, спасибо хватит!
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось Gorrilaz; 30.09.2013 в 16:57.
меняй офсеты ВА и ГА, для примера брось кнопку и вставь в нее...
Packet('1C00'+XXXXXXXX+YYYYYYYY);
что значать Х и У уже описано выше, как их получать разжевано в последних страницах поисков офсетов
меняй офсеты ВА и ГА, для примера брось кнопку и вставь в нее...
Packet('1C00'+XXXXXXXX+YYYYYYYY);
что значать Х и У уже описано выше, как их получать разжевано в последних страницах поисков офсетов
Я сейчас задам гениальный вопрос наверное, но куда вставлять Packet('1C00'+XXXXXXXX+YYYYYYYY) в коде, что значат X и Y это я понял.
________________
Три рубля много, спасибо хватит!
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Я сейчас задам гениальный вопрос наверное, но куда вставлять Packet('1C00'+XXXXXXXX+YYYYYYYY) в коде, что значат X и Y это я понял.
вопрос действительно гениальный, начнем с того, откуда все начиналась и какова была первоначальная цель - "принимать в пати" , так в чем собственно заминка? пакет принимает пати, следовательно отправлять его тогда , когда приглашение поступило, вроде бы логично
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
вопрос действительно гениальный, начнем с того, откуда все начиналась и какова была первоначальная цель - "принимать в пати" , так в чем собственно заминка? пакет принимает пати, следовательно отправлять его тогда , когда приглашение поступило, вроде бы логично
Не не не, я может быть не так вопрос сформулировал...
допустим берешь процедуру по нажатию кнопки...пишешь в ней Packet('280001010C00');
она вызовет соответственно:
Цитата:
procedure Packet(Packet: string);
var
aParams: TParams
begin
StrToByte(Packet,aParams);
InjectFunc(ProcessID,@PacketCall,@aParams,sizeof(a Params));
end;
затем внутри её выполнится:
Цитата:
procedure StrToByte(Packet:string; var aParams:TParams);
var
i:integer;
begin
i:=(length(Packet) div 2)-1;
aParams.Param1:=i+1;
for i:=0 to i do
aParams.Packet[i]:=strtoint('$'+bytecode[i*2+1]+bytecode[i*2+2]);
end;
которая в свою очередь выдаст готовый к употреблению пакет в aParams.Packet[i]...
затем пойдет дальше:
вызовется функция инжекта с этими параметрами.. один из параметров равен процедуре PacketCall так сказать...
а конкретно в процедуре вроде сюда
длинна
Len:=aPParams^.Param1;
пакет
pPacket:=@aPParams^.Packet;