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. ...
随机推荐
- python ElementTree 节点标签修改
在网上能找到很多关于xml库ElementTree的增删改查用法,这里我就不重复写那么多了. 主要记录一个,不是很容易查到的用法,比如一个标签,<name></name>,我需 ...
- Leetcode 二维数组周游 54
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ...
- 「SOL」NOI2017Day2 T1T2
就当我没做过这套题 而且 T3 也不会 Day2 A. 游戏 > Link 游戏 - LOJ 做过 2-sat 的读者应该能够一眼秒出这道题的正解 -- \(\mathcal O(2^d)\) ...
- 微信小程序注册、登录小功能都在这
微信小程序实现注册.登录页面的小功能整理,希望对大家有帮助. 1. 正则验证手机号码 var mobile = that.data.phone; var myreg = /^(((13[0-9 ...
- elasticsearch 根据主键_id更新部分字段
package com.better517na.ebookingbusiservice.helper;import com.alibaba.fastjson.JSON;import com.aliba ...
- react+antd upload实现图片宽高、视频宽高尺寸校验
图片宽高校验方法: // 上传图片尺寸限制 const checkIconWH = (file: any) => { return new Promise<void>(functio ...
- js 原生数据类型判断
之前一直使用的jquery的数据类型判断,比如:isArray()等,今天看到了一个判断数据类型的简单的原生方法,分享给大家 Object.prototype.toString 方法返回对象的类型字符 ...
- SaltStack学习笔记
SaltStack三大功能: 1. 远程执行 2. 配置管理 (状态) 3.云管理 运维三板斧:监控.执行.配置 四种运行方式: 1.Local 2. Minion/Master C/S架构 3 ...
- idea中 .gitignore文件的使用
idea中 .gitignore文件的使用 首先保证当前的所有文件都没有被git追踪 如果被追踪,建议先取消git的版本控制 输入如下指令 find . -name ".git" ...
- 补充-jdk5新增多线程实现方式
创建多线程的原始两种方式 1.继承Thread类 2.实现Runable接口 jdk5新增的两种方式 1.实现Callable接口 jdk5:新增创建线程方式:实现Callable * ...