博客
关于我
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/

你可能感兴趣的文章
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>