文章目录

  • [羊城杯 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相关推荐

  1. [羊城杯 2020]GMC

    [羊城杯 2020]GMC 题目 from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger from sec ...

  2. [羊城杯 2020]Power

    [羊城杯 2020]Power 题目 from Crypto.Util.number import * import gmpy2 from secret import flagp = getPrime ...

  3. [羊城杯 2020]RRRRRRRSA

    [羊城杯 2020]RRRRRRRSA 题目 import hashlib import sympy from Crypto.Util.number import *flag = 'GWHT{**** ...

  4. [羊城杯 2020]login [SUCTF2019]hardcpp

    文章目录 [羊城杯 2020]login 思路:一个py编译的exe,需要解包,然后反编译成py文件 1.解包:python pyinstxtractor.py login.exe 提示:pyinst ...

  5. [羊城杯 2020]逃离东南亚

    [羊城杯 2020]逃离东南亚 考点 复现过程 参考链接 考点 1.图片高度隐写 2.silenteye 3.空格与tab隐写 4.需要编程找到隐写内容并进行解码 复现过程 解压压缩包有三个压缩包文件 ...

  6. [羊城杯2020]easyphp --- 伪协议的使用时机,---python上传.htaccess的利用 -- preg_match绕过

    目录: 一. 自己做: 二.学到的.不足: 三. 1. 利用.htaccess来设置文件自动包含 2. 绕过 \n 的过滤 3. 绕过stristr的过滤. 4. 绕过preg_match 2.思路二 ...

  7. buuctf————[羊城杯 2020]login

    1.查壳. 无壳,64位.(当时还不知到PyInstaller ) 2.直接丢到IDA反编译.发现啥也没有. (连个提示性的字符串也没有,但运行是有input something.很迷.) 看了看大佬 ...

  8. [羊城杯 2020]easyre

    用PE查壳 用ida打开找到main函数 int __cdecl main(int argc, const char **argv, const char **envp) {int v3; // ea ...

  9. [羊城杯 2020] Web

    easycon 打开就是 扫出来个index.php 然后访问 提示eval post cmd,看来是post了个cmd可以执行命令 找到bbbbbbbbb.txt文件,用base64解码得到包含fl ...

最新文章

  1. 美团社招Java开发一面,二面,三面,四面合并面经
  2. python新手入门讲解-这是大多数新手入门之后强烈推荐的python自学入门指南秘笈...
  3. 计算机网络第七章:网络安全
  4. kwvcprojparser不是内部_在盗版window xp上安装的visual studio 2010学习版编译ace6.1时出现如下问题...
  5. C++.Templates学习总结归纳1
  6. P2146 [NOI2015] 软件包管理器
  7. bzoj4448 SCOI2015 情报传递 message
  8. LG新能源上市前拟筹集至少92亿美元 全球市占率20.5%仅次于宁德时代
  9. Netty 编解码器和 Handler 调用机制
  10. 微信小程序 环形进度条_微信小程序:实时圆形进度条实现
  11. sncr脱硝技术流程图_SNCR烟气脱硝技术工艺流程示意图
  12. windows docker 设置镜像源_Windows10下搭建第一个Docker应用(Demo)
  13. java switch的应用
  14. 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
  15. linux下最全的快捷键大全
  16. 计算机硬盘图标怎么更改,硬盘图标怎么改 更改本地磁盘图标方法
  17. 聊聊程序员如何用技术变现?
  18. java版gbc模拟器怎么用,GBA/GBC模拟器VisualBoyAdvance图文使用教程
  19. 《未来简史》中的十大脑洞
  20. Java基础篇-笔记 p1-p75

热门文章

  1. python能print中文吗_win10中文版,python的print不能打印中文字符?
  2. AI:人工智能的多模态融合模型的简介、发展以及未来趋势
  3. DL之Panoptic Segmentation:Panoptic Segmentation(全景分割)的简介(论文介绍)、全景分割挑战简介、案例应用等配图集合之详细攻略
  4. Ubuntu之make:make命令行工具的简介、安装、使用方法之详细攻略
  5. 成功解决Command quot;python setup.py egg_infoquot; failed with error code 1 in C:\Users\AppData\
  6. javaweb 要学习的东西
  7. windows系统中hosts文件位置
  8. Laravel的console使用方法
  9. Java学习手记2——多线程
  10. 老徐杂谈:年后的第一个双休,你在做什么?