Learn learn Cython

news/2024/12/16 21:04:32/文章来源:https://www.cnblogs.com/Un1corn/p/18452017

[SCTF ez_cython]

  1. 简单分析需要调用一个cy库,找到文件"cy.cp38-win_amd64.pyd"

    • pyd文件生成:

      • 编写pyx文件

        \#test.pyx
        def say_hello_world(name):
        print("Hello world" % name)
        
      • 编写setup

        \#setup.py
        from distutils.core import setup
        from Cython.Build import cythonize
        setup(name='Hello world app', ext_modules=cythonize("test.pyx"))
        
      • 生成pyd文件终端执行

        python3 .\setup.py build_ext --inplace
        
    • 终端执行报错

         error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      
      • 分析目的:目的就是安装一个Visual Studio Build Tools,他可以在不需要完整Visual Studio IDE的情况下获得编译和构建环境.
        这时候就有一个问题,我又不是没有python或者c的编译环境,为什么会这样?
      • 原因: 笔者安装的是Mingw环境,而报错安装所需要的环境是MSVC.而安装MSVC的最好方法就是使用Visual Studio Build Tools.,并且在Windows上,Python 官方发行版是使用 MSVC 编译的,所以setup.py编译拓展模块(c)一般需要MSVC.
    • 最后生成文件test.cp311-win_amd64.pyd

  2. 拿到"cy.cp38-win_amd64.pyd"后可以进行操作分析内容

    • 将.pyd文件放在当前工作目录便可以import,或者将.pyd文件放在lib/site-packages.如果无法运行,可能是缺少库导致的,或者版本不匹配(检测库的时候会显示python版本,更改版本即可)

        import pefilepe = pefile.PE("your_file.pyd")for entry in pe.DIRECTORY_ENTRY_IMPORT:print(entry.dll.decode("utf-8"))
      
    • 代码(IDE),而终端不需要加print(),因为解释器,按步骤解释会将内容输出

        import cyhelp(cy)a = cy.QOOQOOQOOQOOOQ() //cy.QOOQOOQOOQOOOQ()表示生成一个instance,而cy.QOOQOOQOOQOOOQ则是一个将a当作引用print(dir(a))print(a.get_key())
      
    • 当dir(cy.QOOQOOQOOQOOOQ)时会有输出,函数名都存在,但是好像缺少了变量
      img

  3. 通过注入cy类,获取运算过程

     import cyclass Symbol:   def __init__(self, name):       self.name = name   def __repr__(self):       return self.name   def __rshift__(self, other):       if isinstance(other, Symbol):           expression = Symbol(f"({self.name} >> {other.name})")       else:           expression = Symbol(f"({self.name} >> {other})")       return expression   def __lshift__(self, other):       if isinstance(other, Symbol):           expression = Symbol(f"({self.name} << {other.name})")       else:           expression = Symbol(f"({self.name} << {other})")       return expression   def __rxor__(self, other):       if isinstance(other, Symbol):           expression = Symbol(f"({self.name} ^ {other.name})")       else:           expression = Symbol(f"({self.name} ^ {other})")       return expression   def __xor__(self, other):       if isinstance(other, Symbol):           expression = Symbol(f"({self.name} ^ {other.name})")       else:           expression = Symbol(f"({self.name} ^ {other})")       return expression   def __add__(self, other):       if isinstance(other, Symbol):           expression = Symbol(f"({self.name} + {other.name})")       else:           expression = Symbol(f"({self.name} + {other})")       return expression   def __and__(self, other):       if isinstance(other, Symbol):           expression = Symbol(f"({self.name} & {other.name})")       else:           expression = Symbol(f"({self.name} & {other})")       return expressionclass AList:   def __init__(self, nums):       self.nums = [Symbol(str(num)) for num in nums]   def __getitem__(self, key):       return self.nums[key]   def copy(self):       return AList(self.nums)   def __len__(self):       return len(self.nums)   def __setitem__(self, key, value):       print(f"new_{self.nums[key]} = {value}")       self.nums[key] = Symbol(f"new_{self.nums[key].name}")   def __eq__(self, other):       print(f"{self.nums} == {other}")       return self.nums == otherinp = AList([f"a[{i}]" for i in range(32)])res = cy.sub14514(inp)if __name__ == '__main__':   print(res)
    
    • 分析(........)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853984.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24.10.31 补充日志分析以及打包压缩

uniq 作用:去重,一般与sort搭配使用,单用uniq,是合并相邻两行相同内容 参数: -c #统计重复行的次数 eg:[root@oldboyedu ~]# cat uniq.txt oldboy lidao lidao lidao lidao oldboy oldboy lidao oldboy pldboy [root@oldboyedu ~]# uniq uniq.txt oldboy lidao oldboy l…

