今天有个突发奇想
假如 有需要我们 暴力破解 而且必须和程序交互的时候 我们该怎么办
这个 有人和我说os 库 但是 没有知道怎么用
我现在没有解决 windows下的 dos 平台 如果有人知道了 可以在下面一起交流
先说linux 下的怎么办
这个 在我以前我也写过 有用shell 但是如果不想用呢
那么就有一个新的答案 那就是pwntools 这个 pwn必备的工具
# coding=utf-8
from pwn import *
for i in range(65535):
io=process('./zorro_bin')
io.send(str(1))
io.send("\n")
sleep(0.1)
io.send(str(i))
io.send("\n")
s=io.recv()
print s
print i
if s[:16]=='You choose right':
print s
l=input()
io.close()
模板代码如下 但是这个枚举多了非常耗内存 所以感觉还是shell 简便一点
然后至于 我们所说的 如果是 我们 windows 平台下 的gui程序
先看一下我写的 demo吧
这个是模拟 程序登入
然后下面这个就是 我们的一个接口了
核心代码 如下
demo
// WindowsProject3.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "WindowsProject3.h"
#include "resource1.h"
INT_PTR CALLBACK DialogProc(_In_ HWND hwndDlg, _In_opt_ UINT UMsg, _In_ WPARAM wParam, _In_ LPARAM lParam);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, &DialogProc);
return 0;
}
INT_PTR CALLBACK DialogProc(_In_ HWND hwndDlg, _In_opt_ UINT UMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
if (UMsg == WM_CLOSE)
{
EndDialog(hwndDlg, NULL);
MessageBox(NULL, "关闭成功!", "谢谢使用", 0);
}
if (UMsg == WM_COMMAND)
{
if (wParam == IDC_BUTTON1)
{
char s[100], s2[100];
GetDlgItemText(hwndDlg, IDC_EDIT1, s,100);
GetDlgItemText(hwndDlg, IDC_EDIT2, s2, 100);
if (!strcmp(s, "pipixia") && !strcmp(s2, "xiapipi"))
{
MessageBox(NULL, "恭喜", "成功", 0);
}
else
{
MessageBox(NULL, "可惜", "失败", 0);
}
}
}
return 0;
}
finddemo
#include "stdafx.h"
#include "finddemo.h"
#include "resource.h"
HWND Hmain = NULL;
WCHAR s[100];
int sum = 0;
INT_PTR CALLBACK DialogProc(_In_ HWND hwndDlg, _In_opt_ UINT UMsg, _In_ WPARAM wParam, _In_ LPARAM lParam);
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
Hmain = FindWindow(NULL, L"demo");
if (Hmain == NULL)
{
MessageBox(NULL, L"窗口", L"查找失败", 0);
return 0;
}
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, &DialogProc);
return 0;
}
INT_PTR CALLBACK DialogProc(_In_ HWND hwndDlg, _In_opt_ UINT UMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
if (UMsg == WM_CLOSE)
{
EndDialog(hwndDlg, NULL);
MessageBox(NULL, L"关闭成功!", L"谢谢使用", 0);
}
if (UMsg == WM_COMMAND)
{
if (wParam == IDC_BUTTON1)
{
sum = 0;
GetDlgItemText(hwndDlg, IDC_EDIT1, s, 100);
EnumChildWindows(Hmain, EnumChildProc, 0);
}
if (wParam == IDC_BUTTON2)
{
sum = 0;
GetDlgItemText(hwndDlg, IDC_EDIT1, s, 100);
EnumChildWindows(Hmain, EnumChildProc, 1);
}
}
return 0;
}
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
sum++;
WCHAR ClassName[256];
WCHAR WndCaption[256];
GetClassName(hwndChild, ClassName, 254);
GetWindowText(hwndChild, WndCaption, 254);
if (lParam == 0&&sum==1)
{
SendMessage(hwndChild, WM_SETTEXT, 0, LPARAM(s));
}
if(lParam==1&&sum==2)
{
SendMessage(hwndChild, WM_SETTEXT,0, LPARAM(s));
}
return (INT_PTR)TRUE;
}
然后 昨天我问了 一下学长 学长和我说了 powershell 我今天学习了一下 然后根据别人写的脚本 自己没有跑出来
然后还有个说法 是 C语言重定位 用文件 代表键盘输入 但是我也懒得搞了 有思路了 就看看吧
(2019.6.13补充):
无论是 linux 还是windows 控制台都可以用 python的os库
或者是 python别人做的库 比如符号执行 angr 或者pintools 都可以了解一下
虽然 本人不太喜欢暴力跑 但是有些时候还是可以试试的