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

WalkInject at&t crash

-

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

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

Ответ
 
Опции темы
Старый 14.09.2015, 00:11   #1
 Разведчик
Аватар для serbus1
 
serbus1 никому не известный тип
Регистрация: 28.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
Exclamation WalkInject at&t crash

крэшится клиент при инжекте классического волкинжекта
использую qt, посему приходится все переводить в ат&т.
я уже все попробовал - не могу найти проблему, помогите, пожалуйста
Код:
void MOVEMENTS::injCTM(params P) {
    float x = P.param4;
    float y = P.param5;
    float z = P.param6;
    unsigned long f = P.param1;
    __asm__ (
        "PUSHAL\n\t"
        "MOVL $0xD2EBE4, %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%EAX\n\t"
        "MOVL 0x28(%%EAX), %%ESI\n\t"
        "MOVL 0x13F0(%%ESI), %%ECX\n\t"
        "PUSHL $0x1\n\t"
        "CALL *0x4A1AA0\n\t"
        "MOVL %%EAX, %%EDI\n\t"
        "LEAL 0x10(%%ESP), %%EAX\n\t"
        "PUSHL %%EAX\n\t"
        "PUSHL %0\n\t"
        "MOVL %%EDI, %%ECX\n\t"
        "CALL *0x4A7DE0\n\t"
        "MOVL 0x13F0(%%ESI), %%ECX\n\t"
        "PUSHL $0x0\n\t"
        "PUSHL $0x1\n\t"
        "PUSHL %%EDI\n\t"
        "PUSHL $0x1\n\t"
        "CALL *0x4A2090\n\t"
        "MOVL $0xD2EBE4, %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%EAX\n\t"
        "MOVL 0x28(%%EAX), %%EAX\n\t"
        "MOVL 0x13F0(%%EAX), %%EAX\n\t"
        "MOVL 0x18(%%EAX), %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%ECX\n\t"
        "MOVL %1, %%EAX\n\t"
        "MOVL %%EAX, 0x20(%%ECX)\n\t"
        "MOVL %2, %%EAX\n\t"
        "MOVL %%EAX, 0x24(%%ECX)\n\t"
        "MOVL %3, %%EAX\n\t"
        "MOVL %%EAX, 0x28(%%ECX)\n\t"
        "POPAL\n\t"
        "RET"
        :
        : "a"((long)f),
          "b"((float)x),
          "c"((float)z),
          "d"((float)y)
    );
}
Код:
struct params {
    unsigned long param1;
    unsigned long param2;
    unsigned long param3;
    float       param4;
    float       param5;
    float       param6;
    unsigned long param7;
};
void MOVEMENTS::CTM(float X, float Y, float Z) {
    params tP;
    tP.param1 = 1;
    tP.param2 = 0;
    tP.param3 = 0;
    tP.param4 = X;
    tP.param5 = Y;
    tP.param6 = Z;
    tP.param7 = 0;
    void* p;
    p = (void*)(&injCTM);
    rdr.InjectAndExecute(p, &tP);
    return ;
}
вот скрин дебагера при крэше
[Ссылки могут видеть только зарегистрированные пользователи. ]
для нелюбителей атэтэ - вот скрин функции из дебагера (добавлен call 0x0 для специального крэша, чтобы была возможность заскринить)
[Ссылки могут видеть только зарегистрированные пользователи. ]
источник:
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
    x,y,z:single;
    flying:DWORD;
begin
CallAddress1:=Pointer($004A1AA0);
CallAddress2:=Pointer($004A7DE0);
CallAddress3:=Pointer($004A2090);
x:=aPParams^.Param4;
y:=aPParams^.Param5;
z:=aPParams^.Param6;
flying:=aPParams^.Param1;
 asm
  pushad
  mov eax, dword ptr [$D2EBE4]
  mov esi, dword ptr [eax+$28]
  mov ecx, dword ptr [esi+$13F0]
  push 1
  call CallAddress1
  mov edi, eax
  lea eax, dword ptr [esp+$10]
  push eax
  push flying
  mov ecx, edi
  call CallAddress2
  mov ecx, dword ptr [esi+$13F0]
  push 0
  push 1
  push edi
  push 1
  call CallAddress3
  mov eax, dword ptr [$D2EBE4]
  mov eax, dword ptr [eax+$28]
  mov eax, dword ptr [eax+$13F0]
  mov eax, dword ptr [eax+$18]
  mov ecx, dword ptr [eax+$0]
  mov eax, x
  mov dword ptr[ecx+$20], eax
  mov eax, z
  mov dword ptr[ecx+$24], eax
  mov eax, y
  mov dword ptr[ecx+$28], eax
  popad
 end;
