我可以阻止C ++ dll加载到Python Ctypes中吗?

先生

我想根据条件从dll内部是否为真,来确定是否可以阻止或允许python ctypes加载dll。

一些背景:

我的应用程序使用各种计算算法,这些算法是我在Python中创建的原型,然后在C ++中重新实现以提高速度。我仍将Python用于应用程序“胶水”和GUI。我正在使用ctypes包装器访问dll中的功能。

现在,我需要保护软件安全,以便仅在存在安全加密狗的情况下才能运行该软件。Python的开放性使其变得很困难,因此我希望能够停止加载dll的python脚本,除非存在检查加密狗的函数返回True。

示例Python包装器:

from ctypes import cdll, c_int , c_float, c_bool

lib = cdll.LoadLibrary('my.dll')

cpp_sum = lib.sum
cpp_sum.argtypes = [c_int,c_int]
cpp_sum.restype = c_int

def wrapped_sum(value_1,value_2):
    return cpp_sum(value_1,value_2)

以及my.dll的代码:

#include "stdafx.h"
#include <cmath>

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int sum(int a, int b) 
    {return a + b;}

//pseudo dongle code:
bool is_dongle_present(){
    if dongle present return true
    else return false

理想情况下,如果dongle_is_present返回false,则dll将无法加载。有人可以帮忙吗?如果这个问题不清楚,请告诉我!

非常感谢

Ari0gn

DllMain向您的库添加功能。

动态链接库(DLL)的可选入口点。当系统启动或终止进程或线程时,它将使用进程的第一个线程为每个加载的DLL调用入口点函数。当使用LoadLibrary和FreeLibrary函数加载或卸载DLL时,系统还会调用DLL的入口点函数。

你可以防止DLL加载通过返回FALSEDLL_PROCESS_ATTACH

当系统使用DLL_PROCESS_ATTACH值调用DllMain函数时,如果成功,则该函数返回TRUE,如果初始化失败,则返回FALSE。如果由于进程使用LoadLibrary函数而在调用DllMain时返回值为FALSE,则LoadLibrary返回NULL。(系统立即使用DLL_PROCESS_DETACH调用您的入口点函数,并卸载DLL。)如果在进程初始化期间调用DllMain时返回值为FALSE,则该进程终止并出现错误

有关其他信息,请参见DllMain MSDN条目

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以将用Delphi编写的DLL加载到PowerShell中?

我可以阻止加载 RCP 编辑器吗

Windows中的延迟加载DLL:我可以动态选择要查找的DLL名称吗?(C ++)

是否可以阻止将远程脚本加载到iframe中?

将C ++ DLL加载到可在另一个DLL中调用函数的matlab中

.net可以从内存中动态加载c ++ / cli dll吗?

我可以将JSON加载到OrderedDict吗?

我可以将JSON加载到OrderedDict吗?

使用Python Ctypes加载dll

在收到数据之前,我可以将虚拟单元格加载到 UITableView 中吗?

我可以将Picasso的图片加载到操作栏中吗?

通过导航将HTML页面加载到DIV中-我可以直接链接到它吗?

您可以动态编译C代码并将其链接/加载到C程序中吗?

阻止页面完全加载到Codeigniter中

我可以阻止程序用户调整控制台窗口的大小吗?(在C中)

如何在ctypes库python中获取我的C#dll的依赖关系?

我可以使用pybind加载外部c ++ dll并调用函数吗?

我可以从lua 5.0.2加载用c ++编写的lua 5.3.5 dll吗?

我们可以使用JQuery使加载的页面将不同的页面加载到首页中的元素吗?

有什么方法可以将变形的json加载到python对象中?

Python“DLL加载失败”中的C++扩展

Python 3-将JSON数据加载到我的.csv文件中

我可以在MVC Core中阻止异步代码吗?

在Maya中,我可以阻止读取动画曲线节点吗?

我可以在Chrome中阻止所有文件下载吗?

我可以阻止Google在Firefox中窃取光标吗?

我可以阻止自己删除文件吗?

我可以阻止实现接口吗?

我可以动态地将其他Spring配置文件加载到现有的WebApplicationContext中吗?