将cgctf re部分移到这
Re
1,hello re
没什么可说的,拖进ida,发现几个大数字,用热键r一下,将数字变为字符串,由于是小端,将字符串倒过来就是flag 了
2,readasm2
int main(int argc, char const *argv[])
{
char input[] = {0x0, 0x67, 0x6e, 0x62, 0x63, 0x7e, 0x74, 0x62, 0x69, 0x6d,
0x55, 0x6a, 0x7f, 0x60, 0x51, 0x66, 0x63, 0x4e, 0x66, 0x7b,
0x71, 0x4a, 0x74, 0x76, 0x6b, 0x70, 0x79, 0x66 , 0x1c};
func(input, 28);
printf("%s\n",input+1);
return 0;
}
题目给了一个asm文件,里面是对func函数的描述,翻译成c语言就是

void func(char input[],int num)
{
int i=;
while(i<=num)
{
input[i]^=i;
i++;
}
}

就可以算出flag
3,wxyvm1
还是先拖入ida,可以看出函数不难理解,将我们的输入经过sub_4005B6与byte_6010c0转换后与 dword_601060比较后,正确即为flag

c="C4 34 22 B1 d3 11 97 07 DB 37 C4 06 1D FC 5B ED 98 DF 94 D8 B3 84 CC 08"
with open('wxyvm') as wxy:
b=wxy.read()
d=[]
e=[]
for i in c.split():
d.append(int(i,base=16)) for i in b.split():
e.append(int(i,base=16)) for i in range(5000):
v0=e[3*(4999-i)]
v1=e[3*(4999-i)+1]
v3=e[3*(4999-i)+2]
if v0==1:
d[v1]-=v3
elif v0==2:
d[v1]+=v3
elif v0==3:
d[v1]^=v3
elif v0==4:
d[v1]/=v3
elif v0==5:
d[v1]^=d[v3]
else :
continue
print(''.join([str(chr(int(i)%128))for i in d]))

这里的wxyvm文件是byte_6010c0的数据
运算得到flag

4,py交易
题目给了一个.pyc文件,我用了uncompyle6逆向

import base64

def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32
x = x + 16
s += chr(x) return base64.b64encode(s) correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'

逻辑很好懂,将函数改一下

import base64
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
f=base64.b64decode(correct)
print(f) def encode(f):
s = ''
for i in f:
x = ord(i) - 16
x = x ^ 32
s += chr(x)
print(s)
encode(f)

运行得到flag

5,maze
有题目可以猜到是一道迷宫题,拖进ida

的确是迷宫题,用O o . 0作为上下左右。找到题目迷宫部分


由这推断到35既#处为终点,将迷宫以每行8个分隔开

  ******
* * *
*** * **
** * **
* *# *
** *** *
** *
********

走一遍得到flag

6,你大概需要一个优秀的mac
题目给了一个OS X的程序(虽然我用的是Mac,但这题不用Mac也可以做)
还是拖进ida



程序将输入xor六次后与unk_100000ED0对比
写脚本

with open('mac') as mac:
v2=mac.read()
INPUT=[] for i in v2.split():
INPUT.append(int(i,base=16))
print(INPUT) for i in range(0,10):
INPUT[i]^=173
for i in range(10,20):
INPUT[i]^=190
for i in range(20,30):
INPUT[i]^=239
for i in range(30,40):
INPUT[i]^=171
for i in range(40,len(INPUT)):
INPUT[i]^=239
for i in range(0,len(INPUT)):
INPUT[i]^=222
print(INPUT)
print(''.join(chr(i)for i in INPUT))

运行得flag
7,single
要求输入一串字符,经过三个函数的考验,




可以看出这是一个神奇的数独,将unk_602080取81个数,排成9*9的格式

 00 03 00 06 00 00 00 00 00
06 00 00 00 03 02 04 09 00
00 09 00 01 00 07 00 06 00
07 04 06 00 00 00 00 00 00
00 01 08 00 00 00 06 03 00
00 00 00 00 00 00 01 04 07
00 08 00 09 00 04 00 07 00
00 07 04 02 01 00 00 00 06
00 00 00 00 00 03 00 01 00

每行每列每九宫格为1-9不同的数,解数独后将最初unk_602080中不为零的数转化为零作为输入,得flag:flag{401095728057800001802040305000321589500479002923586000105060203300008950269750804}

8,480小时精通c++
用ida查看main

上面v5后就是加密的flag,在看汇编

在The Encrypted Flag is前有一段nop,大概是加密的函数,在函数表中找,

有个StringEncryptFunction函数
用gdb

经过之前对_X1C_CG…函数的分析,rdi为处理的数据地址,rsi为数据的字符数
set $rdi=$rax
set $rsi=36
将程序跳转到StringEncryptFunction
set $rip=0x4224f6
c

得到flag

