Rus. server

01/14/2010 06:28 dwar#1246
Quote:
а он не бежит до лута
а с чем же здесь помогать? $005B7B00 – позволяет поднять лут, возле которого надо стоять; она не обеспечивает движение к цели. При использовании данной функции, вначале надо организовать движение чара по координатам лута
01/14/2010 07:06 Barmank#1247
Все равно не поднимает!
Стою прям на луте, жму и не как!
ID и SN хоть верно ли получаю, и туда ли вставляю?
01/14/2010 07:17 Barmank#1248
Побывал поменять местами Sn и ID эффект прикольный, вешь исчезает в инвентаре не появляется, а при пере заходе лежит там где лежала!
01/14/2010 07:51 dwar#1249
Quote:
ID и SN хоть верно ли получаю, и туда ли вставляю?
[BA] + $1C + $8 + $28 + $18 + $i*4 + $4 : Loot desk
$10C WID ( dword, 4)
$110 Id ( dword, 4)

+ Стоит ItemSn и ItemID перед помещением в стек записать в регистр
01/14/2010 08:19 Barmank#1250
Quote:
Originally Posted by dwar View Post
[BA] + $1C + $8 + $28 + $18 + $i*4 + $4 : Loot desk
$10C WID ( dword, 4)
$110 Id ( dword, 4)

+ Стоит ItemSn и ItemID перед помещением в стек записать в регистр
Спс за подсказку!
Можно еще одну в какой регистр стоит записывать ItemSn и ItemID чтобы не нарушить стек, а лучше, если можно, готовый кусок асма, а то я с ним как то на ВЫ.
01/14/2010 08:43 dwar#1251
Code:
 procedure PickItem(aPParams: PParams); stdcall;
var
  Pa1,Pa2       : DWORD;
  PW_Call       : DWORD;
  PW_BASE_ADDR  : DWORD;
begin
  Pa1:=aPParams^.Param1;
  pa2:=aPParams^.Param2;
  PW_Call := $005B7B00;
  PW_BASE_ADDR  := $0098ADDC;
  asm
    pushad
    mov   edx, PW_BASE_ADDR
    mov   edx, DWORD PTR [edx]
    mov   eax, Pa1
    push  eax                  // Item SN
    mov   ecx, Pa2
    push  ecx                  // Item ID
    mov   ecx, DWORD PTR [edx+$20]
    add   ecx, $EC
    call  PW_Call
    popad
  end;
end;
Added:
С подбором лута, скорее всего, надо вопрос по-другому ставить: а будет ли чар вообще что-либо поднимать посредством данной инъекции? Где-то на 80 страницах был приведен пример, взятый с китайских форумов, по «полному» поднятию лута: помимо вызова функции 005B7B00, надо еще и пакет отправить, сказав серверу – «такой-то предмет поднят»
01/14/2010 09:14 Barmank#1252
Или я туплю или лыжи не едут:)
Не хочет подбирать, уже кидаю лут себе под ноги и пытаюсь поднять его!
инжект функцию брал отсюда [Only registered and activated users can see links. Click Here To Register...]
01/14/2010 10:24 gen-ostr#1253
Quote:
Originally Posted by dj_al View Post
Приведи код инжекта, что у тебя получился, после убирания try except.
static DWORD WINAPI SelectMonster(LPCVOID lpParam )
{
DWORD BaseAddress = 0x0098ADDC;
DWORD CallAddress = 0x005B7B70;
DWORD MonsterID = (DWORD)lpParam;
__asm
{
mov eax, BaseAddress
mov eax, dword ptr[eax]
mov edi, MonsterID
mov edi, [edi]
push edi
mov ecx, dword ptr[eax+0x20]
add ecx, 0xEC
mov edx, CallAddress
call edx
}

return 0;
}

bool CbotDlg::CallRemoteFunction(HANDLE hProcess, LPVOID lpParam)
{
HANDLE hThread = NULL;
LPVOID ThreadCodeAddr = NULL; //Inject Fuction Address after allocate
LPVOID ThreadDataAddr = NULL; //Inject Fuction Stack Address after allocate
LPVOID Func = SelectMonster; //Inject Function
DWORD ThreadID; //
DWORD dwWritten; //
ThreadCodeAddr=VirtualAllocEx(hProcess,NULL,256,ME M_COMMIT,PAGE_READWRITE);
ThreadDataAddr=VirtualAllocEx(hProcess,NULL,64,MEM _COMMIT,PAGE_READWRITE);

WriteProcessMemory(hProcess,ThreadCodeAddr,Func,25 6,&dwWritten);
WriteProcessMemory(hProcess,ThreadDataAddr,lpParam ,64,&dwWritten);

hThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_ST ART_ROUTINE)ThreadCodeAddr,ThreadDataAddr,NULL,&Th readID);
if (!hThread) return false;
else WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
VirtualFreeEx(hProcess,ThreadCodeAddr,256,MEM_RELE ASE);
VirtualFreeEx(hProcess,ThreadDataAddr, 64,MEM_RELEASE);
//CloseHandle(hProcess);
return true;
}