end;

Последний раз редактировалось serbus1; 14.09.2015 в 00:15. Причина: addition
  Ответить с цитированием
Старый 14.09.2015, 00:18   #2
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: WalkInject at&t crash

проверьте вот эти адреса
Код:
  mov eax, dword ptr [eax+$13F0]
  mov eax, dword ptr [eax+$18]
  mov ecx, dword ptr [eax+$0]
соответствует ли ваш клиент им
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 14.09.2015, 00:27   #3
 Разведчик
Аватар для serbus1
 
serbus1 никому не известный тип
Регистрация: 28.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: WalkInject at&t crash

Цитата:
Сообщение от GinreyПосмотреть сообщение
соответствует ли ваш клиент им

человек, который выложил этот код утверждал о том что он работает.
далее, я нашел рабочего бота с внешним файлом настроек, там была строчка
Код:
[walk]   
x =  004A1AA0
y =  004A7DE0
z =  004A2090
ofs1 = 28
ofs2 = 13F0
ofs3 = 10
ofs4 = 18
ofs5 = 0
ofs6 = 20
ofs7 = 24
ofs8 = 28
по сравнению с предыдущей версией фигурирует оффсет 0х10, однако даже после добавления
Код:
..
        "CALL *0x4A2090\n\t"
        "MOVL $0xD2EBE4, %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%EAX\n\t"
        "MOVL 0x28(%%EAX), %%EAX\n\t"
        "MOVL 0x13F0(%%EAX), %%EAX\n\t"
        "MOVL 0x10(%%EAX), %%EAX\n\t"
        "MOVL 0x18(%%EAX), %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%ECX\n\t"
..
происходит крэш
  Ответить с цитированием
Старый 14.09.2015, 02:37   #4
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: WalkInject at&t crash

Версия клиента 1.5.2 ?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 14.09.2015, 03:45   #5
 Разведчик
Аватар для serbus1
 
serbus1 никому не известный тип
Регистрация: 28.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: WalkInject at&t crash

да, руоф 28.08.15
1.5.2 b2439
  Ответить с цитированием
Старый 14.09.2015, 09:08   #6
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: WalkInject at&t crash

Вот это убери

Код:
 "PUSHL $0x0\n\t"
или переделай все как у меня. Инжект работает на любой ос, но вылетает через пару часов, рабочий инжект досих пор никто не выложил(который работает без вылетов).

Добавлено через 20 минут
Цитата:
Сообщение от serbus1Посмотреть сообщение
человек, который выложил этот код утверждал о том что он работает.
далее, я нашел рабочего бота с внешним файлом настроек, там была строчка
Код:
[walk]   
x =  004A1AA0
y =  004A7DE0
z =  004A2090
ofs1 = 28
ofs2 = 13F0
ofs3 = 10
ofs4 = 18
ofs5 = 0
ofs6 = 20
ofs7 = 24
ofs8 = 28
по сравнению с предыдущей версией фигурирует оффсет 0х10, однако даже после доба...

Это запись с PWA, ofs = 10 может принимать значения 10,18,1С, опытным путем остановился на 1С, как в оригинале.
Свои наработки я выложил, может быть еще кто-то желает поделиться своими? Боты ведь как то двигаются у других? Например гео бот, в котором есть старый инжект и новый инжект движения? Как другие решили эту проблему?(автопуть не предлагать)

Последний раз редактировалось diagnost; 14.09.2015 в 09:42. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 14.09.2015, 10:46   #7
 Разведчик
Аватар для serbus1
 
serbus1 никому не известный тип
Регистрация: 28.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: WalkInject at&t crash

убирал пуш 0 и в первом, и во втором случае. результат - мгновенный краш
  Ответить с цитированием
