1. 액션 스타일, 소위 액션 스타일은 API를 사용하여 Windows 또는 API에 명령을 보내 마우스, 키보드 등을 제어하는 것을 의미합니다 "석재"플러그인. (이런 종류의 플러그인은 TMD, TMD입니다. 약간의 API를 아는 사람은 누구나해야 할 일을 알고 있지만이 플러그인은 엔트리 레벨의 좋은 일입니다. 전투 효과를 향상시킬 수는 없지만 가능합니다. 당신의 사기 개선 ^_ ^)
2. 로컬 수정 스타일은 일부 플러그인과 다르지 않습니다 -"留"이라는 방법은 주소 코드를 찾는 것입니다. (이 종류의 플러그인은 이전 플러그인보다 약간 어렵지만이 플러그인을 사용하기가 어렵습니다 ~~이 플러그인은 메모리 주소의 이해와 적용을 빠르게 향상시킬 수 있습니다. 프로그래밍 기술을 향상시키는 것)
3. Trojan 스타일이 플러그인의 목적은 플러그인 제조업체가 사용자의 비밀번호를 훔치는 것입니다 (TMD, "Bad"는 단지 하나의 단어이지만, 이미 알고있는 것을 알아야합니다. 그것에 대해 이야기하려면 ~~).이 플러그인을 수행하면 문제가 발생할 수 있으며, 먼저 기초가 필요합니다. 지정된 이메일 주소로. (나는 전에 이런 것을 썼다. 그러나 나는 그것을 사용한 적이 없다. 나는이 것이 매우 부도덕하다는 것을 알고 있으므로 앞으로 그것을 사용하지 마십시오! ~~)
4. 가속도 유형,이 플러그인은 게임 속도를 높일 수 있습니다 ... (죄송합니다. 실제로 이런 종류의 일을하지 않았으므로 나 자신에 대해 언급 할 수 없습니다. 부끄러워 ~~)
5. 패킷 스타일,이 플러그인은 고도의 플러그인이며 강력한 프로그래밍 기술을 작성해야합니다. 그것의 원칙은 먼저 패킷을 가로 채서 수정 한 다음 전달하는 것입니다 (Kao, 말하기는 간단합니다. 시도해 볼 수 있습니다 ~~~~). 이 플러그인은 대부분의 온라인 게임에 적합하며 일부 온라인 게임 플러그인은이 플러그인을 작성합니다.
이 플러그인 중에서 처음 3 개는 VB 및 Deleps와 같은 언어를 사용하여 쉽게 구현할 수 있으며, 후자는 VC와 같은 프로그래밍 도구를 사용하여 쉽게 구현해야합니다. (PH, 다음 분석을 들어주세요)
(저는 전문 플러그인이 아니라 프로그램 애호가이므로 부적절한 기사가 있으면 용서 해주세요. 향후 기사에서는 작문 과정, 로컬 수정, 트로이 목마 및 패킷 스타일을 수행 할 것입니다. 자세한 설명. ))
마지막으로 액션 플러그인을 분석했습니다.
내가 아는 한, 현지 수정 플러그인의 가장 일반적인 응용 프로그램은 "ELF"게임에 있습니다. 거의 1 년 전 ( "ELF"는 여전히 테스트 단계에 있었음), 많은 회사의 동료들은 우리 회사의 많은 동료들입니다. "ELF"를 플레이하여 게임의 데이터 처리 방법을 살펴보고 서버로 전송 된 정보가 메모리에 존재한다는 것을 알았습니다 (읽은 후 첫 느낌 : 이런 종류의 게임 수정과 수정 사이에는 큰 차이가 없습니다. 다시 말해서 정보를 서버에 제출하기 전에 메모리 주소를 수정하기에 충분합니다 내 아이디어에 따른 주소와 시스템이 자동으로 제출하도록했는데, 나중에 "Elf"는 이중 주소 학교 검사, 기억 학교 검사 등으로 변경되었습니다. 여기서 말도 안되는 말 ~~~~, 좋아,이 유형의 플러그인이 어떻게 이루어지는 지 살펴 보겠습니다.
플러그인을 수행하기 전에 Windows 메모리를 구체적으로 이해해야합니다. 여기서는 시스템의 메모리 오프셋, 즉 상대적인 메모리 및 수정하려는 내용을 나타냅니다. 동일. 이해를 이해하고 여러 Windows API, OK를 이해 하고이 플러그인 및 API 애플리케이션의 제작을 명확하게 볼 수 있도록 예제에 따라 온라인 게임의 정상적인 작동을 보장하기 위해 찾는 방법에 대해 자세히 설명하지 않을 것입니다. 메모리 주소) :
1. 우선, 게임 창의 핸들을 알아 보려면 FindWindow를 사용해야합니다. 게임이 진행된 후 프로세스의 ID를 알아야합니다.
hwnd findwindow (
lpctstr lpclassname, // 클래스 이름에 대한 포인터
lpctstr lpwindowname // 창 이름에 대한 포인터
);
2. 게임 창의 해당 프로세스의 프로세스 ID를 얻으려면 WINDOWTHREADPROCESSID가 다음과 같습니다.
dword getwindowthreadprocessid (
hwnd hwnd, // 창의 핸들
lpdword lpdwprocessid // 프로세스 식별자에 대한 변수 주소
);
3. 게임 프로세스 ID를 얻은 후 다음은 가장 높은 권한으로 프로세스를 열어야합니다.
OpenProcess 처리 (
dword dwdesiredAccess, // 액세스 플래그
BOOL BINHERITHANDLE, // 상속 플래그 핸들
dword dwprocessid // 프로세스 식별자
);
DWDESIREDACCESS는 액세스 방법이 설정된 곳이면 많은 권한을 설정할 수 있습니다.
4. 프로세스를 열면 기능을 사용하여 메모리에서 작동 할 수 있습니다. 여기서는 메모리 주소에 데이터를 작성하기 만하면됩니다. , WriteProcessMemory의 사용법을 살펴 보겠습니다.
Bool WriteProcessMemory (
HPROCESS 핸들, // 메모리가 작성된 프로세스를위한 핸들
lpvoid lpbaseaddress, // 쓸 수있는 주소
lpvoid lpbuffer, // 데이터를 작성하기 위해 버퍼에 대한 포인터
dword nsize, // 쓸 바이트 수
lpdword lpnumberofbyteswritten // 실제 바이트 수
);
5. 다음은 CloseHandle로 프로세스 핸들을 닫는 것이며 완료됩니다.
이것은 이러한 유형의 게임 플러그인의 프로그램을 구현하는 방법입니다 XX 게임의 위의 방법에 따라 코드를 연구하겠습니다.
Const
ResourceOffset : dword = $ 004219f4;
자원 : dword = 3113226621;
ResourceOffset1 : dword = $ 004219f8;
Resource1 : dword = 1940000000;
ResourceOffset2 : dword = $ 0043fa50;
Resource2 : dword = 1280185;
ResourceOffset3 : dword = $ 0043fa54;
Resource3 : dword = 3163064576;
ResourceOffset4 : dword = $ 0043fa58;
Resource4 : dword = 2298478592;
var
HW : HWND;
PID : dword;
H : thandle;
TT : 추기경;
시작하다
HW : = FindWindow ( ''XX '', NIL);
hw = 0이면
출구;
getWindowThreadProcessId (hw, @pid);
h : = OpenProcess (process_all_access, false, pid);
h = 0이면
출구;
flatcheckbox1.checked = true 인 경우
시작하다
WriteProcessMemory (H, 포인터 (ResourceOffset), @Resource, sizeof (Resource), TT);
WriteProcessMemory (H, 포인터 (ResourceOffSet1), @resource1, sizeof (resource1), tt);
끝;
flatcheckbox2.Checked = true 인 경우
시작하다
WriteProcessMemory (H, 포인터 (ResourceOffset2), @resource2, sizeof (resource2), tt);
WriteProcessMemory (H, 포인터 (ResourceOffset3), @resource3, sizeof (resource3), tt);
WriteProcessMemory (H, 포인터 (ResourceOffset4), @resource4, sizeof (resource4), tt);
끝;
MessageBeep (0);
CloseHandle (H);
닫다;
이 게임은 여러 주소를 사용하여 제출할 데이터를 확인 하므로이 유형의 게임의 플러그인을 만드는 것은 어렵지 않으며 가장 어려운 것은 이러한 주소를 찾는 것입니다.
(당신은 이미이 방법을 명확하게 보았고, 특정 연습은 모든 사람에게 달려 있습니다. 하하 ~~~~~~, 너무 일찍 행복하지는 않습니다. 이런 종류의 온라인 게임은 소수를 차지하므로 다른 사람을 사용할 것입니다. 향후 기사의 플러그인 유형에 대해 자세한 설명을 제공하려면 저를 게시하고 격려하십시오. 그렇지 않으면 다음 기사를 작성할 자신감이 없습니다.
마지막으로 5 가지 유형의 플러그인을 요약 한 것은 이제 얕은 플러그인 (생산 난이도)에 대해 이야기합니다
우선, 액션 스타일 플러그인에 대해 이야기 해 봅시다. 플러그인을 처음 썼을 때 가장 쉬운 플러그인이기도합니다.
나는 아직도 "석재"시대에 있었을 때 다른 사람이 소프트웨어 (플러그인)를 가지고있는 것을 보았고 사람들은 방황 할 수있었습니다 (그 당시 플러그인이 무슨 일이 일어나고 있는지 몰랐습니다^_^. ), 이런 종류의 소프트웨어가 공부하기 위해 온다는 것을 알았습니다 (다른 사람들이 그것을 가져간 후 플러그인이라고 부릅니다) 다른 장소에서 마우스를 클릭하는 것 보다이 기능을 구현하려는 욕구가 있었으며 이러한 기능을 구현하는 방법은 몇 가지 간단한 API 기능 만 필요했습니다.
1. 우선, 현재 마우스 위치를 알아야합니다 (현재 마우스 위치를 복원하려면) API 기능 getCursorpos를 사용해야합니다.
부울 getcursorpos (
lppoint lppoint // 커서 위치를위한 구조 주소
);
2. 마우스 위치를 캐릭터가가는 곳으로 이동하면 마우스 위치를 이동하려면 SetCursorpos 기능을 사용해야합니다.
부울 setcursorpos (
int x, // 수평 위치
int y // 수직 위치
);
3. 마우스를 시뮬레이션하고 눌러서 마우스 _event 기능을 사용해야합니다.
void mouse_event (
dword dwflags, // 다양한 모션/클릭 변형을 지정하는 플래그
dword dx, // 수평 마우스 위치 또는 위치 변경
dword dy, // 수직 마우스 위치 또는 위치 변경
dword dwdata, // 휠 움직임의 양
dword dwextrainfo // 32 비트의 응용 프로그램 정의 정보
);
DWFLAGS에는 Mouseeventf_Move 이동, 왼쪽 버튼으로 Mouseeventf_Leftdown을 누르고 왼쪽 버튼으로 Mouseeventf_Leftup을 릴리스하는 등 많은 이벤트가 있습니다
자, 사전 지식을 사용하면 문자 제거가 어떻게 구현되는지 알 수 있습니다.
getCursorpos (포인트);
SetCursorpos (Ranpoint (80, Windowx), Ranpoint (80, Windowy)); // Ranpoint는 수제 무작위 좌표 기능입니다
mouse_event (mouseeventf_leftdown, 0,0,0,0);
mouse_event (mouseeventf_leftup, 0,0,0,0);
setcursorpos (point.x, point.y);
위의 코드를 읽은 후, 캐릭터의 방황이 매우 간단하다고 생각하십니까? ~, 나는 하나를 그려서 3을 모방 할 수 있으며,이 기술을 사용하여 구현할 수있는 많은 좋은 것들이 있습니다 (오래 전에 TMD, 이것. 쓰레기 플러그인 방법입니다. 믿으십시오 ~~~), 다음, 게임의 자동 공격 방법을 살펴 보겠습니다 (게임의 공격에 대한 바로 가기 키를 지원해야합니다) 사용 된 API는 다릅니다 ~~~~ 이번에는 우리가 사용하려는 것은 keybd_event 함수이며 다음과 같이 사용됩니다.
void keybd_event (
바이트 BVK, // virtual-key 코드
바이트 BSCAN, // 하드웨어 스캔 코드
dword dwflags, // 다양한 기능 옵션을 지정하는 플래그
dword dwextrainfo // 키 스트로크와 관련된 추가 데이터
);
또한 스캔 코드를 직접 사용할 수 없다는 것을 알아야합니다.
uint mapvirtualkey (
uint ucode, // virtual-key 코드 또는 스캔 코드
uint umaptype // 공연 할 번역
);
자,이 빠른 연결 키는 다음에 Ctrl+a라고 가정 해 봅시다.
keybd_event (vk_control, mapvirtualkey (vk_control, 0), 0,0);
keybd_event (65, mapvirtualkey (65,0), 0,0);
keybd_event (65, mapvirtualkey (65,0), keyeventf_keyup, 0);
keybd_event (vk_control, mapvirtualkey (vk_control, 0), keyeventf_keyup, 0);
먼저 시뮬레이션에서 CTRL 키를 누른 다음 A 키를 누른 다음 A 키를 릴리스 한 다음 최종적으로 CTRL 키를 해제합니다.
(여기서, 나는 간단한 플러그인에 대한 확실한 이해를 거의 얻었습니다 ~~~~ 시도해 보자? 하나 또는 3 개를 그리면 더 나은 것을 얻을 수 있다면 그것을 이해하는 능력에 달려 있습니다. ~~, 그러나 너무 일찍 행복하지 마십시오. 이것은 시작에 불과합니다.