外挂编程常用API函数
api函数

们在编制应用软件的过程中,经常需要对光标和鼠标操作,本人在文中介绍了Windows 系统中有关实现对鼠标和光标进行操作的API函数,并给出了在Visual C6.0++中利用所介绍的API函数实现对鼠标和光标的操作的代码。
一、隐藏和显示光标函数:int ShowCursor ( BOOL bShow );参数bshow,为布尔型,bShow的值为False时隐藏光标,为T rue时显示光标;该函数的返回值为整型,为鼠标隐藏或显示的指数器;返回值大于等于0时显示光标,否则隐藏鼠标;假如安装了鼠标初值为0。
实例:在基于对话框的应用程序中放置两个Button,名称分别为HideCursor和ShowCursor;再放置一个CStatic控件,名称为Label1,用于显示光标计数器。
源程序为:// 使光标计数器的值减一,假如小于零,隐藏光标void CMyTestDlg::OnHideCursor(){int i;i=ShowCursor(FALSE);Cstring string;string.Format(_T("%d" ),i);Label1.SetWindowT ext(&string);}// 使光标计数器的值加一,假如大于等于零,显示光标void CMyTestDlg::OnShowCursor(){int j;j=ShowCursor(TRUE);Cstring string;string.Format(_T("%d" ),j);Label1.SetWindowT ext(&string);} 运行程序,连续单击ShowCursor按钮,你会见到计数器从1(光标显示时初值为0)开始不断加1;再连续单击HideCursor按钮,又会见到计数器不断减1,当计数器为-1时开始隐藏光标。
二、交换鼠标左右键和恢复函数:BOOL SwapMouseButton ( BOOL fSwap ); 参数fSwap,为布尔型,TRUE表示交换鼠标左右键,FALSE表示恢复系统默认左右手习惯;返回值亦为布尔型,交换后,返回值TRUE,恢复正常值为FALSE。
以下是用VB做外挂的一些知识

以下是用VB做外挂的一些知识.我个人认为是入门的一些知识.不敢独享.贴出来给大家!~有时间随时补充~呵呵1.查找目标窗口.需要做外挂,就需要查找目标窗口.然后才做一些其他的动作.比如说鼠标键盘模拟啦.内存修改啦.封包型发送与替换啦什么什么的------------------------------------------------------------------------- '定义模块Declare Function FindWindow Lib "user32" Alias "FindWin dowA" (ByVal lpClassName As String, ByVal lpWindowNa me As String) As Long'在窗口中建立一timer(时间控制器),然后在代码窗口输入如下代码:Private Sub Form_Load()Timer1.Interval = 500End Sub时间控制器的代码如下:Private Sub Timer1_Timer()Dim hwnd As Longhwnd = FindWindow(vbNullString, "计算器") '抓取"计算器"这个窗口名称.If (hwnd = 0) ThenIf MsgBox("你没有打开[计算器]程序!点击“确定”退出。
点“取消”继续。
", 49, "错误!") = 1 Then EndElseIf (hwnd <> 0) ThenMsgBox "你已经打开了[计算器]程序.点“确定”退出本程序", , "退出"EndEnd IfEnd Sub2.以下为模拟键盘事件.比如模拟"r"键.'在模块中定义Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, B yVal dwExtraInfo As Long)在窗口中建立一timer.时间间隔随意.只要不是0就可以了Private Sub Timer1_Timer()Call keybd_event(82, 0, 0, 0) '模拟按下"R"键End Sub3.以下为快捷键例子.比如按下"ctrl+A"就退出!'可以设置Form的KeyPreview属性为True,然后在For m_KeyDown事件中添加代码:Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = Asc("A") And Shift = vbCtrlMask Then unloa d me '如果ctrl+A键被按下就退出End Sub例二:在Form中加入Private Declare Function GetAsyncKeyState Lib "user32" (B yVal vkey As Long) As IntegerPrivate Function MyHotKey(vKeyCode) As Boolean MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)End Function'然后在循环中或Timer的Timer事件中检测:Private Sub Timer1_Timer()If MyHotKey(vbKeyA) And vbKeyControl Then 'ctrl+A End '关闭End If'其中vbkeyA是键盘〃A〃的常数,其他键可按F1查得。
常用API函数参数1

