当前位置: 首页 > news >正文

某 FPGA 远程烧录工具分析

某比赛用的 FPGA 烧录工具,拿来练手

入口是 main_gui.exe,文件夹里面还有个 python39.dll

image

再加上 tk 风格的 ui,推测是 python 打包的程序

Untitled_打码

ida 打开 main_gui.exe 从里面看到打包的工具是 cx_Freeze (也可以用string工具提取特征字符串)

image

解压 lib/library.zip,再用 PyLingual 反编译 pyc 文件,几乎完全恢复了原始代码

image

用户登陆

import tkinter as tk
from tkinter import messagebox
from gui_components import GUIContext
from gui_handlers import GUIHandlers
import config_manager
import db_manager
import sys
from auth_manager import authenticate_user, AuthResult
def show_login(root, db_ip, on_success):login_win = tk.Toplevel(root)login_win.title('用户登录')login_win.geometry('300x180')login_win.grab_set()tk.Label(login_win, text='用户名:').pack(pady=5)username_entry = tk.Entry(login_win)username_entry.pack()tk.Label(login_win, text='密码:').pack(pady=5)password_entry = tk.Entry(login_win, show='*')password_entry.pack()def attempt_login():username = username_entry.get().strip()password = password_entry.get().strip()status, user_id, uname = authenticate_user(db_ip, username, password)if status == AuthResult.SUCCESS:messagebox.showinfo('登录成功', f'欢迎 {uname}!')login_win.destroy()on_success(user_id, uname)else:if status == AuthResult.USER_NOT_FOUND:messagebox.showerror('登录失败', '用户名不存在')else:if status == AuthResult.PASSWORD_ERROR:messagebox.showerror('登录失败', '用户名或密码错误')else:if status == AuthResult.STATUS_DENY:messagebox.showerror('登录失败', '用户状态不允许登录')else:if status == AuthResult.TIME_DENY:messagebox.showerror('登录失败', '当前时间不在班级允许范围内')else:if status == AuthResult.DB_ERROR:messagebox.showerror('登录失败', uname)tk.Button(login_win, text='登录', command=attempt_login).pack(pady=5)tk.Button(login_win, text='退出', command=root.destroy).pack(pady=5)

https://tw.python-3.com/?p=80285 x_freeze生成的EXE能否完全反编译回可读的Python代码?
https://www.pylingual.io

http://www.jsqmd.com/news/1406658/

相关文章:

  • c++ stl 教程 灵活的数据存储 (Templet‘模板’) 管理函数
  • 没有VR头显也能看3D视频?VR-Reversal把左右分屏转成自由转头的2D画面
  • Fudoki 架构揭秘:一个纯前端日语分词 PWA 的技术栈全解
  • VSCode中Python虚拟环境配置与激活全攻略
  • VS Code 打造高效 Markdown 写作环境:从安装配置到进阶工作流
  • 存储卡文件乱码全解析:从编码冲突到数据恢复的完整指南
  • Matlab R2020a版本深度解析:为何它仍是科研与工程计算的稳定首选
  • 深入解析package.json与package-lock.json:Node.js项目依赖管理的核心
  • VSCode REST Client插件:一站式HTTP请求调试与API测试实战指南
  • 上海恋爱期间虚拟财产分割律所:2026年8月情侣虚拟资产分割法律难点 - 品牌深度评测
  • lsp-status.nvim 生态与未来:项目路线图、社区贡献与最佳实践
  • VS2022中OvalShape控件报错解决方案:从兼容性修复到现代化迁移
  • 参数优化实战:quanttrader网格搜索如何找出策略的最优参数
  • Miracast无线投屏全解析:从原理到实战,解决连接失败与延迟问题
  • SD卡文件乱码修复全攻略:从原理到实战的数据救援指南
  • 数学建模入门:740页课件详解建模流程、核心模型与实战工具
  • Hoppscotch API调试工具:从基础使用到高级实战与故障排查
  • Silk v3解码器怎么用?微信语音转MP3的终极指南
  • 告别tail与grep:用lnav实现日志分析从“查看”到“阅读”的进化
  • 老板键三步配好:Boss-Key一键隐藏窗口,让摸鱼与演示都不再手忙脚乱
  • ncmppGui完整使用指南:C++极速NCM解锁工具的安装、原理与双平台实战
  • 上海取保候审律师哪家办案认真:2026年8月上海尽责型取保候审律所执业态度与细节把控表现 - 品牌深度评测
  • Silk v3解码完整指南:把打不开的微信语音变成MP3,从零编译到批量转换全流程
  • 人工智能(AI)与深度学习(DL)已从实验室走向工业级系统
  • 从励志之星到个人成长:如何通过系统化努力实现价值跃迁
  • VSCode调试全攻略:从环境配置到高级断点实战
  • Typora图片处理全攻略:从插入到CSS样式定制
  • ncmppGui 完整指南:这款免费 NCM 转换工具如何帮你摆脱格式束缚
  • 机械臂轨迹规划实战:从逆运动学到非奇异终端滑模控制
  • B站视频下载完整攻略:BilibiliDown 从安装到批量收藏的保姆级教程