我有更多的“解决问题”问题,而不是与语法相关的问题。
简而言之,我正在创建一个程序,它将读取一个充满单词的文本文件(可能是密码列表),每行一个单词 - 我将在循环中使用 ReadLn 来读取该位。对于它找到的每个单词,我希望它添加“一定量”的混淆,以符合如今用户在密码中使用“3”而不是“E”或“1”而不是“I”的方式。我在 IT 安全领域工作,密码破解通常是其中的一部分,这就是该程序的用途。
到目前为止,我已经设法创建了一个程序,它为字母表中的每个字母生成了一个充满许多不同值的 LEET 表,并将它们堆叠在一个 StringGrid 中,我可以作为该过程的一部分访问它(并且它也可以直观地输出到桌子)。
type
TLetters = 'A'..'Z';
TLeet = array[TLetters] of TStringList;
var
SourceFileName, str : string;
StartIndexFile : TextFile;
i : TLetters;
leet : TLeet;
s : string;
n, o, ColumnSize : integer;
begin
for i in TLetters do
leet[ i ] := TStringList.Create;
// The next sequence of loops populates the string grid by counting the number of characters for each letter of the alphabet and then inserting them down, column by column and row by row...
//Letter A:
s := '4 @ /-\ /\ ^ aye ∂ ci λ Z';
ColumnSize := wordcount(s,[' ']);
o := 0;
for n := 0 to ColumnSize do
leet['A'].Add(ExtractWord(n,s,[' ']));
for o := 0 to ColumnSize do
StringGrid1.Cells[1,o] := Leet['A'][o];
// And so on for B - Z
// ... then an OpenDialog that opens the source text file to read. Got that sorted
// A load of file opening stuff and then the obsfucation
repeat
Readln(StartIndexFile, Str);
LblProgress.Caption := ('Parsing Index File...please wait');
OBSFUCATE THE WORDS HERE TO SOME EXTENT
// but now I have hit a barrier....
until(EOF(StartIndexFile));
我的问题是这样的:例如,给定“爱德华”这个词,我如何决定我应该混淆它的级别?只是第一个字母“E”被替换为“3”,也许仅此而已?或者前两个字母 'E' 和 'd' 被替换为 LEET 表中字母 E 和 d 的所有值(这意味着将从 'Edward' 生成几十个新单词,依此类推),或“E”的所有值,但仅此而已……列表还在继续。潜在地,对于每个单词,我都可以创造出数千个额外的单词!一个 100Gb 的源文件很快就会变成 TB!
换句话说,我需要设置程序将运行的“级别”,用户可以决定。但我不确定如何构建该级别?
所以我不确定如何使它工作?在开始之前,我并没有真正考虑清楚。我最初的想法是“有一个程序可以从计算机中获取单词索引,然后生成每个单词的变体来解释混淆字符的人,这将是一件很酷的事情。” 但是在编写代码之后,我意识到这是一项比我想象的更大的工作,我现在被困在实际“LEETing my input file”的部分!