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程序让MySQL利用binlog恢复误操作数据
MySQL利用binlog恢复误操作数据 在人工手动进行一些数据库写操作的时候(比方说数据订正),尤其是一些不可控的批量更新或删除,通常都建议备份后操作.不过不怕万一,就怕一万,有备无患总是好的.在线 ...
- 移动端唤起QQ聊天
var u = navigator.userAgent; var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); if(isiOS){ if(u ...
- locust socektio协议压测
# -*-coding:UTF-8 -*- from locust import HttpLocust, TaskSet, task, TaskSequence, Locust, events imp ...
- ant design vue的tooltip的宽度修改不生效
// 注意,vue 项目,style 标签不能加 scoped 选项,否则样式不生效 <a-tooltip placement="top" :overlayClassName ...
- [OC] 统计代码行数
1.打开终端 2. cd 路径,或者 输入cd ,然后把要统计代码的工程拖入终端,就会出现工程的路径. 然后按下回车. 3.输入: find . -name "*.m" -or - ...
- 博弈论[leetocde913]
class Solution { static final int MOUSE_WIN = 1; static final int CAT_WIN = 2; static final int DRAW ...
- vue项目中axios跨域设置
最近项目中遇到一个问题,测试环境和线上环境需要调同一个接口(接口地址是线上的),本地开发的时候遇到了跨域的问题,刚开始用了fetch解决的,代码如下 方法一 step1:安装包node-fetch,然 ...
- FastReport报表金额数字转大写问题
在使用FastReport报表打印的时候涉及到财务结算金额时,会用到大写,系统保存的都为数字,将数字转换为大写没有默认的系统内置函数,经过查阅资料,可通过对FastReport的页面设计代码修改实现: ...
- windows ftp 简单搭建, wget ftp
事情起因: 公司客户一台数据库服务器突然连不上了,一开始以为是密码过期了,联系学校的老师给改了密码之后,还是连不上,然后就怀疑是不是ssh服务有问题.然后发现这台服务器上没有安装包,yum 命令也不好 ...
- 【逆向】使用IDA Python脚本自动化解密字符串数据
前言 一个肚脑虫(Donot)APT组织的下载器样本,样本中的一些关键字符串数据需要使用指定函数进行动态解密.所以正好借此机会记录下怎么使用IDA Python脚本来解密字符串数据.使用IDA Pyt ...