VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 28361|回复: 41

[分享] 从内存加载DLL

  [复制链接]
 楼主| 发表于 2011-5-5 10:44:15 | 显示全部楼层 |阅读模式
本帖最后由 仙剑魔 于 2011-5-5 13:48 编辑

邪恶代码,把DLL直接在内存里加载...
翻译真辛苦,谁有空测试下...

Module1里是专门写的指针函数,用于将数组映射成指针使用
必须通过CallPtrProc回调使用
SetPtrProc映射指针,ClearPtrProc清除指针,IncPtrProc自加
SetPtrProc过的指针必须用ClearPtrProc清楚,否则到系统自动回收时会崩溃,切忌

Module2里是函数CALL
现在写了stdcall和cdecl两种

Module3就是翻译自那份代码

Module4各种用到的API,类型,常数的声明

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

_addNumbers@8,subNumbers是DLL里的函数名  发表于 2012-4-30 23:48
不知道你有没有用过api加载DLL,通常都是先loadlibrary然后getprocaddress的 这个也是一样  发表于 2012-4-30 23:47
fun_stdcall = MemoryGetProcAddress(handle, "_addNumbers@8") fun_cdecl = MemoryGetProcAddress(handle, "subNumbers") 这2句是什么意思?  发表于 2012-4-30 20:18
我决定命名为"伪静态链接"...  发表于 2011-5-10 11:36

评分

参与人数 5威望 +40 金钱 +35 人气 +7 收起 理由
sunfrank + 7 + 3 很给力!
ccl1314520 + 2 stdcall和cdecl两种有什么不同
KusoSoft + 30 + 35 很给力!
admin6677 + 1 + 3 先收藏
dahual + 1 ...

查看全部评分

本帖被以下淘专辑推荐:

发表于 2011-5-5 11:25:01 | 显示全部楼层
谢谢。正想找这个,试试看。
回复 支持 反对

使用道具 举报

发表于 2011-5-5 11:47:14 | 显示全部楼层
DLL里传的时自定义类型,是怎么操作的呀


Public Type HashFunctionsParam
nReserved(256 - 1) As Long 'big enough
End Type

'API声明
Public Declare Function RIPEMD128Reset Lib "beecrypt.dll" Alias "_ripemd128Reset@4" (ByRef t As HashFunctionsParam) As Long


我这么传不行,
Dim mp As HashFunctionsParam

handle = MemoryLoadLibrary(VarPtr(data(0)))
fun_stdcall = MemoryGetProcAddress(handle, "_ripemd128Reset@4")
CallFunc_stdcall fun_stdcall, mp

CallFunc_stdcall fun_stdcall, mp这句不行,说什么后期绑定功能之类的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-5 12:03:51 | 显示全部楼层
本帖最后由 仙剑魔 于 2011-5-5 12:04 编辑

CallFunc_stdcall fun_stdcall, varptr(mp)

ByRef 的直接扔地址进去
回复 支持 反对

使用道具 举报

发表于 2011-5-5 12:30:39 | 显示全部楼层
测试有个试用版加密的DLL,
msgbox出 software self-integrity test failed.cryptographic services are not available

后面的API操作都注释掉了,只执行这一句
handle = MemoryLoadLibrary(VarPtr(m_data(0)))


还有一个DLL提示。

Microsoft Visual C++ Runtime Library

        Runtime Error!
        program:C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE

        R6034
        An application has made an attempt to load the C runtime library incorrectly
        Please contact the application's support team for more information.

点评

DLL提示的意思是说这个DLL用了VC2005/2008之类的运行库,使用这些运行库需要一个认证文件,结果你从内存加载DLL认证文件就没了……  发表于 2011-5-5 15:56
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-5 13:00:18 | 显示全部楼层
本帖最后由 仙剑魔 于 2011-5-5 13:10 编辑

回复 a8888123 的帖子


可能这个DLL里面有什么额外处理吧...
内存加载不是正规方法,所以可能不兼容...

我最初找这个东西其实是为了内置zlib

点评

原来如此http://www.vbaccelerator.com/codelib/article/linkspf.htm  发表于 2011-5-6 15:53
"C生成的obj来冒充VB模块的obj"这样可以么???我回去试试......  发表于 2011-5-6 14:10
调用?写一个VB模块,里面放上一些函数,但是函数体什么也没有,然后在C里面写相应的函数,然后link的时候用C生成的obj来冒充VB模块的obj……  发表于 2011-5-6 13:05
那怎么调用啊?  发表于 2011-5-5 17:13
果然很不正规……内置zlib的超级方法是复制zlib的obj过来,然后在link.exe上面做一点手脚……  发表于 2011-5-5 15:55
回复 支持 反对

使用道具 举报

发表于 2011-5-5 16:28:54 | 显示全部楼层
我也整了很久这个 PE结构不熟悉 C语言滴不懂 终于有VB的可以参考了
谢谢
回复 支持 反对

使用道具 举报

发表于 2011-5-5 22:58:20 | 显示全部楼层
用c++的好处体现出来了,哈哈,
回复 支持 反对

使用道具 举报

发表于 2011-5-6 08:59:14 | 显示全部楼层
这个???
像我此等菜鸟只能观望下下了???
回复 支持 反对

使用道具 举报

发表于 2011-5-6 14:08:26 | 显示全部楼层
学习来了???
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-6-29 18:40

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表