[羊城杯 2020]Bytecode [UTCTF2020]babymips
文章目录
- [羊城杯 2020]Bytecode
- 查看题目
- python代码
- 注意点:
- BINARY_SUBTRACT 这个是减法
- BINARY_SUBSCR 这个是索引
- Z3约束脚本
- 注意点:
- 注意最后五个顺序
- 总结:
- [UTCTF2020]babymips
- jeb:
- ida:
- 总结:
- jeb中注意`4199924`形式的数据可能是地址
- (v2 ^ 78) > 0
[羊城杯 2020]Bytecode
查看题目
python字节码,需要把它转为python代码,如下:
python代码
import disdef main():en=[3,37,72,9,6,132]output=[101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]print("welcome to GWHT2020")flag=raw_input("please input your flag:")str=flaga=len(str)if a>=38:print('lenth wrong!')exit(0)if((((ord(str[0])*2020+ord(str[1]))*2020+ord(str[2]))*2020+ord(str[3]))*2020+ord(str[4]))*2020==1182843538814603:print('good!continue\xe2\x80\xa6\xe2\x80\xa6')x=[]k=5for i in range(13):b=ord(str[k])c=ord(str[k+1])a11=c^(en[i%6])a22=b^(en[i%6])x.append(a11)x.append(a22)k+=2if x==output:print("good!continue\xe2\x80\xa6\xe2\x80\xa6")l=len(str)a1=ord(str[l-7])a2=ord(str[l-6])a3=ord(str[l-5])a4=ord(str[l-4])a5=ord(str[l-3])a6=ord(str[l-2])if a1*3+a2*2+a3*5==1003:if a1*4+a2*7+a3*9==2013:if a1+a2*8+a3*2==1109:if a4*3+a5*2+a6*5==671:if a4*4+a5*7+a6*9==1252:if a4+a5*8+a6*2==644:print('congraduation!you get the right flag!')
字节码解释文章:
https://forgo7ten.github.io/2020/01/28/2020012801/#%E8%B7%B3%E8%BD%AC
https://docs.python.org/zh-cn/3/library/dis.html#python-bytecode-instructions
看了python代码后,紧接着需要用z3约束来进行解答,更加简便
注意点:
BINARY_SUBTRACT 这个是减法
BINARY_SUBSCR 这个是索引
Z3约束脚本
from z3 import *
def main():s=Solver()flag=[]for i in range(5):flag.append(Int("flag%i"%i))s.add(((((flag[0] * 2020 + flag[1]) * 2020 + flag[2]) * 2020 + flag[3]) * 2020 +flag[4]) == 1182843538814603)for i in range(5):s.add(flag[i]>30)s.add(flag[i]<128)if s.check()==sat:print(s.model())en=[3,37,72,9,6,132]output=[101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]ss=Solver()flag2=[]j=0for i in range(13):flag2.append(output[j+1]^en[i%6])flag2.append(output[j]^en[i%6])j+=2print(flag2)sss=Solver()flag3=[]for i in range(6):flag3.append(Int("flag3%i"%i))sss.add((flag3[0]*3+flag3[1]*2+flag3[2]*5)==1003)sss.add((flag3[0]*4+flag3[1]*7+flag3[2]*9)==2013)sss.add((flag3[0]*1+flag3[1]*8+flag3[2]*2)==1109)sss.add((flag3[3]*3+flag3[4]*2+flag3[5]*5)==671)sss.add((flag3[3]*4+flag3[4]*7+flag3[5]*9)==1252)sss.add((flag3[3]*1+flag3[4]*8+flag3[5]*2)==644)for i in range(5):sss.add(flag3[i]>30)sss.add(flag3[i]<128)if sss.check()==sat:print(sss.model())if __name__=="__main__":main()
注意点:
for i in range(13):flag2.append(output[j+1]^en[i%6])flag2.append(output[j]^en[i%6])
这里不能当成range(26)来算,因为en下标同一组是一样的
a=[71,87,72,84,123,99,102,97,50,98,56,55,98,51,102,55,52,54,97,56,102,48,97,99,53,99,53,57,54,51,102,97,101,102,102,55,51]
注意最后五个顺序
GWHT{cfa2b87b3f746a8f0ac5c5963faeff73
加上最后一半}
GWHT{cfa2b87b3f746a8f0ac5c5963faeff73}
总结:
此次题目不难,flag分成三部分来看待即可,最主要就是了解python字节码,懂得如何把Python字节码转换成python伪代码,紧接着再来进行下一步的分析
[UTCTF2020]babymips
jeb:
4199924
这玩意是个地址,是我万万没想到的。。。
按下键盘d
后,就转换回地址了,然后即可进行分析
jeb跟ida比起来是真的一言难尽。。。
内部函数,简直一团乱麻。
ida:
ida这玩意分析得多棒,清秀简洁
unsigned char ida_chars[] =
{0x62, 0x6C, 0x7F, 0x76, 0x7A, 0x7B, 0x66, 0x73, 0x76, 0x50, 0x52, 0x7D, 0x40, 0x54, 0x55, 0x79, 0x40, 0x49, 0x47, 0x4D, 0x74, 0x19, 0x7B, 0x6A, 0x42, 0x0A, 0x4F, 0x52, 0x7D, 0x69, 0x4F, 0x53, 0x0C, 0x64, 0x10, 0x0F, 0x1E, 0x4A, 0x67, 0x03, 0x7C, 0x67, 0x02, 0x6A, 0x31, 0x67, 0x61, 0x37, 0x7A, 0x62, 0x2C, 0x2C, 0x0F, 0x6E, 0x17, 0x00, 0x16, 0x0F, 0x16, 0x0A, 0x6D, 0x62, 0x73, 0x25, 0x39, 0x76, 0x2E, 0x1C, 0x63, 0x78, 0x2B, 0x74, 0x32, 0x16, 0x20, 0x22, 0x44, 0x19
};
a=[0x62, 0x6C, 0x7F, 0x76, 0x7A, 0x7B, 0x66, 0x73, 0x76, 0x50, 0x52, 0x7D, 0x40, 0x54, 0x55, 0x79, 0x40, 0x49, 0x47, 0x4D, 0x74, 0x19, 0x7B, 0x6A, 0x42, 0x0A, 0x4F, 0x52, 0x7D, 0x69, 0x4F, 0x53, 0x0C, 0x64, 0x10, 0x0F, 0x1E, 0x4A, 0x67, 0x03, 0x7C, 0x67, 0x02, 0x6A, 0x31, 0x67, 0x61, 0x37, 0x7A, 0x62, 0x2C, 0x2C, 0x0F, 0x6E, 0x17, 0x00, 0x16, 0x0F, 0x16, 0x0A, 0x6D, 0x62, 0x73, 0x25, 0x39, 0x76, 0x2E, 0x1C, 0x63, 0x78, 0x2B, 0x74, 0x32, 0x16, 0x20, 0x22, 0x44, 0x19
]
flag=""
for i in range(len(a)):flag+=chr(a[i]^(i+23))
print(flag)
utflag{mips_cpp_gang_5VDm:~`N]ze;\)5%vZ=C'C(r#$q=*efD"ZNY_GX>6&sn.wF8$v*mvA@'}
总结:
jeb中注意4199924
形式的数据可能是地址
(v2 ^ 78) > 0
这个v2是长度,长度异或78,结果大于0就报错,说明它的长度就等于78(因为相同异或为0,不同异或为1)。。
这点jeb挺好玩的
[羊城杯 2020]Bytecode [UTCTF2020]babymips相关推荐
- [羊城杯 2020]GMC
[羊城杯 2020]GMC 题目 from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger from sec ...
- [羊城杯 2020]Power
[羊城杯 2020]Power 题目 from Crypto.Util.number import * import gmpy2 from secret import flagp = getPrime ...
- [羊城杯 2020]RRRRRRRSA
[羊城杯 2020]RRRRRRRSA 题目 import hashlib import sympy from Crypto.Util.number import *flag = 'GWHT{**** ...
- [羊城杯 2020]login [SUCTF2019]hardcpp
文章目录 [羊城杯 2020]login 思路:一个py编译的exe,需要解包,然后反编译成py文件 1.解包:python pyinstxtractor.py login.exe 提示:pyinst ...
- [羊城杯 2020]逃离东南亚
[羊城杯 2020]逃离东南亚 考点 复现过程 参考链接 考点 1.图片高度隐写 2.silenteye 3.空格与tab隐写 4.需要编程找到隐写内容并进行解码 复现过程 解压压缩包有三个压缩包文件 ...
- [羊城杯2020]easyphp --- 伪协议的使用时机,---python上传.htaccess的利用 -- preg_match绕过
目录: 一. 自己做: 二.学到的.不足: 三. 1. 利用.htaccess来设置文件自动包含 2. 绕过 \n 的过滤 3. 绕过stristr的过滤. 4. 绕过preg_match 2.思路二 ...
- buuctf————[羊城杯 2020]login
1.查壳. 无壳,64位.(当时还不知到PyInstaller ) 2.直接丢到IDA反编译.发现啥也没有. (连个提示性的字符串也没有,但运行是有input something.很迷.) 看了看大佬 ...
- [羊城杯 2020]easyre
用PE查壳 用ida打开找到main函数 int __cdecl main(int argc, const char **argv, const char **envp) {int v3; // ea ...
- [羊城杯 2020] Web
easycon 打开就是 扫出来个index.php 然后访问 提示eval post cmd,看来是post了个cmd可以执行命令 找到bbbbbbbbb.txt文件,用base64解码得到包含fl ...
最新文章
- 美团社招Java开发一面,二面,三面,四面合并面经
- python新手入门讲解-这是大多数新手入门之后强烈推荐的python自学入门指南秘笈...
- 计算机网络第七章:网络安全
- kwvcprojparser不是内部_在盗版window xp上安装的visual studio 2010学习版编译ace6.1时出现如下问题...
- C++.Templates学习总结归纳1
- P2146 [NOI2015] 软件包管理器
- bzoj4448 SCOI2015 情报传递 message
- LG新能源上市前拟筹集至少92亿美元 全球市占率20.5%仅次于宁德时代
- Netty 编解码器和 Handler 调用机制
- 微信小程序 环形进度条_微信小程序:实时圆形进度条实现
- sncr脱硝技术流程图_SNCR烟气脱硝技术工艺流程示意图
- windows docker 设置镜像源_Windows10下搭建第一个Docker应用(Demo)
- java switch的应用
- 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
- linux下最全的快捷键大全
- 计算机硬盘图标怎么更改,硬盘图标怎么改 更改本地磁盘图标方法
- 聊聊程序员如何用技术变现?
- java版gbc模拟器怎么用,GBA/GBC模拟器VisualBoyAdvance图文使用教程
- 《未来简史》中的十大脑洞
- Java基础篇-笔记 p1-p75
热门文章
- python能print中文吗_win10中文版,python的print不能打印中文字符?
- AI:人工智能的多模态融合模型的简介、发展以及未来趋势
- DL之Panoptic Segmentation:Panoptic Segmentation(全景分割)的简介(论文介绍)、全景分割挑战简介、案例应用等配图集合之详细攻略
- Ubuntu之make:make命令行工具的简介、安装、使用方法之详细攻略
- 成功解决Command quot;python setup.py egg_infoquot; failed with error code 1 in C:\Users\AppData\
- javaweb 要学习的东西
- windows系统中hosts文件位置
- Laravel的console使用方法
- Java学习手记2——多线程
- 老徐杂谈:年后的第一个双休,你在做什么?