CG-CTF re部分wp的更多相关文章

  1. 【WP】【web】中学生CTF | web部分wp

    $_GET 源码: <?php show_source(__FILE__); include 'config.php'; if(!isset($_GET['args'])){ die(); } ...

  2. 安恒西湖论剑线下上午CTF部分题目WP

    简单的做了两个题,一道逆向,一道misc,其他题目,因为博主上课,时间不太够,复现时间也只有一天,后面的会慢慢补上 先说RE1,一道很简单的win32逆向,跟踪主函数,R或者TAB按几下, 根据esp ...

  3. IDEA+maven+javafx(java 1.8)入坑记录

    序 好久没写博客了,主要是因为懒,写博客真的是个难坚持的事.但今天登上来看了看,之前记录ctf写的wp竟然点击量这么多了,突然让我有了继续写下去的动力. 这段时间遇到了好多事,中间也有想过写几篇文章记 ...

  4. 记一次CTF出题WP

    笔者有幸参与一次CTF入门级的出题,在此记录一下WP 1.测试你得手速 1.用IDA打开程序 找到单击次数, 获取全局变量地址. 打开程序 打开OllyDbg attcach后在左下角按CTRL+N ...

  5. 各种CTF的WP

    http://l-team.org/archives/43.html PlaidCTF-2014-twenty/mtpox/doge_stege-Writeup http://l-team.org/a ...

  6. 成都大学CTF 网络攻防演练平台 WP

    web1 输入框那里鼠标右键,审查元素,删除maxlength web2 http://ctf.cdusec.org:8082/web2/?cdusec=tql web3 同上,用火狐hackbar或 ...

  7. 深信服杯ctf部分wp

    CRYPTO1,NO SOS题目给了一段由.和-构成的密码由于题目提示不是摩斯码,将.和-化为0和1,长度为65位无法与8或7整除,无法转换为ascii,但可以被5整除,猜测为培根密码,将0化为a,1 ...

  8. 2019看雪CTF 晋级赛Q2第四题wp

    上次参加2019看雪CTF 晋级赛Q2卡在了这道题上,虽然逆出算法,但是方程不会解,哈哈哈哈,果然数学知识很重要呀,现在记录一下. 首先根据关键信息,根据错误提示字符串定位到这里: 1 int __t ...

  9. N1BOOK——[第五章 CTF之RE章]wp

    推荐在了解了相应章节的内容后再来练习,你会觉得顿时悟了 记录一下自己的解题过程 2,3,4题目附件来源:https://book.nu1l.com/tasks/#/pages/reverse/5.4 ...

  10. swpu新生赛ctf wp

    WEB:gift_F12 没啥好说的 直接F12得了 NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} RE 简简单单的解密 import base64, url ...

随机推荐

  1. 【转】modulenotfounderror: no module named 'matplotlib._path'问题的解决

    今天在装matplotlib包的时候遇到这样的问题,在网上找了很长时间没有类似很好的解决方法,最后自己 研究找到了解决的方法. 之前在pycharm里面已经装了matplotlib包,之后觉着下载包挺 ...

  2. jgGrid常用操作--持续更新

    最近有使用到jqGrid框架,有个需求是单击某个字段,比如name,然后把id带过去执行一个function,网上有说用线获取选中行,然后再得到id的方法,此方法经实验,必须要先选中才行,在用户没有进 ...

  3. Ubuntu下安装chrome浏览器步骤

    进入 Ubuntu 18.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 也可以按下 Win 键(或叫 Super 键),在 Dash 的搜索框中输入 terminal 或“终 ...

  4. PostgreSQL的学习-序列

    序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表.一个序列对象通常用于为行或者表生成唯一的标识符.下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安 ...

  5. win32程序使用CString

    https://www.cnblogs.com/qingtian224/p/5833456.html uafxcwd.lib(afxmem.obj) : error LNK2005: "vo ...

  6. 使用aop和BindingResult进行参数验证

    1.在需要校验的参数名上面添加注解 2.在web层接收参数(参数前面使用@Valid进行标记,后面必须紧跟参数bindingResult,存储参数的错误信息) 3.使用aop进行校验信息统一处理 @C ...

  7. 一次goldengate故障引发的操作系统hang起,HA自动切换

    现场: 跑着数据库的主机A报警应用连接不上数据库,我们无法ssh到主机.第一反应是通过telnet到远程控制口,发现数据库资源和硬件资源在被切换到HA架构的主机B(备机,通常性能比主机A的差,抗不住应 ...

  8. 巨好看的xshell配色

    推荐字体Lucida console [FlatUI] text=e5e5e5 cyan(bold)=16a085 text(bold)=ecf0f1 magenta=9b59b6 green=2ec ...

  9. Es学习第三课, ElasticSearch基本的增删改查

    前面两课我们了解了ES的基本概念并且学会了安装ES,这节课我们就来讲讲ES基本的增删改查:ES主要对外界提供的是REST风格的API,我们通过客户端操作ES本质上就是API的调用.在第一课我们就讲了索 ...

  10. HttpClient类详解

    文章链接:https://blog.csdn.net/justry_deng/article/details/81042379 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了 ...