Старый 14.09.2015, 10:55   #8
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: WalkInject at&t crash

Цитата:
Сообщение от serbus1Посмотреть сообщение
убирал пуш 0 и в первом, и во втором случае. результат - мгновенный краш

Что то неправильно делаешь, PWA именно на этом инжекте бегает.
Чтобы не быть многословным , прикрепляю файл с ехе и исходниками на делфи ХЕ 8 проверил на вин 10 [Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось diagnost; 14.09.2015 в 11:47.
  Ответить с цитированием
Старый 14.09.2015, 17:02   #9
 Разведчик
Аватар для serbus1
 
serbus1 никому не известный тип
Регистрация: 28.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: WalkInject at&t crash

спасибо, переделал функции и структуру под него
однако, это не помогло - все крашится
честно, изучил много статеек по плюсам\архитектуре памяти\структуре клиента, но, похоже, этих знаний недостаточно чтобы решить проблему
Код:
void MOVEMENTS::injCTM(params* P) {
    float x = P->param4;
    float y = P->param5;
    float z = P->param6;
    unsigned long f = P->param7;
    __asm__ (
        "PUSHAL\n\t"
        "MOVL $0xD2EBE4, %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%EAX\n\t"
        "MOVL 0x28(%%EAX), %%EDI\n\t"
        "MOVL 0x13F0(%%EDI), %%ECX\n\t"
        "PUSHL $0x1\n\t"
        "CALL *0x4A1AA0\n\t"
        "MOVL %%EAX, %%ESI\n\t"
        "LEAL 0x1C(%%ESP), %%EDX\n\t"
        "PUSHL %%EDX\n\t"
        "PUSHL %0\n\t"
        "MOVL %%ESI, %%ECX\n\t"
        "CALL *0x4A7DE0\n\t"
        "MOVL 0x13F0(%%EDI), %%ECX\n\t"
        "PUSHL $0x1\n\t"
        "PUSHL %%ESI\n\t"
        "PUSHL $0x1\n\t"
        "CALL *0x4A2090\n\t"
        "MOVL 0x13F0(%%EDI), %%ECX\n\t"
        "MOVL 0x18(%%ECX), %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%ECX\n\t"
        "MOVL %1, %%EAX\n\t"
        "MOVL %%EAX, 0x20(%%ECX)\n\t"
        "MOVL %2, %%EAX\n\t"
        "MOVL %%EAX, 0x24(%%ECX)\n\t"
        "MOVL %3, %%EAX\n\t"
        "MOVL %%EAX, 0x28(%%ECX)\n\t"
        "POPAL\n\t"
        :
        : "a"((unsigned long)f),
          "b"((float)x),
          "c"((float)z),
          "d"((float)y)
    );
}
void MOVEMENTS::CTM(float X, float Y, float Z) {
    params* tP = new params;
    for (int i = 0; i <= 100; ++ i) {
        tP->param1[i]  = 0;
    }
    tP->param4 = X;
    tP->param5 = Y;
    tP->param6 = Z;
    tP->param7 = 1;
    void* p;
    p = (void*)(&injCTM);
    rdr.InjectAndExecute(p, tP);
    return ;
}
и переделанная структура
Код:
struct params {
    byte param1[101];
    float param4;
    float param5;
    float param6;
    unsigned long param7;
};
не думаю, что пробелма в инжекторе, он слизан, хотя кто его знает. так или иначе, инъект функции происходит
Код:
void READER::InjectAndExecute(void *f, void *p) {
    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,this->PID);
    void* pFunction   = (void*)VirtualAllocEx(hProcess,NULL,255,MEM_COMMIT,PAGE_READWRITE);
    void* pParametrs = (void*)VirtualAllocEx(hProcess,NULL,255,MEM_COMMIT,PAGE_READWRITE);
    WriteProcessMemory(hProcess,pFunction ,f,250,NULL);
    WriteProcessMemory(hProcess,pParametrs,p,250,NULL);

    HANDLE hProcThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)pFunction,pParametrs,NULL,NULL);
    WaitForSingleObject(hProcThread,INFINITE);
    CloseHandle(hProcThread);
    CloseHandle(hProcess);
    CloseHandle(hProcess);
}
__
добавлю, что вылет происходит на 1м вызове функции клиента "CALL *0x4A1AA0\n\t", т.е. если я вставлю call *0x0 перед этйо функцией то клиент вылетает из-за call *0x0. если же после - то из-за "CALL *0x4A1AA0\n\t". как-то так. думаю проблема не в асме, иначе это было бы слишком просто

