攻防世界Reverse简单难度bad_python题解

这篇具有很好参考价值的文章主要介绍了攻防世界Reverse简单难度bad_python题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开始分析

拿到的是一个pyc文件,反编译回py文件即可查看源码

bad_python,安全

反编译出错,百度后了解到是文件头有问题,可以自行编译一个pyc文件,按照该正常文件头修改所给文件头即可

自行编译pyc文件

 根据文件名得到编译环境为python3.6,所以执行下面的代码也应在python3.6下

#代码开头需导入py_compile
import py_compile
#随意写正确的python代码即可
def print_hi(name):
    print(f'Hi, {name}') 

if __name__ == '__main__':
    print_hi('PyCharm')

# 最后调用该函数进行编译操作,单引号中是保存路径
py_compile.compile(r'D:\py_project')

使用WinHex修改文件头

pyc文件头占文件最开始的16字节,所以只需修改第一行即可

错误头

bad_python,安全

正确头

bad_python,安全 

修改完毕后再次反编译,得到源码如下

# uncompyle6 version 3.8.0
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]
# Embedded file name: pyre.py
# Compiled at: 2022-10-15 15:36:44
# Size of source mod 2**32: 609 bytes
from ctypes import *
from Crypto.Util.number import bytes_to_long
from Crypto.Util.number import long_to_bytes

def encrypt(v, k):
    v0 = c_uint32(v[0])
    v1 = c_uint32(v[1])
    sum1 = c_uint32(0)
    delta = 195935983
    for i in range(32):
        v0.value += (v1.value << 4 ^ v1.value >> 7) + v1.value ^ sum1.value + k[(sum1.value & 3)]
        sum1.value += delta
        v1.value += (v0.value << 4 ^ v0.value >> 7) + v0.value ^ sum1.value + k[(sum1.value >> 9 & 3)]

    return (
     v0.value, v1.value)


if __name__ == '__main__':
    flag = input('please input your flag:')
    k = [255, 187, 51, 68]
    if len(flag) != 32:
        print('wrong!')
        exit(-1)
    a = []
    for i in range(0, 32, 8):
        v1 = bytes_to_long(bytes(flag[i:i + 4], 'ascii'))
        v2 = bytes_to_long(bytes(flag[i + 4:i + 8], 'ascii'))
        a += encrypt([v1, v2], k)

    enc = [
     4006073346, 2582197823, 2235293281, 558171287, 2425328816, 1715140098, 986348143, 1948615354]
    for i in range(8):
        if enc[i] != a[i]:
            print('wrong!')
            exit(-1)

    print('flag is flag{%s}' % flag)
# okay decompiling d:\pyre.cpython-36.pyc

 逆向代码

根据反编译得到的源码写出逆向代码

#include<stdio.h>
#define  u_int unsigned int
int main()
{
	u_int enc[] = { 4006073346, 2582197823, 2235293281, 558171287,
				2425328816, 1715140098, 986348143, 1948615354 };
	u_int k[] = { 255, 187, 51, 68 };
	for (int i = 0; i < 8; i += 2)
	{
		u_int delta = 195935983;
		u_int s1 = delta * 32;
		for (int j = 0; j < 32; j++)
		{
			enc[i + 1] -= (enc[i] << 4 ^ enc[i] >> 7) + enc[i] ^ s1 + k[s1 >> 9 & 3];
			s1 -= delta;
			enc[i] -= (enc[i + 1] << 4 ^ enc[i + 1] >> 7) + enc[i + 1] ^ s1 + k[s1 & 3];
		}
	}
	char flag[32] = { 0 };
	for (int i = 0; i < 8; i++)
	{
		flag[4 * i] = enc[i] >> 24;
		flag[4 * i + 1] = (enc[i] >> 16) ^ 0xFF000000;
		flag[4 * i + 2] = (enc[i] >> 8) ^ 0xFF000000;
		flag[4 * i + 3] = enc[i] ^ 0xFF000000;
	}
	for (int i = 0; i < 32; i++)
	{
		printf("%c", flag[i]);
	}
}

运行得到flag

bad_python,安全

 文章来源地址https://www.toymoban.com/news/detail-565557.html

