博客
关于我
XCTF reverse新手练习区_1-10
阅读量:327 次
发布时间:2019-03-04

本文共 2627 字,大约阅读时间需要 8 分钟。

1 re1

IDA打开,F5进行反汇编成C伪代码,审计代码,发现v5变量的赋值,双击后跳转到汇编,转成字符串爆出flag。

IDA简单使用

shift + f12 字符串窗口
f5 反汇编

————————————

2 game

shift+f12搜索flag字符串,反汇编,找到flag生成过程。

s1 = [123, 32, 18, 98, 119, 108, 65, 41, 124, 80, 125, 38, 124, 111, 74, 49, 83, 108, 94, 108, 84, 6, 96, 83, 44, 121,104, 110, 32, 95, 117, 101, 99,123,127,119,96,48,107,71,92,29,81,107,90,85,64,12,43,76,86,13,114,1,117,126,0]s2 = [18, 64, 98, 5, 2, 4, 6, 3, 6, 48, 49, 65, 32, 12, 48, 65, 31, 78, 62, 32, 49, 32, 1, 57,96, 3, 21, 9, 4, 62, 3, 5, 4, 1, 2, 3, 44, 65, 78, 32, 16, 97, 54, 16, 44, 52, 32,64, 89, 45, 32, 65, 15, 34, 18, 16, 0]flag = ""for i in range(56):	t = s1[i] ^ s2[i] ^ 0x13	flag += chr(t)print(flag)

————————————

3 Hello, CTF

搜索wrong字符串,转到反汇编代码,把那一串16进制字符串转成字符就可以了。

————————————

4 open-source

atoi (表示 ascii to integer)把字符串转换成整型数

itoa()将整数value 转换成字符串存入string 指向的内存空间

根据if判断计算出每个变量的值就可以了。

————————————

5 simple-unpack

用exeinfope查壳,有upx壳, 用upx命令 upx -d 文件名去壳后再用IDA打开,main函数里面有flag。

————————————

6 logmein

LL是长整型,转成16进制后再转成字符串,又因为字符串是小端顺序,所以需要反转,然后按照反汇编的代码就能求出flag。16进制转字符是第二次遇到了,可能在逆向里比较常用,记住了。

为什么是小端序呢,因为一开始用exeinfope查看文件信息是elf,说明是linux的,而linux是小端顺序。反正我猜应该是这样。

>>> hex(28537194573619560)'0x65626d61726168'>>> v7 = "harambe">>> v8 = ":\"AL_RT^L*.?+6/46">>> v6 = 7>>> flag = "">>> for i in range(len(v8)):	t = chr(ord(v7[i%v6]) ^ ord(v8[i]))	flag += t	>>> flag'RC3-2016-XORISGUD'

————————————

7 insanity

难的不会,简单的嫌弱智…

IDA打开,定位主函数,发现可疑的str字符串,双击跳转,找到flag。。。

————————————

8 no-strings-attached

gdb ./lab 启动调试

b decrypt 在decrypt处设置断点
r 运行
n 下一步
x/200wx $eax
x:就是用来查看内存中数值的,后面的200代表查看多少个,wx代表是以word字节查看看,$eax代表的eax寄存器中的值。
在这里我们看到0x00000000,这就证明这个字符串结束了,因为,在C中,代表字符串结尾的就是"\0",那么前面的就是经过decrypt函数生成的flag.

>>> strings = [57, 52, 52, 55, 123, 121, 111, 117, 95, 97, 114, 101, 95, 97,110, 95, 105, 110, 116, 101, 114, 110, 97, 116, 105, 111, 110,97, 108, 95, 109, 121, 115, 116, 101, 114, 121, 125]>>> flag = "">>> for i in range(len(strings)):	s = chr(strings[i])	flag += s>>> flag'9447{you_are_an_international_mystery}'

具体解题思路见攻防世界writeup。

————————————

9 python-trade

在线python反编译https://tool.lu/pyc/

这里需要注意的是,python3经过b64decode是bytes类型,直接进行运算就可以了

import base64buf = base64.b64decode('XlNkVmtUI1MgXWBZXCFeKY+AaXNt')flag = ''for i in buf:    i -= 16    i ^= 32    flag += chr(i)print(flag)

————————————

10 getit

elf文件 64位

IDA打开,定位main函数。
在写入文件前flag就已经写好了,所以可以用两种方法,调试还看不大懂,这里用脚本自己构建flag。

>>> s = 'c61b68366edeb7bdce3c6820314b7498'>>> t = 'SharifCTF{????????????????????????????????}'>>> tmp = []>>> for i in t:	tmp.append(i)>>> index = 0>>> while index
>> flag = ''>>> for i in tmp: flag +=i>>> flag'SharifCTF{b70c59275fcfa8aebf2d5911223c6589}'

————————————

转载地址:http://nvnh.baihongyu.com/

你可能感兴趣的文章
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>