Гайд Как написать External WH на C#

Понравился ли вам данный гайд?

  • Да

    Голосов: 37 77.1%
  • Нет

    Голосов: 11 22.9%

  • Всего проголосовало
    48
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,120
Реакции[?]
391
Поинты[?]
46K
Начинаем.

Для начала мы создаём проект Консольного приложения на Visual C#.

Не забудьте подключить System.Diagnostics!

Затем нам потребуется скачать библиотеку для чтения и записи памяти в нашу игру.

Скачать:
Пожалуйста, авторизуйтесь для просмотра ссылки.


VirusTotal:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Далеев нашем пространстве имён (проще говоря, как вы назвали свой проект), точнее внутри нашего пространства имён объявляем две переменные.

1. Memory

C#:
Memory mem;
2. Наш клиент

C#:
private static int client.dll;
Итак, теперь внутри нашей основной функции (Main) можно писать следующий код:
C#:
static void Main()
{
    try
    {
    Process csgo = Process.GetProcessesByName("csgo")[0]; //Получаем имя процесса
    mem = new Memory("csgo");
    
    foreach (ProcessModule module in csgo.Modules) //Цикл получения модуля
    {

        if (module.ModuleName == "client_panorama.dll") //Условие, если это модуль, который нам нужен, то присваем нашему клиенту значение

            client_dll = (int)module.BaseAddress;
    }
    Console.WriteLine("Модуль успешно получен!");
    }
    catch //Обработка исключений
    {
        Console.WriteLine("Модуль не был успешно получен!");
    }
}
Так, мы написали получение модуля и условие, наш ли это модуль, а также сделали обработку исключений.

Теперь приступим к следующему шагу, делаем бесконечный цикл:

