2024年3月14日发(作者:)

VC穷举windows应用程序密码

二、实现原理:

我们的用户一般都过输入密码的经历,一般情况下系统都会显示一个对话框,提醒用户

输入密码,密码编辑框一般具有ES_PASSWORD 风格,用户输入完成后,要求按《确定》

按钮确认,如果密码正确,系统就会开始工作,否则系统会提示你密码错误,要求按《确定》

按钮重新输入。无论我们运用鼠标的技能有多高,如果我们想在短时间内穷举所有可能密码,

根本不现实。但是高速运行的计算机可以做到。

我们可以通过编程,利用Windows API 函数EnumWindows 和EnumChildWindows对

当前运行的所有程序的所有窗口(包括子窗口即控件)进行遍历,通过窗口标题查找密码输

入和出错确认重新输入窗口,通过按钮标题查找我们应该单击的按钮,通过ES_PASSWORD

查找我们需要键入的密码窗口。

我们可以通过向密码输入窗口发送WM_SETTEXT消息模拟输入密码,通过向按钮窗

口发送WM_COMMAND消息模拟单击。所有这一切我们可以把它放在一个线程内运行,

我们用户可以随时暂停、随时中断退出。我们可以在枚举密码的过程中,把密码保存在一个

文件中,以便下次接着下一个序列的密码再次穷举。直到找到密码为止。找到密码后,由于

不再出现密码输入窗口,程序虽然仍在继续枚举窗口,但由于找不到对应窗口,不会发送任

何消息。我们打开记录文件推算前一个序列的密码即可找到对应的密码。

枚举密码的方法有多种,这跟密码的组成有关,如果你忘记了你的wps 2000 的文件密

码,而且你确切知道密码由数字组成,你就可以采用数字穷举,当然程序还提供了其它穷举

方法,包括大写字母、小写字母、大小写混合、字母数字、标点符号字母数字组合等等。每

一种穷举方法都有进度记录保存,下次穷举不用从头开始,字符个数从一位到多位自动增长。

你可以通过编辑配置文件控制穷举进度,尤其是当你知道密码的某一位确切为某一

个字符时,或者确切知道密码有几位时,通过修改当前密码(退出程序情况下),可以大大

加快穷举速度,以便短时间内找回那根遗忘的神经,唤醒那存储密码的神经元细胞

三、具体细节:

◆进程和线程

Windows应用程序有一个或多个进程组成。所谓进程,用最简单的术语说就是装入内存

并准备运行的可执行的程序。进程是资源分配的独立单位.进程具有动态、并发、独立等特

点。进程具有就绪、执行、堵塞三种基本状态,win 32中的每个进程都有自己的私有虚拟地

址空间,进程有代码、数据和进程中的线程可用的其他系统资源组成,每个进程都由单线程

开始,并可创建新的线程和其他进程。

在一个进程中运行着一个或多个线程,线程是操作系统分配处理器时间片的最小单位,

一个线程可以执行进程中的任何一部分代码,包括当前被其他线程执行的部分。线程能独立

执行程序代码的任何部分,共享虚拟地址空间并能访问全局变量和进程系统资源。各个线程

根据其调度优先级分配CPU,线程具有进程的许多特征,又称为轻量级的进程。由于线程

基本上不拥有系统资源,仅占有一点在运行中不可缺少的资源(机器寄存器、内核堆栈、线

程环境块和用户堆栈等),由于应用程序由进程组成,进程由线程组成。同一进程线程的切

换不会引起进程的切换,因此,线程的调度开销要远远小于进程的调度开销。

在MFC类库中,每个CWinThread对象表示程序的一个执行线程,MFC 将线程分为两

种类型:用户界面线程(user-interface thread)和工作者线程(worker thread),前者用于消

息循环或消息泵,用于消息处理。后者没有消息循环用于无需用户响应的后台任务。

工作者线程分两步创建:

1.创建线程函数

DWORD WINAPI ThreadFunc( LPVOID );

参数值是在创建线程对象时传递给构造函数的值,它既可为标量值,也可以为指向多个参数

结构的指针,还可以省略。

2.调用AfxBeginThread启动工作者线程。此时,全局函数AfxBeginThread采用以下原型:

CWinThread * AfxBeginThread(

AFX_THREADPROC pfnThreadProc ,

LPVOID pParam,

int nPriority=THREAD_PRIORITY_NORMAL,

UINT nStackSize=0,

DWORD dwCreateFlags=0,

LPSECURITY_ATTRIBUTES lpsecurityAttrs=NULL);

其中:pfnThreadProc 即为工作者线程的线程函数。

pParam 为传递给工作者线程函数的入口参数。

nPriority 创建优先级别可以使用SetThreadPriority设置,默认值为

THREAD_PRIORITY_NORMAL

dwCreateFlags 创建标志0为创建后立即运行,若为CREDTE_SUSPEND,创建后处于

挂起状态。