首页 > 其他分享 >【UNCTF逆向】pytrade详解

【UNCTF逆向】pytrade详解

时间:2023-04-02 20:13:00浏览次数:43  
标签:逆向 num flag len UNCTF pytrade 详解 ord

前段时间有点别的东西在忙,最近会加大力度。

题目pytrade

解法

这道题的内容是一些opcode也就是python编译的字节码。
网上搜的一些教程是叫手扒,就简单学习了一下。
变量const fast(有形参和局部变量之分)global(全局)
数据结构list dictionary slice
循环while for in if
函数 函数范围(从0开始到returnvalue收尾) 函数调用

然后进行一下手动的还原python代码 主要是中间的循环过程比较关键

这里两个callfunction就代表着range(len(flag)),getiter到foriter就是从i开始循环
循环的具体内容就是

这里有一条,调用了ord函数,内容就是ord(flag【i】)后面又有加一的操作
所以是ord(flag【i】)+i,但还没结束,后面又有k%3后加一 进行一个异或。
所以这一句就是num[i]=(ord(flag[i]) + i) ^ (k % 3 + 1)
下一条更复杂一些

开始还是ord操作,但内容不想上一条那么简单。先把len(flag)绑在了一起,并与i进行一个相减,再与1进行一个相减。至此把len(flag)-i-1放在一块放进flag【】框框里面,flag【】放在ord里面,还没有结束。
后面又调用len(flag)与之相加并减去i减去1,后面同样是k%3加一,进行异或。
存在哪里呢?
先调num,len(flag)减i减一,存到这个里面
所以大概可以得出(别人复现的)

出来的是这个[115, 120, 96, 84, 116, 103, 105, 56, 102, 59, 127, 105, 115, 128, 95, 124, 139, 49]
然后做个逆向脚本
就是主要对上面两行代码逆向。
原本的flag【i】=(num[i] ^ (k % 3 + 1)) - i
flag【17-i】=num【17-i】^(k%3+1)+i-17
也就是

运行一下得到
py_Trad3_1s_fuNny!
填入正确。

标签:逆向,num,flag,len,UNCTF,pytrade,详解,ord
From: https://www.cnblogs.com/Corax0o0/p/17281150.html

相关文章

  • 【入门】Go语言指针详解
    目录一、指针介绍1.1什么是指针?1.2指针有什么用?二、指针的定义三、指针操作注意事项3.1空指针3.2操作没有合法指向的内存3.3new()函数使用一、指针介绍1.1什么是指针?指针是一种存储变量内存地址的变量。Go语言中的指针与C/C++中的指针类似,但是Go语言中的指针不能......
  • 【入门】Go语言结构体(struct)详解
    目录一、结构体介绍1.1什么是结构体?二、结构体定义与初始化2.1结构体定义2.2结构体初始化三、拓展3.1结构体与数组3.2结构体与切片3.3结构体与map3.4结构体作为函数参数一、结构体介绍1.1什么是结构体?结构体是一种自定义的数据类型,用于表示一组相关的数据字段。结构......
  • FTP状态码详解
    目录详细分解1xx–肯定的初步答复110120125150原因2xx–肯定的完成答复202211212213214215220221225226原因227230原因2502573xx–肯定的中间答复331原因3323504xx–瞬态否定的完成答复421425426原因4504514525xx–永久性否定的完成答复500501502503504530原因532550原......
  • Python异常 ValueError的问题详解
    导读这篇文章主要介绍了Python异常ValueError的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教Python异常ValueErrorValueError:invalidliteralforint()withbase10:'*'试图将一个与数字无关的类型转化为整数,会抛出该异常。......
  • 【v4l2】Linux多媒体框架 - v4l2 core详解
    简介V4L2是Videoforlinux2的简称,是Linux中关于视频设备的内核驱动框架。常用结构体:定义在include/linux/videodev2.hstructv4l2_requestbuffers//申请帧缓冲,对应命令VIDIOC_REQBUFSstructv4l2_capability//视频设备的功能,对应命令VIDIOC_QUERYCAPstr......
  • 字符串(提高组)详解
    字符串(提高组)详解前提提要:本文为提高组字符串,不涉及到后缀科技等相关算法,请放心食用Part1.字符串Hash题目概要如题,给定\(N\)个字符串(第\(i\)个字符串长度为\(M_i\),字符串内包含数字、大小写字母,大小写敏感),请求出\(N\)个字符串中共有多少个不同的字符串。输入格式......
  • 【入门】Go语言排序算法详解
    1、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并在必要时交换它们的位置,直到没有任何一对元素需要交换为止。该算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。packagemainimport"fmt"//我们定义了一个名为`bu......
  • Java protected 关键字详解
    很多介绍Java语言的书籍(包括《Java编程思想》)都对protected介绍的比较的简单,基本都是一句话,就是: 被protected修饰的成员对于本包和其子类可见。这种说法有点太过含糊,常常会对大家造成误解。实际上,protected的可见性在于两点:基类的protected成员是包内可见的,并且对子类......
  • stat函数详解
    stat函数详解作用:获取文件信息头文件:#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>函数原型:**intstat(constcharpath,structstatbuf)返回值:成功返回0,失败返回-1;参数:文件路径(名),structstat类型的结构体structstat结构体详解:structstat{......
  • 3·1HTTP协议特点、3·2详解URL与URI的区别与联系、3·3HTTP报文结构分析、3·4HTTP请
     HTTP协议特点支持客户/服务器模式客户/服务器模式工作的方式是由客户端向服务器发出请求,服务器端响应请求,并进行相应服务简单快速 客户端向服务器请求服务时,只需传输请求方法和路径 请求方法常用的有GET、HEAD、POST。每种方法规......