2011-12-15 7 views
0

引数として数値を受け取るblackboxプログラム "secret.exe"があります。それは私が知らない1つの番号しか受け入れません。私はその数を得るためにブルートフォース攻撃をしたい。 以下のC++プログラムはそれをしますが、非常に遅い(毎秒13個の数字)。 CPUとメモリはこのプログラムでほとんど消費されません。 ボトルネックとは何ですか? popen-functionは遅くなっていますか?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

スレッドを試してみたいですね。 –

+2

新しいプロセスを作成することは、プログラムが行うことよりも多くのオーダーを費やしています。 –

+1

私はそれが 'popen'だと思っていますが、これはスレッディングが必要だと言いましたが、システム全体のリソース処理がブロックされていて、違いがあるかどうかわからない場合もあります。 –

答えて

1

あなたは見つけるためにベンチマーク/プロファイルにありますが、それはsecret.exeだけで時間を浪費することを完全に可能です。

+0

私はこれを行うプログラムを見たことがあります。彼らは無効なパスワードの試行の後、〜1秒間単にストールします。ユーザーはそれを待つつもりですが、ブルートフォース攻撃は悪夢になります。 –

+0

secret.exeは引数のチェック以外に何もしません。 – cugu

+0

ベンチマーキング/プロファイリングが理にかなっています。 popen関数とpclose関数であると思われます。 – cugu

0

Windowsはhidefullyプロセス作成時に非効率的です。あなたはLinux上でWineを試してみるかもしれませんが、Linuxの効率がどれくらいWindowsになりすまして無駄になるのか分かりません。いくつかの掘り下げや醜いハッキングをしたいなら、あなたのプロセスに関連するコードをロードして実行することができるかもしれませんが、その時点で、おそらく分解/逆コンパイルの方が良いでしょう。

+2

ワインは実際に始動するのにかなり遅いです... –