用vc++穷举windows应用程序密码(上)
2009-04-09 20:04:20 来源:WEB开发网pParam 为传递给工作者线程函数的入口参数。
nPriority 创建优先级别可以使用SetThreadPriority设置,默认值为THREAD_PRIORITY_NORMAL
dwCreateFlags 创建标志0为创建后立即运行,若为CREDTE_SUSPEND,创建后处于挂起状态。
在工作者线程函数中,执行return 语句或者执行AfxEndThread函数将导致线程运行终止。
我们可以通过设置CWinThread 对象的成员变量和成员函数来对线程进行控制。
m_bAutoDelete为true ,表示线程终止后自动销毁。
m_hThread 表示当前线程句柄。
ResumeThread 使挂起线程恢复运行
SuspendThread挂起运行线程
SetThreadPriority设置线程的运行优先级
其他成员请参考MFC 类库和MSDN帮助文档。
◆同步对象
由于系统为了提高穷举效率,采用了多线程编程,以便加快模拟输入响应速度,在尽可能短的时间内得到真正的密码。
由于线程之间共享进程资源,这样就会带来同步的问题。譬如,由于多个线程并发地存在于系统之中同时运行(时间片轮转),可能会存在这样的情况,两个线程都在修改窗口密码编辑框文本,前一个线程修改后还未来得及按《确定》按钮,另一个线程又修改了窗口的文本,造成前一个密码文本丢失,导致穷举密码不全,可能穷举失败。一个线程正在向密码编辑框填写文本,而另一个线程又在改写该文本,这样会导致前一个线程无法辨识究竟用的是哪一个版本的密码文本。会导致重复穷举或者残缺穷举,甚至系统死锁。
为了保证进程或线程能够按照一定的顺序推进向前执行,windows 提供了一组等待函数和同步对象用于控制同步。包括信号灯、互斥量、事件、临界区。同步的思想很简单,如果一个线程遇到一个信号变量无信号时,它能使自己处于睡眠状态一旦有了信号系统会唤醒线程,使线程接着执行。
更多精彩
赞助商链接