2011-12-15 92 views
0

我有一个黑盒程序“secret.exe”,它接受一个数字作为参数。它只接受一个我不知道的号码。我想做一个暴力攻击来获得这个数字。 下面的C++程序会这样做,但速度很慢(每秒13个数字)。这个程序几乎不消耗CPU和内存。 什么是瓶颈? popen功能减慢了吗?C++ bruteforce程序很慢

#include <iostream> 
#include <stdio.h> 
using namespace std; 
int main() { 
     char psBuffer[128]; 
     FILE *chkdsk; 
     bool nomatch = true; 
     int i = 0; 
     char cmd[100]; 
     while(nomatch){ 
      sprintf (cmd, "secret.exe %d", i++); 
      if((chkdsk = popen(cmd, "rt")) == NULL) 
       cout << "error"; 
      while(!feof(chkdsk)) { 
       if(fgets(psBuffer, 128, chkdsk) != NULL && strcmp(psBuffer, "wrong")){ 
        cout << "password: " << --i << endl; 
        cout << "secret info : " << psBuffer << endl; 
        nomatch = false; 
       } 
      } 
      pclose(chkdsk); 
     } 
     return 0; 
} 
+1

可能想尝试线程。 – 2011-12-15 22:53:28

+2

产生一个新的过程是由许多订单比你的程序所做的任何其他更贵。 – 2011-12-15 22:54:20

+1

我猜这是`popen`,我会说这是线程调用,但它可能是一些系统资源处理,这是阻塞,所以我甚至不知道它是否会有所作为 – 2011-12-15 22:54:36

回答

1

你必须标杆/ profile文件找出来,但它是完全可能的,只是secret.exe浪费时间。

0

Windows是可恶在创建流程时效率低下。您可以在Linux上尝试Wine,但我不知道假装成Windows会浪费多少Linux的效率。如果你愿意做一些挖掘和丑陋的黑客攻击,你可能可以在你的流程中加载和运行相关的代码,但是在那个时候,你最好试着反汇编/反编译它。