ShowCaret函数功能:该函数使插入标记在屏幕的当前位置上可见。
当插入标记变为可见时,它自动开始闪烁。
函数原型:BOOL ShowCaret(HWND hWnd);参数:hWnd:标识拥有插入标记的窗口。
如果该参数为NULL,那么ShowCaret 搜索当前任务以发现有插入标记的窗口。
返回值:如果函数执行成功,那么返回值为非零;如果函数执行失败,那么返回值为零。
若想获取更多错误信息,请调用GetLastError函数。
备注:只有指定的窗口拥有插入标记,并且该插入标记具有形状,没有连续隐藏2次或多次时,ShowCaret才能显示该插入标记。
如果这几个条件中的一个或多个没满足,那么ShowCaret函数什么也不做,并且返回FALSE。
速查:Windows NT:3.1及以上版本Windows:95及以上版本Windows CE:1.0及以版本;头文件:winuser.h;库文件:user32.lib。
SetCaretPos函数功能:该函数将插入标记移动到指定的坐标上。
如果拥有该插人标记的窗口是使用CS_OWNDC类样式创建的,那么指定的坐标依据与该窗口相关的设备环境的映射模式而定。
函数原型:BOOL SetCaretPos(int X,int Y);参数:X:指定插入标记新的X坐标。
Y:指定插入标记新的Y坐标。
返回值:如果函数执行成功,那么返回值为非零;如果函数执行失败,那么返回值为零。
若想获取更多错误信息,请调用GetLastError函数。
备注:函数SetCaretPos不管插入标记是否隐藏都将移动它。
系统为每个队列提供一个插入标记。
窗口只能对自己拥有的插入标记进行位置的设置。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:头文件:Winuser.h;库文件:user32.lib。
返回值如果函数调用成功,返回值是正文的高度(逻辑单位)。
使用OD编写连连看外挂

使用OD编写连连看外挂BYPhython邮箱:csfoffice2@给刚用OD想写外挂或是破解软件的新手准备,大鸟请直接无视。
工具准备:OllyDebug、连连看4.8连连看4.8其实长这样点击开始游戏后变成了这样我们的最终目标是要变成下图这样!!是不是很神奇?废话少说,现在开始。
第一步用OD打开zzllk.exe打开之后OD停留在了主程序入口界面思考一下,连连看使用鼠标左键单击来玩的游戏,因此一定有一个响应鼠标左键的消息处理函数,核心部分一定在这个函数中,目前的当务之急就是想办法找到这个函数。
在windows编程中,通常要用RegisterClassEx这个API函数来注册一个窗口类,它含有一个参数就是窗口过程回调函数用来处理类似鼠标单击之类的消息。
于是我们用Ctrl+G来寻找这个函数。
然而。
好遗憾!竟然没有找到这个函数,那么我们就得另想办法了!可是还有什么办法呢???我们知道,在程序退出的时候系统会向窗口过程回调函数发送一个WM_CLOSE的消息,在接收到这个消息的时候,程序员一般会在回调函数里用PostQuitMessage这个命令来退出程序。
因此,突破口就是这个PostQuitMessage结果还真的找到了!!目前停留在系统API的领空里,我们回到用户领空在这句下一个断点,然后运行连连看,点击右上角的关闭按钮会发现程序断在这里查看堆栈窗口,发现是从00438EEC调用过来的我们转到00438EEC上图就是44328EEC处的程序代码,就在这里调用了PostQuitMessage函数但是这段代码所处的函数很短,怀疑还有上一层函数,依旧用同样的方式,下断点并且返回,不过这次需要在OD中重新打开游戏了。
(我们在函数头部也就是00438ED2下断点,重新打开游戏,单击关闭按钮,程序停在下面这个界面)查看堆栈发现是从0042EECE附近调用过来的转到这里没错调用它的地址就是0042EEC9,我们给他加个注释“退出”理论上来说处理消息的回调函数就在这一层。
外挂中的数据包api截取

