话不多说,直接开始

xor

下载下来有一个xor的无后缀文件和一个叫_MACOSX的文件夹,里面是一个叫._xor的文件,先查壳
xor
._xor是一个二进制文件,就不放截图了省内存
用ida打开xor文件
main
用notepad–打开._xor文件
xor1
二进制文件有点意义不明,先看主函数,还是熟悉的strncmp函数,可以看到,输入的字符串是_b
从前面的程序可以看出flag长度为33,输入的字符串每一个字符跟前一个字符异或后才跟global比较,这个字符串的值也很好找,直接点就行
str
因为一按截图键窗口就没了,所以只能用手机拍照
那么接下来只要找出符合的输入就行了,因为异或的自反性,要还原一个字符只需将其与前一个字符异或即可
flag
最终flag为QianQiuWanDai_YiTongJiangHu
不得不说,这个global字符串是真的抽象,一堆转义,眼睛都要看瞎了……
所以那个二进制文件到底有什么用

helloword

是不是少了个l
下载下来一个apk文件,用jadx打开,找主函数,直接就能看到flag,虽然看不懂java
main

reverse3

之前写过了,偷个懒

不一样的flag

一个exe文件,先查壳,少见的32位应用,无壳。直接打开
main
大概翻译一下,一个while循环不断输入一个数字,根据输入改变相应的值,以达到最终结果,所以一步一步的走就行了
然后……就不会了


从题解来看,这题是一个走迷宫题目,迷宫就是v3字符串的内容,即

1
2
3
4
5
*1111
01000
01010
00010
1111#

数字对应走法,题目中已经给出了提示,走迷宫就行
flag为222441144222


写这题是困扰我最久的就是为什么最后判定时用v7字符串数组坐标要-41,因为栈的生长方向是自顶向下,那么先定义的v3字符串地址应该比v7要大,如果以v3为基准引用v7的元素应该是+41,最后在网上找到了解答
stack
由于栈溢出的保护机制,入栈顺序与定义顺序相反,所以后定义的v7地址反而比v3要大,这样就说得通了。
虽然其实可以直接从声明后面的注释看出地址其实看不懂,但知道原因总是好的

SimpleRev

先查壳,64位无壳,直接打开
main
题目的主函数逐渐开始意义不明……好像找不到什么有用的信息,先看看decty函数和Exit函数
decry
然后再decry函数里看到了一句Congratulation,不出意外的话到这里就说明找到flag了(Exit函数里啥都没有,应该是没用的)
再看回前面,好像没有什么看不懂的地方,直接暴力写出所有变量
经过前面一些语句的运行,key字符串为adsfkslcdntext字符串变为killswodah
再看后面的输入的部分,输入回车(10)时退出循环开始判定,空格(32)时v2++,然后就是类似解码的过程,根据输入的字符和key字符串构造最后用来比较的字符串,只需一步一步来
decry
(因为没看懂有什么特殊含义,就直接暴力了)
最终flag为KLDQCOZFDU

然后就错了……


原因:数据存储方式分为大端序和小端序两种,x86架构(常见)采用小端序,即将低位数据存储在低地址处,powerPC架构(不常见)、网络协议采用大端序,跟小端序相反。如果是存储字符串那么两者没有区别(字符串开头地址较低),但若是存储其他的大于一字节的数据,那么就会不一样。比如存储short(在现在的电脑上一般为4字节,为了方便当成2字节)类型的100000000 00000001,那么在小端序中存储就是00000000 00000001,而大端序则为00000001 00000000(按地址从高到低算)。而题目中对字符串进行赋值时在后面加了LL(看到了,但不知道有什么区别),即转化为long long型,所以按小端序存储即为77 6F 64 61 68,而字符串是从低到高看,所以转化为字符串应为68 61 64 6F 77,也就是倒过来,正确的keyadsfkndclstextkillshadow,改了之后程序就能运行出正确的flag,为KLDQCUDFZO
(这鬼设定卡我一晚上,吐了🤮)

JAVA逆向解密

先查壳(虽然不知道需不需要)
java
用jadx打开
main
根本看不懂java……

在同为计算机系的兄弟的帮助下,大概知道了意思,就是输入字符串,改变一下跟key比较,直接编程就行
flag
最终flag为This_is_the_flag_!

[GXYCTF2019]luck_guy

查壳,64位无壳,直接打开
main
主函数没有有用信息,但可以找到一个get_flag函数,可以猜测这个函数是关键
get_flag
其中,rand函数用于生成伪随机数,f1可以直接找到,为GXY{do_not_,f2在case4中被赋值,在case5中被改变,而flagsf1 f2拼接而成,只要敲个代码就行(同样由于小端序存储,字符串要倒过来)
flag
最终flag为do_not_hate_me


结语

肝不动了😵
kelala