Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Как делать антиотдачу для трейнеров

-

Разработка ПО для Point Blank

- Бюро разработчиков Zhyk.Ru: создание чит-программ и прочего ПО для Point Blank

Ответ
 
Опции темы
Старый 15.06.2012, 03:16   #1
 Старший сержант
Аватар для slava-zis
 
slava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норриса
Регистрация: 18.02.2011
Сообщений: 232
Популярность: 8824
Сказал(а) спасибо: 43
Поблагодарили 801 раз(а) в 240 сообщениях
Отправить сообщение для slava-zis с помощью Skype™
 
По умолчанию Как делать антиотдачу для трейнеров

Внимание опасность C++: Да я знаю что вы пишете трейнеры на основе ванильной библиотечки и на C#! А поскольку я не пишу на C# вам придется переписать то что я тут выдал, если вам это конечно надо будет! Основной смысл этой темы показать вам как можно сделать антиотдачу без хука, а не тупо дать вам копипастить в свой исход, поэтому не вижу смысла распинаться на C#. К тому же я решил написать пример даже не используя функцию WriteProcessMemory прямое назначение которой как раз писать в память другого процесса, но не вижу в этом смысла, так как 99% та самая библиотека, которой все пользуются использует эту функцию... Поэтому в примере показана функция которая редактирует только свой процесс (можно скопипастить спокойно в свою выхашечку, но не в трейнер).

Вот вам пара примеров как делать антиотдачу без хука:

прежде всего объявим переменную с основным адресом

Код:
//для 1 и 2 способа
DWORD NoRecoil = 0x62F874;
#define offset_NoRecoil2 0x100
//еще для 1 способа
DWORD WeaponCrash_1 = 0xA51E98;
DWORD WeaponCrash_2 = 0xA51E94;
float RecoilValue = 0;//можно выбрать другое значение
//только для 3 способа
DWORD f_NoRecoil_1 = 0x5D08D0;
DWORD f_NoRecoil_2 = f_NoRecoil_1 + 0x124;
1 способ
+ регулировка отдачи
+ в примере регулируется сразу верт и гор отдача, но можно и по отдельности

Принцип работы: в функции отдачи (если кто не заметил когда копировал код) есть некое значение на которое умножается текущая отдача если оружия поломано. мы используем это значение в качестве итоговой отдачи, таким образом можно поставить отдачу хоть 5000
Код:
MEMwrite((void*)WeaponCrash_1, (void*)&RecoilValue, 4);//вы не знали что эту функцию можно использовать так? /problem
MEMwrite((void*)WeaponCrash_2, (void*)&RecoilValue, 4);

MEMwrite((void*)(NoRecoil - 0x29), (void*)"\xEB\x1B", 2);
MEMwrite((void*)(NoRecoil - 0x6), (void*)"\x90\x90\x90", 3);

MEMwrite((void*)(NoRecoil - 0x29 + offset_NoRecoil2), (void*)"\xEB\x1B", 2);
MEMwrite((void*)(NoRecoil - 0x6 + offset_NoRecoil2), (void*)"\x90\x90\x90", 3);
2 способ
- рисковый, в случае если попался мусор в стеке результат может быть не очень...
- не регулируется отдача
+ простой

Принцип работы: перескакиваем часть кода в котором функция заносит полученное значение в стек и надеемся что там был 0
Код:
MEMwrite((void*)(NoRecoil - 0x29), (void*)"\xEB\x2A", 2);

MEMwrite((void*)(NoRecoil - 0x29 + offset_NoRecoil2), (void*)"\xEB\x2A", 2);
3 способ
+ эмм ну как бы увеличиваем производительность игры избавляя ее от не нужных вычислений
- новые адреса
- уже так просто не вернуть обратно, лучший способ это хранить в какой либо переменной значение которое было

Принцип работы: функция вычисления отдачи не работает
Код:
MEMwrite((void*)f_NoRecoil_1, (void*)"\xD9\xEE\x90\x90\x90", 5);    
MEMwrite((void*)f_NoRecoil_2, (void*)"\xD9\xEE\x90\x90\x90", 5);
з.ы. smile33 ты заставил меня это сделать
з.з.ы. не забывайте хоть автора, он тратил на это свое время
________________
Hack for ShadowCompany
Hack for War Thunder
Дно геймхакинга
  Ответить с цитированием
