攻防世界进阶Re

攻防世界Re进阶区

Shuffle

查,32位,直接拖IDA,看到定义了很多字符,尝试按个R

image-20210721213826289

直截了当的flag

dmd-50

查后64位,拖IDA,跟上一题好像,也是定义一堆字符。按R

image-20210721215004064

往上翻翻看见了md5,先拿去解密

image-20210721215101094

好短啊感觉不太像。查看wp,得知它需要用md5加密后提交,但是要小写的

image-20210721215139018

Guess-the-Number

拿到jar包肯定看Java源码

image-20210721210928845

直接除以5取整数可求得guess_number309137378

接下来打开jar包,要用唯一路径打开,输入得到的number

image-20210721211043876

answer_to_everything

知识补充:SHA1加密算法_

64位elf,IDA

image-20211102161336660

直接分析可知道kdudpeh就是flag,但是没交对,根据puts的内容可以知道他提交的是一个密码,所以kdudpeh要拿去加密,又根据题目得知有关于SHA1,所以直接拿去加密sha1在线解密 在线加密 (ttmd5.com)

sha1(kdudpeh)= 80ee2a3fe31da904c596d993f7f1de4827c1450a

666

IDA直接进encode

image-20211102165006801

for循环里是加密方式,很简单。跟进key得知长度为0x12即18

image-20211102165206372

随后往上看见了加密字符串,提取出来直接逆向

1
2
3
4
5
6
7
8
enflag=[ 0x69, 0x7A, 0x77, 0x68, 0x72, 0x6F, 0x7A, 0x22, 0x22, 0x77,
0x22, 0x76, 0x2E, 0x4B, 0x22, 0x2E, 0x4E, 0x69, 0x00]
flag=''
for i in range(0,18,3):
flag+=chr((18^enflag[i])-6)
flag+=chr((18^enflag[i+1])+6)
flag+=chr(18^enflag[i+2]^6)
print(flag)

知识补充:异或的运算优先级小于+和-,在写脚本的时候需要用小括号括起来。

srm-50

绕弯签到题,查完没问题直接IDA很清楚看到

image-20211103170148890

按照数组的正常顺序重新排就是flag了

CZ9dmq4c8g9G7bAX

Mysterious

签到题,照例无问题IDA

image-20211103171351361

知识补充:C 库函数 – strcat() | 菜鸟教程 (runoob.com)

flag{123_Buff3r_0v3rf|0w}

re1-100

常规IDA

image-20211103173633113

直接交是错的,跟进confuseKey

image-20211103173751044

知识补充:C 库函数 – strncpy() | 菜鸟教程 (runoob.com)

意思就是把上述看到的字符串分成四个部分,每部分十个字符,然后再按照下面的顺序重新排列

所以分好是 daf29f5903(dest) 4938ae4efd(v7) 53fc275d81(src) 053ed5be8c(v15)

按要求排好就是 53fc275d81053ed5be8cdaf29f59034938ae4efd

secret-galaxy-300

wp参考:(14条消息) CTF-攻防世界-Reverse-(secret-galaxy-300)_Beglage-CSDN博客

IDA主函数没东西,搜字符串发现

image-20211103180046239

追这串字符串的所在函数

image-20211103180214773

全是赋值操作,又有有关字符。其中可能藏着flag

然后用OD动调在开始和结束处设置断点 之后调试一波就出来了

image-20211103180329803