论坛: 编程破解 标题: 编作弊软件 复制本贴地址    
作者: 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号