9 пользователя(ей) сказали cпасибо:
black56rus (15.06.2012), Cheater777(2) (16.06.2012), Dimedrol1536 (15.06.2012), крайслер (15.06.2012), GM!ZaDroT (15.06.2012), Meteor2142 (15.06.2012), MiXaiLL76 (23.07.2012), Nik-sin (26.10.2014), Skilful (18.06.2012)
Старый 18.06.2012, 21:52   #2
,,,,
 Командор
Аватар для Skilful
 
Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(Skilful сломал счётчик популярности :(
Регистрация: 08.05.2011
Сообщений: 752
Популярность: 18860
Золото Zhyk.Ru: 8
Сказал(а) спасибо: 383
Поблагодарили 1,069 раз(а) в 448 сообщениях
Отправить сообщение для Skilful с помощью ICQ Отправить сообщение для Skilful с помощью Skype™
 
По умолчанию Re: Как делать антиотдачу для трейнеров

Цитата:
Сообщение от slava-zisПосмотреть сообщение
на основе ванильной библиотечки

вапщета это не основа Ее используют потому, что так легче т.е в ней содержится все что нужно. Т.е ее тупо добавил в проект и все
вот код c#

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace RECOIL
{
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll")]
        private static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);
        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint dwSize, uint lpNumberOfBytesRead);
        [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
        private static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
        [DllImport("kernel32.dll")]
        private static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
        [DllImport("kernel32.dll")]
        private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, uint lpNumberOfBytesWritten);

        private Process[] PROC;
        private IntPtr PROCHANDLE;

        public Form1()
        {
            InitializeComponent();
        }


        private void OPENPROC(string PROCNAME)
        {
            if (PROCNAME != null)
            {
                PROC = Process.GetProcessesByName(PROCNAME);
                if (PROC.Length == 0) MessageBox.Show("Процесс : " + PROCNAME + "не найден!",
                        "Процесс не найден!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                else PROCHANDLE = OpenProcess(0x1F0FFF, false, PROC[0].Id);
            }
            else MessageBox.Show("Ошибка! Не указано имя процесса! Укажите его!");
        }

        private bool WriteByteArray(string PROCNAME,int ADDRES, byte[] BYTES)
        {
            if (PROCHANDLE == IntPtr.Zero) OPENPROC(PROCNAME);
            try
            {
                uint num;
                VirtualProtectEx(PROCHANDLE, (IntPtr)ADDRES, (UIntPtr)BYTES.Length, 4, out num);
                bool F = WriteProcessMemory(PROCHANDLE, (IntPtr)ADDRES, BYTES, (uint)BYTES.Length, 0);
                VirtualProtectEx(PROCHANDLE, (IntPtr)ADDRES, (UIntPtr)BYTES.Length, num, out num);
                return F;
            }
            catch (Exception ex) { MessageBox.Show("Ошибка : WriteByteArray()" + ex.ToString()); return false; }
        }

        int NoRecoil = 0x62F874;
        int offset_NoRecoil2 = 0x100;
        int WeaponCrash_1 = 0xA51E98;
        int WeaponCrash_2 = 0xA51E94;
        float RecoilValue = 0;

        private void button1_Click(object sender, EventArgs e)
        {
            string P = "PointBlank.exe";
            WriteByteArray(P, WeaponCrash_1, BitConverter.GetBytes(RecoilValue));
            WriteByteArray(P, WeaponCrash_2, BitConverter.GetBytes(RecoilValue));
            WriteByteArray(P, NoRecoil - 0x29, new byte[] { 0xEB, 0x1B });
            WriteByteArray(P, NoRecoil - 0x6, new byte[] { 0x90, 0x90, 0x90 });//nop'
            WriteByteArray(P, NoRecoil - 0x29 + offset_NoRecoil2, new byte[] { 0xEB, 0x1B });
            WriteByteArray(P, NoRecoil - 0x6 + offset_NoRecoil2, new byte[] { 0x90, 0x90, 0x90 });//nop'
        }
    }
}
целый проект находится во вложении
Вложения
Тип файла: rar RECOIL.rar (37.0 Кб, 50 просмотров)
________________

  Ответить с цитированием
Пользователь сказал cпасибо:
крайслер (19.06.2012)
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Подсказка] Дееспособность багов/трейнеров etc. Donee. S4 League 15 16.06.2012 05:37
[Подсказка] Дееспособность багов/трейнеров etc. CookieMonster^^ S4 League 2 18.03.2012 13:28
[Подсказка] создание трейнеров super_sid Общение и обсуждение, архив Point Blank 2 17.05.2010 04:45

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

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

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