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,创建后处于
挂起状态。


发布评论