Последний раз редактировалось serbus1; 14.09.2015 в 17:24. Причина: add
  Ответить с цитированием
Старый 14.09.2015, 23:35   #10
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: WalkInject at&t crash

Цитата:
Сообщение от serbus1Посмотреть сообщение
спасибо, переделал функции и структуру под него
однако, это не помогло - все крашится
честно, изучил много статеек по плюсам\архитектуре памяти\структуре клиента, но, похоже, этих знаний недостаточно чтобы решить проблему
Код:
void MOVEMENTS::injCTM(params* P) {
    float x = P->param4;
    float y = P->param5;
    float z = P->param6;
    unsigned long f = P->param7;
    __asm__ (
        "PUSHAL\n\t"
        "MOVL $0xD2EBE4, %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%EAX\n\t" вот это откуда взялось?
        "MOVL 0x28(%%EAX), %%EDI\n\t"
        "MOVL 0x13F0(%%EDI), %%ECX\n\t"
        "PUSHL $0x1\n\t"
        "CALL *0x4A1AA0\n\t"
        "MOVL %%EAX, %%ESI\n\t"
        "LEAL 0x1C(%%ESP), %%EDX\n\t"
        "PUSHL %%EDX\n\t"
        "PUSHL %0\n\t"
        "MOVL %%ESI, %%ECX\n\t"
        "CALL *0x4A7DE0\n\t"
        "MOVL 0x13F0(%%EDI), %%ECX\n\t"
        "PUSHL $0x1\n\t"
        "PUSHL %%ESI\n\t"
        "PUSHL $0x1\n\t"
        "CALL *0x4A2090\n\t"
        "MOVL 0x13F0(%%EDI), %%ECX\n\t"
        "MOVL 0x18(%%ECX), %%EAX\n\t"
        "MOVL 0x0(%%EAX), %%ECX\n\t"
        "MOVL %1, %%EAX\n\t"  если вы строками пихаете, как параметры xyz собираетесь передавать?
        "MOVL %%EAX, 0x20(%%ECX)\n\t"
        "MOVL %2, %%EAX\n\t"
        "MOVL %%EAX, 0x24(%%ECX)\n\t"
        "MOVL %3, %%EAX\n\t"
        "MOVL %%EAX, 0x28(%%ECX)\n\t"
        "POPAL\n\t"
        :
        : "a"((unsigned long)f),
          "b"((float)x),
          "c"((float)z),
          "d"((float)y)
    );
}
void MOVEMENTS::CTM(float X, float Y, float Z) {
    params* tP = new params;
    for (int i = 0; i <= 100; ++ i) {
        tP->param1[i]  = 0;
    }
    tP->param4 = X; это откуда взялось если выше пишешь 123
    tP->param5 = Y;
    tP->param6 = Z;
    tP->param7 = 1;
    void* p;
    p = (void*)(&injCTM);
    rdr.InjectAndExecute(p, tP);
    return ;
}
и переделанная структура
Код:
struct params {
    byte param1[101];
    float param4;
    float param5;
    float param6;
    unsigned long param7;
};
не думаю, что пробелма в инжекторе, он слизан, хотя кто его знает. так или иначе, инъект функции происходит
Код:
void READER::InjectAndExecute(void *f, void *p) {
    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,this->PID);
Зачем открывать процесс если уже должен быть открыт?
    void* pFunction   = (void*)VirtualAllocEx(hProcess,NULL,255,MEM_COMMIT,PAGE_READWRITE);
почему эта строка совпадает вот
    void* pParametrs = (void*)VirtualAllocEx(hProcess,NULL,255,MEM_COMMIT,PAGE_READWRITE);
вот с этой?
    WriteProcessMemory(hProcess,pFunction ,f,250,NULL);
    WriteProcessMemory(hProcess,pParametrs,p,250,NULL);

    HANDLE hProcThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)pFunction,pParametrs,NULL,NULL);
    WaitForSingleObject(hProcThread,INFINITE);
    CloseHandle(hProcThread);
    CloseHandle(hProcess); Зачем процесс 2 раза закрывать?
    CloseHandle(hProcess);
если работаете со строками, тогда это не ваш инжект, другой должен быть
}
__
добавлю, что вылет происходит на 1м вызове функции клиента "CALL *0x4A1AA0\n\t", т.е. если я вставлю call *0x0 перед этйо функцией то клиент вылетает из-за call *0x0. если же после - то из-за "CALL *0x4A1AA0\n\t". как-то так. думаю проблема не в асме, иначе это было бы слишком просто

Я не знаком с языком возможно где то ошибся, сильно похож на си бульдер ( пометки сделал, проверяйте себя и меня)
Подведем итог где то, что то кусками выдрали перевели на свой язык, а проекта готового нету, даже теряется смысл самого проекта, поэтому что либо вам подсказать затрудняются здесь на форуме, проще заново написать или промолчать.

Сразу отвечу везде все одинаково, только язык правописания разный, синтаксические ошибки ищите сами. Это все равно что с вами я буду разговаривать на английском или немецком языке, а смысловая нагрузка будет таже самая только перевод не точный. У меня на данный момент с делфи проблема заключается в том, что слов не знаю (как в английском языке, надо славарь зазубривать и практика как можно больше) Поэтому мне проще готовый проект поковырять и его доработать используя другие исходники.

Последний раз редактировалось diagnost; 15.09.2015 в 00:10.
  Ответить с цитированием
Старый 15.09.2015, 00:42   #11
 Разведчик
Аватар для serbus1
 
serbus1 никому не известный тип
Регистрация: 28.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: WalkInject at&t crash

да, забыл сказать пишу на Qt. не сталкивался с читмейкерами, пишущими на данном фреймворке, поэтмоу пришлось во многом изобретать велосипед.
постараюсь все объяснить
1. на атэтэ мне приходилось переводить по оф документации, поэтому я решил заменить одну строчку двумя, т.е. не записать в еах то что находится по адресу, а записать в еах адрес и перейти с оффсетом 0х0, то есть по ссылке.
2. в ат&т перед регистарми нужно ставит %%, а параметры передаются следующим образом: после асм кода в кавычках нужно поставить два двоеточия, после первого - выходные данные, после второго - входные, при этом каждому параметру будет присвоен номер от 0, т.е. : "a"((unsigned long)f) = %0, "b"((float)x). насколько я понял, то что в кавычках(а b c d) не имеет значения.
для меня отдельный вопрос как все работает на архитектурном уровне. даже на делфи я не понимаю почему пихая в стек структуру из 5 переменных, при этом пушить только 3 координаты их них, я это не совсем понимаю.
3. насчет инжекта, я забыл сказать что если сделать функцию с асм кодом pushal \ popal без дополнительного кода, то она успешно инъектриуется. в любом клоузхэндл вернет ноль и этим все кончится).
данный код успешно инъектриуется
Код:
void mwindow::on_pushButton_clicked()
{
    QtConcurrent::run(this->alg, &ALGORITHM::fake_test);
}
Код:
void ALGORITHM::fake_test() {
    this->client1->mvm->FAKE();
    return;
}
Код:
struct fakeParams {

};
void MOVEMENTS::FAKE() {
    fakeParams* fP = new fakeParams;
    void* p;
    p = (void*)(&injFAKE);
    rdr.InjectAndExecute(p, fP);
}
void MOVEMENTS::injFAKE(fakeParams* P) {
    __asm__ (
        "PUSHAL\n\t"
        "POPAL\n\t" : :
    );
}
код инжекта брал от dwa83
Код:
BYTE INJECTOR::InjectAndExecute(void *Func, void* Params)
{
  HANDLE hProcThread;
  HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
  if (!hProcess) return 0; // выйдем из функции если не удалось открыть процесс

  WriteProcessMemory(hProcess,pFunction,Func,250,NULL);
  WriteProcessMemory(hProcess,pParams,Params,250,NULL);

  hProcThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)pFunction,pParams,NULL,NULL);
  if(hProcThread==INVALID_HANDLE_VALUE) return 0; // не удалось создать поток
  
  WaitForSingleObject(hProcThread,INFINITE); // ожидаем завершения работы потока
  CloseHandle(hProcThread); // закрываем хэндл нашего потока
  CloseHandle(hProcess);  // закрываем хэндл процесса
  return 1;	// успешная инъекция и выполнение кода
}
полагаю, что проблема в том что я передаю не те параметры в стек, косячу с указателями и.т.д.
например, в структуре на делфи
Код:
TWalkParams = packed record
    Packet: array [0..100] of byte;
    //BaseAddr, GameAddr,
   // CallAddress1,CallAddress2,CallAddress3: DWord;
    Px,Py,Pz:  single;
    flying: DWORD;
   // Param4: array [1..100] of widechar;
  end;
