zip-zip(子函数调用)

zip · 浏览次数 : 0

小编点评

题目解析: 本题主要考察了对一道编程题目的理解和分析能力。题目给出了一个程序界面,要求根据用户的选择执行不同的操作。具体来说,有以下几个选项: 1. 文件压缩和解压缩:这是一个常规的文件压缩和解压缩代码,不需要过多解释。 2. buy操作:这个操作调用了加密函数encrypt(),并使用了RSA加密算法。题目中给出了n、e的值,以及密文的前三个字符的ASCII码值。我们需要根据这些信息来获得root权限。 3. 程序终止:由于解压操作接收到的文件名长度只有1,不能正确解压上一个步骤得到的文件,因此需要手动终止程序运行。 解题思路: 1. 选择3:通过调用加密函数encrypt(),使用给定的n、e值和密文前三个字符的ASCII码值,尝试获得root权限。 2. 选择1:对目标文件flag进行压缩,并将压缩后的文件命名为pwn。注意,压缩后的文件名不能与当前正在运行的文件名相同,以避免影响程序运行。 3. 选择3:由于解压操作接收到的文件名长度只有1,无法正确解压上一个步骤得到的pwn文件,因此需要手动终止程序运行。此时,可以利用unzip函数和zip函数的特性,通过结束程序的子函数来获取之前输入的文件名。 总结: 本题主要考察了对一个编程题目的理解和应用能力。通过对题目要求的分析,我们可以得出以下结论: 1. 选择3需要调用加密函数,并使用RSA加密算法获得root权限。 2. 选择1需要对目标文件进行压缩,并将压缩后的文件命名为pwn。 3. 选择3需要在程序运行过程中手动终止程序,以便正确解压文件。此时可以利用unzip函数和zip函数的特性来获取之前输入的文件名。

正文

  • 题目

    监听服务器端口,得到题目如下:

  • 源码解析

    • 主函数

      主函数中是题目界面的逻辑,对应于用户的选择做出相应的操作,其中需要注意的是选项2,解压操作需要获得root权限(uid==0).

    • 选项1,2:文件压缩和解压缩,是常规的文件压缩代码,不做解释。

    • 选项3:buy操作,buy()函数调用了加密函数encrypt();根据具体的实现逻辑,可知使用的是RSA加密算法。其中n=221,e=7,从传入参数和题目中的tips都能得到。如果满足密文的前三个字符的ascii码值为149,108和21,则获得root权限。

    • 题解

      整个解题思路如下。首先选择3,通过加密操作获得root权限。

      获得CDK的脚本如下(RSA解密):

      import gmpy2
      def Decrypt(c,e,p,q):
          L = (p-1)*(q-1)
          d = gmpy2.invert(e, L)
          n = p*q
          crypto = gmpy2.powmod(c, d, n)
          print(chr(crypto))
      if __name__ == "__main__":
          p = 17
          q = 13
          e = 7
          c = 149
          Decrypt(c,e,p,q)
      

      然后选择1,对目标文件flag进行压缩,压缩文件的命名为pwn,即当前正在运行的文件,压缩的同名文件不会影响此次程序的运行,因为程序运行尚未结束,其挂载到了/proc目录下。然而下次运行时,真正运行的文件将会是原来的flag而不是pwn。最后选择3,由于解压操作接收到的文件名的长度只有1,不能正确解压上一步得到的pwn文件(flag),所以需要手动终止程序的运行。此处涉及到一个知识点,即unzip函数和zip函数都是main函数的子函数,利用子函数同栈内存大小相等的特点,在手动结束程序运行时,unzip的局部变量filename正是上次在zip函数中输入的文件名,即pwn。

与zip-zip(子函数调用)相似的内容:

zip-zip(子函数调用)

题目 监听服务器端口,得到题目如下: 源码解析 主函数 主函数中是题目界面的逻辑,对应于用户的选择做出相应的操作,其中需要注意的是选项2,解压操作需要获得root权限(uid==0). 选项1,2:文件压缩和解压缩,是常规的文件压缩代码,不做解释。 选项3:buy操作,buy()函数调用了加密函数e

使用Vue3在浏览器端进行zip文件压缩

在前端开发中,我们时常需要处理文件上传和下载的功能。有时,用户可能希望将多个文件打包成一个zip文件以便于下载。今天,我将分享一个使用Vue3和JSZip库在浏览器端实现zip文件压缩的示例。 首先,我们需要安装JSZip库。如果你使用的是npm,可以通过以下命令进行安装: npm install

定义一个函数,传入一个字典和一个元组,将字典的值(key不变)和元组的值交换,返回交换后的字典和元组

知识点: zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表 li=[3,4,5] t=(7,8,9) print(list(zip(li,t))) print(dict(zip(li,t))) 运行截图: 例1: def f(a,b): p

[转帖]tar、gzip、zip、jar是什么,怎么查看?

https://www.cnblogs.com/codelogs/p/16702759.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 如果你是后端程序员,我想你一定见过*.tar.gz、*.zip、*.jar后缀的文件吧,这些都是压缩文件,那这些文

[转帖]文件操作之zip、bzip2、gzip、tar命令

文件操作之zip、bzip2、gzip、tar命令 原创 丁同学19902015-10-15 00:02:51博主文章分类:liunx基础©著作权 文章标签linux tarlinux文件压缩linux压缩文件linux命名方式linux gzip文章分类运维阅读数2808 先讲些简单的概念,因为对

ElasticSearch 实现分词全文检索 - ES、Kibana、IK分词器安装

先把zip下载下来。放到任意一台服务器(直接github上下载多数会失败)elasticsearch-plugin install http://172.16.0.183:8899/Java/elasticsearch-analysis-ik-7.9.3.zip

[转帖]Linux—解压缩命令总结(tar/zip)

https://www.jianshu.com/p/1ad5d852d13b 1 tar 1.2 tar介绍 tar命令是linux系统中对文件和目录解压缩命令。tar命令可以用于对后缀名为.tar,tar.gz等常用文件。 1.3 tar参数 系统中通过tar --help查看: Main ope

MySQL in Windows安装以及异名恢复的简单过程

下载相关 建议获取最新版本的Mysql数据库 可以获取 zip 格式的安装文件 https://dev.mysql.com/downloads/mysql/ 或者获取 msi 格式的安装文件 https://dev.mysql.com/downloads/installer/ 需要注意的事 inst

Win环境安装Protobuf 2.0 版本

转载请注明出处: 安装步骤 下载 protobuf-2.5.0.zip 与 protoc-2.5.0-win32.zip 下载链接 : https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0 将protoc-2.5.0-win3

Stream的简单学习

Stream的简单学习 前言 https://github.com/jeffhammond/STREAM unzip STREAM-master.zip cd /STREAM-master/ make 就可以编译完成 含义 STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。 随着