Форум программистов, компьютерный форум CyberForum.ru

Какая необходима книга ? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ GraphEditPlus или его аналоги http://www.cyberforum.ru/cpp-beginners/thread817707.html
Кто - нибуть знает аналоги GraphEditPlus, чтоб можно было б код на С++ генерировать? Или может кто - то знает способ разблокирования GraphEditPlus, чтоб можно было бы сгенерированный код копировать?
C++ Хакинг. Искусство эксплойта Прежде исложить свою проблему хочу спросить, читал ли кто-нибудь и пробовал на практике задачи описанные в книге Джона Эриксона: "Хакинг. Искусство эксплойта" ? ссылка на книгу: http://www.ozon.ru/context/detail/id/4833854/?partner=tagabenz&from=bar http://www.cyberforum.ru/cpp-beginners/thread817699.html
C++ Перегрузка оператора "+"
Доброго времени суток! Задание звучит так: Написать класс для работы с длинными числами. Создается два экземпляра класса, после перегружается оператор "+" для вычисления суммы между этими двумя экземплярами. Помогите найти ошибку, заранее спасибо! Код: #include <stdlib.h> #include <string.h> #include <iostream> using namespace std;
C++ Прямоугольный пирог, разрезанный на m×n частей (как сделать, чтобы удалялся столбец и строка при выборе клетки?)
Имеется прямоугольный пирог, разрезанный на m×n частей (клеток), причем, левая нижняя клетка пирога отравлена. Игроки по очереди выбирают какую-нибудь клетку пирога и «съедают» ее вместе со всеми клетками, расположенными правее и выше выбранной. Проигрывает тот, кто съедает отравленную клетку. #include <stdio.h> #include <conio.h> #include <locale.h> #include <iostream> int main() {
C++ Создать динамический массив. ввод,вывод и обработку элементов массива реализовать через функции http://www.cyberforum.ru/cpp-beginners/thread817673.html
создать динамический массив. ввод,вывод и обработку элементов массива реализовать через функции
C++ Корректность ввода размера массива Помогите написать код на c++ Условие: Напишите программу проверяя корректность ввода размера массива. Проверьте работу программы на контрольном примере. Дан массив, содержащий m строк и n столбцов. Определить среднее арифметическое отрицательных чисел строки массива. подробнее

Показать сообщение отдельно
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
25.03.2013, 18:15  [ТС]     Какая необходима книга ?
Спасибо. VAJI,я вам почему-то спасибку тыкнуть не могу

Вот допустим код,который я компилирую в dll,подключаю к игре и ловлю функцию с движка игры:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#include <extdll.h>     
#include <meta_api.h>   
#include "sdk_util.h"   
#include <psapi.h>
 
#pragma comment(lib, "psapi.lib")
 
 
static META_FUNCTIONS gMetaFunctionTable = 
{
 
    NULL,           // pfnGetEntityAPI              HL SDK; called before game DLL
    NULL,           // pfnGetEntityAPI_Post         META; called after game DLL
    GetEntityAPI2,  // pfnGetEntityAPI2             HL SDK2; called before game DLL
    NULL,           // pfnGetEntityAPI2_Post        META; called after game DLL
    NULL,           // pfnGetNewDLLFunctions        HL SDK2; called before game DLL
    NULL,           // pfnGetNewDLLFunctions_Post   META; called after game DLL
    GetEngineFunctions, // pfnGetEngineFunctions    META; called before HL engine
    NULL,           // pfnGetEngineFunctions_Post   META; called after HL engine
 
};
 
 
plugin_info_t Plugin_info = 
{
    META_INTERFACE_VERSION, // ifvers
    "Anti Jos Exploit", // name
    "1.3"// version
    "2012/02/22",   // date
    "PomanoB"// author
    "http://www.klan-hub.ru/"// url
    "ANTIJOS"// logtag, all caps please
    PT_ANYTIME, // (when) loadable
    PT_ANYPAUSE,    // (when) unloadable
};
 
 
meta_globals_t *gpMetaGlobals;      // metamod globals
gamedll_funcs_t *gpGamedllFuncs;    // gameDLL function tables
mutil_funcs_t *gpMetaUtilFuncs;     // metamod utility functions
 
 
C_DLLEXPORT int Meta_Query(char * /*ifvers */, plugin_info_t **pPlugInfo,mutil_funcs_t *pMetaUtilFuncs) 
{
    *pPlugInfo=&Plugin_info;
    gpMetaUtilFuncs=pMetaUtilFuncs;
 
    return(TRUE);
}
 
 
bool createPatch();
void makePatch();
void undoPatch();
 
C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME , META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs) 
{
    if(!pMGlobals) 
    {
 
        LOG_ERROR(PLID, "Meta_Attach called with null pMGlobals");
 
        return(FALSE);
 
    }
 
    gpMetaGlobals=pMGlobals;
 
    if(!pFunctionTable) 
    {
 
        LOG_ERROR(PLID, "Meta_Attach called with null pFunctionTable");
 
        return(FALSE);
 
    }
 
    memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
 
    gpGamedllFuncs=pGamedllFuncs;
    
    if(createPatch())
        makePatch();
    else
        SERVER_PRINT("ANTI JOS PATCH FAILED");
 
    return(TRUE);
 
}
 
 
C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME ,PL_UNLOAD_REASON /* reason */) 
{
//  undoPatch();
    return(TRUE);
 
}
 
