Перейти к содержанию

VDV

Пользователи
  • Постов

    93
  • Зарегистрирован

  • Посещение

Весь контент VDV

  1. а скайп? А по делу вот что: void PrintText(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... ) // создаем функцию,которая ничего не возвращает типа "void" , рассмотрим переменные int x , int y - координаты,то есть расположения текста на экране D3DCOLOR col - переменная col - сдесь мы устанавливаем цвет текста,это уже отдельная тема , требующая более подробного и углубленного описания LPD3DXFONT pFont - где мы рисуем , LPD3DXFONT , это уже отдельная тема , требующая более подробного и углубленного описания const char *pString2 - что мы выводим на экран , какую информацию и в каком формате { char buf[1024]; - создаем буфер , чтобы наверняка уже размером 1024 байт RECT FontRect = { x, y, x+800, y+50 }; - это область применеия текста , то есть за границами указанных параметров текст отображаться не будет ,RECT - это уже отдельная тема , требующая более подробного и углубленного описания ====================================================================================================================================== собственно переходим к функции которая и позволяет нам выводить информацию в любом формате , будь то адрес или значение адреса va_list vaList; - создаем аргумент для va_list va_start(vaList, pString2); инициализируем наш аргумент в переменной "pString2" vsprintf_s(buf, pString2, vaList); - о функции vsprintf_s нужно говорить отдельно , в кратце она необходима для вывода информации на экран какие аргументы она принимает : buf - наш буфер , куда мы кладем то что хотим вывести на экран va_end(vaList); pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); - это параметры вывода текста,нужно разбирать отдельно }
  2. я тебя умоляю : на этом форуме их предостаточно , они у тебя под носом , сделай 3 клика мыши и смотри на здоровье , а так посоветую начать просмотр с Кенга - он для новичков самый раз и объясняет очень понятно
  3. попоробуй без джампа , вот такой простенький луа скрипт: ammo= [[ label(metkaAmmo) registersymbol(metkaAmmo) aobscan(timer_adress,69 6E 65 72 00 63 6F...........твои байты оружия или здоровья , те байты которые не имеют числовой константы ты пишешь как "XX") ammo_adress: metkaAmmo: тут занопивай инструкцию которая рассчитывает урон , или подсчитывает жизни ]] autoAssemble(ammo)
  4. тему можно закрыть разобрался уже давно в этом .
  5. ты затратил кучу времени на ручной поиск , сделай как я тебе говорю : 1.найди адрес с деньгами (динамику как ты хочешь) 2. нажми "Найти указатель на этот адрес" , должно найти много значений. 3. выйди из игры , не закрывая список найденных указателей 4. зайди в игру , заатчся к процессу снова 5. еще раз найди адрес с деньгами (динамику как ты хочешь) 6. перейди в список указателей и нажми "отсев" в верхнем меню , в меню отсева напиши адрес денег , который ты нашел 2 раз. 7. дождись окончания процедуры отсева - все поинтеры которые остались и будут динамическими адресами с "цепочкой офсетов" Если при дальнейшем перезаходе в игру поинтер будет не верный , повтори пункт 3,4,5,6 на другом компьютере есть огромная вероятность , что работать не будет , спросишь почему? Я отвечу - потому что распределение памяти у каждого компьютера происходит по разному , это зависит на прямую от операционной системы , размера оперативной памяти и еще многих факторов. Какой выход из ситуации?Выход очень прост - сделай простенький трейнер на том же СЕ с помощью АА или ЛуаСкрипта , с использованием AOB scan и я тебя уверяю - работать будет эта штука всегда и на всех компьютерах
  6. ну во - первых отсев адресов ты не правильно делаешь , во-вторых в СЕ 6.2 есть такая штука - называется "Найти указатель на этот адрес"(в русской версии) - это автоматический поиск указателей , используй её , а в-третьих чем тебе статически адрес не нравится , найди статику , зачем тебе динамический адрес и еще и с кучей офсетов , что ты хочешь сделать?
  7. моя цель - поиск байт и возврат динамического адреса, FindPattern не справляется с этой задачей(только для отдельных случаев) , если есть другой способ я только за , я о нем не знаю...На счет скайпа - это ты преувеличил......если ты чего-то боишься я могу для тебя создать скайп со своего ip и дать логин и пароль тебе.
  8. я просто не понимаю , что такого в скайпе объяснить.....Я не такой как вы , с++ мне трудно даётся - я не понимаю многого в с++ , поэтому и прошу помощи у Вас, объяснить какую-то функцию не можете......- она запретная какая-то ....?
  9. я ж и говорю давай в л\с объяснишь или в скайп на готовом коде , копипаст мне не нужен , мне нужно понять как работает , с удовольствием выслушаю тебя , мне это будет интересно и ты как раз будешь знать , что я не просто скопипастил код а еще и понял как он работает
  10. я не знаю как её применить с FindPattern совместно - если ты на счет исходного кода , да я прошу помочь с исходным кодом , я не пойму как его сделать , на практике лучше всего обучаться. На счет VirtualQuery( ( void* )pvAddress, &mbi, sizeof( mbi ) ); я тут понимаю только переменную pvAddress, для чего mbi я не помойму. Если объяснить на примере кода - это выше твоих принципов - я не знаю тогда, объясни в л\с или скайп.
  11. как правильно использовать эту функцию и для чего она вообще(msdn читал-не понял до конца)? MEMORY_BASIC_INFORMATION mbi; VirtualQuery( ( void* )pvAddress, &mbi, sizeof( mbi ) ); я пытаюсь применить эту функцию к(совместно) AOB scan : DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) { for(DWORD i=0; i<dwLen; i++) if (bCompare((BYTE*)(dwAddress+i),bMask,szMask)) return (DWORD)(dwAddress+i); return 0; } потому что когда я начинаю сканировать массив в промежутке памяти допустим FindPattern(0х15000000 , 0х3000000 , блаблабла.......) Кроме краша нечего не происходит. А когда я указываю определенный модуль и его длину , то все нормально находит. Хотя если сканер не найдет указанный массив в пределах модуля и выйдет за приделы модуля - тоже краш. Такой сканер отлично подходит для поиска статических адресов и поиска внутри модуля , а вот как быть с динамикой? она может быть где угодно при перезапуске игры - за пределами модуля , посредине модуля , в начале,в конце и т.д. Как найти решение , может я не правильно применяю функцию FindPattern???Если правильно , то как на счет "VirtualQuery" , как правильно её применить?
  12. благодарен сейчас попробую сделал вот так : void XP() { float IX = 0; float IX1 = 0; int* address = 0; int* CoordPlayerX = 0; DWORD old_protect = 0; DWORD PCoordX = (DWORD)GetModuleHandle("Game.exe") + 0x1235478; DWORD offsetsX[] = {0x8 , 0x100 , 0x8, 0x740 , 0x70}; if(fly==1) { CoordPlayerX = ReadPointer(PCoordX, offsetsX ,5); if(CoordPlayerX != NULL && HIWORD(CoordPlayerX))//Правильно я проверку вставил? VirtualProtect (CoordPlayerX, 10 , PAGE_EXECUTE_READWRITE , &old_protect); { Coord* PlayerX = Coord::Singleton(CoordPlayerX);// Краши уменьшились , но все равно остались IX = *(float*)address; if (GetAsyncKeyState(VK_F1)) { PlayerX->CoordX = IX+FlySpeed; } if (GetAsyncKeyState(VK_F2)) { PlayerX->CoordX = IX-FlySpeed; } } } } я так думаю , происходит вот что , когда вызывается класс а в нем функция возврата адреса Coord* PlayerX = Coord::Singleton(CoordPlayerX); , читается поинтер и находится адресс, так вот скорее всего ReadPointer(PCoordX, offsetsX ,5); - тут косяк или поинтер иногда не читается или доступа не хватает или я не знаю что ему надо вообще...
  13. спасибо тебе , а как можно сделать проверку на то - прочитался ли вообще адрес CoordPlayerX = ReadPointer(PCoordX, offsetsX ,5); так правильно??? if ( !ReadPointer) вернуть фолс или как правильнее будет?
  14. Делаю следующее: работаю с координатами: 1. создал класс (для тренировки) class Coord; class Coord { public: float CoordX; //0x0000 char _0x0004[60]; static Coord* Singleton (int*address) { return (Coord*)address; } };//Size=0x0040 2.Создал поток в котором производил махинации с координатами: void XP() { int* address = 0; int* CoordPlayerX = 0; if(fly==1) { DWORD old_protect = 0; DWORD PCoordX = (DWORD)GetModuleHandle("Game.exe") + 0x1235478;// поинтер верный DWORD offsetsX[] = {0x8 , 0x100 , 0x8, 0x740 , 0x70};//смещения тоже CoordPlayerX = ReadPointer(PCoordX, offsetsX ,5);//адресс прочитан верно , адресс динамический естественно Coord* PlayerX = Coord::Singleton(CoordPlayerX);// вот из-за этой штуки происходит краш , не сразу конечно , но через секунд 30 -120,не пойму почему IX = *(float*)address; VirtualProtect (address, 10 , PAGE_EXECUTE_READWRITE , &old_protect);//протекцию обнулил для прикола , толку 0 - все равно краш VirtualProtect (CoordPlayerX, 10 , PAGE_EXECUTE_READWRITE , &old_protect);// протекцию обнулил для прикола , толку 0 - все равно краш if (GetAsyncKeyState(VK_F1)) { PlayerX->CoordX = IX+FlySpeed;//запись происходит вроде-бы нормально } if (GetAsyncKeyState(VK_F2))//запись происходит вроде-бы нормально { PlayerX->CoordX = IX-FlySpeed; } } } все отлично работает , но есть одна ошибка,помогите разобраться в чем пожалуйста.
  15. тему можно закрыть. вот так нужно было возвращать адресс ,если кому интересно, как и сказал кодер , "ссылку на класс", все работает , благодарность кодеру. return (RecoilPlayer*)address;
  16. тему можно закрыть - написал свою собственную функцию подсчета ФПС,кому интересно код ниже: создаем переменные для подсчета int FPScounter = 0; float FPSfLastTickCount = 0.0f; float FPSfCurrentTickCount = 0.0f; int timerFPS; создаем функцию войд в потоке желательно(она нечего не возвращает , просто считает ФПС), если вы не знаете что такое поток ,сделайте цикл "for" void FPS() { FPSfCurrentTickCount = clock() * 0.001f; FPScounter++; if((FPSfCurrentTickCount - FPSfLastTickCount) > 1.0f) { FPSfLastTickCount = FPSfCurrentTickCount; timerFPS=FPScounter; FPScounter = 0; } PrintText2(1, 1, SKYBLUE,dMenu.pFont, "%d",timerFPS);//Выводим с помощью стандартной функции принт текст } не забываем подключать #include <time.h> - заголовочный файл содержащий типы и функции для работы с датой и временем. функция принт текст , спасибо отдельное Армандо за предоставленную функцию. void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... ) // тут вам нужно главное указать "где рисовать",в моем случае pFont. { char buf[1024]; RECT FontRect = { x, y, x+800, y+50 };//500 30 va_list vaList; va_start(vaList, pString2); vsprintf_s(buf, pString2, vaList); va_end(vaList); pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); }
  17. ты прав , но куда уж проще записи в адрес , дай скайп в п\м
  18. толку-то , я знаю что она делает , не получается и все тут... с байтами проходит , а с остальным нет - крашит. и так делал: DWORD a = 0x1; memcpy (&locPlayer ,&a, sizeof(DWORD)); все равно нет толку.
  19. я не знаю вот так через мемспу? VirtualProtect (locPlayer, 10 , PAGE_EXECUTE_READWRITE , &old_protect); memcpy (locPlayer ,(DWORD*)0x1, 10 ); VirtualProtect (locPlayer, 10 , old_protect , &old_protect);
  20. Спасибо огромное , но не работает жалко очень , не могу элементарно в адрес записать.....
  21. Столкнулся с проблемой записи в адрес: необходимо в адрес записать какое-нибудь значение , ну к примеру когда я нажимаю ПКМ , к адресу прибавляется значение 1. пробовал вот так сделать,не получилось: DWORD a = *(DWORD*)(0x1); DWORD b = *(DWORD*)(0x15F328C); a+b; b=b+a;//в потоке и в цикле ноль действий и т..д. ------------------------------------------------------------ Как правильно делать запись вообще?
  22. Я туплю короче.... Я понимаю так : когда я вызываю функцию localPlayer->Recoil=100; Я вызываю класс , в нем функцию возврата адреса и далее параметр класса "Recoil" , но адрес в "Recoil" получается не определен, и поэтому я пытаюсь писать в несуществующую область памяти?
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.