Skip to content
This repository has been archived by the owner on Oct 26, 2022. It is now read-only.

fjqisba/ShareMySig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ShareMySig

这是一个esig共享库,大家可以在这里上传自己制作的esig....

esig编写格式

和普通的十六进制特征码不一样,esig根据需求拓展了一些规则.

esig中分Config,SubFunc,Func三个板块. Name代表在edebug中显示的名称

Description代表在edebug显示的描述符,在易语言的支持库中统一为GUID,且不可修改.

IsAligned代表是否地址对齐,某些库函数地址始终是对齐的,这样可以设置为IsAligned=true,提升扫描速度.

SubFunc为第二层匹配函数,采用的是慢速匹配模式(文本解析,占用时间),函数表达文本和Func没有任何区别,但是函数名不能重复

Func为第一层匹配函数,采用的是快速匹配模式(字典树,占用空间),函数名可以重复

因为通过对函数的一些分析得知,绝大多数函数十六进制相差较大(0x00-0xFF),每个字节或许就能成为函数匹配成功的关键, 通俗地说,就是当通过快速定位,完全匹配了第一层之间的前几个字节时候,此函数便有极大概率是想要匹配的函数. 此时再转而使用慢速匹配模式,进一步精确确认,从而得到想要的匹配结果.

Func文本规则

<>代表的是普通的函数,即特征码E8????????的扩展,esig理论可以内嵌很多层<>

[]代表jmp到API函数,即特征码FF15????????的扩展,支持IAT与EAT匹配,例如[KERNEL32.EnterCriticalSection||RtlEnterCriticalSection]

<[]>代表Call到API函数,即特征码FF25????????的扩展,支持IAT与EAT匹配,例如<[KERNEL32.EnterCriticalSection||RtlEnterCriticalSection]>

!!代表的是常量的识别,通过一些函数的对比发现,有些函数其常量会是识别的关键,例如

push 0x401000,而0x401000中的"string too long"会将成为识别的关键,此时可以编写特征码

SubFunc添加子函数 string:737472696E6720746F6F206C6F6E67 Func中规则 68!string!

来表示这个重要的常量

-->代表长跳转,即特征码E9????????的扩展,在匹配时会跳转过去继续识别,暂不支持短跳转

关于手动制作esig特征码

在手动编写esig特征码时,我总结了以下几点,希望能对大家有所帮助

1.只编写重要的函数

什么是重要的函数呢?使用率较高的函数,较为复杂的函数. 有的函数(例如精易模块中的一些函数)使用根本不多,或者说有很多版本,没必要特意去编写规则来匹配它 有的函数较为简单,逆向爱好者能一眼就便看出其功能来,编写规则的意义也很小

esig只为重要的函数服务!如果什么函数都想要用esig来编写出来的话,那么函数数目会是巨大的

2.编写的规则尽量简单

虽然esig支持非常复杂的函数,但是我在编写规则的过程中发现,过于复杂的特征会使我自己也很难理解、维护. 所以优先编写简单的规则,对于手工编写规则的人来说,效率可能更高

3.控制函数长度在128个字节内

通过一些小统计,发现128个字节就足以能够匹配出正确的函数,因为一个字节便有256种可能性,128个字节则有256^128种结果,是完全足够应付不同的函数的.

实际例子

简易的函数,特征码等价于十六进制字节码,遇到动态的字节码使用通配符替换即可。

Eazy

特征码如下:

*****SubFunc*****
*****SubFunc_End*****
***Func***
函数:558BECE8????????8BE55DC3
***Func_End***

如果想制作函数内部的特征码,需要制作subFunc特征,SubFunc语法与Func一致

Func

*****SubFunc*****
子函数:558BEC83C4F4D97DFE668B45FE80CC0C668945FCD96DFCDF7DF4D96DFE8B45F4
8B55F88BE55DC3
*****SubFunc_End*****
***Func***
函数:558BEC<子函数>8BE55DC3
***Func_End***

使用-->来表示跳转,注意这个跳转必须是E9开头的长跳转。

LongJmp

LongJmp2

*****SubFunc*****
*****SubFunc_End*****
***Func***
函数:55-->5DC3
***Func_End***

常量特征使用!!符号,常量内容添加到SubFunc中,即便是文本也只能使用十六进制表示。

image-20201218220722005

*****SubFunc*****
我是字符串:313233
*****SubFunc_End*****
***Func***
函数:B8!我是字符串!C3
***Func_End***

更新日志

系统核心支持库:

取现行时间 取主机名

About

共享esig特征文件库

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages