ブルートフォースアタック用文字列作成

解決


セブン  2010-09-03 00:27:00  No: 39076

念のため今回のブルートフォースアタックは悪用ではありませんので。

ブルートフォースアタックのプログラムを作るうと思ったのですが、パスワード用の文字列を作成するのが簡単と思いきや挫折しました。
0〜9、a〜z、A〜Zで作ろうと思ったんですが・・・
精密には+や/等の記号も必要ですが。

1桁は簡単ですが2桁以上になったらと考えてると全然ソースロジックが思いつきません。
そういうルーチンないかと探してみましたが見つかりませんでした。
どこかにそういう関数等ないでしょうか?


TS  2010-09-03 08:33:25  No: 39077

>どこかにそういう関数等ないでしょうか?
+


monaa  2010-09-03 08:45:29  No: 39078

何か書きかけが気になりますが、要はn進数ですよね。

function CharRoop(aChar:Char; Count:Integer):string;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to Count - 1 do
    Result := Result + aChar;
end;

function GetString(fChars:string; n,Count: Integer): string;
var
  aLen:Integer;
begin
  aLen := Length(fChars);
  Result := '';
  repeat
    Result := fChars[(Count mod aLen) +1] + Result;
    Count  := Count div aLen;
  until Count = 0;
  Result := CharRoop(fChars[1], n-Length(Result)) + Result;
end;

function GetStringAll(fChars:string; n: Integer): string;
var
  aLen,aMax:Integer;
  i: Integer;
begin
  aLen := Length(fChars);
  aMax := aLen;
  for i := 0 to n - 2 do
    aMax := aMax * aLen;
  for i := 0 to aMax - 1 do
    Result := Result + GetString(fChars,n,i) + #$D#$A;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  ListBox1.Clear;
  for i := 0 to 81 - 1 do
    ListBox1.Items.Add(GetString('ABC',4,i));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ListBox1.Clear;
  ListBox1.Items.Text := GetStringAll('ABC',4);
end;

end.


monaa  2010-09-03 09:06:42  No: 39079

少しだけ高速化
function GetString(fChars:string; n,Count: Integer): string;
var
  aLen,p:Integer;
begin
  aLen := Length(fChars);
  SetLength(Result,n);
  for p := 1 to n do
    Result[p]:=fChars[1];
  for p := n downto 1 do
  begin
    Result[p] := fChars[(Count mod aLen) +1];
    Count  := Count div aLen;
    if Count=0 then Exit; //無くても可
  end;
end;


monaa  2010-09-03 09:09:50  No: 39080

すんません、これで最後。
function GetString(fChars:string; n,Count: Integer): string;
var
  aLen,p:Integer;
begin
  aLen := Length(fChars);
  SetLength(Result,n);
  for p := n downto 1 do
  begin
    Result[p] := fChars[(Count mod aLen) +1];
    Count  := Count div aLen;
  end;
end;


セブン  2010-09-04 01:39:45  No: 39081

うおおお!  すごいです!
まさにこれです!
正直ソース見ても私には解読できませんが大変助かりました。
勉強させてもらいます。

ありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加