reverse

1:题目:失之毫厘谬以千里

下载附件得到一个压缩包,里面一个hint.txt,一个64位无壳PE文件。

无壳直接拖进ida64,查看字符串,含有inputflag字样,直接找main函数
main函数如下
程序大致就是将你input进的flag进行加密,然后与a字符串比较,而a字符串的内容是JrYp0zr_gb_eR&pbaTenghYngvba。加密的方式就是for循环里的内容。

逆向代码解出flag

也可以找个rot13在线解码网站进行解码。(建议还是手打代码)

2:题目:shell

拿到附件,die检查为32位文件且没有加壳,直接ida32分析,但是当我打开的时候我蒙了,main函数如下图:

没有可利用的,点击ssd里面什么都没有,N1里面如下图,
点击jiake进去,
可以看到we传参给了IpAddress,738传参给了a2,5传参给了a3。下方的代码只看懂了一部分,那就是IpAddress地址内的数据每一个异或a3,而a3的数值为5,也就是异或5。IpAddress地址为0x401500;

拿贾哥的脚本来修改ida数据

之后再用ida打开就能分析数据了
代码大致逻辑就是input进去字符串,经过几个for循环变化,最后与数组v3比较,相等则得到flag。

于是逆向写代码:

运行拿到flag。

3:题目:easy_androidRe

下载附件,得到一个压缩包里面包含一个java类的文件,打开发现是java代码。

程序逻辑是让你输入flag,然后转换为char类型,再进入加密函数进行加密,加密方式为每一位+64再与0x20进行异或,最后得到的加密flag与KEY比较,若相等则输出Congratulations。因此可以利用KEY反向解出flag。

代码如下:

解出flag。

4:题目:opensource

下载附件,发现是c文件,

分析代码,第一个if里面argc得等于4,要不程序就会打印出what,并且退出。第二个if里面first得等于0xcafe,否则程序会打印出you are wrong ,sorry ,并且程序退出。第三个if里面得满足second%!=3且second%17=8,否则程序会打印出ha,you won't get it,并且退出程序。第四个if里面是argv与字符串"h4cky0u"比较,若为真,程序就会打印so close,dude,并且退出程序,所以argv直接是"h4cky0u",这样比较得到的返回值为0.程序就会继续向下执打印出"Get your key"。并且算出hash。

代码如下:

提交发现不对,猜测是十进制数据还得转化为16进制:
所以flag{c0ffee}。

5:题目:game

下载附件,检查为32位无壳文件,拖进ida32反汇编。

由于左侧数据太多,直接ctrl+f查找main函数

发现是一个小游戏,翻译一下
n是灯的序列号,m是灯的状态
如果第N个灯的m为1,则亮起,否则熄灭
起初,所有的灯都关闭了
现在您可以输入n来更改其状态
但是你应该注意一件事,如果你改变第N盏灯的状态,第(N-1)和第(N+1)盏灯的状态也会改变

当所有灯都亮起时,flag将出现

继续向下看代码

大致意思是在1-8的范围内输入数字,不能大于或等于9,”cls“清屏的效果;目前还没看到没什么利用价值的东西,继续向下看代码。
看到了该小游戏的核心代码,点进sub_457AB4()函数。
for循环里v2数组的每一位与v5数组的每一位异或,然后再与0x13异或。(v2与v3数组要合并起来,其实这俩本来是一个数组,ida给分开了),之后就得到flag。

代码如下: