前几天笔者在逆向一个易语言写的身份证生成器程序的时候,发现易语言的各种函数都是经过封装过的,包括文本比较,字节集比较等敏感的功能函数全都是经过封装的,并且功能特征码无论哪个版本的易语言还完全相同…
现在网上的一些易语言特征码根本不可靠,只要把代码稍微VM一下,特征码就找不到了,在此,笔者稍微研究了一下易语言库函数调用过程:
测试程序的源码如下:
先看看”信息框”函数是怎么被调用的
可见易语言调用库函数是保留了参数的属性,所以实际传递的参数比代码写的参数要多
跳转到调用库函数的函数的主体
这边是调用库函数,之前设置的EBX就是库函数主体的位置了
终于到库函数的主体部分了…(调用一个函数经历这么多代码,怪不得易语言代码效率这么低)
顺便贴上文本比较的代码部分,可见易语言文本比较也是通过调用库函数实现的
那么只要找到想要Hook的易语言库函数的特征码,就能轻而易举的实现Hook
这里笔者采用DLL注入的方式来实现inlinehook,特征码记录在自定义的配置文件里面
配置定义:
enum EasyLanTypes { zjx, dzsx, zsx, xsx, sjdxsx, wbx, zjj, ljx, noreturn };
typedef struct {
BYTE *pBin;
UINT lenth;
} BIN;
typedef struct {
string MsgText;
UIN