/E-Decompiler

用来辅助分析易语言程序的IDA插件

Primary LanguageC++

E-Decompiler

用来辅助分析易语言程序的IDA 7.5插件,实验性项目。

反编译思路一:

基于retdec项目,将代码转换成LLVM IR后,结合易语言函数特征编写LLVM PASS来修正LLVM IR。

反编译思路二:

基于Ghidra项目,将汇编代码转换成PCode后,结合易语言函数特征编写Action来修正PCode。

反编译思路三:

基于IDA SDK,通过修改函数声明和CTree结构,结合易语言函数特征来优化反编译代码。

目前在尝试的是思路三。

如何编译项目

开发环境为: Windows + Visual Studio 2019 + Qt 5.6.3.0 + IDA SDK75

配置选项:

  • C/C++ -> 附加包含目录 需要添加IDA SDK的头文件目录,例如C:\MyLib\idasdk75\include
  • C/C++ -> 预处理器定义 需要添加 QT_NAMESPACE=QT这一行
  • C/C++ -> 代码生成 -> 安全检查 设置为禁用安全检查(/GS-)
  • 链接器 -> 附加库目录 需要添加IDA的Vc Lib文件目录和Qt Lib目录,例如C:\MyLib\idasdk75\lib\x64_win_vc_32和C:\MyLib\idasdk75\lib\x64_win_qt
  • 链接器 -> 附加依赖项 添加需要的lib文件,有ida.lib、Qt5Core.lib、Qt5Gui.lib、Qt5Widgets.lib、user32.lib...

使用说明

  1. 在使用本插件之前,需要给IDA7.5做一个patch,使之支持中文函数。详细情况见IDA7.5支持中文函数命名的办法
  2. 将E-Decompiler.dll和esig文件夹放置于插件目录,例如D:\IDA 7.5 SP3\plugins
  3. 运行IDA后,按Ctrl+3快捷键呼出插件菜单,运行插件即可。

项目进度

  • 使IDA支持中文函数命名。
  • 易语言控件的彻底解析。
  • 易语言库函数的特征码识别引擎移植。
  • 易语言模块函数的特征码提取与识别。

反编译核心部分

  • 控件的交叉引用,控件事件的展示。
  • 易语言基础特征函数的优化、易语言数组操作。
  • DLL命令调用函数的优化。
  • 错误回调函数的优化。

本项目完全是由个人利用业余时间开发,不定时更新。

关于模块函数特征识别

通过定制化开发一套轻量级的特征识别引擎,来实现模块函数特征识别。

参考资料

https://chaotic.gd/ghidra-decompiler-docs-built/index.html

Online Courses – Ghidra

NationalSecurityAgency/ghidra: Ghidra is a software reverse engineering (SRE) framework

airbus-cert/Yagi: Yet Another Ghidra Integration for IDA

avast/retdec: RetDec is a retargetable machine-code decompiler based on LLVM. (github.com)

RolfRolles/HexRaysDeob: Hex-Rays microcode API plugin for breaking an obfuscating compiler (github.com)

patois/HRDevHelper: Context-sensitive HexRays decompiler plugin that visualizes the ctree of decompiled functions. (github.com)

https://github.com/OpenEpl/TextECode

NjMzNzgzNjAy