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

Чтение из файла

-

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

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

Ответ
 
Опции темы
Старый 18.10.2013, 20:51   #1
 Пехотинец
Аватар для Unheilig))
 
Unheilig)) на правильном путиUnheilig)) на правильном пути
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
 
По умолчанию Чтение из файла

Подскажите, почему если


const
BA=$00C38B6C;
CALLADDR=$6F55E0;


то

procedure PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacketointer;
LenWord;
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,CALLADDRWORD

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
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Чтение из файла

Потому что в папке с игрой нет этого инишника. Потому что ты не описал вызов функции strtoint64. Это основные причины.
  Ответить с цитированием
Старый 18.10.2013, 22:26   #3
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Чтение из файла

Unheilig)),

Поможет объявление переменных BA и CALLADDR в процедуре PacketCall и передача значений через PParams:
CALLADDR:=aPParams^.SendPacket;
BA:=aPParams^.BaseAddr;
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 19.10.2013, 05:56   #4
 Пехотинец
Аватар для Unheilig))
 
Unheilig)) на правильном путиUnheilig)) на правильном пути
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
 
По умолчанию Re: Чтение из файла

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
Потому что в папке с игрой нет этого инишника. Потому что ты не описал вызов функции 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
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Чтение из файла

А ты просто возьми, подруби отладчик к ПВшке, поставь бряк в нжекте, и глянь что у тебя там за адреса, и почему они не те
  Ответить с цитированием
Старый 19.10.2013, 16:45   #6
 Пехотинец
Аватар для Unheilig))
 
Unheilig)) на правильном путиUnheilig)) на правильном пути
Регистрация: 13.12.2012
Сообщений: 58
Популярность: 197
Сказал(а) спасибо: 23
Поблагодарили 31 раз(а) в 10 сообщениях
 
По умолчанию Re: Чтение из файла

Ладно, зададим вопрос так - вот обычно когда указываем ва в константах то не указываем тип. и все работает. Знает кто нибудь, какой тип надо указать чтоб с ним работали инжекты?
________________
Пригодилось? Тык спасибку!
  Ответить с цитированием
Старый 19.10.2013, 17:34   #7
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Чтение из файла

Ответим на вопрос так - вот обычно тип зависит от того как именно построен инжектируемый код.
Что может быть проще проверки по факту?
Подключил отладчик, к инжектируемому коду дописал int 3. Запустил, проверил что именно не так.

Ну и вообще - адреса передаются двойным словом, да. Но можно передать так, как этого хочется.
  Ответить с цитированием
Пользователь сказал cпасибо:
Unheilig)) (19.10.2013)
Старый 19.10.2013, 20:01   #8
 Пехотинец
Аватар для Unheilig))
 
Unheilig)) на правильном путиUnheilig)) на правильном пути
Регистрация: 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. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.

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