k8s阶段08 k8s扩展(kubectl插件), 调度器(亲和调度, 污点和容忍度调度), 集群日常管理, 高可用集群部署, 集群版本升级

Kubernetes 扩展机制 扩展Kubernetes1.kubectl插件 2.API Server扩展身份认证、鉴权和动态准入控制相关插件 3.API扩展,以支持更多的资源类型 4.调度器扩展以支持更多调度算法 5.控制器扩展以支持更多的Controller或Operator 6.网络插件,扩展Kubelet以配置Pod网络 7.设备插件…

WebP图片使用踩坑

前情 WebP是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,最初在2010年发布,目标是减少文件大小,相较于传统的 PNG、JPG,甚至是动图 GIF 的格式,WebP 比它们的空间更小。根据谷歌的测试,WebP 格式的图片可以比 JPEG 格式的图片小 26%-34%,比 PNG 格式的…

idea把unicode转为中文

国际化需求,中文转unicode了 ‌设置文件编码‌:打开IDEA,通过快捷键Ctrl+Alt+S或通过菜单File -> Settings,搜索File encoding,选择Transparent native-to-ascii conversion选项,并设置默认编码为UTF-8。这样设置后,打开properties文件就可以显示中文了。

Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo

前言本篇介绍OPC协议,相关开源库、编译并搭建Qt开发OPC的基础环境。 Demo OPCOPC(OLE for Process Control)是一个工业标准,用于实现工业自动化系统中的不同设备和应用软件之间的数据交换和互操作性。以下是关于OPC的详细介绍:OPC的起源与发展OPC起源于上世纪90年代,随着…

vue 上传组件 vxe-upload 图片和附件拖拽调整顺序

vue 上传组件 vxe-upload 图片和附件拖拽调整顺序,通过设置 drag-sort 参数就可以启用拖拽排序功能 官网:https://vxeui.com/ 图片拖拽排序<template><div><vxe-upload v-model="imgList" mode="image" multiple drag-sort></vxe-u…

arm安装数据库

https://blog.csdn.net/wochunyang/article/details/132883654https://blog.csdn.net/qq_43690482/article/details/132168349https://www.cnblogs.com/wshisboy/p/16374015.htmlhttps://www.cnblogs.com/windandchimes/p/18344463 首先先看麒麟系统的版本CPU对应版本。 cat /p…

12月做题记录

whk恐怖如斯,仅补两周即可让呆猫失去大脑12月做题记录✩ trick ✯ 会大部分,要\(tj\)提示 ✬ 会小部分/完全没想到,看了\(tj\)才会 ◈ 脑电波 ✡ 有某一算法的神秘通用性质 ⊗ 待补目录12月做题记录CF1725K Kingdom of CriticismCF1446D2 Frequency Problem (Hard Version)根…

Vulnhub nxy

0x01:端口扫描 主机发现 nmap -sn 10.10.10.0/24全端口扫描 nmap --min-rate 10000 -p- 10.10.10.132UDP扫描 nmap -sU --top=20 10.10.10.132详细端口扫描 nmap -sT -sC -sV -O --min-rate 10000 -p22,80 10.10.10.132漏洞扫描 nmap --script=vuln -p22,80 10.10.10.1320x02:…

2024ciscn 逆向ezCsky和dump详解

ezCsky Exeinfo看了不是exeIDA分析不了,使用鸡爪Ghidra进行分析。这边顺带讲一下Ghidra的基础操作方法 下载Ghidra:https://gitcode.com/gh_mirrors/gh/ghidra_installer 下载java11(对版本有要求) 打开.bat文件第一次用需要先输入jar文件所在的地址,比如我的就是 C:\Pro…

如何将java私有库(jar)提交至公服/公共仓库(central repository)-手动版

如何将java私有库(jar)提交至公服/公共仓库(central repository)-手动版 准备GunPG(用于asc签名) 项目代码(建议是maven结构的) sonatype账号(https://central.sonatype.com/api/auth/login) Maven Helper(Idea插件,maven命令快捷插件) github或gitee账号(用于注册sonatype的N…

如何设计一个有效曝光的框架

本文主要介绍如何设计一个有效曝光的框架。先阐述有效曝光的概念及产生原因,接着围绕View标识、数据存储、曝光计算、曝光缓存、曝光策略、框架可扩展性等展开,包括View的唯一ID标识、数据存储的作用、曝光的面积和时长计算、缓存处理、框架策略扩展方式等,最后指出实现需考…