я даже не могу понять это массив, или указатель на массив. конечно, очевидно, что указатель на массив которого нет в памяти клиента пушить бессмысленно, хотя он может пушится для места, или для забитья пустоты стек, которую нужно забить.
  Ответить с цитированием
Старый 15.09.2015, 08:20   #12
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: WalkInject at&t crash

Код:
BYTE INJECTOR::InjectAndExecute(void *Func, void* Params здесьhProcess должен быть уже открыт  )
{
  HANDLE hProcThread;
это не надо //  HANDLE //hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
здесь ID процесса надо проверить а не сам процесс  if (!hProcess) return 0; // выйдем из функции если не удалось открыть процесс

это правильно  WriteProcessMemory(hProcess,pFunction,Func,250,NULL);
 здесь не правильно WriteProcessMemory(hProcess,pParams,Params,250,NULL);

  hProcThread = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)pFunction,pParams,NULL,NULL);
  if(hProcThread==INVALID_HANDLE_VALUE) return 0; // не удалось создать поток
  
  WaitForSingleObject(hProcThread,INFINITE); // ожидаем завершения работы потока
  CloseHandle(hProcThread); // закрываем хэндл нашего потока
эта строка совсем не нужна зачем плодить стоко потоков? В одном потоке работай CloseHandle(hProcess);  // закрываем хэндл процесса
  return 1;	// успешная инъекция и выполнение кода
}
полагаю, что проблема в том что я передаю не те параметры в стек, косячу с указателями и.т.д.
например, в структуре на делфи
Код:
TWalkParams = packed record
    Packet: array [0..100] of byte; Это резервирование места под пакеты (массив каждая ячейка размером в byte)
    //BaseAddr, GameAddr,
   // CallAddress1,CallAddress2,CallAddress3: DWord;
    Px,Py,Pz:  single;
    flying: DWORD;
   // Param4: array [1..100] of widechar; это под инжекты (массив каждая ячейка размером в widechar)
  end;
я даже не могу понять это массив, или указатель на массив. конечно, очевидно, что указатель на массив которого нет в памяти клиента пушить бессмысленно, хотя он может пушится для места, или для забитья пустоты стек, которую нужно забить.[/QUOTE]

Смысл в том что вы работаете с чужим процессом, в этом процессе надо захватить(выделить) место, что бы ваша программа с могла работать, доступ к выделенному месту только через указатели. Получается чтобы не рухнула игра вам нужно перехватить указать место выполнения и вернуть наместо все как было после выполнения.
Итог Сам инжект (шприц по другому) резервирует место под наши действия которые мы хотим произвести. И нет смысла все время открывать и закрывать это место, проще подчистить и использовать повторно. Туда же мы пихаем асм код и данные, и через указатели с ними работаем. Чтобы у вас все заработало начните с простого, например с выделения моба(взять его в таргет), через инжект (пакет не трогайте). Как у вас заработает, перейдете к движению по координатам.
Я могу в некоторых моментах ошибаться сам учусь. Поэтому отцы жука думаю меня поправят.

