[AFCTF 2018]JPython

2024-06-02 04:04
文章标签 2018 jpython afctf

本文主要是介绍[AFCTF 2018]JPython,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小祥为了保护自己的代码,修改了部分Python Bytecode指令集,并把这个指令集称之为JPython, JPython只能在他私人定制的环境上才能运行,其他人无法得到这个环境。 现在,小明为了获取小祥代码中的秘密,收集到了三个文件 hash.pyc 可以直接使用Python 2.7运行的脚本 Jhash.pyc 通过hash.pyc转化而成的只能在JPython环境上运行的脚本 Jflag.pyc 藏着小祥最大的秘密,但是只能在JPython的环境运行。 谁能帮助小明得到小祥代码里的秘密呢?

给了三个附件
image.png
将hash.pyc与Jhash.pyc进行对比,得到修改后的opcode

f1 = open(r"hash.pyc", 'rb').read()
f2 = open(r"Jhash.pyc", 'rb').read()
t = {}
for i in range(len(f1)):if f1[i] != f2[i]:t[f2[i]] = f1[i]
print(t)

{148: 100, 117: 108, 69: 90, 149: 101, 39: 24, 35: 20, 38: 23}
然后用uncompyle6反汇编
image.png
加密过程:base64加密->异或7
写出对应的解密脚本

import base64enc = "^P]mc@]0emZ7VOZ2_}A}VBwpbQ?5e5>lN4UwSSM>L}A}"
enc = ''.join(chr(ord(c) ^ 7) for c in enc)
print(enc)
print(base64.b64decode(enc))

YWZjdGZ7bj]0QH]5XzFzQEpweV82b29kI3RpTTJ9KzFz
base64应该没有[
可能多替换了一个

print(ord(']') ^ 7)

得到多替换的是90,将得到字典,删去69: 90

f1 = open(r"hash.pyc", 'rb').read()
f2 = open(r"Jhash.pyc", 'rb').read()
t = {}
for i in range(len(f1)):if f1[i] != f2[i]:t[f2[i]] = f1[i]
print(t)
x = {148: 100, 117: 108, 149: 101, 39: 24, 35: 20, 38: 23}
print(x)
f3 = open(r"Jflag.pyc", 'rb').read().decode('ISO-8859-1')
t3 = f3.translate(x).encode('ISO-8859-1')
open(r"flag.pyc", 'wb').write(t3)

重新uncompyle6反汇编
image.png
得到正确的密文^P]mc@]0emE7VOE2_}A}VBwpbQ?5e5>lN4UwSSM>L}A}
重新写一个解密脚本

import base64enc = "^P]mc@]0emE7VOE2_}A}VBwpbQ?5e5>lN4UwSSM>L}A}"
enc = ''.join(chr(ord(c) ^ 7) for c in enc)
print(enc)
print(base64.b64decode(enc))

YWZjdGZ7bjB0QHB5XzFzQEpweV82b29kI3RpTTJ9KzFz
b'afctf{n0t@py_1s@Jpy_6ood#tiM2}+1s'

这篇关于[AFCTF 2018]JPython的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022984

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

vulhub GhostScript 沙箱绕过(CVE-2018-16509)

1.执行以下命令启动靶场环境并在浏览器访问 cd vulhub/ghostscript/CVE-2018-16509 #进入漏洞环境所在目录   docker-compose up -d #启动靶场   docker ps #查看容器信息 2.访问网页 3.下载包含payload的png文件 vulhub/ghostscript/CVE-2018-16509/poc.png at

Python JAVA接口UTC 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间

Python JAVA接口UTC 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间 方法1 import datetimeorigin_date_str= "2019-07-26T08:20:54Z"utc_date = datetime.datetime.strptime(origin_date_str, "%Y-%m-%dT%H:%M:%SZ")loca

2018年年终体会~

说下最近的一件事情:2018年12月08日华为云培训云原生课程,我坚持了两周,中间休假了,回来就忘记了。错过了一天的打开。这次21天的云原生课程彻底失败。反思后,不是我不想学习,也不是我没有毅力,而是人总是容器在平凡中失去自己,失去自己的目标,就像《千与千寻》中一样,慢慢的生活磨砺自己,慢慢的平淡消耗你自己,你自己都忘记了,自己是为了什么,每年都会给自己立flag,可是很难坚持下去,就

2018Java高级工程师面试总结

2018Java高级工程师面试总结 java高级 2018-10-11 15:11:42 面试的岗位是Java后台开发,面的公司不多,主要有美团点评-网易-网易有道-携程-华为-中兴-科大讯飞-烽火通信这些公司。从前到后简单记录了自己面试时候遇到的问题,以及对面试给了一点点小的建议,给明年甚至以后的师弟师妹们一些参考。欢迎各位朋友一起交流。 关注我:私信回复“架构资料”获取往期Java高级架

NLP-预训练模型-2018:Bert字典

参考资料: 我的BERT!改改字典,让BERT安全提速不掉分(已开源)

2018中国金融科技竞争力100强榜单

2018--金融科技--榜单  2018--金融科技--评价标准   参考地址:https://biz.ifeng.com/a/20180630/45044607_0.shtml

《python语言程序设计》2018版第8章第5题特定字符的出现次数 使用下面的函数头,统计一个特定的不重叠的字符串在另一个字符串中出现的次数

我感觉我答的不对,应该和题有点偏差 def count(text_input1, text_input2, ch):a = str(text_input1)b = str(text_input2)count_num_1 = 0count_num_2 = 0if ch in a and ch in b:if ch in a:count_num_1 += 1if ch in b:count_nu