深入理解ESP32-Marauder-Cheap-Yellow-Display代码架构:核心模块解析
深入理解ESP32-Marauder-Cheap-Yellow-Display代码架构:核心模块解析
ESP32-Marauder-Cheap-Yellow-Display是一款基于ESP32的开源无线安全测试工具,它通过Cheap Yellow Display提供直观的操作界面,集成了WiFi扫描、攻击测试、数据包捕获等多种功能。本文将深入剖析其代码架构,帮助开发者快速理解核心模块的设计与实现。
整体架构概览
项目采用模块化设计,主要分为硬件抽象层、核心功能层和用户交互层三个部分。硬件抽象层负责与ESP32外设交互,核心功能层实现无线安全测试逻辑,用户交互层则通过显示屏和按键提供操作界面。这种分层架构使得代码结构清晰,便于维护和扩展。
ESP32-Marauder-Cheap-Yellow-Display设备正面展示,屏幕显示"MARAUDER"标志和版本号v0.13.5
核心模块解析
1. 设备初始化模块
设备初始化是系统启动的第一个环节,主要在esp32_marauder.ino文件的setup()函数中实现。该函数完成硬件初始化、外设配置和系统参数设置等工作,为后续功能提供基础环境。
void setup()
{
esp_spiram_init(); // 初始化外部RAM
#ifdef MARAUDER_M5STICKC
axp192_obj.begin(); // 初始化电源管理芯片
#endif
#ifdef HAS_SCREEN
pinMode(TFT_BL, OUTPUT); // 配置显示屏背光引脚
#endif
backlightOff(); // 关闭背光
// ... 其他初始化代码
Serial.begin(115200); // 初始化串口通信
#ifdef HAS_SCREEN
display_obj.RunSetup(); // 初始化显示屏
#endif
}
初始化过程中,系统会根据硬件配置(如是否有屏幕、是否支持SD卡等)进行条件编译,确保代码的可移植性。
2. 显示控制模块
显示控制模块由Display.h和Display.cpp文件实现,负责管理Cheap Yellow Display的显示功能。该模块基于TFT_eSPI库,提供了丰富的图形绘制接口,支持菜单显示、状态更新和图像渲染等功能。
class Display
{
private:
bool SwitchOn = false;
bool run_setup = true;
// ... 私有成员变量
void drawFrame(); // 绘制边框
#ifdef SCREEN_BUFFER
// ... 屏幕缓冲相关代码
#endif
public:
// ... 公共成员函数
void RunSetup(); // 显示初始化
void drawText(int x, int y, String text, uint16_t color, uint8_t size = 1); // 绘制文本
void drawJpg(const uint8_t *jpg_data, size_t jpg_len, int x, int y); // 绘制JPG图像
// ... 其他显示相关函数
};
显示模块支持多种显示模式,如WiFi扫描结果展示、攻击状态显示等,并通过颜色编码和图标增强用户体验。
3. WiFi扫描与攻击模块
WiFi扫描与攻击是项目的核心功能,由WiFiScan.h和WiFiScan.cpp文件实现。该模块利用ESP32的WiFi功能,实现了多种扫描模式和攻击方式,如AP扫描、探针请求嗅探、解除认证攻击等。
#define WIFI_SCAN_OFF 0 // 扫描关闭
#define WIFI_SCAN_PROBE 1 // 探针请求扫描
#define WIFI_SCAN_AP 2 // AP扫描
#define WIFI_SCAN_PWN 3 // PWN扫描
#define WIFI_SCAN_EAPOL 4 // EAPOL扫描
#define WIFI_SCAN_DEAUTH 5 // 解除认证攻击
#define WIFI_SCAN_ALL 6 // 全扫描
#define WIFI_PACKET_MONITOR 7 // 数据包监控
#define WIFI_ATTACK_BEACON_SPAM 8 // 信标帧攻击
WiFi扫描模块通过WiFiScan类封装了各种扫描和攻击功能,提供了灵活的接口供上层调用。例如,startScan()函数可以根据指定的扫描模式启动相应的扫描过程,并将结果通过回调函数返回。
4. 菜单交互模块
菜单交互模块由MenuFunctions.h和MenuFunctions.cpp文件实现,负责处理用户输入和菜单导航。该模块基于LVGL图形库,实现了触摸屏幕上的菜单界面,支持多级菜单、按钮操作和文本输入等交互方式。
class MenuFunctions
{
private:
// ... 私有成员变量和函数
public:
void initLVGL(); // 初始化LVGL库
void deinitLVGL(); // 反初始化LVGL库
void buildButtons(Menu* menu, int starting_index = 0, String button_name = ""); // 构建按钮
void changeMenu(Menu* menu); // 切换菜单
void displayCurrentMenu(int start_index = 0); // 显示当前菜单
// ... 其他菜单相关函数
};
菜单交互模块将用户操作转换为相应的功能调用,是用户与设备交互的桥梁。通过该模块,用户可以方便地选择不同的功能模式,配置参数和查看结果。
ESP32-Marauder设备菜单界面,显示多种WiFi扫描和攻击选项
5. 存储管理模块
存储管理模块由SDInterface.h和SDInterface.cpp文件实现,负责处理SD卡的文件操作。该模块提供了文件列表、文件读写和固件更新等功能,支持将扫描结果保存到SD卡,或从SD卡加载配置文件和攻击脚本。
class SDInterface
{
private:
// ... 私有成员变量和函数
public:
bool begin(); // 初始化SD卡
void listDir(String str_dir); // 列出目录内容
void listDirToLinkedList(LinkedList<String>* file_names, String str_dir = "/", String ext = ""); // 将目录内容添加到链表
void runUpdate(); // 运行固件更新
void performUpdate(Stream &updateSource, size_t updateSize); // 执行更新
// ... 其他文件操作函数
};
存储管理模块使得设备可以持久化保存数据,扩展了设备的功能和灵活性。
模块间交互
各模块之间通过对象实例和函数调用来实现交互。例如,WiFiScan类在扫描到WiFi数据包后,会调用Display类的函数更新屏幕显示;MenuFunctions类在用户选择某个功能时,会调用WiFiScan类的相应函数启动扫描或攻击。
// MenuFunctions.cpp中调用WiFiScan的例子
void MenuFunctions::startProbeSniff()
{
wifi_scan_obj.setScanMode(WIFI_SCAN_PROBE); // 设置扫描模式
wifi_scan_obj.startScan(); // 启动扫描
displayCurrentMenu(); // 更新菜单显示
}
这种模块间的低耦合设计,使得代码易于维护和扩展。每个模块专注于自己的功能,通过明确定义的接口与其他模块通信。
硬件接口模块
硬件接口模块包括AXP192.h、BatteryInterface.h、LedInterface.h等文件,负责与硬件外设交互。例如,AXP192类管理电源芯片,BatteryInterface类监测电池状态,LedInterface类控制LED指示灯。
class AXP192 {
public:
void begin(void); // 初始化AXP192芯片
void ScreenBreath(int brightness); // 调节屏幕亮度
void ScreenSwitch(bool state); // 开关屏幕
float getBattVoltage(); // 获取电池电压
float getBattChargeCurrent(); // 获取充电电流
// ... 其他电源管理函数
};
硬件接口模块将底层硬件操作封装起来,为上层提供统一的接口,简化了核心功能的实现。
ESP32-Marauder-Cheap-Yellow-Display设备背面展示,可见电池和接口
总结
ESP32-Marauder-Cheap-Yellow-Display的代码架构采用模块化设计,将功能划分为设备初始化、显示控制、WiFi扫描与攻击、菜单交互、存储管理和硬件接口等模块。各模块职责明确,通过接口进行交互,使得代码结构清晰、易于维护和扩展。
通过本文的解析,开发者可以快速了解项目的代码组织和核心模块的实现方式,为二次开发和功能扩展提供基础。无论是添加新的攻击模式,还是优化用户界面,都可以基于现有的模块结构进行,大大提高开发效率。
如果你对该项目感兴趣,可以通过以下命令克隆仓库进行深入学习:
git clone https://gitcode.com/gh_mirrors/es/ESP32-Marauder-Cheap-Yellow-Display
希望本文能够帮助你更好地理解ESP32-Marauder-Cheap-Yellow-Display的代码架构,为你的开发工作提供参考。
更多推荐

所有评论(0)