|
Чтение из файла - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
18.10.2013, 20:51
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
|
Чтение из файла
Подскажите, почему если
const
BA=$00C38B6C;
CALLADDR=$6F55E0;
то
procedure PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacket ointer;
Len Word;
begin
CallAddress:=Pointer( CALLADDR); // PackCall
Len:=aPParams^.PacketParam;
pPacket:=@aPParams^.Packet;
asm
pushad
mov ecx, dword ptr [ BA] //BA
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
end;
работает, а если
BA,CALLADDR WORD
BA:=StrToInt64 ('$'+IniFile.ReadString('ofset','BA','00C38B6C'));
CALLADDR:=StrToInt64 ('$'+IniFile.ReadString('ofset','CALLADDR','6F55E0 '));
то не работает? и как это исправить.
________________
Пригодилось? Тык спасибку!
Последний раз редактировалось Unheilig)); 18.10.2013 в 20:55.
|
|
|
18.10.2013, 21:26
|
#2
|
|
|
|
Фельдмаршал
|
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
|
Re: Чтение из файла
Потому что в папке с игрой нет этого инишника. Потому что ты не описал вызов функции strtoint64. Это основные причины.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Флудобот, Девизхак, OutFocusBot, OutFocusBot ver 3 (freepvp), PWMultiHack ver 3, AutoRespawn.
JD: JDMultiHack, JDFlooder, JDBot.
Статьи: Отключаем UAC, Ищем базовый адрес Perfect World, "Патчер памяти" или "Пишем флайхак", "Патчер памяти 2" или "Пишем Джампхак", "Поиск инжектов" или "Наш код в чужом процессе"
|
|
|
18.10.2013, 22:26
|
#3
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Чтение из файла
Unheilig)),
Поможет объявление переменных BA и CALLADDR в процедуре PacketCall и передача значений через PParams:
CALLADDR:=aPParams^.SendPacket;
BA:=aPParams^.BaseAddr;
|
|
|
19.10.2013, 05:56
|
#4
|
|
|
|
Пехотинец
|
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
|
Re: Чтение из файла
|
Цитата: |
|
|
|
|
|
|
|
|
|
Потому что в папке с игрой нет этого инишника. Потому что ты не описал вызов функции strtoint64. Это основные причины.
|
|
|
|
|
|
ну так то я упрощенно написал - инишник у меня указан и все описано . суть в том что если ba и calladdr объявлять как константу то все работает а если как переменную то нет
Добавлено через 39 минут
Вот не хочет работать, и все тут. а если BA CALLADDR указать как константы то отлично работает(.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Gauges, ExtCtrls, Buttons, XPMan, IniFiles,mmsystem;
type
PParams = ^TParams;
TParams = packed record
Packet: array [0..100] of byte;
PacketParam,baseaddr,calladdr:dword;
end;
...
Var
BA,CALLADDR:DWORD;
procedure TForm1.FormCreate(Sender: TObject);
var
IniFile : TIniFile;
begin
inifile := TIniFile.Create(ExtractFilePath(Application.Exename)+'settings.ini');
BA:=StrToInt64 ('$'+IniFile.ReadString('ofset','BA','00C38B6C'));
CALLADDR:=StrToInt64 ('$'+IniFile.ReadString('ofset','CALLADDR','6F55E0'));
IniFile.Free;
end;
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer; aParamsSize: DWord);
...
//-------------------------------------------------------------------
procedure StrToByte(Packet:string; var aParams:TParams);
...
//-------------------------------------------------------------------
procedure PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacket:pointer;
Len,base:DWord;
begin
base:= aPParams^.baseaddr;
CallAddress:=Pointer(aPParams^.calladdr); // PackCall
Len:=aPParams^.PacketParam;
pPacket:=@aPParams^.Packet;
asm
pushad
mov ecx, dword ptr [base] //BA
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
end;
procedure SendPacket(Packet:string);
var
AParams:Tparams;
HexID,s:String;
tt:integer;
begin
aParams.baseaddr:=ba;
aParams.calladdr:=CALLADDR;
StrToByte(Packet,aParams);
InjectFunc(hProcess,@PacketCall,@aParams,sizeof(aParams));
end;
procedure TForm1.btn5Click(Sender: TObject);
begin
SendPacket('030001');
end;
end.
________________
Пригодилось? Тык спасибку!
Последний раз редактировалось Sirioga; 19.10.2013 в 12:08.
Причина: Учись юзать BB код - code
|
|
|
19.10.2013, 12:44
|
#5
|
|
|
|
Фельдмаршал
|
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
|
Re: Чтение из файла
А ты просто возьми, подруби отладчик к ПВшке, поставь бряк в нжекте, и глянь что у тебя там за адреса, и почему они не те
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Флудобот, Девизхак, OutFocusBot, OutFocusBot ver 3 (freepvp), PWMultiHack ver 3, AutoRespawn.
JD: JDMultiHack, JDFlooder, JDBot.
Статьи: Отключаем UAC, Ищем базовый адрес Perfect World, "Патчер памяти" или "Пишем флайхак", "Патчер памяти 2" или "Пишем Джампхак", "Поиск инжектов" или "Наш код в чужом процессе"
|
|
|
19.10.2013, 16:45
|
#6
|
|
|
|
Пехотинец
|
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
|
Re: Чтение из файла
Ладно, зададим вопрос так - вот обычно когда указываем ва в константах то не указываем тип. и все работает. Знает кто нибудь, какой тип надо указать чтоб с ним работали инжекты?
________________
Пригодилось? Тык спасибку!
|
|
|
19.10.2013, 17:34
|
#7
|
|
|
|
Фельдмаршал
|
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
|
Re: Чтение из файла
Ответим на вопрос так - вот обычно тип зависит от того как именно построен инжектируемый код.
Что может быть проще проверки по факту?
Подключил отладчик, к инжектируемому коду дописал int 3. Запустил, проверил что именно не так.
Ну и вообще - адреса передаются двойным словом, да. Но можно передать так, как этого хочется.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Флудобот, Девизхак, OutFocusBot, OutFocusBot ver 3 (freepvp), PWMultiHack ver 3, AutoRespawn.
JD: JDMultiHack, JDFlooder, JDBot.
Статьи: Отключаем UAC, Ищем базовый адрес Perfect World, "Патчер памяти" или "Пишем флайхак", "Патчер памяти 2" или "Пишем Джампхак", "Поиск инжектов" или "Наш код в чужом процессе"
|
|
|
Пользователь сказал cпасибо:
|
|
19.10.2013, 20:01
|
#8
|
|
|
|
Пехотинец
|
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
|
Re: Чтение из файла
про int3 не знал) такссс. теперь получается, что какой тип данных не задавай, BA он передает как 45EEA4 (очень милый зеленый цвет в цветовой палитре, между прочим))) нормально передает только если тип совсем не задавать.
PUSHAD
INT3
MOV ECX,DWORD PTR DS: [45EEA4]
MOV ECX,DWORD PTR DS:[ECX+20]
PUSH DWORD PTR SS:[EBP-4]
PUSH DWORD PTR SS:[EBP-8]
CALL DWORD PTR SS:[EBP-C]
POPAD
Код:
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer; aParamsSize: DWord);
var
hThread: THandle;
lpNumberOfBytes: DWord;
ThreadAddr, ParamAddr: Pointer;
begin
if ProcessID <> 0 then
begin
try
// ---- ???????? ????? ? ?????? ????????, ? ?????????? ???? ???? ???????
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);
except end;
end
end;
//-------------------------------------------------------------------
procedure StrToByte(Packet:string; var aParams:TParams);
var
i:integer;
begin
try
i:=(length(Packet) div 2)-1;
aParams.PacketParam:=i+1;
for i:=0 to i do
aParams.Packet[i]:=strtoint('$'+Packet[i*2+1]+Packet[i*2+2]);
except end;
end;
//-------------------------------------------------------------------
procedure PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacket,base:pointer;
Len:DWord;
begin
// lbl4.caption:= (TypeInfo(ba));
// base:=Pointer (BA);
CallAddress:=Pointer(CALLADDR); // PackCall
Len:=aPParams^.PacketParam;
pPacket:=@aPParams^.Packet;
asm
pushad
Int 3
mov ecx, dword ptr [BA] //BA
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
end;
Добавлено через 12 часов 44 минуты
Разобрался
немного поменял асм код+ я накосячил с privat,public.
asm
pushad
mov ecx, BA
mov ecx, dword ptr [ecx]
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
________________
Пригодилось? Тык спасибку!
Последний раз редактировалось Unheilig)); 20.10.2013 в 08:45.
Причина: Добавлено сообщение
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Помогите!] Чтение памяти
|
igo3000 |
Общение разработчиков |
12 |
16.04.2016 12:28 |
c# чтение ini
|
Mr.Misha |
Вопросы и ответы, обсуждения |
4 |
04.08.2013 15:35 |
[Продам] Смотрим в темке
|
darorib |
Cross Fire |
7 |
18.06.2013 10:09 |
[Помогите!] Чтение ini файла...
|
CSharp coder |
Вопросы и ответы, обсуждения |
0 |
05.05.2013 20:49 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:44.
|
|