Оо! Еще раз пересмотрел все, походу уже свое вам навязываю. И ввожу вас в заблуждение не зная вашего языка.
Скорее всего вам надо определиться как асм будете загонять в память? Как строку или используя чистый асм(ваш язык чистый асм поддерживает?) в зависимости от этого шприц разный. Вот пример работы на делфи через строку (на вин 10 не работает, надо пуш 0 убрать, чтобы заработало) Например аутоит(язык) не поддерживает чистый асм, загоняют через опкод по байтно( для меня через строку) описывая каждый опкод, гемор еще тот. Вот [Ссылки могут видеть только зарегистрированные пользователи. ].(можно открыть в блокноте)

Ага нашел, твой язык чистый асм не поддерживает. С++bulder близкий язык. Вот это сможешь перевести на свой язык и запустить?(не забудьте сменить адреса они старые). Смысл такой, кнопка и поле чтобы ввести WID моба, по нажатию на кнопку должен выделится моб. [Ссылки могут видеть только зарегистрированные пользователи. ]
Цитата:
de <tlhelp32.h>
...
typedef tagPROCESSENTRY32W pGameProcess;
...
bool CallRemoteFunction(pGameProcess pProcess)
{
//Remote Thread Handle
HANDLE hProcess=NULL;
//Inject Thread handle
HANDLE hThread=NULL;
//Inject Fuction Address after allocate
LPVOID ThreadCodeAddr=NULL;
//Inject Function
LPVOID Func=SelectMonster;
//Inject Fuction Stack Address after allocate
LPVOID ThreadDataAddr=NULL;
//Inject Fuction Stack Data
LPCVOID lpParam = NULL;
DWORD Value = 0;
lpParam = &Value;

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pProcess.th32ProcessID);
if (!hProcess)
{
//Do your Error message (OpenProcess);
return false;
}
ThreadCodeAddr=VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_READWRITE);
ThreadDataAddr=VirtualAllocEx(hProcess, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory (hProcess, ThreadCodeAddr, Func, 4096, NULL);
WriteProcessMemory (hProcess, ThreadDataAddr, lpParam, 256, NULL);
hThread = CreateRemoteThread(hProcess, NULL, NULL,(LPTHREAD_START_ROUTINE)ThreadCodeAddr, ThreadDataAddr, NULL, NULL);
if (!hThread)
{
//Do your Error message (CreateRemoteThread);
}
else
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
VirtualFreeEx(hProcess, ThreadCodeAddr, 4096, MEM_RELEASE);
VirtualFreeEx(hProcess, ThreadDataAddr, 256, MEM_RELEASE);
CloseHandle(hProcess);
return false;
}

Цитата:
B]static[/B] DWORD WINAPI SelectMonster(LPCVOID lpParam)
{
//004596AD - a1 dc d1 96 00 - mov eax,[0096d1dc] : 0096D860
//004596B2 - 57 - push edi
//004596B3 - 8b 48 20 - mov ecx,[eax+20]
//004596B6 - 81 c1 ec 00 00 00 - add ecx,000000ec
//004596BC - e8 8f c7 14 00 - call 005a5e50
DWORD BaseAddress= 0x0096d1dc;
DWORD CallAddress= 0x005a5e50;
DWORD MonsterID = (DWORD)lpParam;
__try
{
_asm
{
mov edx, DWORD PTR [BaseAddress]
push MonsterID
mov ecx, DWORD PTR [edx+0x20]
add ecx, 0xEC
mov edx, CallAddress
call edx
}
}
__except(1)
{
}
return 0;
}

Добавлено через 16 часов 0 минут
Цитата:
Сообщение от pwgamer
Привет, ты на писал "Вот пример работы на делфи через строку (на вин 10 не работает, надо пуш 0 убрать, чтобы заработало)" Какой убрать, там только один, но тогда взлета нет. На вин 7 все работает, на 10 клиент вылетает. Уже голову сломал что исправить.

В ЛС просили выложить рабочий walk на делфи (чтобы работало на вин 10) [Ссылки могут видеть только зарегистрированные пользователи. ]
Запуск через админа, окно не переименовывать.

Последний раз редактировалось diagnost; 16.09.2015 в 00:23. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Обсуждение] Crash-PW [1.5.1] Crash-PW Обсуждение игровых проектов 12 09.03.2015 01:35

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 09:50.

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