|
![]() | 作者: dongh [dongh]
![]() |
登录 |
编作弊软件 手把手教你编作弊软件之(1)---总 体 设 计 声明:本教程只是讲述作弊软件的实现原理,不含任何恶意代码,也不针对任何软件。任何人不得用于非法行为。如果因为使用此原理编写相关软件造成的任何纠纷及一切后果,本人不负任何责任。 写一个好的软件,系统设计是必需的,在一些大中型的软件设计中,这点尤为重要。我们所要写的这个作弊软件代码量并不是很长,小辉自己写的时候也只是在纸上写了几个功能要求,也没有做什么规划,差不多也就一个晚上的时间搞定。然为了有一个良好的开始,小辉还是有必要在这里讲解一下。 在你写这个程序之前,首先要考虑程序将有一些什么样的功能。小辉写的程序支持以下功能: 1. 自动启动广告条/自动关闭广告条。这是无人值守时的一个重要功能。实现定时启动、定时关闭、出错重启等。 2. 鼠标自动移动/点击。第二和第三个功能是本程序最重要的功能。如果没有这两个功能,也就不叫作弊软件了。为了达到欺骗的目的,我们必须模拟mouse的移动和点击,达到自动浏览的效果。 3. 自动切换网址。切换到一个新的网址有两种方式,一种是鼠标击击了超链接,另一种是在地址栏内输入网址。这个功能将实现用一个新的地址打开一个新的窗口。 4. 自动关闭错误窗口及非IE窗口。我们上网的时候,windows经常出现各种错误或非IE窗口,如“警告”、“错误”、“文件下载”、“EXPLOER执行了非法操作”等,我们必须在程序中检测到此类错误并将其关闭。 5. 广告条非计费状态的识别。由于网络连接状态或其他原因,广告条有可能长时间停在非计费状态。我们必须检测到此状态,将广告条关闭,并重新登录运行。 6. 反识破功能。一个好的作弊软件必须有好的反识破机制,尽可能的减少风险,减少被发现的危险。 7. 联网报警/自动报警/日志记录。无人值守时应该自动记录各种异常状态。这对初期长时间测试程序很有用。联网报警在这样一种情况下写的:我晚上一般要在自己的机器上写程序,所以我把这种软件装在其他的几台机器上了(我们是通过局域网代理服务器上网),如果程序出错或破Windows当机了,我自己的机器就能收到警报,然而再去处理。――免得老是隔那么久就跑去瞧一瞧。自动报警是指若不是局域网,就可以通过声卡或扬声器报警。 8. 其他功能。其他的一些功能就比较杂了。例如把程序隐藏到系统托盘(tray)区域,提供热键支持、定时关机等。 功能就这么些。当然,你也可以下载一些其他的类似软件,看看他们提供了一些什么样的功能,哪些功能是你所必需的,哪些功能你会比他们做得更好;他们的操作界面是怎样的,等等。例如MC2000、takeit等。 对于界面,一定要友好简洁。我的程序界面就三个操作按钮一个状态信息框。如果你的界面设计得较复杂,可以用属性页的方式来控制。 其他几点应该注意的一些问题: 1. 要有良好的编程风格。对于一个好的程序员来说,其程序不但要求高效、简洁,还要可读性强。例如变量命名,我们不提倡"a1,a2,a3,aa,bb"的这种命名方式。你可以参考小辉现在负责的这个软件开发项目的部分编程风格约定。 2. 关于API的应用。 编写此类程序不可避免要与Win API打交道。 1> 在C/C++中,可以直接调用API函数。 2> 在DELPHI中,也可以直接调用API函数。但部分API函数和Delphi自带的重名,例如ClientToScreen,调用这些重名API时,要如下:windows.ClientToScreen. 3> 在VB/PB中,需要用Declare Function声明。 例如 退出windows/重新启动的API函数ExitWindowsEx(),函数原型如下: BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved ); 在VB中则需声明如下: Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long 声明: 小辉程序在讲解过程中以C为基础,某些地方会兼顾讲解Delphi的用法。但由于小辉用Delphi和VB搞开发是在98年以前的事,现在一些技术细节也疏忘了许多,因此,朋友们若问我关于Delphi/VB方面的技术问题,小辉可能无法给你满意的回答,建议你去相关的主页查询。对于涉及界面开发的一些简单问题,恕小辉不能一一回答。 (――需要说明的是,我现在已经没有用它了。因为我觉得作弊毕竟是不好的行为。并且,也请不要给我来信索取这个软件) 手把手教你编作弊软件之(2) ---自动启动/关闭广告条 自动启动/关闭广告条有很多种方法。这里分别讲述其中两种。 1. 启动广告条: 方法一:使用WinExec()函数 UINT WinExec( LPCSTR lpCmdLine, // 包含要执行的命令行 UINT uCmdShow // 定义了以怎样的形式启动程序的常数值。); 参数说明: LPCSTR lpCmdLine: 包含要执行的命令行。 系统将在以下范围查找应用程序: 1. 应用程序启动位置 2. 当前目录位置 3. Windows system目录 4. Windows 目录 5. path中设置的路径列表 UNIT uCmdShow: 定义了以怎样的形式启动程序的常数值。具体说明如下: SW_HIDE 隐藏窗口,活动状态给令一个窗口 SW_MINIMIZE 最小化窗口,活动状态给令一个窗口 SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态 SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 SW_SHOWMAXIMIZED 最大化窗口,并将其激活 SW_SHOWMINIMIZED 最小化窗口,并将其激活 SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE相同 例如:启动当前目录下的abc.exe 程序: WinExec( "abc.exe",SW_SHOW ); 方法二: WinExec是一个兼容win16的函数。win32应用程序可用CreateProcess函数,也可使用ShellExecute函数。具体说明可查阅有关帮助文档。 2. 关闭广告条 方法一: 模拟鼠标点击[关闭]按钮 要用到以下两个API函数: VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, DWORD dwExtraInfo ); 设置mouse状态。参数说明如下: dwFlags Long,下述标志的一个组合 : MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 MOUSEEVENTF_MOVE 移动鼠标 MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 dx 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 dy 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 dwData amount of wheel movement dwExtraInfo,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序 BOOL SetCursorPos( int X, // horizontal position int Y // vertical position ); 设置鼠标位置。鼠标指针在屏幕像素坐标系统中的X,Y位置 例如确定广告条的关闭按钮位于座标点(1015,682),则执行下面两段代码中的任意一段都可以实现关闭: 代码1: void CloseSpedia() { SetCursorPos(1015,682); mouse_event(MOUSEEVENTF_LEFTDOWN ,0,0,0,GetMessageExtraInfo()); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo ()); } 代码2: void CloseSpedia() { mouse_event(MOUSEEVENTF_MOVE,0,1015,682,GetMessageExtraInfo()); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo()); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo ()); } 方法2:找到广告条的句柄,给其发送WM_CLOSE事件。 要用到以下几个API函数: BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value ); 枚举窗口列表中的所有父窗口(顶级和被所有窗口) BOOL PostMessage( HWND hWnd, // handle of destination window UINT Msg, // message to post WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); 将一条消息投递到指定窗口的消息队列 int GetWindowText( HWND hWnd, // handle to window or control with text LPTSTR lpString, // address of buffer for text int nMaxCount // maximum number of characters to copy ); 取得一个窗体的标题(caption)文字 实现原理: 通过使用EnumWindows枚举窗口列表中的所有父窗口,在其回调函数中记录所有窗口的标题和句柄。判断若是要关闭的应用程序句柄,则使用PostMessage向其发送WM_CLOSE命令。具体代码如下(假设我我们要关闭的程序是画笔程序): typedef struct { HWND hWnd; char cWinBuf[256]; }WINLIST; WINLIST gWinList[256]; int giCountWin,j; BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam ) { char buffer[256]; GetWindowText(hWnd, buffer, 256); if ( strlen(buffer) ) { if (giCountWin < 256) { gWinList[ giCountWin].hWnd = hWnd; strcpy(gWinList[ giCountWin].cWinBuf,buffer); giCountWin ++; } } return TRUE; } void CloseSpedia() { giCountWin = 0; EnumWindows( (WNDENUMPROC)EnumWindowsProc,0); for ( j = 0; j { if ( strcmp(gWinList[j].cWinBuf,"画笔") == 0 ) { : ostMessage( gWinList[j].hWnd,WM_CLOSE,0,0); break; } } } 好了,今天就说到这。这一节涉及到的api函数比较多。对初涉API的朋友可能会有些难。特别是关闭广告条的第二种实现方法可能有些复杂。 虽说小辉敲五笔每分钟能敲100多字/分以上,但整理这两节玩意儿也发了小辉一两个小时。今天还有活要干呢,先写到这,后天小辉再向大家讲述这个程序的核心功能:如何实现mouse的自动移动/点击。 手把手教你编作弊软件之(3)---鼠标自动移动/点击 鼠标的自动移动/点击功能的作弊软件重要的一个功能。如果认真看过了第二章<自动启动/关闭广告条>的朋友,想必对此原理应该了解了。有很多种方法能够实现鼠标的移动和点击。这里讲述两个API函数: BOOL SetCursorPos( int X, // horizontal position int Y // vertical position ); 设置鼠标位置。鼠标指针在屏幕像素坐标系统中的X,Y位置 这个函数是用来设置Mouse位置的。可以用这个函数来移动mouse在屏幕上的移动。 另外一个函数功能比较强,即mouse_event() VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, DWORD dwExtraInfo ); 设置mouse状态。参数说明如下: dwFlags Long,下述标志的一个组合 : MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 MOUSEEVENTF_MOVE 移动鼠标 MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 dx 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 dy 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 dwData amount of wheel movement dwExtraInfo,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序。 例如:将mouse移动到坐标(450,100) 可用函数: SetCursorPos(450,100) ; 或 mouse_event(MOUSEEVENTF_MOVE ,0,450,100,GetMessageExtraInfo()); 来实现 实现鼠标单击: mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo()); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo ()); 那么,如何模拟mouse不断的移动和点击呢?这需要用定时器完成。 以C为例: 在初始化程序的时候,设置时钟: ... case WM_CREATE: ... SetTimer(1, 1000, NULL); break; 这样就设置了ID号为1 的时钟事件, 它每秒(1000毫秒)将产生一个 WM_TIMER事件。 然后我们在WM_TIMER事件中将入相关的处理: case WM_TIMER: { ... // mouse move code... // mouse click code... break; } 在Delphi中,时钟是通过一个Timer控件实现的。 关于时钟事件的运用在此软件中是很基本的一个概念。几乎所有的工作都是在时钟事件中完成的。如需进一步的了解时钟的用法,请查阅相关资料。 手把手教你编作弊软件之(4)---自动切换网址 自动切换网址同样有多种方法。这里讲述其中两种方式: 第一种方法:使用ShellExecute函数 HINSTANCE ShellExecute( HWND hwnd, // 父窗口句柄 LPCTSTR lpOperation, // 操作类型 LPCTSTR lpFile, // 要打开的文件或者文件夹 LPCTSTR lpParameters, // 打开文件的参数 LPCTSTR lpDirectory, // 默认的目录 INT nShowCmd // 打开后的显示方式 ); 部分参数具体说明如下: lpOperation的取值范围为: "open" // 打开一个可执行文件,或者是有关联的文档 "print" // 打印一个文档 "explore" // 打开一个目录 nShowCmd的取值范围: SW_HIDE 隐藏窗口,活动状态给令一个窗口 SW_MINIMIZE 最小化窗口,活动状态给令一个窗口 SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态 SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 SW_SHOWMAXIMIZED 最大化窗口,并将其激活 SW_SHOWMINIMIZED 最小化窗口,并将其激活 SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE相同 例如:打开 http://www.sina.com.cn 这个站点如下: ShellExecute(NULL, "open", "http://www.sina.com.cn";;,NULL, NULL, SW_MAXIMIZE ); 此命令将以默认浏览器打开http://www.sina.com.cn,并将加开后的窗口最大化。 又例: ShellExecute(NULL, "open", "IEXPLORE.exe http://www.sina.com.cn";;,NULL, NULL, SW_MAXIMIZE ); 此命令将直接用IE打开一个sina的站点。不过将开一个新的窗口。 第二种方法: 用WinExec函数。 WinExec函数在第二章已经讲过了。例如打开sina的站点,可用: "IEXPLORE.exe http://www.sina.com.cn";;,SW_MAXIMIZE); 这两种方法是最常用的方法。大家可以试一试。 也许有人问:可不可以模拟mouse,直接在浏览器内输入网址进行切换呢?回答是肯定的。小辉也在试这个方法。不过当时由于水平较浅,不知怎样写。最近又稍为忙了些,没时间来写。技术并不复杂,关键在于两步:一:怎样取得IE的地址输入栏的句柄;二:怎样用键盘钩子向地址输入栏输入地址。有兴趣的朋友不妨去琢磨一下。 如何保证每次切换的地址不一样呢?小辉是这样实现的: 1. 有一个名为 address.txt 的文本文件,这个文件中预先存入了大量的网址。每行一个网址。 2. 每次启动系统时,将文件的网址读出,放入一链表(当然也可用动态数组)中,每一项为一个网址。 3. 用时钟事件控制每次打开一个网址的时间。 4. 需打开一个网址时,先生成一个随机值,取出一个网址,将其打开。 大致的过程就是这样。 通过这几章的讲解,一个最简单的作弊系统就完成了。 手把手教你编作弊软件之(5)---自动关闭错误窗口及IE窗口 在破IE运行过程中,经常会出现一些自动运行中不希望看到的窗口: 如错误窗口、文件下载窗口、警告窗口、安全设置警告窗口以及一些其它的错误窗口。出现这种窗口应该迅速将其关闭。否则程序在不断打开新网页过程中,错误越积越多,很容易造成死机。 另外,在程序运行中,每隔一分钟左右的时间就要打开一个网页。经过一段时间后,当打开的窗口过多时,系统资源会耗尽,系统会面临翘翘的危险,因此隔一段时间应该关闭已打开的IE窗口,释放资源。 本章将分两部分讲解。 第一部分:关闭错误窗口 本章要用到一个重要的API函数EnumWindows()。在第二章中我们谈到自动关闭广告条时用到了这个函数。想来大家应该熟悉了。 部分代码段如下: // 数据结构定义 typedef struct { HWND hWnd; char cWinBuf[256]; }WINLIST; WINLIST gWinList[256]; int giCountWin,j; typedef struct { char cCloseList[100]; }CLOSELIST; CLOSELIST gCloseList[30]; int giCountClose; …… // EnumWindows函数的回调函数。列举所有的窗口标题 BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam ) { char buffer[256]; GetWindowText(hWnd, buffer, 256); if ( strlen(buffer) ) { if (giCountWin < 256) { gWinList[ giCountWin].hWnd = hWnd; strcpy(gWinList[ giCountWin].cWinBuf,buffer); giCountWin ++; } } return TRUE; } // 关闭错误窗口 BOOL CloseErrorWindow() { short i=0,j=0; if ( giCountClose > 0 )// giCountClose表示要关闭的错误窗口总数 { giCountWin = 0; // giCountWind表示windows列举窗口的总数 EnumWindows( (WNDENUMPROC)EnumWindowsProc,0); for( i = 0; i< giCountClose; i++) { for ( j = 0; j if ( strcmp(gWinList[j].cWinBuf,gCloseList.cCloseList) == 0 ) { PostMessage( gWinList[j].hWnd, WM_CLOSE,0,0); PostMessage( gWinList[j].hWnd, WM_QUIT,0,0); } } } return TRUE; } 一些说明: 结构CLOSELIST数组gCloseList[30] 存储了所有错误窗口的名称(最多30个)。这些数据存储在一个文本文件中,每行存储一个错误窗口的名称。程序启动时读入此变量。giCountClose表示所有错误窗口的总数。 例如gCloseList可能的值如下: giCountClose : 6 gCloseList[0].cCloseList : 错误 gCloseList[1].cCloseList : 文件下载 gCloseList[2].cCloseList : 警告 gCloseList[3].cCloseList : 安全 gCloseList[4].cCloseList : 添加到收藏夹 gCloseList[5].cCloseList : Socket Error - Microsoft Internet Explorer CloseErrorWindow()函数可放在计时器事件中,每隔五秒钟左右的时间执行一次。 第二部分:关闭IE: 部分代码段如下: void CloseIEWindow() { short j=0, sFirst = 0; giCloseIETime = 0; gMAX_CLOSEIE_TIME = RAND( gMoneySet.sCloseIEMin, gMoneySet.sCloseIEMax ); giCountWin = 0; EnumWindows( (WNDENUMPROC)EnumWindowsProc,0); // 列举所有窗口 for ( j = 0; j { if ( IsIEWindow( gWinList[j].cWinBuf ) == TRUE ) // 判断是否为IE窗口 { if ( sFirst) PostMessage( gWinList[j].hWnd,WM_CLOSE,0,0); // 向当前IE发送关闭消息 else sFirst = 1; } } } 说明 : 1. IsIEWindow() 是我自定义的一个函数,用来判断当前窗口的标题中是否包含了文字"Microsoft Internet Explorer",若包含了,则认为这是一个IE窗口,则返回TRUE,否则返回FALSE。函数的代码没有在这里列出。 2. sFirst 用来控制保证有一个IE窗口不被关闭。若无这个变量控制,则所有的IE窗口都被关闭。 3. CloseIEWindow()函数可放在计进器事件中,每隔五至十分钟左右执行一次。 手把手教你编作弊软件之(6)---广告条非计费状态的识别 由于各种各样的原因,广告条在经过一段时间后可能停止计费。这时,我们的软件应该能够检测到这一现象,若累计达到一定时间(如五分钟),则将广告条关闭重启。 那么,如果检测广告条在计费状态呢?下面讲述小辉摸索出来的一种原理。如果有更好的解决之道,欢迎朋友们与我交流! 广告条在计费状态与否,一般会在界面上反映出来。如某些广告条会显示一个绿色的小灯,表示其在计费状态。我们可以通过程序获取其界面上的某点,分析其RGB值,若为绿色,则判断其在计费状态。否,则在非计费状态。 我们要用到如下两个API函数: HDC CreateDC( LPCTSTR lpszDriver, // pointer to string specifying driver name LPCTSTR lpszDevice, // pointer to string specifying device name LPCTSTR lpszOutput, // do not use; set to NULL CONST DEVMODE *lpInitData // pointer to optional printer data ); COLORREF GetPixel( HDC hdc, // handle to device context int XPos, // x-coordinate of pixel int nYPos // y-coordinate of pixel ); CreateDC用来建立一个设备场景。GetPixel用来获取设备场景中某逻辑坐标的RGB值。 小辉的部分程序如下: COLORREF CaptureRGB( ) { HDC hScreenDC; COLORREF color; hScreenDC = CreateDC("DISPLAY",NULL,NULL,NULL); color = GetPixel(hScreenDC,18,682); return color; } void CheckState() { COLORREF Colors; short j=0; Colors = CaptureRGB(); if ( Colors == 0x0038E070 ) { // 在计费状态的处理 } else { // 没有在计费状态的处理 } } 函数CaptureRGB()用来获取屏幕上某点的RGB值。为了简单起见,此处座标为一常数坐标(18,682)。在程序中,应该通过设定来获取坐标值。 在函数中,用 if ( Colors == 0x0038e070) 来判断获取的颜色是否为指定的颜色。0x0038e070是某广告条在计费状态下状态灯(座标为18,682)的颜色值(Windows环境为: 1024 * 768 16位增强色)。 程序应该能够根据不能的分辨率、颜色来检测到广告条的状态。限于篇幅,这部分功能朋友们可自行琢磨。 手把手教你编作弊软件之(7)---反识破措施 有作弊就有反作弊。很多广告公司都有反作弊措施。而一旦发现作弊,处理罚是很严厉的。不旦封杀你的帐号,而且已经赚的美元成了竹蓝打水一场空。因此,作为一个程序员,掌握好的反识破功能是必须的。这里讲述最基本的一些反识破措施。 一、软件标题不要惹眼。 有些朋友写了程序,把程序命名为:RichMoeny, GlodMoney, NetMoney, 作弊器、我的赚钱工具…… 这些命名都是一些失败的命名方式。因为很多广告公司都有一长串的作弊软件清单,它如果检测到你机器上运行有类似名称的程序,它就会认为你在作弊。因此,软件名称最好与windows紧密结合,让人不起疑心。例如将其命名为"Expoler",“记事本”,“Microsoft Word...”之类。可执行的文件名最好也与windows的一些常用程序一样。如notepad.exe, word.exe等等。也就是说,若只看你软件的执行文件名与标题名,要让人认为这是一个windows自己的程序。并且可以经常自动更换软件标题。例如小辉以前的软件执行文件名为winzip.exe, 标题为:"winzip "。 二、处理好随机事件。 作弊不外乎是模拟点击,模拟移动。但是点击与移动的时间间隔大有学问。对于那些精确点击是比较危险的。也就是说,点击与移动应该完全随机化,不能让人看出有任何规律。例如,多少秒点击一次,点击在什么地方,这些事件的时间都应该随机生成。并且随机数的幅度也应该大一些。例如:模拟点击的间隔时间为 4-18之间的生成的随机数就比4-9之间生成的随值数安全性高很多。 这两条反识破措施是几乎所有有点名气的作弊软件必须彩的措施。当然,还有其他一些更深入的或专门针对某个广告条的措施。这里就不细说了。 |
地主 发表时间: 04-06-18 11:41 |
![]() | 回复: wskli [wskli] ![]() |
登录 |
![]() ![]() ![]() |
B1层 发表时间: 04-06-18 14:08 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号