射击训练项目逆向纪实从缺失头文件到成功获取游戏源码前言这个一个单片机射击训练小游戏从书上拿到的源码是不全的缺少关键的头文件lcd_160128.h。官方组件也找不到了没法直接补全。不过好在压缩包里提供了编译好的 HEX 文件于是决定走一条“曲线救国”的路——反编译 AI 辅助还原。下面记录整个过程也算是一份另类的逆向教程。一、初编译头文件报错首先将书中源码截图交给 AI 提取文字懒得手打。得到源码之后先编译看看什么情况。可以发现头文件lcd_160128.h报错——源码里根本没给出这个文件。这个头文件本应定义 160128 液晶屏的显示相关代码和宏缺少它就没法直接编译。二、另辟蹊径反编译 HEX 文件由于压缩包中有编译之后的HEX文件那么我们可以另辟蹊径曲线救国—求救于”那个女人”。掏出 IDA 将 HEX 文件转为汇编代码然后再用 AI 把汇编翻译成 C 语言。三、AI 翻译汇编 → C 代码拿到汇编代码后将书上原始的残缺源码和汇编一起喂给 AI让它试着写出完整的 C 代码。这里推荐的工具Kimi 2.6或智谱 GLM4.7国内代码效率数一数二没充值时可能需要排队有学生免费额度的话可以试试Google Gemini预算充足的话ChatGPT PlusCodex或Claude Code也很给力顺便一提DeepSeek 在这个场景下表现也不错。不过目前还没有哪个 AI 能一次成功。用 Gemini 生成的代码也编译不过这时候就需要下一步结合电路图。四、结合电路图让 AI 补全 LCD 驱动把 Proteus 电路图的接线信息告诉 AI。如果是 DeepSeek 这种没有视觉能力的模型你需要手动描述哪个芯片的哪个引脚接了屏幕的哪个引脚。接着让 AI 根据书中源码逻辑和仿真运行效果推测并补全lcd_160128.c和lcd_160128.h两个文件然后添加到 Keil 工程里。多调试几次基本就能成功。小技巧可以使用Trae这类 AI Agent它能直接操控电脑和项目文件不用手动上传文件给 AI还能节省 token。经过几轮调试终于成功得到了完整的游戏源码。五、字模与图片处理有了源码接下来要处理显示用的字模和图片。5.1 汉字字模160128 屏幕上需要显示汉字可以用字模软件或在线网站提取。推荐两个在线工具单片机汉字在线取模LCD/OLED汉字字模提取软件HZK16宋体输入汉字得到一串十六进制数据然后粘贴到lcd_160128.c文件的code struct typFNT_GB16 GB_16[]数组中。需要注意数组里不能直接用汉字得先查到汉字的区位码再转成十六进制。5.2 图片BMP 转数组图片处理更简单同样可以用在线转换工具或者 GitHub 上开源的 Python 脚本。将转换得到的两组数组分别粘贴到main.c中code uchar const Game_Surface[]游戏界面code uchar const Gun_Image[]枪的图案射击目标那个方块也能自定义对应数组code uchar Target_Image[]。六、“老六”环节破解玩法如果不想看代码细节可以直接让 Trae 帮忙改。手动改其实也差不多无非是调整一些碰撞判定、得分逻辑或子弹速度等参数。这部分就留给各位自由发挥了总结这次逆向经历算是典型的“缺文件 → 反编译 → AI 辅助还原”流程。虽然一开始头文件缺失让人头大但借助 IDA 和各类 AI 工具最终还是把完整的游戏源码给“捞”了回来。如果你也遇到类似的老项目缺文件问题不妨试试这条路。工具链回顾反编译IDAAI 翻译Gemini / Kimi / GLM4.7 / ChatGPT自动补全调试Trae字模/图片在线取模工具 开源转换脚本希望这篇记录对你有帮助祝你也能顺利“救活”那些看似无解的老项目。有需要的我已经把源码放到gitee源码仓库