深入理解ESP32-Marauder-Cheap-Yellow-Display代码架构:核心模块解析

【免费下载链接】ESP32-Marauder-Cheap-Yellow-Display ESP32 Marauder Cheap Yellow Display 【免费下载链接】ESP32-Marauder-Cheap-Yellow-Display 项目地址: https://gitcode.com/gh_mirrors/es/ESP32-Marauder-Cheap-Yellow-Display

ESP32-Marauder-Cheap-Yellow-Display是一款基于ESP32的开源无线安全测试工具,它通过Cheap Yellow Display提供直观的操作界面,集成了WiFi扫描、攻击测试、数据包捕获等多种功能。本文将深入剖析其代码架构,帮助开发者快速理解核心模块的设计与实现。

整体架构概览

项目采用模块化设计,主要分为硬件抽象层、核心功能层和用户交互层三个部分。硬件抽象层负责与ESP32外设交互,核心功能层实现无线安全测试逻辑,用户交互层则通过显示屏和按键提供操作界面。这种分层架构使得代码结构清晰,便于维护和扩展。

ESP32-Marauder-Cheap-Yellow-Display设备展示 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.hDisplay.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.hWiFiScan.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.hMenuFunctions.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菜单界面 ESP32-Marauder设备菜单界面,显示多种WiFi扫描和攻击选项

5. 存储管理模块

存储管理模块由SDInterface.hSDInterface.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.hBatteryInterface.hLedInterface.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设备背面 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的代码架构,为你的开发工作提供参考。

【免费下载链接】ESP32-Marauder-Cheap-Yellow-Display ESP32 Marauder Cheap Yellow Display 【免费下载链接】ESP32-Marauder-Cheap-Yellow-Display 项目地址: https://gitcode.com/gh_mirrors/es/ESP32-Marauder-Cheap-Yellow-Display

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