PatriotCTF 2022 RE
PatriotCTF 2022 RE
String Cheese
ida 打开 Shift+F12 即可得到flag
PCTF{d0nt_string_m3_410ng_b3_my_v413ntin3}
PeeWhySea
发现是 .pyc 文件(也可以在线反编译)
反编译后的代码
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.9
import sys
if len(sys.argv) != 2:
print('One argument required')
sys.exit()
arg = sys.argv[1]
key = 'ABCDEFGHIJKLMNOP'
encode = ''.join((lambda .0: [ '{:02x}'.format(ord(a) ^ ord(b)) for a, b in .0 ])(zip(arg, key)))
if encode == '110117023e3273237a157f133d372c2d':
print('You have the correct flag!')
else:
print('Wrong flag')
# 1
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了: >>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)
[(1, 2, 3), (4, 5, 6)]
# 2
thedata.Format(“%02X”Format()是将数据转换成指定格式
%02X
可以理解为printf(),就是输出函数.当然还是有一定区别的。
例如print('{:02X}'.format(i))这个输出是将i以16进制输出,当i是15,输出结果是0F;
{:X}16进制标准输出形式
02是2位对齐,左补0形式。
解密 py
key='ABCDEFGHIJKLMNOP'
flag=''
chips='110117023e3273237a157f133d372c2d'
for i in range(16):
flag+=chr(int(chips[i*2:i*2+2],16)^ord(key[i]))
print(flag)
PCTF{t4k3_4_pyc}
RoboTron9000
hint
Easy My AI has gone rogue and hard coded its health, so we can't edit it down. It seems to have gotten quite arrogant and believes itself to be invincible. Could you manipulate the running program's memory to show RoboTron9000 otherwise please? Flag Format: PCTF{} Challenge Author: Necktie (Maxime Bonnaud)
hint1
Check out programs that allow you to attatch to a process and change its memory at runtime
可以发现,执行else 就可以获得flag,那么修改跳转逻辑就可以得到flag()
PCTF{8yp455_h42d_c0d3d_v41u35}
Go Obf
修改跳转语句即得到flag(怎么有两题修改,就能得到flag)<,,,,非预期,数都不用猜了>
PCTF{S1mpl3_GoL4ng_0bfusc4t10n}
crackme
分析ida 汇编,流程很简单 先将输入 base64 加密------》加密结果置换--------》比对
import base64
temp='9{$d0DJ08e,<7{zf#emx9Av@7f,A.deB}*/g%xBmw=qq'
# 置换
base=''
for j in range(len(temp)):
for i in range(23,126):
if (i+20)%94+32==ord(temp[j]):
base+=chr(i)
break
print(base)
print(base64.b64decode(base))
pctf{YoU_hav3_Cr@cked_Me!6789}
Flowing
经分析,通过爆破可得到flag
HIWORD宏在windows头文件WINDEF.H中定义
#define HIWORD(I) ( ( WORD ) ( ( ( DWORD )( I ) >> 16) & 0xFFFF ) )
str=''
with open('F:\\CTF_\\CTF练习\\PatriotCTF\\RE\\Flowing\\inbytes','r') as fp:
str+=fp.read()
print(str)
print(len(str))
flag=[]*32
v3=0
v6=0
for i in range(0xffffffff):
v6=i
for j in range(32):
flag[j]=ord(str[v6])
v3=-45887*v6*flag[j]
v6=((((v3 >>16)&0xffff ^ v3)-(v3>>16))&0xffff) % 0xFFFF
print(flag)
flag=''
# 数组越界 无法解决 python 没摸熟,好难搞
尝试pwn 库求解
from pwn import *
import re
flag = ''
# context.log_level="debug"
k=0
r=0
for n in range(0xffff):
p = process('./flowing')
_flag = str(hex(n))[2:]
print(_flag)
p.sendline(_flag)
s = p.recvall()
r = s.find("{")
k = s.find("}")
flag = s
if r>=0 and k>0:
print(s)
p.close()
print(flag)
kali下: python2 flowing >flow.txt (爆破得到flag)
PCTF{Wh3rEf0R3_Art_Th0u_0v3rFlOw} 输入 79c2
OverComplicated
.exe 文件逆向并未发现有用信息,dLL文件找到突破口
发现是c# 开发 用dnspy 逆向
py 解密脚本
def DoOp(a,b):
return a^b
def ShoOp(a,b):
return (a & ~b) | (~a & b)
def OopiDy(b2,b3):
return IppiDy(IppiDy(IppiDy(IppiDy(b2, b3), b2), IppiDy(IppiDy(b2, b3), b3)),IppiDy(IppiDy(IppiDy(b2, b3), b2), IppiDy(IppiDy(b2, b3), b3)));
def IppiDy(a,b):
return ~(a | b)
def BoOp(b2,b3):
return YippYipp(YippYipp(YippYipp(b2, b3), b2),YippYipp(YippYipp(b2, b3), b3))
def YippYipp(a,b):
return ~(a & b)
text2='qbugzr1ldU0ld%^XnT^f1Uu@^eN^hU^mnOF^i5Oe|'
text1=''
for j in range(len(text2)):
for i in range(23,122):
if DoOp(ShoOp(OopiDy(BoOp(i, ord('P')), ord('C')), ord('T')), ord('F')) == ord(text2[j]):
text1+=chr(i)
break
print(text1)
pctfs0meT1me$_YoU_g0TtA_dO_iT_loNG_h4Nd
总结与感想
这次PatriotCTF 2022 RE方向的赛题,对于我这样的新人而言,给予了我很大的鼓舞。犹记得我从大一上学期开始就开始接触CTF比赛了。但苦恼且打击人的是,每次比赛都止步于签到题,甚至于最艰辛的时候签到题也不会。当然那个时候,我的还在misc和web的入门阶段徘徊。或与有人可能会疑惑了,兄dei,这是Re,弄啥嘞!哈,是的,我转方向了。借着本学期开设的逆向课程的东风,我再次开始了恼人的CTF比赛。当然方向变成了逆向。
在此,也为我的第一篇博客加油喝彩。题虽然简单,也没有写的面面俱到,但这无疑是一个巨大里程碑事件。
最后,祝还在准备入门CTF,并苦苦徘徊中的小伙伴,加油!!!
PatriotCTF 2022 RE的更多相关文章
- CJOJ 2022 【一本通】简单的背包问题(搜索)
CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...
- HDU 2022 海选女主角
http://acm.hdu.edu.cn/showproblem.php?pid=2022 Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业 ...
- ural 2022 Riding a Toad
2022. Riding a Toad Time limit: 1.0 secondMemory limit: 64 MB A tribe of leafmen live in the old for ...
- [LOJ 2022]「AHOI / HNOI2017」队长快跑
[LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...
- [翻译]正式宣布 Visual Studio 2022
原文: [Visual Studio 2022] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意见,或 ...
- 它来了!!!有史以来第一个64位Visual Studio(2022)预览版将在今夏发布!
美国时间2021年4月19日,微软产品研发部一位负责人Amanda Silver在其博客上发布一则<Visual Studio 2022>的消息,表示将在今年(2021年)夏天发布Visu ...
- .NET6系列:微软正式宣布Visual Studio 2022
系列目录 [已更新最新开发文章,点击查看详细] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意 ...
- .NET6系列:Visual Studio 2022 线路图
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇博客<Visual Studio 2022>中介绍了VS2022的性能改进与重要功能.本文主要介绍在 Visual Stud ...
- 微软发布了Visual Studio 2022 Preview 1 以及.NET 6 Preview 5
Microsoft 今天宣布了Visual Studio 2022 的第一个预览版,并且同时也发布了.NET 6 Preview 5. https://devblogs.microsoft.com/v ...
- Visual Studio 2022 Preview 1 和.NET 6 Preview 5 正式发布
具有里程碑意义的Visual Studio 2022 Preview 1正式发布,重点是64位,而没有增加新功能,并且同时也发布了.NET 6 Preview 5. https://devblogs. ...
随机推荐
- ssh反向通信
##先决条件为:一个有公网IP的VPS(虚拟主机),我使用的是国内的腾讯云,您也可以选择阿里云,亚马逊等各种厂商产品.这台机器的操作系统为 centos 7.0 ,IP 为 A.A.A.A #双内网主 ...
- Centos7编译Nginx1.19.0笔记
下载Nginx安装包 官网下载页:http://nginx.org/en/download.html 终端输入: # 安装依赖yum -y install wget gcc gcc-c++ autoc ...
- jQuery测试用例-W3school
$("div").scrollLeft(100); // 设置滚动条的位置 $(document).ready(function(){ $("button"). ...
- appium程序下载安装/appium desktop
官网地址:http://appium.io/ 点击下载按钮 默认跳转到最新版本,点击 Releases 回到版本列表页 该页可以看到对应的版本及更新时间,(最好不要下载最新版本) 如果是 Window ...
- iOS源码调试Podspec如何写
{ "name": "XXX", "version": "1.0.0", "summary": &q ...
- jquery.min.js:2 Uncaught SyntaxError: Unexpected identifier
错误描述:样式没加载出错,还没发起action请求,action有断点,后端无报错. 错误原因:找了好久,知道是url请求路径错误,搞了几次不对.重新对比url发现是路径拼接错误.注意单引号和双引号. ...
- JS实现中英文混合文字友好截取功能
众所周知,一个汉字等于两个英文字母的长度.那么,从汉字或者英文字母中截取相同长度文字则显示的长度则不一样.此时用户体验会不好.那么怎么解决呢?往下看 <script> /** * JS实现 ...
- 解决 vue init webpack 报错问题 报错原因是因为不能执行脚本文件。
解决方案: 运行下面一行代码: set-ExecutionPolicy RemoteSigned
- springboot 项目启动后访问不论什么请求的是spring的注册页面Please sign in Username || springboot禁用security
解决方法: 1.在启动类上添加注解@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class}) 2.或者:@SpringB ...
- Linux_GItlab
Gitlab实战 Gitlab安装 Gitlab简单使用 配置Jenkins 向 Gitlab 拉取代码 配置gitlab 触发器 Gitlab安装 环境需求: 一台干净的新机器(防止端口冲突) 配置 ...