黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!
plant

设为首页
收藏本站
联系我们
网站导航

黑客软件下载 - 黑客技术专题与培训 - 黑客入门技术专题 - 浏览 - [第56课]外挂编写之多开程序实现2

[第56课]外挂编写之多开程序实现2

授权类型: 黑客 

特别说明:
1.本站非VIP资料均从网上收集,仅供网络安全爱好者学习、研究所用,请勿用于非法用途,违者责任自负。
2.本站VIP资料专为VIP会员提供,至2008年2月1日起,所有VIP软件、课程均设置有压缩包密码,此密码一月一更新。获取当月VIP压缩密码请到“VIP论坛”、“服务版”查看置顶贴,或在登陆VIP会员帐户后,点击如下连接进入:VIP资料每月密码公布
3.本站VIP资料专署于所有VIP会员共同所有,任何个人、团体共享、发布、盗连均视为侵权,一经发现,严惩不怠!



如果有死连接或下载有问题请联系这里

软件分类: 黑客入门技术专题
文件大小: MB
星级评定:
发 布 人: 黑客防线
发布时间: 2009-7-8 2:41:57
下载权限: 10,9,8,7,6,5,11,12,13
权限说明: 0 游客;1 普通用户;2 C培训班;3 工具培训班;4 脚本培训班; 5 黑客防线技术团队;6 银牌VIP;7 金牌VIP;8 钻石VIP; 9 铂金VIP;10 管理用户;11 贵宾组;12 核心组;13 顾问组; 15 linux培训班;16 漏洞发掘培训班;17 delphi培训班; 18 java培训班;19 综合实战班;20 vc远控编写班;21 win服务器安全; 22 逆向工程培训班;23 高级xss培训班;24 驱动开发培训班;25 读者;
26 脚本攻防实战培训;27 Windows内核编程培训.
*无下载权限显示则表示所有注册会员均可下载。
下载次数: 966 人次
下载地址: 下载地址1
外挂编写之多开程序实现
今天第一节课我们讲下关于多开程序的分析与制作
运行后遍历分析是否有相同的标题文本或窗口类名。
这种请款我们多开的办法可以是修改标题文本或者窗口类名就行。
前置知识:
FindWindow 查找程序获取程序句柄
HWND FindWindow(
  LPCTSTR lpClassName,  // pointer to class name  指向一个类名
  LPCTSTR lpWindowName  // pointer to window name  指向窗体名称
);
SetWindowText 设置窗体名称
BOOL SetWindowText(
  HWND hWnd,         // handle to window or control 要设置的窗口句柄
  LPCTSTR lpString   // address of string 要设置内容的字符串
);



运行后产生互斥,导致只运行单行体。
进程的互斥运行

  正常情况下,一个进程的运行一般是不会影响到其他正在运行的进程的。但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端口设备的程序运行的,而且此类程序通常也不允许运行同一个程序的多个实例。这就引出了进程互斥的问题。

  实现进程互斥的核心思想比较简单:进程在启动时首先检查当前系统是否已经存在有此进程的实例,如果没有,进程将成功创建并设置标识实例已经存在的标记。此后再创建进程时将会通过该标记而知晓其实例已经存在,从而保证进程在系统中只能存在一个实例。具体可以采取内存映射文件、有名事件量、有名互斥量以及全局共享变量等多种方法来实现。下面就分别对其中具有代表性的有名互斥量和全局共享变量这两种方法进行介绍:

// 创建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");
// 检查错误代码
if (GetLastError() == ERROR_ALREADY_EXISTS) {
 // 如果已有互斥量存在则释放句柄并复位互斥量
 CloseHandle(m_hMutex);
 m_hMutex = NULL;
 // 程序退出
 return FALSE;
}        
  上面这段代码演示了有名互斥量在进程互斥中的用法。代码的核心是CreateMutex()对有名互斥量的创建。CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为:

HANDLE CreateMutex(
 LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
 BOOL bInitialOwner, // 初始化互斥对象的所有者
 LPCTSTR lpName // 指向互斥对象名的指针
);        
  如果函数成功执行,将返回一个互斥量对象的句柄。如果在CreateMutex()执行前已经存在有相同名字的互斥量,函数将返回这个已经存在互斥量的句柄,并且可以通过GetLastError()得到错误代码ERROR_ALREADY_EXIST。可见,通过对错误代码ERROR_ALREADY_EXIST的检测可以实现CreateMutex()对进程的互斥。
 

建立互斥体,用来同步。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。  
  参数  
  lpMutexAttributes    
  指向一个SECURITY_ATTRIBUTES结构的指针,这个结构决定互斥体句柄是否被子进程继承。     
  bInitialOwner 
  布尔类型,决定互斥体的创建者是否为拥有者  
  lpName    
  指向互斥体名字字符串的指针。互斥体可以有名字。  
  互斥体的好处是可以在进程间共享
个人心得体会:
CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。
如有同名程序运行,则通过 GetLastError()得到错误代码 ERROR_ALREADY_EXIST。

刚才又执行了下得出的结果(程序名samp)
       一般情况下:一进入调试阶段,进程管理器中就出现了samp进程,执行到CreateMutex时返回进程句柄,执行到if(GetLastError() == ERROR_ALREADY_EXISTS ) 进行判断时,跳过不执行if中的内容,所以表示没有互斥。
   调试之前先运行debug中的samp.exe再调试:一进入调试阶段,进程管理器中就出现了两个samp进程,执行到CreateMutex时返回进程句柄,执行到if(GetLastError() == ERROR_ALREADY_EXISTS ) 进行判断时,执行if中的内容,表示有互斥。
问题:
VC中调试程序的时候,怎么该程序的进程在执行CreateMutex()的之前就已经存在,开始还以为先通过CreateMutex()检测其他进程,在确保没有互斥的情况在创建该程序的进程。现在看来只是纯粹检测而已么?