C#:
static void Main()
{
    try
    {
    Process csgo = Process.GetProcessesByName("csgo")[0]; //Получаем имя процесса
    mem = new Memory("csgo");
    
    foreach (ProcessModule module in csgo.Modules) //Цикл получения модуля
    {

        if (module.ModuleName == "client_panorama.dll") //Условие, если это модуль, который нам нужен, то присваем нашему клиенту значение

            client_dll = (int)module.BaseAddress;
    }
    Console.WriteLine("Модуль успешно получен!");
    }
    catch //Обработка исключений
    {
        Console.WriteLine("Модуль не был успешно получен!");
    }
    while (true)
    {
        Thread.Sleep(1);

                int LocalPlayer = mem.Read<int>(bClient + Offsets.LocalPlayer);
                int PlayerTeam = mem.Read<int>(LocalPlayer + Offsets.TeamNum);

                for (int i = 0; i < 64; i++)
                {

                    int EntityList = mem.Read<int>(bClient + Offsets.entitylist + i * 0x10);
                    int EntityTeam = mem.Read<int>(EntityList + Offsets.TeamNum);

                    if (EntityTeam != 0 && EntityTeam != PlayerTeam)
                    {
                        int GlowIndex = mem.Read<int>(EntityList + Offsets.glowindex);
                        float HP = mem.Read<int>(EntityList + Offsets.health);

                        DrawEntityHP(GlowIndex, HP);
                    }
                }
    }
Итак, мы объявили переменный и сделали наш цикл отрисовки игроков.

Теперь объявим нашу функцию, которая находится в цикле.

C#:
public static void DrawEntityHP(int GlowIndex, float HP)
        {
            int GlowObject = mem.Read<int>(bClient + Offsets.glowobjectmanager);
            mem.Write(GlowObject + (GlowIndex * 0x38) + 4, 1 - HP / 100f);
            mem.Write(GlowObject + (GlowIndex * 0x38) + 8, HP / 100f);
            mem.Write(GlowObject + (GlowIndex * 0x38) + 12, 0 / 100f);
            mem.Write(GlowObject + (GlowIndex * 0x38) + 0x10, 255 / 100f);
            mem.Write(GlowObject + (GlowIndex * 0x38) + 0x24, true);
            mem.Write(GlowObject + (GlowIndex * 0x38) + 0x25, false);
        }
Функция объявлена, что теперь? А теперь, как мы видим если такое слово, как "Offsets", что же это? "Offsets" - это смещения в нашей игре.

Потом объявляем класс Offsets, класс где будут храниться наши смещения

C#:
class Offsets
    {
        public const Int32 m_ArmorValue = 0xB340;
        public const Int32 m_Collision = 0x31C;
        public const Int32 m_CollisionGroup = 0x474;
        public const Int32 m_Local = 0x2FBC;
        public const Int32 m_MoveType = 0x25C;
        public const Int32 m_OriginalOwnerXuidHigh = 0x31B4;
        public const Int32 m_OriginalOwnerXuidLow = 0x31B0;
        public const Int32 m_SurvivalGameRuleDecisionTypes = 0x1320;
        public const Int32 m_SurvivalRules = 0xCF8;
        public const Int32 m_aimPunchAngle = 0x302C;
        public const Int32 m_aimPunchAngleVel = 0x3038;
        public const Int32 m_angEyeAnglesX = 0xB344;
        public const Int32 m_angEyeAnglesY = 0xB348;
        public const Int32 m_bBombPlanted = 0x99D;
        public const Int32 m_bFreezePeriod = 0x20;
        public const Int32 m_bGunGameImmunity = 0x392C;
        public const Int32 m_bHasDefuser = 0xB350;
        public const Int32 m_bHasHelmet = 0xB334;
        public const Int32 m_bInReload = 0x3285;
        public const Int32 m_bIsDefusing = 0x3918;
        public const Int32 m_bIsQueuedMatchmaking = 0x74;
        public const Int32 m_bIsScoped = 0x3910;
        public const Int32 m_bIsValveDS = 0x75;
        public const Int32 m_bSpotted = 0x93D;
        public const Int32 m_bSpottedByMask = 0x980;
        public const Int32 m_bStartedArming = 0x33D0;
        public const Int32 m_clrRender = 0x70;
        public const Int32 m_dwBoneMatrix = 0x26A8;
        public const Int32 m_fAccuracyPenalty = 0x3310;
        public const Int32 m_fFlags = 0x104;
        public const Int32 m_flC4Blow = 0x2990;
        public const Int32 m_flDefuseCountDown = 0x29AC;
        public const Int32 m_flDefuseLength = 0x29A8;
        public const Int32 m_flFallbackWear = 0x31C0;
        public const Int32 m_flFlashDuration = 0xA3F4;
        public const Int32 m_flFlashMaxAlpha = 0xA3F0;
        public const Int32 m_flLastBoneSetupTime = 0x2924;
        public const Int32 m_flLowerBodyYawTarget = 0x3A78;
        public const Int32 m_flNextAttack = 0x2D70;
        public const Int32 m_flNextPrimaryAttack = 0x3218;
        public const Int32 m_flSimulationTime = 0x268;
        public const Int32 m_flTimerLength = 0x2994;
        public const Int32 m_hActiveWeapon = 0x2EF8;
        public const Int32 m_hMyWeapons = 0x2DF8;
        public const Int32 m_hObserverTarget = 0x3388;
        public const Int32 m_hOwner = 0x29CC;
        public const Int32 m_hOwnerEntity = 0x14C;
        public const Int32 m_iAccountID = 0x2FC8;
        public const Int32 m_iClip1 = 0x3244;
        public const Int32 m_iCompetitiveRanking = 0x1A84;
        public const Int32 m_iCompetitiveWins = 0x1B88;
        public const Int32 m_iCrosshairId = 0xB3AC;
        public const Int32 m_iEntityQuality = 0x2FAC;
        public const Int32 m_iFOV = 0x31E4;
        public const Int32 m_iFOVStart = 0x31E8;
        public const Int32 glowindex = 0xA40C;
        public const Int32 health = 0x100;
        public const Int32 m_iItemDefinitionIndex = 0x2FAA;
        public const Int32 m_iItemIDHigh = 0x2FC0;
        public const Int32 m_iMostRecentModelBoneCounter = 0x2690;
        public const Int32 m_iObserverMode = 0x3374;
        public const Int32 m_iShotsFired = 0xA380;
        public const Int32 m_iState = 0x3238;
        public const Int32 TeamNum = 0xF4;
        public const Int32 m_lifeState = 0x25F;
        public const Int32 m_nFallbackPaintKit = 0x31B8;
        public const Int32 m_nFallbackSeed = 0x31BC;
        public const Int32 m_nFallbackStatTrak = 0x31C4;
        public const Int32 m_nForceBone = 0x268C;
        public const Int32 m_nTickBase = 0x342C;
        public const Int32 m_rgflCoordinateFrame = 0x444;
        public const Int32 m_szCustomName = 0x303C;
        public const Int32 m_szLastPlaceName = 0x35B0;
        public const Int32 m_thirdPersonViewAngles = 0x31D8;
        public const Int32 vecOriginPosition = 0x138;
        public const Int32 m_vecVelocity = 0x114;
        public const Int32 m_vecViewOffset = 0x108;
        public const Int32 m_viewPunchAngle = 0x3020;
        public const Int32 clientstate_choked_commands = 0x4D28;
        public const Int32 clientstate_delta_ticks = 0x174;
        public const Int32 clientstate_last_outgoing_command = 0x4D24;
        public const Int32 clientstate_net_channel = 0x9C;
        public const Int32 convar_name_hash_table = 0x2F0F8;
        public const Int32 dwClientState = 0x58CCFC;
        public const Int32 dwClientState_GetLocalPlayer = 0x180;
        public const Int32 dwClientState_IsHLTV = 0x4D40;
        public const Int32 dwClientState_Map = 0x28C;
        public const Int32 dwClientState_MapDirectory = 0x188;
        public const Int32 dwClientState_MaxPlayer = 0x388;
        public const Int32 dwClientState_PlayerInfo = 0x52B8;
        public const Int32 dwClientState_State = 0x108;
        public const Int32 dwClientState_ViewAngles = 0x4D88;
        public const Int32 entitylist = 0x4D05AD4;
        public const Int32 dwForceAttack = 0x31371C0;
        public const Int32 dwForceAttack2 = 0x31371CC;
        public const Int32 dwForceBackward = 0x3137214;
        public const Int32 dwForceForward = 0x3137220;
        public const Int32 jumpforce = 0x51A918C;
        public const Int32 dwForceLeft = 0x313719C;
        public const Int32 dwForceRight = 0x3137190;
        public const Int32 dwGameDir = 0x632F70;
        public const Int32 dwGameRulesProxy = 0x521B4D4;
        public const Int32 dwGetAllClasses = 0xD1895C;
        public const Int32 dwGlobalVars = 0x58CA00;
        public const Int32 glowobjectmanager = 0x5245FE8;
        public const Int32 dwInput = 0x5150B20;
        public const Int32 dwInterfaceLinkList = 0x8C8014;
        public const Int32 LocalPlayer = 0xCF3A3C;
        public const Int32 dwMouseEnable = 0xCF9588;
        public const Int32 dwMouseEnablePtr = 0xCF9558;
        public const Int32 dwPlayerResource = 0x313551C;
        public const Int32 dwRadarBase = 0x513A834;
        public const Int32 dwSensitivity = 0xCF9424;
        public const Int32 dwSensitivityPtr = 0xCF93F8;
        public const Int32 dwSetClanTag = 0x896A0;
        public const Int32 dwViewMatrix = 0x4CF7504;
        public const Int32 dwWeaponTable = 0x51515E4;
        public const Int32 dwWeaponTableIndex = 0x323C;
        public const Int32 dwYawPtr = 0xCF91E8;
        public const Int32 dwZoomSensitivityRatioPtr = 0xCFE408;
        public const Int32 dwbSendPackets = 0xD28FA;
        public const Int32 dwppDirect3DDevice9 = 0xA6030;
        public const Int32 force_update_spectator_glow = 0x393362;
        public const Int32 interface_engine_cvar = 0x3E9EC;
        public const Int32 is_c4_owner = 0x39F5A0;
        public const Int32 Dormant = 0xED;
        public const Int32 m_pStudioHdr = 0x294C;
        public const Int32 m_pitchClassPtr = 0x513AAE0;
        public const Int32 m_yawClassPtr = 0xCF91E8;
        public const Int32 model_ambient_min = 0x58FD1C;
        public const Int32 set_abs_angles = 0x1CA8B0;
        public const Int32 set_abs_origin = 0x1CA6F0;
        }
Как можно найти последние обновлённые оффсеты? Держите ссылку:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Что теперь делать? Нажимаем кнопку "Сборка", ждём пока скомпилируется и далее запускаем наш чит и радуемся! Теперь у нас есть беспалевное вх! Если хотите, то могу запилить гайд как сделать Bhop на C#.
 
Забаненный
Статус
Оффлайн
Регистрация
11 Янв 2018
Сообщения
2,375
Реакции[?]
454
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1. Это не WH, а Glow.
2. Нахрена столько не нужных оффсетов?
3. Зачем на C#?
 
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,120
Реакции[?]
391
Поинты[?]
46K
1. Это не WH, а Glow.
2. Нахрена столько не нужных оффсетов?
3. Зачем на C#?
1. Разницы практически не имеется, так как WH, если дословно, то взлом стены, то есть мы видим противника через стену.
2. Чтобы использовать в будущем для написания новых функций.
3. Не знаю, просто спонтанно идея в голову пришла.
 
Забаненный
Статус
Оффлайн
Регистрация
11 Янв 2018
Сообщения
2,375
Реакции[?]
454
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1. Разницы практически не имеется, так как WH, если дословно, то взлом стены, то есть мы видим противника через стену.
2. Чтобы использовать в будущем для написания новых функций.
3. Не знаю, просто спонтанно идея в голову пришла.
1. Разница имеется. Нужно уточнить, что ты собрался делать.
2. 50% оффсетов не нужны.
3. На C# далеко не уйдешь
 
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,120
Реакции[?]
391
Поинты[?]
46K
1. Разница имеется. Нужно уточнить, что ты собрался делать.
2. 50% оффсетов не нужны.
3. На C# далеко не уйдешь
1. Ок, не буду спорить даже.
2. Я объяснил для чего они нужны.
3. Я понимаю, я просто запилил гайд или нужно докопаться?
 
Забаненный
Статус
Оффлайн
Регистрация
11 Янв 2018
Сообщения
2,375
Реакции[?]
454
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1. Ок, не буду спорить даже.
2. Я объяснил для чего они нужны.
3. Я понимаю, я просто запилил гайд или нужно докопаться?
1. Ок
2. Их действительно очень много, их даже не используют в крупных экстернал читах.
3. Нененен, все окей.
 
Пользователь
Статус
Оффлайн
Регистрация
5 Фев 2018
Сообщения
134
Реакции[?]
33
Поинты[?]
0
;/ гайд не плохой, но раз ты так все жуешь и плюешь в клювик новорегам(которые видать не видели код), то объясняй лучше, в цикле foreach ты писал что
это цикл получения модуля, а шо це таке - чорд(да-да-да) знает. Те, кто хоть уроки посмотрел поймут , что это цикл для всех модулей в кс, а новорегу- вряд ли.

private static int client.dll;
опять же таки, нащо воно нам треба?
я в шарпе не шарю, но зачем им сразу catch & try подавать, в плюсах это (!дейсвтие)-собственно catch

int EntityList = mem.Read<int>(bClient + Offsets.entitylist + i * 0x10);
откуда взялось 0x10 - да хер знает. Объясни хоть, что массив DWORD, DWORD = 0x10, каждый следующий элемент массива(dwEntityList) равен база + х(его айди) * 0x10.
всегда удивляли такие гайды, словно просто берете и копируете - profit. Да и если это гайд - лучше не делай код "открытым" - чтоб тупо не спастили.
Лучше уж переписать, а кому надо - тот поймет что да как работает и сам напишет



mem.Write(GlowObject + (GlowIndex * 0x38) + 4, 1 - HP / 100f);
mem.Write(GlowObject + (GlowIndex * 0x38) + 8, HP / 100f);
mem.Write(GlowObject + (GlowIndex * 0x38) + 12, 0 / 100f);
mem.Write(GlowObject + (GlowIndex * 0x38) + 0x10, 255 / 100f);
mem.Write(GlowObject + (GlowIndex * 0x38) + 0x24, true);
mem.Write(GlowObject + (GlowIndex * 0x38) + 0x25, false);
- опять же таки +4 т.к массив float(в данном случае структура), 0x8 - g , 0xC(шестнадцатеричная система, 12 = С) - синий. показал бы хоть структуру Глоу.
В csgosimple хорошо описана структура, 0x24 - renderwhenocculed(или как-то так) и 0x25 - противоположное ему. Имеют значение bool поэтому сдвиг на 0х1.

Таких гайдов, как ты сделал, пруд-пруди, а хорошо растолковать они не могут.
Но за проявленный труд спасибо!
 
ПРОДАЖА ТЕХНИКИ WOT ОПТОМ
Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2018
Сообщения
159
Реакции[?]
20
Поинты[?]
0
Достаточно будет этих оффсетов:

#define dwGlowObjectManager 0x527EF18
#define m_iGlowIndex 0xA428
#define dwLocalPlayer 0xD29B1C
#define dwEntityList 0x4D3D67C
#define m_bDormant 0xED
#define m_iHealth 0x100
#define m_iTeamNum 0xF4
#define m_fFlags 0x104
#define dwForceJump 0x51E0EA0
#define m_flFlashDuration 0xA410
#define m_bSpotted 0x93D
#define m_iCrosshairId 0xB3D4
#define dwForceAttack 0x316ED6C
 
Пользователь
Статус
Оффлайн
Регистрация
5 Фев 2018
Сообщения
134
Реакции[?]
33
Поинты[?]
0
Достаточно будет этих оффсетов:

#define dwGlowObjectManager 0x527EF18
#define m_iGlowIndex 0xA428
#define dwLocalPlayer 0xD29B1C
#define dwEntityList 0x4D3D67C
#define m_bDormant 0xED
#define m_iHealth 0x100
#define m_iTeamNum 0xF4
#define m_fFlags 0x104
#define dwForceJump 0x51E0EA0
#define m_flFlashDuration 0xA410
#define m_bSpotted 0x93D
#define m_iCrosshairId 0xB3D4
#define dwForceAttack 0x316ED6C
достаточно будет....
#define dwGlowObjectManager 0x527EF18
#define m_iGlowIndex 0xA428
#define dwLocalPlayer 0xD29B1C
#define dwEntityList 0x4D3D67C
#define m_iTeamNum 0xF4
#define m_bDormant 0xED
#define m_iHealth 0x100
 
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,120
Реакции[?]
391
Поинты[?]
46K
достаточно будет....
#define dwGlowObjectManager 0x527EF18
#define m_iGlowIndex 0xA428
#define dwLocalPlayer 0xD29B1C
#define dwEntityList 0x4D3D67C
#define m_iTeamNum 0xF4
#define m_bDormant 0xED
#define m_iHealth 0x100
Хорошо, спасибо, я понял. Если хотите, то могу следующий гайд по-лучше объяснить и да, я скопировал данный код со своего старого сурса, когда ещё делал external soft.)
 
