精易论坛

标题: 易语言逆向_内存加速优化_原理分析 [打印本页]

作者: Kode    时间: 2025-9-1 17:26
标题: 易语言逆向_内存加速优化_原理分析
原贴地址:
内存加速优化v1.9.e
https://bbs.ijingyi.com/forum.php?mod=viewthread&tid=14855229
(出处: 精易论坛)
----------------------------------------------------------------------------------------------
最近逛论坛偶然看到 易语言静态编译的 加速模块,可以“Api静态加速优化”、“内存分配加速优化”等功能,下载源码运行了一下确实速度提高很多。
这一下子激发我的好奇心,毕竟玩易语言这么久了,如果真的可以在实际项目中应用,那将对软件效率极大地提高。
正好最近开发一些软件,想用又不敢用,所以就逆向分析了一下他的原理,看看能否在实际项目中投入使用。

打开源码看到功能基本全是内联汇编写的,于是,上神器。
首先,在 Api静态加速优化 函数里面,内置了一段shellcode,

这一段shellcode的大致作用是
1.取内核API地址,调用一些内核API解锁内存权限,方便读写代码段。
2.定位FF25,找到易语言静态编译调用api的支持库接口,HOOK掉。
[attach]1383955[/attach]

3.hook到达的位置是 00401561                 50                   push    eax
于是乎,首次调用api的路线变成了
原生:调用api->查表DLL是否在表中存在,不存在则LoadlLibrary->查表该api地址是否在表中存在,不存在则GetProcAddress->返回api地址->jmp api
优化后:首次调用api->查表DLL是否在表中存在,不存在则LoadlLibrary->查表该api地址是否在表中存在,不存在则GetProcAddress->返回api地址->修改调用方机器码,改为 call api
优化后:第二次及以上调用api->call api

下图为:易语言静态编译原生调用api,会有一个api编号,然后call(这个call包含了上面说的所有过程)[attach]1383953[/attach]
下图为:优化后的调用api,编号填充为多字节NOP,然后直接call api
[attach]1383954[/attach]
优点:速度显著提升
缺点:加密壳通常都会保护api,或者VM掉调用方的代码,或者VM掉支持库接口位置代码,这些情况都会导致不能用,并且由于会动态修改内存代码,不能通过CRC校验,会损失一部分安全性。
总结:原理相当于是,省掉了每次调用api查表的时间,改为通过地址直达调用api。缺点是加载DLL后地址不能变,如果DLL被重载之类的,则崩溃。并且不能加壳。

注:以上仅代表个人观点,仅作一个技术交流测评分析,可能有分析得不对的地方,大佬们多包涵,在一些不需要加壳的个人工具上,这个功能还是挺好用的。







作者: a524666979    时间: 2025-9-1 17:37

作者: 风过无痕123    时间: 2026-1-8 13:51
怪不得上加密壳就无法正常运行。那内存分配加速 有是什么原理呢?




欢迎光临 精易论坛 (https://bbs.ijingyi.com/) Powered by Discuz! X3.4