C#输出字符串到aircrack ng

C# output string to aircrack-ng

本文关键字:aircrack ng 字符串 输出      更新时间:2024-09-21

我正在做一些与信息安全相关的测试,遇到了以下情况,如果我把它发布在错误的地方,我很抱歉,任何问题都会告诉我,我会解决的!

在研究破解WIFI密码时,我发现了aircrack ng应用程序套件,经过一段时间的研究,我成功完成了找到我家xD 的WIFI密码的任务

事不宜迟,下面我详细介绍我的问题:

aircrack ng设法接收到要通过参数测试的密码,我的问题是:

如何从C#控制台应用程序传递此参数

我试了好几种方法,但没有成功。

在我的最后一次尝试中,出于绝望,我使用了sendmessage函数,该函数位于windows的user32.dll库中。

Obs:我正在使用编译后的用于windows的aircrack二进制文件,可在链接中获得:用于windows 的aircrack ng

class Program
{
public const Int32 WM_COPYDATA = 0x4A;
[DllImport("user32.dll")]
static extern long SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern IntPtr FindWindow(string classname, string windowname);
public static IntPtr IntPtrAlloc<T>(T param)
{
IntPtr retval = Marshal.AllocHGlobal(Marshal.SizeOf(param));
Marshal.StructureToPtr(param, retval, false);
return (retval);
}
public static void IntPtrFree(IntPtr preAllocated)
{
if (IntPtr.Zero == preAllocated) throw (new Exception("Go Home"));
Marshal.FreeHGlobal(preAllocated); preAllocated = IntPtr.Zero;
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}

static void Main()
{
string msg = "123456";
var cds = new COPYDATASTRUCT
{
dwData = new IntPtr(3),
cbData = msg.Length + 1,
lpData = msg
};
IntPtr hWnd = FindWindow("ConsoleWindowClass", @"C:WINDOWSsystem32cmd.exe aircrack-ng");
IntPtr cdsBuffer = IntPtrAlloc(cds);
SendMessage(hWnd, WM_COPYDATA, IntPtr.Zero, cdsBuffer);
}
}

目前有一个应用程序可以做到这一点,它被称为crunch,它基本上是一个单词生成器。并且可以使用控制台上的以下命令将此参数发送到aircrack:

crunch 8 8 0123456789 | aircrack-ng -a 2 my-handshake-capture.cap -b my-router-mac-addres -w -

其中最后一个-在aircrack中被来自crunch的参数替换。

我在github上的Crunch项目中搜索过它,但它是用c语言写的,对我来说更复杂。有人能帮我吗?提前非常感谢!

我在这个链接上遵循了建议:如何写入另一个应用程序的stdin?我得到了我需要的地平线!

最后,要工作的代码基本上是这样的:

public static void WriteWord(string word)
{
using (System.Diagnostics.Process airNgProcess = new System.Diagnostics.Process())
{
airNgProcess.StartInfo.FileName = @"D:aircrack-ng-1.6-winbinaircrack-ng.exe";
airNgProcess.StartInfo.Arguments = "francos.cap -b 38:BC:01:D1:A2:64 -w -";
airNgProcess.StartInfo.UseShellExecute = false;
airNgProcess.StartInfo.RedirectStandardInput = true;
airNgProcess.StartInfo.RedirectStandardOutput = true;
airNgProcess.StartInfo.WorkingDirectory = @"D:aircrack-ng-1.6-winbin";
airNgProcess.Start();
StreamWriter airNgWriter = airNgProcess.StandardInput;
StreamReader airNgReader = airNgProcess.StandardOutput;
airNgWriter.WriteLine(word);
airNgWriter.Close();
airNgProcess.WaitForExit();
String airNgOutput = airNgReader.ReadToEnd();
Console.WriteLine($"Testing Key: {word}");
if (airNgOutput.IndexOf("KEY FOUND!") > -1)
{
Console.WriteLine($"Wifi password is: {word}");
}
}
}

在现实世界中,它没有适用性,因为随着C#应用程序与aircrack ng的结合,每秒的尝试次数大大减少,大约为每秒8000次。这是我的电脑与核心i9,和32Gb的内存。

然而,通过学习和学习,对我来说,这是一个非常好的