INTEGER WSAStartup(
wVersionRequired: word,
WSData: TWSA_DATA
);
2)使用socket函数得到socket句柄,m_hSocket:=Socket(AF_INET, SOCK_RAW, IPPROTO_IP); 用法如下:
function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; stdcall;
implementation
const WinSocket2 = 'WS2_32.DLL';
function WSAStartup; external winsocket name 'WSAStartup';
我们要知道WSA_DATA类型会被用于WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer;,大家会发现WSData是引用参数,在传入参数时传的是变量的地址,所以我们对WSA_DATA做以下封装:
const
WSADESCRIPTION_LEN = 256;
看了封包捕获的全过程序,对你是不是有点起发,然而在这里要告诉大家的是封包的获得是很容易的,但是许多游戏的封包都是加密的,如果你想搞清楚所得到的是什么内容还需要自己进行封包解密。
由于大多数读者对封包类编程不是很了解,我在这里就简单介绍一下相关知识:
APIHooK:
由于Windows的把内核提供的功能都封装到API里面,所以大家要实现功能就必须通过API,换句话说就是我们要想捕获数据封包,就必须先要得知道并且捕获这个API,从API里面得到封包信息。
C#游戏外挂代码(转载)

C#游戏外挂代码(转载)XDF.GamePlugInCommon 类库项⽬//API.cs ⽂件,定义⼀些常⽤API函数及常量using System;using System.IO;using System.Threading;using System.Diagnostics;using System.Runtime.InteropServices;namespace XDF.GamePlugInCommon{///<summary>/// API 的摘要说明。
///</summary>public sealed class API{public static int WM_KEYDOWN = 0x0100;public static int WM_KEYUP = 0x0101;public static int WM_SYSKEYDOWN = 0x0104;public static int WM_SYSKEYUP = 0x0105;public static int WM_MOUSEMOVE = 0x0200;public static int WM_LBUTTONDOWN = 0x0201;public static int WM_LBUTTONUP = 0x0202;public static int WM_LBUTTONDBLCLK = 0x0203;public static int WM_RBUTTONDOWN = 0x0204;public static int WM_RBUTTONUP = 0x0205;public static int WM_RBUTTONDBLCLK = 0x0206;public static int WM_USER = 0x0400;public static int MK_LBUTTON = 0x0001;public static int MK_RBUTTON = 0x0002;public static int MK_SHIFT = 0x0004;public static int MK_CONTROL = 0x0008;public static int MK_MBUTTON = 0x0010;public static int MK_XBUTTON1 = 0x0020;public static int MK_XBUTTON2 = 0x0040;[DllImport("user32.dll")]public static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);//此处主要⽤来让窗⼝置于最前(SetWindowPos(this.Handle,-1,0,0,0,0,0x4000|0x0001|0x0002);)[System.Runtime.InteropServices.DllImport("user32.dll")]public static extern bool SetWindowPos(IntPtr hWnd,int hWndInsertAfter,int X,int Y,int cx,int cy,int uFlags);///<summary>///窗⼝置前///</summary>///<param name="hWnd"></param>public static void SetWindowPos(IntPtr hWnd){SetWindowPos(hWnd,-1,0,0,0,0,0x4000|0x0001|0x0002);}///<summary>//////</summary>///<param name="processName"></param>///<returns></returns>public static Process GetGameProcess(string processName){Process pro = null;Process[] pros = Process.GetProcessesByName(processName);if(pros.Length > 0){pro = pros[0];}return pro;XDF.TantraPlugIn//ControlItem.csusing System;using System.IO;using System.Xml.Serialization;namespace XDF.TantraPlugIn{///<summary>/// ControlItem 的摘要说明。
常用API函数参数6