unsigned char originalBytes[5] = {0, 0, 0, 0, 0};
unsigned char pathedBytes[5] = {0, 0, 0, 0, 0};
 
void * pathAddr;
void (*p)(int * client_t);
 
void print_srvconsole(char *fmt, ...)
{
        va_list argptr;
        static char string[384];
        va_start(argptr, fmt);
        vsnprintf(string, sizeof(string) - 1, fmt, argptr);
        string[sizeof(string) - 1] = '\0';
        va_end(argptr);
       
        SERVER_PRINT(string); 
}
 
 
void checkExploit(int * client_t)
{
//  UTIL_LogPrintf("%d %d - %d - %d - %d - %d - %d\n", *(client_t + 21) , *(client_t + 22),  *(client_t + 23),  *(client_t + 24),  *(client_t + 25),  *(client_t + 26),  *(client_t + 26));
 
    print_srvconsole( "Signature HOOK!\n");
    if (*(client_t + 23) > *(client_t + 26))
    {
        UTIL_LogPrintf("[ANTI JOS] WARNING! JOS Detected from %hhu.%hhu.%hhu.%hhu!\n", *((unsigned char *)client_t + 40), *((unsigned char *)client_t + 41), *((unsigned char *)client_t + 42), *((unsigned char *)client_t + 43));
        *(client_t + 22) = 0;
        *(client_t + 23) = 0;
    }
    else
    {
        undoPatch();
        p(client_t);
        makePatch();
    }
}
 
bool comparePattern(short * pattern, unsigned char * addr, int count)
{
    for(int i = 0; i < count; i++)
    {
        if (pattern[i] == -1)
            continue;
        if ((pattern[i]&0xFF) != addr[i])
            return false;
    }
 
    return true;
}
 
bool createPatch()
{
    short pattern[] = {0x8B, 0x4C, -1, -1, 0x8D, 0x44, -1, -1, 0x50, 0x51, 0x68, -1, -1, -1, -1, 0xE8, -1, -1, -1, -1, 0x68, -1, -1, -1, -1, 0x68, -1, -1, -1, -1, 0x6A, 0x05, 0xFF, -1, -1, -1 , -1, -1, 0x83, 0xC4, -1};
 
    int pLength = sizeof(pattern)/sizeof(short);
 
    bool findet = false;
 
    HMODULE module;
    if(GetModuleHandleEx(0,(LPCSTR)"mp.dll",&module))
    {
        HANDLE process =  GetCurrentProcess();
        _MODULEINFO moduleInfo;
        
        if(GetModuleInformation(process,module,&moduleInfo,sizeof moduleInfo))
        {
            
            CloseHandle(process);
 
            unsigned char * baseAdress =  (unsigned char *) moduleInfo.lpBaseOfDll;
            DWORD length = moduleInfo.SizeOfImage;
 
            
            for(unsigned int i=0; i <= length - pLength ;i++)
            {
                if (comparePattern(pattern, baseAdress + i, pLength))
                {
                    findet = true;
 
                    pathAddr = baseAdress + i;
                }
                
            }
        }
 
    }
    else
    {
        SERVER_PRINT("[ANTI JOS] Error locate module swds.dll");
        return false;
    }
 
    if (!findet)
    {
        SERVER_PRINT("[ANTI JOS] Cant find patch!");
        return false;
    }
 
    p = (void (*)(int *))pathAddr;
 
    memcpy((void *)originalBytes, pathAddr, 5);
 
    pathedBytes[0] = 0xE9;
    *((long*)(&pathedBytes[1])) = (char*)checkExploit - (char*)pathAddr - 5;
 
    DWORD oldProtection;
 
    if(VirtualProtect(pathAddr, 5, PAGE_EXECUTE_READWRITE, &oldProtection))
        return true;
 
    return false;
}
 
void undoPatch()
{
    memcpy(pathAddr, (void*)originalBytes, 5);
}
 
void makePatch()
{
    memcpy(pathAddr, (void*)pathedBytes, 5);
}
swds.dll это библиотека игры.

Где

short pattern[] = {0x8B, 0x4C, -1, -1, 0x8D, 0x44, -1, -1, 0x50, 0x51, 0x68, -1, -1, -1, -1, 0xE8, -1, -1, -1, -1, 0x68, -1, -1, -1, -1, 0x68, -1, -1, -1, -1, 0x6A, 0x05, 0xFF, -1, -1, -1 , -1, -1, 0x83, 0xC4, -1};

Сигнатура её функции определенной,которую я нашел с помощью IDA и составил сигнатуру,для её хука.

Далее вызываю эту функцуию в void checkExploit(int * client_t)

Где я уже над ней работаю.


Могу вызвать когда мне вздумается эту функцию

undoPatch();
p(client_t);
makePatch();

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

Допустим с помощью этого кода,участок кода с движка (swds.dll) этот код уже не может отловить,он только для самих функций.
 
Текущее время: 03:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru