模拟的暴力破解rar纯数字密码的小程序

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


bool ExecDosCmd(char* strcmd)
{
    SECURITY_ATTRIBUTES sa;
    HANDLE hRead = NULL, hWrite = NULL;

    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;

    if (!CreatePipe(&hRead, &hWrite, &sa, 0))
    {
        return false;
    }

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    si.cb = sizeof(STARTUPINFO);
    GetStartupInfo(&si);
    si.hStdError = hWrite;            //把创建进程的标准错误输出重定向到管道输入
    si.hStdOutput = hWrite;           //把创建进程的标准输出重定向到管道输入
    si.wShowWindow = SW_HIDE;
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    //关键步骤,CreateProcess函数参数意义请查阅MSDN
    if (!::CreateProcess(NULL, strcmd, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
    {
        CloseHandle(hWrite);
        CloseHandle(hRead);
        ::CloseHandle(pi.hThread);
        ::CloseHandle(pi.hProcess);
        return false;
    }
    
    CloseHandle(hWrite);
    char buffer[4096] = { 0 };          //用4K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。
    DWORD bytesRead;
    while (true)
    {
        if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL)
            break;
        //buffer中就是执行的结果,可以保存到文本,也可以直接输出
        //printf(buffer);   //这里是弹出对话框显示
        if (strstr(buffer, "文件损坏或密码错误") || strstr(buffer, "发现文件头毁损"))
        {
            
            CloseHandle(hRead);
            ::CloseHandle(pi.hThread);
            ::CloseHandle(pi.hProcess);
            return false;
        }
    }

    CloseHandle(hRead);
    ::CloseHandle(pi.hThread);
    ::CloseHandle(pi.hProcess);
    return true;
}


int main(int argc, char* argv[])
{
    //char szCommandLine[] = "Rar.exe a -r -hp123456 \"g:/360Downloads.rar\" \"f:/360Downloads\"";
    char szCommandLine[512] = {} ;

    for (int i = 100000; i < 999999; i++)
    {
        sprintf_s(szCommandLine, 512, "Rar.exe x -hp%u \"g:/360Downloads.rar\" \"F:/test/\"", i);
        if (ExecDosCmd(szCommandLine))
        {
            printf("密码是:%u\r\n",i);
            break;
        }
    }
    
    
    system("pause");
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值