首页
社区
课程
招聘
[原创]易语言程序分析笔记
发表于: 2022-9-22 17:52 22848

[原创]易语言程序分析笔记

2022-9-22 17:52
22848

        易语言静态编译由于是静态地址,所以已经有工具可以分析了;但是非静态的因为是动态加载库,分析起来还是有点小麻烦的。这个笔记是我之前分析一个易样本时总结的,可能有些地方也不对,凑合看吧。

要点

易语言程序依赖于自实现的库(.fnr)执行,针对易语言的编译模式有静态编译非静态编译独立编译,如下图:

由于易语言是自写的框架,类似于MFC,因此如果未处理编译后的程序,程序中将存在一些固定的字符串。

静态编译是直接将库文件与程序合并。

该种编译模式会将库文件存放在程序中,在WinMain入口会获取读取自身的内容,然后释放出库文件。

随后加载库文件,并调用一个固定函数GetNewSock

最后调用函数

进入该函数后,会看到call eax,eax为函数入口。

黑月编译器是网友针对易语言程序编写的一款编译器,他直接会优化掉前期的初始化代码,包括clr(c library runtime)初始化,直接进入到易语言的标准入口。

易语言的函数大致分有三种,分别为窗体控件的消息函数、用户自定义函数、库函数和组件属性函数。

消息函数都是通过固定代码段调用,代码段定位流程如下:

找到如图特征

进入函数后找到最后一call 局部变量,该位置调用的就是消息函数

将函数对应到IDA中可直接定位到流程。

找到 case 2008:


用户自定义的函数调用与通常的函数调用方式一致。

库函数为易语言自写支持库里的函数,类似Windows的DLL文件。函数原型如下。

该函数是一个变参函数,参数一为欲调用欲调用函数的参数个数,然后其余的以三个参数为一组表示参数的信息。忽略参数的值为布尔值,0表示不可以忽略,1表示可忽略;其参数类型可参考的值如下(可能不完整):

类型

0x80000004

文本型

0x80000101

文本型

0x80000000

通用型

0x80000002

逻辑型

0x80000005

字节集

0x80000006

子程序指针

0x80000301

数值型

0x80000601

数值型

0x10001

窗体

由于易语言的编译模式不同,库函数调用代码也会产生差异。接下来分别解释静态编译非静态编译下,函数代码的差异。


非静态编译的程序,在调用库函数时不再通过静态地址的方式调用,而是通过传入库文件序号欲调用对应函数的偏移到寄存器中,然后调用。

库文件序号指的是库文件是程序中加载的第几个文件。序号从0开始,易语言程序在运行初期最先加载的库文件为该库文件,记加载序号为0;如果再加载一个库文件的话则加载新加载的库文件序号为1。对于调用krnln.fnr库文件的函数,易语言程序以隐式形式传递序号,因此在信息框函数调用的反汇编代码中并未看到传入0序号。常用库文件的函数偏移在附录中贴出。

函数分为两种,一种是对组件的属性修改,另一种是组件的自带函数。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-9-22 17:54 被PlaneJun编辑 ,原因:
收藏
免费 12
支持
分享
最新回复 (10)
雪    币: 2402
活跃值: (6808)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
2
根据我的总结,研究易语言目前最有效的方法还是去编写IDA插件,想办法让代码可阅读化,Go语言、VB语言等同理。
2022-9-22 18:00
2
雪    币: 141
活跃值: (7521)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
3
fjqisba 根据我的总结,研究易语言目前最有效的方法还是去编写IDA插件,想办法让代码可阅读化,Go语言、VB语言等同理。
易语言按照非静态编译的这个思路是可以去做的,但是没时间。只能等别人造轮子
2022-9-22 18:02
0
雪    币: 4709
活跃值: (1605)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
E-Decompiler
2022-9-22 19:58
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
E反编译1楼很6.
2022-9-23 11:06
0
雪    币: 268
活跃值: (2367)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
太强了把,能帮忙逆向一个dll吗
2023-3-3 18:59
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
源文件能分享出来吗?想照着分析一下
2023-11-15 09:39
0
雪    币: 210
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
插个眼、方便下次看
2023-11-22 04:50
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
大佬 哪个ebug 生成sig的配套工具在哪
2024-1-2 10:03
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10

codemake 加载支持库闪退

最后于 2024-1-2 10:44 被mb_xgkqgkeu编辑 ,原因:
2024-1-2 10:23
0
雪    币: 1595
活跃值: (1797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
牛啊,这么多特征
2024-1-2 11:23
0
游客
登录 | 注册 方可回帖
返回
//