Вот последний вариант. все-равно клиент валится :mad:
01/15/2010 04:01 dwar#1254
не знаю насчет всего остального, но вот в ассме ошибка:
mov edi, [edi]
В стек надо помещать MonsterID, а не содержимое ячейки по адресу MonsterID, т.е.
Code:
 __asm 
{
pushad
   mov eax, BaseAddress 
   mov eax, dword ptr[eax] 
   mov edi, MonsterID 
   push edi 
   mov ecx, dword ptr[eax+0x20] 
   add ecx, 0xEC
   mov edx, CallAddress 
   call edx
popad
}
01/15/2010 06:04 dj_al#1255
Quote:
Originally Posted by dwar View Post
не знаю насчет всего остального, но вот в ассме ошибка:
mov edi, [edi]
В стек надо помещать MonsterID, а не содержимое ячейки по адресу MonsterID
У него тама всё нормально идёт с этим вроде как... Посмотри на передачу параметров.

DWORD MonsterID = (DWORD)lpParam; - это не взятие значения по указателю, а смена типа, в результате MonsterID перед асмовским кодом - фактически содержит указатель на блок памяти.

Хотя тут в связи с этим возникла идея. Мил человек, а покажи как ты вызываешь: bool CbotDlg::CallRemoteFunction(HANDLE hProcess, LPVOID lpParam)
01/15/2010 07:09 muchenberg#1256
А что передаётся как MonsterID?
Адреса то верные?
01/15/2010 08:29 Alexhomp#1257
Ребят, влезу со своим немного нестандартным вопросом. А именно никак не могу выцепить все pointer'ы для того чтобы получать название местности где сейчас находится персонаж. с помощью CE дохожу где-то до 4го уровня и стопорюсь. до какого либо статического адреса добраться так и не могу(((

Если у кого-то есть опыт получения текстовых значений, подскажите, пожалуйста в каком направлении копать.
01/15/2010 08:32 gen-ostr#1258
CallRemoteFunction(Proc ,(LPVOID) MobID); где MobID- ReadProcessMemory(Proc,(LPCVOID)(Buf+_MobID),&MobI D,4,0). адреса думаю верные, так как вся инфа по мобу считывается правильно.
01/15/2010 10:13 ta2we4ka#1259
Всем привет! Давненько я тут не появлялся)

Ребя смотрю вы глубоко уже влезли в дебри инжектирования. Респект!

Так а теперь непосредственно что я хотел вас как гуру попросить.:handsdown:
Кому не сложно сделать небольшую программу.
Суть программы: должна цепляться к клиенту и инжектировать согласие на слом оружия. С возможностью регулировать количество инжектов и скорости отправки в ms непосредственно в самой программе а не в конфигурационном файле ( просто чтоб быстрее подобрать соотношения ).

Зачем мне это надо? Не помню тут встречал или на каком нить другом форуме. Но человек отписал что смог ломать одну и ту же пуху 5-8 раз. В итоге с 1-го фиолета имел 2*5 = 10 миражей.

Надеюсь это будет для вас не слишком сложным.

Так же возможно стоит попробовать с посылкой заточки, впаивания камней.
01/15/2010 10:33 muzhig#1260
Quote:
PickCallAddr1=$42A790 ;
PickCallAddr2=$5B7B00;

procedure PickCall(aPParams: PParams);
var
p1: DWORD;

begin
p1:=aPParams^.Param1;
asm
pushad
mov ecx, dword ptr [PW_BASE_ADDRESS]
mov ecx, dword ptr [ecx + $1C] // +1c CECGameRun ; ecx=9771BC
mov ecx, dword ptr [ecx+$8]
push 0
mov eax,p1
push eax
mov edx, PickcallAddr1
call edx
mov eax, [eax+$110]
mov ecx, [PW_BASE_ADDRESS]
mov ecx, [ecx+$20]
add ecx, $EC
push eax
mov edx,p1
push edx
mov edx, PickcallAddr2
call edx
popad
end;
end;

procedure TPW.Pick(wid:dword);
var
aParams : TParams;
begin
aParams.Param1 := wid;
InjectFunc(@PickCall, @aParams, SizeOf(aParams));
end;
Это у меня работает как часы. Но стоять надо около лута.
Первый CALL получает PTR на объект по WID, +110 это его SN, насколько я потом понял, но менять уже не стал.