首页
学习
活动
专区
圈层
工具
发布

Dll 导出函数那些破事

经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系。...总结: C++编译器在生成DLL时,会对导出的函数进行名字改编,并且不同的编译器使用的改编规则不一样,因此改编后的名字也是不同的(一般涉及到C++ 中的重载等)。...如果利用不同编译器分别生成DLL和访问DLL的exe程序,后者在访问该DLL的导出函数时就会出现问题。如上例中函数MyFunction在C++编译器改编后的名字是?...该名称与生成的动态链接库名一定要匹配,这句代码不是必须的。 EXPORTS说明了DLL将要导出的函数,以及为这些导出函数指定的符号名。...同时如果导出函数的调用约定发生改变,即使使用extern "C",编译后的函数名还是会发生改变。例如上面我们加入_stdcall关键字说明调用约定(标准调用约定,也就是WINAPI调用约定)。

2.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    DLL导出函数Interface与实现分离

    一种最简单的实现 GPImpl.h/.cpp class GPImpl { public: void DoSomeThing(); }; //---------------------------...------------------------改进: 接口与实现分离 对IGPExp这个导出类写一个实现类GPExpImpl来实现它的所有功能,重点:GPExpImpl必须和IGPExp有相同的公有成员函数...void IGPExp::DoSomeThing() { m_pImpl->DoSomeThing(); } 划重点:前置声明class GPExpImpl;不需要包含头文件,但GPExpImpl只能使用指针...,否则过不了编译 //-----------------------------------------深入,如果IGPExp有父类,父类有函数IsOk来控制是否调用DoSomeThing() 第一种方式...IGPExp::DoSomeThing() { m_pImpl->DoSomeThing(); } 为什么不让GPExpImpl直接继承IGPExpBase呢,因为GPExpImpl定位为IGPExp的执行体

    9.3K64

    BypassUAC

    C++ version CSharp version 两个注意点 DLL形式 C++ dll导出函数方式 C# dll导出函数方式 一个坑 值得研究的C2推荐 过掉UAC提示框的方法总结 这里主要说的是...关于C#接口的知识,可以从这里了解更多。 DLL 形式 如何使用? dll可以使用系统可信进程rundll32.exe进行加载,这样也不需要调用MarquradePEB。...C++ dll导出函数的方式 代码地址:BypassUAC_Dll 导出的函数为BypassUAC,导出方式直接新建一个def文件,格式参考这里,内容如下: LIBRARY BypassUAC EXPORTS...C# 导出dll函数的方式 代码地址:BypassUAC_Dll_csharp C#导出dll函数的方式有两种: 使用DllExport这个NuGet包 通过IL反编译的方式 DllExport...安装之后,直接使用[DllExport]导出BypassUAC函数即可: ? 重新生成dll文件,在CFF中查看,已经导出成功: ?

    2.5K30

    命令行下的“蒙面歌王”rundll32.exe

    这就是DLL(Dynamic Link Library)文件,即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。...Rundll.exe 和 Rundll32.exe 的命令行实用程序,通过这两个程序可调用从16位或32位DLL导出的函数。...一、用C++如何写一个简单的被Rundll32.exe调用的dll 我用Visual studio 2017写了一个简单的代码,内容如下: // Dll3.cpp: 定义 DLL 应用程序的导出函数。...三、用Rundll32.exe执行命令绕过杀毒软件的作法 命令如下: rundll32 url.dll, OpenURL file://c:\windows\system32\calc.exerundll32...=inetsvr 执行完以下命令就会删掉了 rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/dsrv.inf INF的具体参数是请查看

    1.6K90

    研究传播 Dridex 新变种的 Excel 文档

    Excel 4.0 宏代码使用各种单元格中的公式执行代码,给定起始单元格后会从上到下、从左到右执行代码。本例代码从 Macro1!A4单元格开始执行。...ReportDeviceAdd的导出函数来执行其恶意功能。...深入理解 Dridex Dridex 包含两个导出函数: DllEntryPoint 是 DLL 的入口函数 FWroeeWqoinnmw 是恶意函数 Dridex 最终的导出函数列表如下所示: 加载...Dridex 的步骤如下所示: Rundll32.exe 调用 LoadLibrary() 将 DLL 加载到内存中 调用 DLL 的入口点函数 DllEntryPoint 来初始化模块,包含脱壳 调用函数名...ReportDeviceAdd 中的 GetProcAddress,从初始化的模块中获取函数地址 Rundll32.exe 调用函数地址 反分析 Dridex 使用了多种反分析技术: 所有 API 都被隐藏

    1.5K20

    DLL 导出符号的两种方式

    以导出名为 TESTFUNC 方法为例: def 文件方式 ,正常在程序中定义方法,然后新建一个 .def 文件,内容类似 LIBRARY EXPORT TESTFUNC 在其他工程使用这个方法的时候需要头文件...区别 这里就不得不说导出符号在 DLL 中的形式。...调用导出函数的方式 一般有三种形式: .h 提供声明之后,直接调用,在连接的时候指定 .def 文件目录; .h 提供声明之后,直接调用,链接的时候指定 .lib 文件地址 内部声明要调用函数的函数指针...所以会看到有时候导出的时候_extern "C" _declspec(dllexport)这样写,这是为了让函数以 C 的方式来编译,这样导出的方法就是没有那些符号的了,但这样有个问题,就是函数必须以...那回到我最初的问题,我的 C# 工程之所以在调用使用 dllexport导出的方法失败,就是因为,我没有写对真正的方法名(带一堆符号的那个)。而使用 .def 文件的话,就没有这个问题了。

    1.6K40

    T1218.002 Control Panel滥用

    并且有一个导出函数CPlApplet该函数是控制面板应用程序的入口点,它被控制面板管理程序自动调用,且是个回调函数。...shell32.dll,Control_RunDLL的命令均可用control替代,control.exe实质调用了rundll32.exe。...当从命令行执行或单击时,control.exe 将control.exe file.cpl在Rundll32用于调用 CPL 的 API 函数(例如:)之前执行 CPL 文件(例如:)rundll32....CPL 文件可以通过 CPL API 函数直接执行,只需使用后面的Rundll32命令,这可能会绕过 control.exe 的检测和/或执行过滤器。...分析新的控制面板项目以及磁盘上存在的恶意内容。可执行文件和 CPL 格式都是兼容的可移植可执行文件 (PE) 图像,可以使用传统工具和方法进行检查,

    1.1K20

    查找DLL中的函数

    但是却没有Test.cpp来实现这个函数的定义 那就奇怪了,有了函数声明,但没有定义 2.我的思路 我的第一个思路是既然头文件是Test.h,那按照自己之前生成dll的方式,它生成的dll文件也一定叫Test.dll...,用everything也没有搜到有这个文件 既然这样行不通,那我去看下是不是它又依赖其他的dll呢,打开依赖库文件,发现也没有一个叫做Test.dll或者MyFunction.dll,我这样想的原因是总觉得既然在这里生成...,那应该名字也一样,现在看来,之前查的头蒙了,怎么能自己包含自己生成的dll呢,笑掉大牙 那我想有没有一个文件可以查我这个项目Test生成的Test.dll里面包含的函数呢,因为既然我的MyFunction...是这个dll功能的一部分,那必然它在Test.dll里 于是发现了一款工具Dependencies,它可以查exe或者库所依赖的其他dll,之前第一次工作时,我的leader航哥就对我说过这个软件,但当时觉得这个名字好长...,所以只有个印象,但没有记住 3.Dependencies 把Test.dll加载进去,点击左侧Test.dll,右边是上下两幅,上面是自己导入的,下面是给别人用的 从网上找个图代替下: 我在上面按Ctrl

    50110

    干货 | 巧用cpl文件维持权限和免杀

    并且有一个导出函数CPlApplet 该函数是控制面板应用程序的入口点,它被控制面板管理程序自动调用,且是个回调函数。 ?...shell32.dll,Control_RunDLL的命令均可用control替代,control.exe实质调用了rundll32.exe。...如何自己制造一个cpl文件 最简单的方式:直接创建一个dll,无需导出函数,然后改后缀名 BOOL APIENTRY DllMain( HMODULE hModule,...这里既然可以弹出calc.exe,那么能不能执行自己的payload的呢,答案是肯定的。...假设设置某一路径无法执行可执行程序,再次运行时就会提示组策略安全,不允许运行 ? 绕过的方式有很多,这里只讲cpl文件 完全可以把代码写入到cpl文件中,同样达到执行目的,这里就弹一个cmd ?

    1.5K40

    白加黑保姆教程通杀主流杀软

    1.修改导出表 在导出表中,将要转发的函数入口地址指向另一个DLL对应函数的入口地址 2.实际调用过程 其他程序调用DLL中被转发的函数时,系统会重定向到转发目标DLL中的对应函数。...获取函数入口地址 然后使用 GetProcAddress 获取目标 DLL 中要调用的函数的入口地址。 实际调用过程: 使用获取到的函数入口地址调用目标函数。...当Dll使用LoadLibrary加载和使用FreeLibrary函数卸载dll时候,系统还会回调该函数的入口点函数。...也就是说创建线程申请内存加载shellcode需要在导出函数里面操作,不能再dllmain里面直接操作,需要找到第一个执行的函数就能行,但是麻烦,我们可以可以新定义一个函数来申请内存,加载到内存中,在dllmain...用AheadLib来做dll的相关函数导出,但是之前的这个软件导出x64位的dll就会直接闪退,没办法,已经没有更新了 在GitHub上找到了一个可以用的,但是导出之后需要把asm相关函数编译成obj,

    1K10

    利用DLL Proxying技术隐匿执行恶意代码

    文章来源|MS08067红队手册 本文作者:为执着℡strugg* DLL Proxying 我们通过DLL 侧载可以实现隐匿执行恶意代码,但存在一个问题,那就是需要去找到被劫持的DLL文件的导出函数以及确定哪个导出函数在...2.创建我们自己的 Dll 文件,导出所有的 whatever.dll 中的导出函数,命名为 dismcore.dll。...,当被主进程加载时执行我们自己的代码;二是转发whatever.dll 的导出函数调用请求给whatever.dll。...: break; } return TRUE; } 使用rundll32.exe来模拟二进制文件加载执行DLL文件: 这就实现了当进程加载DLL 时,代码自动执行的功能。...我们看下代理dll 的源码: 从代码中可以看出,DismCore.dll 文件的四个导出函数都已被导出。这时,我们只需要编写自己的代码,放入DllMain 函数中执行,就可以隐匿实现执行自定义代码。

    19600
    领券