MONKEY
Пользователь
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
206
Реакции[?]
36
Поинты[?]
0
Забанен
Забаненный
Статус
Оффлайн
Регистрация
26 Ноя 2017
Сообщения
463
Реакции[?]
48
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ага, с этого видео спи...
 
Забанен
Забаненный
Статус
Оффлайн
Регистрация
26 Ноя 2017
Сообщения
463
Реакции[?]
48
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
2 Сен 2018
Сообщения
36
Реакции[?]
10
Поинты[?]
0
1. Разница имеется. Нужно уточнить, что ты собрался делать.
2. 50% оффсетов не нужны.
3. На C# далеко не уйдешь
С чего ты решил, что на C# далеко не уйдешь?
При желании можно даже на Python можно написать чит, что уж о C# говорить. Не нужно говорить, что Python скриптовый язык, я и без тебя это знаю, но даже под него есть библиотеки для работы с памятью. А C# это вообще довольно низкоуровневый язык, поэтому читы на нем можно на изи писать
 
Забаненный
Статус
Оффлайн
Регистрация
11 Янв 2018
Сообщения
2,375
Реакции[?]
454
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
С чего ты решил, что на C# далеко не уйдешь?
При желании можно даже на Python можно написать чит, что уж о C# говорить. Не нужно говорить, что Python скриптовый язык, я и без тебя это знаю, но даже под него есть библиотеки для работы с памятью. А C# это вообще довольно низкоуровневый язык, поэтому читы на нем можно на изи писать
ну удачи написать интернал софт на C#, хотя бы даже простые чамсы. Ты отсосешь.
 
RollerCoin
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2020
Сообщения
109
Реакции[?]
25
Поинты[?]
0
если я себе такой напишу мне на вак похуй может быть? ) или что?
 
Сверху Снизу