2011-12-15 42 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的效率。如果你願意做一些挖掘和醜陋的黑客攻擊,你可能可以在你的流程中加載和運行相關的代碼,但是在那個時候,你最好試着反彙編/反編譯它。