Giter Club home page Giter Club logo

e-debug-plus's Introduction

E-debug Plus

起初E-debug是由xjun开发的,但是由于我并不满足E-debug的函数识别率,于是基于xjun的源码进行了修改、重构,在此对Xjun哥表示感谢

关于E-debug Plus的工作原理

E-debug Plus的目的是识别函数命令,为此首先开发了ECodeMake,ECodeMake是将易语言的支持库函数转换为Esig的一款工具:https://github.com/fjqisba/CodeMake

例如取字节集长度这个命令 001

ECodeMake会将之转换为8B44240C8B0085C075078B4C24048901C38B5424048B40048902C3

其中为了识别函数的尾部,运用到了Bea反汇编引擎.

而同时E-debug则是一款OD的插件,能够提取蕴含在易语言静态编译程序里的命令地址信息,将之逐个与上面十六进制进行对比,就能得出函数的命令了.

很明显有了这两个东西,绝大多数函数都能识别出来了.

然而易语言支持库命令中不乏有这样的函数: 002

这样的函数 003

甚至是这样的函数 004

起初我的做法比较愚蠢,就是通过在CODEMAKE中对比函数来得到这些无法识别的函数,再对它们进行额外的记录,像下面这样.

typedef struct
{
	char	m_CommandName[64];              //命令名称
	int  	m_CallType;                     //函数类型,0代表无重复CALL,1代表需要判断第二个CALL,2代表需要判断IAT函数的CALL
                                            //3代表判断CALL之前有一段特殊代码
	ULONG   m_CallOffset;                   //记录需要判断的call的偏移
	int		m_size;                         //程序一阶函数的字节大小
	UCHAR   m_opcode[128];                  //匹配的字节
	int     m_size2;                        //程序二阶函数的字节大小
	UCHAR	m_opcode2[128];                 //类型1或3时的opcode
	char    m_IATEAT[128];                  //call为类型2时为IAT与EAT
}ESTATICLIBOPCODE, *PESTATICLIBOPCODE;

这就是E-debug3.0当中的做法,现在看来是非常不好的,即使通过一段时间的完善,能够识别出易语言系统核心支持库的600多条命令,

后续批量制作特征文本、对任意函数生成特征文本又该怎么办呢?

于是我思考了很久,想到了得自己制作一个简易的函数<->文本转换引擎,即ECODEMAKE负责将函数转换为文本,E-debug则负责将文本转换为函数进行识别.

有些无论如何也无法分辨出来的函数,例如 下载对象.取对象信息 与 FTP上传对象.取对象信息,两个函数除了地址不同外没有任何分别,采用单函数多重表示法

表示成 FTP上传对象|下载对象.取对象信息

再如 FTP上传对象.取已上传长 与 下载对象.取已下载长,两个完全一样的函数表示成 FTP上传对象.取已上传长||下载对象.取已下载长

Esig介绍:

Esig就是ECODEMAKE生成的函数文本化格式,为了应付各种各样的函数,有以下文本格式,
<>:CALL 命令,例如<20181116>

-->:jmp 跳转指令,例如50-->58C3

<[]>:IAT/EAT 函数调用指令,例如<[KERNEL32.InitializeCriticalSection||RtlInitializeCriticalSection]>,前面是检索导入表,后面为检索导出表

[]:IAT/EAT 函数jmp指令,例如[KERNEL32.TerminateThread]

[]>:jmp 函数类跳转,例如易语言调用Delphi的支持库就会采取跳转的方式.

??:通配符

通过以上一些格式,我们可以想象出易语言的大部分函数终于能表示出来了.

在生成出来的Esig文件中,采用了函数命名的方式来记录,上半部分是子函数列表,下半部分是主函数列表. 在可视化的Esig文件中,每个人都可以对识别出错的函数进行修改,这正是我的目的.

同时由于易语言fne支持库的函数和实际编译出来的程序代码有出入,导致Esig中有一些目前识别错误的易语言命令,如果有的话可以反馈给我完善.

对于有一些ECODEMAKE很难制作出来的Esig,可以考虑人工生成.例如飘零金盾8.0的Esig就是我配合CODEMAKE+人工制作的一份Esig,

需要注意的是,不应该出现类似于 A8A6A这样的特征码,因为存在半个字节,不过FF5?56EE这种却是可以的.

E-debug Plus的匹配

E-debug Plus对于函数的匹配要求相当严格,一个字节出错也会匹配失败,所以此款软件目前不适合用于分析那些经过加壳处理的软件,
因为这些软件会修改调用函数的IAT CALL,导致函数字节发生变化. 这个问题从理论上能用模糊匹配来解决,即通过计算匹配字节的百分比来判断函数,然而目前这并不是我想要研究的方向. 脱壳或许是更好的处理方式,然而有时壳会将整个支持库函数进行VM,如此则软件完全失效. 编译或者独立编译的程序,由于软件数目少,研究难度低,暂时也懒得去写了.

使用说明:

将插件与Esig文件夹放置于OD目录下

OD\plugin\E-debug.dll

OD\plugin\esig即可

未加壳的程序,在text区段可直接分析. 加壳的程序,可待text区段解码后,CPU窗口到达text区段再开始分析.

测试

如果有分析崩溃的样本,可以发送至[email protected]

交流QQ群:633783602

开发日志:

2019.01.27:

修复扫描判断逻辑BUG,扫描算法基本完成

2019.01.28:

依旧是修复判断逻辑BUG,完善了几个支持库,极大减少了插件崩溃的概率

2019.02.20:

修复FF15与FF25识别BUG,略微提升识别速率

e-debug-plus's People

Contributors

fjqisba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

e-debug-plus's Issues

能不能添加一点新功能啊?

我使用的时候其实不是很清楚取十六字节和到字节集两个键的作用。
问题:在使用时其实发现需要每到一个模块再使用一次分析,分析窗口还不能关闭.
希望的解决方案:
1.能不能分析之后自动在OD里面写个注释或标签,
2.根据模块名字先应用相关的库特征,如果分析不准确,可以支持手动添加库特征继续分析
3.解释一下取十六字节和到字节集两个键的作用。

Esig Not Founded

为什么我分析的软件具体调用都显示Esig Not Founded,就只有KrnlLinCmd几个系统函数可以先生出来

支持库信息里各个库都有调用命令数,就是具体点开没命令名称

3.0.1插件

3.0.1插件下载不了。
用vs2017编译不成功。。。。

请求交流

   你好。最近在分析一个易语言的程序,找到你这个插件。插件非常不错,而且还在更新维护中。我在分析中发现些问题想和你交流下。例如对krnlCmd中最后一个函数的作用等。
	pEAnalysisEngine->AnalysisMode = StaticMode;
	vector<string> krnlCmd =
	{ "错误回调", "DLL命令", "三方支持库命令", "核心支持库命令",
		"读取组件属性", "设置组件属性", "分配内存", "重新分配内存",
		"释放内存", "结束", "窗口消息循环", "载入启动窗口", "初始化" };

   同时有想法将插件移植到X64DBG上,如有必要可以直接移植到IDA上。

我Q:330435863

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.