到了这里,关于攻防世界Reverse简单难度bad_python题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 攻防世界-inget(简单的SQL注入、万能密码)

    目录 1、手工注入(万能密码原理) 2、sqlmap实现 3、常用参数 打开链接,提示输入id并尝试绕过  尝试一下万能密码,使用逻辑语句使结果返回 构造payload /?id=\\\' or \\\'\\\'=\\\' 我们这里是以get传参的方式在前端给id传了个值,后端会对我们提交的内容进行查询 比如我们提交的是 id=12

    2024年02月13日
    浏览(28)
  • BUUCTF reverse题解汇总

    本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 easyre reverse1 reverse2 内涵的软件 新年快乐 xor helloworld reverse3 不一样的flag SimpleRev Java逆向解密 [GXYCTF2019]luck_guy [BJDCTF2020]JustRE 刮开有奖 简单注册器 pyre [ACTF新生赛2020]easyre findit rsa [ACTF新生赛2020]rome

    2024年02月03日
    浏览(26)
  • HZNUCTF REVERSE TMD题解——Themida脱壳,使用unlicense工具

    这个壳的资料不是很多,百度百科解释:Themida_百度百科 (baidu.com) 项目链接: ergrelet/unlicense 直接下载release版本解压即可 由于这个程序是32位,所以需要使用32位的unlicense 用unlicense32.exe打开TMD.exe,等待几分钟后会输出unpacked_TMD.exe 注意: unlicense项目里这条注意当时坑了我,我电脑里只

    2024年02月03日
    浏览(26)
  • Python Turtle绘图[难度2星]:奥运五环(用最简单的方法实现五环套接)

    绘制五环的代码网上很多,但是大部分代码没能实现五环套接;少数实现了的,代码也较难。不适合初中生练习。 而且五环的颜色是有规定的,并不是大家常用的blue,black,red,yellow,green。 本文将用最简单的方法来实现五环套接,并用标准色来绘制出奥运五环。  【效果预

    2023年04月09日
    浏览(47)
  • 攻防世界pcap1

    题目描述:无 题目环境:https://download.csdn.net/download/m0_59188912/87016888 打开xxxxx.pacpng,协议分级。 发现主要数据在tcp中,过滤tcp流量寻找flag。 追踪流。 发现这里面的数据是python,将其另存为python,进行代码审计,将python代码进行添加与修改,运行。(python我不是太懂,这里参

    2024年02月13日
    浏览(33)
  • 攻防世界-fileinclude

    题目说flag在flag.php中,通过ctrl+uc查看源码,考虑文件上传漏洞。源码如下图所示: 源码如下: 大意是取cookies中lan的值,如果不是0,则执行cookies中名为english的php php://filter php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件

    2024年04月17日
    浏览(31)
  • 攻防世界-warmup

            只有一张图片,就查看源代码,有一个source.php。          查看source.php,白名单中还有一个hint.php。          hint.php告诉我们flag的位置ffffllllaaaagggg          但是直接跳转是没用的,构造payload。    

    2024年02月12日
    浏览(33)
  • 1、攻防世界第一天

    1、网站目录下会有一个robots.txt文件,规定爬虫可以/不可以爬取的网站。 2、URL编码细则:URL栏中字符若出现非ASCII字符,则对其进行URL编码,浏览器将该请求发给服务端;服务端会可能会先对收到的url进行解码,然后交给后端代码。 3、Post传参 将头部中第一行中的GET改成P

    2024年02月12日
    浏览(24)
  • 攻防世界——dmd-50

    名字就告诉了我们这道题是md5加密 MD5加密就是把你给的任意长字符串转换为一个128位(16字节)的字符串,常用语数字签名        虚拟机跑了一下,看得出来是第一类,需要找到key或者直接拿 很明显的一段密文,提取出来 870438d5b6e29db0898bc4f0225935c0 md5在线解密破解,md5解密加

    2024年01月23日
    浏览(29)
  • 攻防世界-baigeiRSA

    1.下载附件,得到压缩包,解压得到两个文件。    2.分析过程。 根据题目得到是RSA算法。 RSA是一种常用的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它的安全性建立在大质数分解的困难性上,可以用来实现数据的加密和数字签名。RSA算法的基本原理是

    2024年02月13日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包