ImmIsIME函数功能:判断指定的句柄是否为IME;函数原型:BOOL ImmIsIME( HKL hKL );参数hKL:待检查的键盘布局句柄;返回值:函数调用成功返回1,失败返回0.速查信息:Windows NT: 要求4.0或更高版本Windows: 要求Windows 95 或更高.Windows CE:不支持.Header: 声明在imm.h.Import Library: imm32.lib.ImmGetDescription(HKL HKL,LPTSTR lpszDescription,UINT uBufLen); 参数HKL[在键盘布局的句柄。
lpszDescription[]接收空终止字符串,描述了IME的缓冲区的长指针。
uBufLen[]大小,字符缓冲区。
如果为零,则函数返回的完整描述所需的缓冲区大小,不包括终止空字符。
缓冲区的大小是在Unicode字符(每个字符两个字节)。
返回值Unicode字符复制到缓冲区,如果uBufLen是零,在收到说明所需的字符缓冲区的大小表示成功。
无论是价值包括终止空字符。
需求操作系统版本的Windows CE NET 4.0及更高版本。
头:Imm.h. 链接库:Coreimm.lib。
GetKeyboardLayoutName函数功能:该函数可以获得活动键盘布局的名字。
函数原型:BOOL GetKeyboardLayoutName(LPTSTR pwszKLID);函数:pwszKLID:缓冲区指针,缓冲区中用于接收至少有KL_NAMELENGTH个字符的键盘布局的名字(包含空结束符在内)。
该参数值将是提供给LoadKeyboardLayout函数的字符串的一个副本,除非发生键盘布局替换。
函数值:若函数调用成功,则返回非0值。
若函数调用失败,则返回值为0。
若要获得更多错误信息,可调用GetLastError函数。
备注:Windows NT:GetKeyboardLayoutName接收系统的活动键盘布局的名字。
QQ连连看 秒杀外挂 功能函数代码

{
for(int b=0;b<19;b++)
{
if(ChessData[a][b]!=0)
{
return FALSE;
}
}
}
return TRUE;
}
/*********************************/
GetWindowThreadProcessId(QQ_LLK,&LLK_ProcessId);
LLK_ProcessHwnd = OpenProcess(PROCESS_ALL_ACCESS,false,LLK_ProcessId);
WriteProcessMemory(LLK_ProcessHwnd,Tool_range,nbuff,1,&byread);
/*自动使用重列,防死局
/*********************************/
void Auto_range()
{
//重列道具数量为255
byte nbuff[1] = {0xFF};
QQ_LLK = FindWindow(NULL,GameCaption);
/*判断并实现自动点击功能
/*********************************/
void Cheat_Main()
{
int x1,y1,x2,y2;
for(x1=0;x1<11;x1++)
{
for(y1=0;y1<19;y1++)
{
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
外挂编程常用API函数
CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作
CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用
ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接
CreateEvent 创建一个事件对象
CreateMailslot 创建一个邮路。
返回的句柄由邮路服务器使用(收件人)
CreateMutex 创建一个互斥体(MUTEX)
CreateNamedPipe 创建一个命名管道。
返回的句柄由管道的服务器端使用
CreatePipe 创建一个匿名管道
CreateProcess 创建一个新进程(比如执行一个程序)
CreateSemaphore 创建一个新的信号机
CreateWaitableTimer 创建一个可等待的计时器对象
DisconnectNamedPipe 断开一个客户与一个命名管道的连接
DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄ExitProcess 中止一个进程
FindCloseChangeNotification 关闭一个改动通知对象
FindExecutable 查找与一个指定文件关联在一起的程序的文件名
FindFirstChangeNotification 创建一个文件通知对象。
该对象用于监视文件系统发生的变化FindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化
FreeLibrary 释放指定的动态链接库
GetCurrentProcess 获取当前进程的一个伪句柄
GetCurrentProcessId 获取当前进程一个唯一的标识符
GetCurrentThread 获取当前线程的一个伪句柄
GetCurrentThreadId 获取当前线程一个唯一的线程标识符
GetExitCodeProces 获取一个已中断进程的退出代码
GetExitCodeThread 获取一个已中止线程的退出代码
GetHandleInformation 获取与一个系统对象句柄有关的信息
GetMailslotInfo 获取与一个邮路有关的信息
GetModuleFileName 获取一个已装载模板的完整路径名称
GetModuleHandle 获取一个应用程序或动态链接库的模块句柄
GetPriorityClass 获取特定进程的优先级别
GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况
GetProcessTimes 获取与一个进程的经过时间有关的信息
GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存GetSartupInfo 获取一个进程的启动信息
GetThreadPriority 获取特定线程的优先级别
GetTheardTimes 获取与一个线程的经过时间有关的信息
GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符
LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间
LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间
LoadModule 载入一个Windows应用程序,并在指定的环境中运行
MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。
如返回条件已经满足,则立即返回SetPriorityClass 设置一个进程的优先级别
SetProcessShutdownParameters 在系统关闭期间,为指定进程设置他相对于其它程序的关闭顺序SetProcessWorkingSetSize 设置操作系统实际划分给进程使用的内存容量
SetThreadPriority 设定线程的优先级别
ShellExecute 查找与指定文件关联在一起的程序的文件名。