攻防世界XCTF-REVERSE入门12题解题报告

文章讲述了作者因疫情影响暂停学习,转向实战编程,重点学习了C语言、Linux可执行文件分析、二进制脱壳、Python反汇编等技能,并分享了攻防世界XCFT的刷题经验和解题过程。
摘要由CSDN通过智能技术生成

由于武汉疫情这段时间我在给医院开发小程序,耽搁了刷题,2020年的计划就是从刷题到实战,主要方向是二进制逆向、病毒分析、漏洞利用,努力提高自己的实战分析能力。

攻防世界XCFT刷题信息汇总如下:攻防世界XCTF黑客笔记刷题记录 ,点赞、收藏、转发三连一下哈~

第一题:考察C语言

解题报告:

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
    if (argc != 4) {
    	printf("what?\n");
    	exit(1);
    }

    unsigned int first = atoi(argv[1]);
    if (first != 0xcafe) {
    	printf("you are wrong, sorry.\n");
    	exit(2);
    }

    unsigned int second = atoi(argv[2]);
    if (second % 5 == 3 || second % 17 != 8) {
    	printf("ha, you won't get it!\n");
    	exit(3);
    }

    if (strcmp("h4cky0u", argv[3])) {
    	printf("so close, dude!\n");
    	exit(4);
    }

    printf("Brr wrrr grr\n");

    unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;

    printf("Get your key: ");
    printf("%x\n", hash);
    return 0;
}
  • 参数1:51966
  • 参数2:25
  • 参数3:h4cky0u

第二题:考察Linux可执行文件二进制搜索

解题报告:

发现是Linux可执行文件

方法1:通过Bless打开,搜索flag:9447{This_is_a_flag}

方法2:通过IDA字符串搜索也可以

方法3:Linux下直接用strings命令查看二进制文件中的字符串

root@ailx10:/home/ctf/re# strings 428f6e6f75754fca8964d35b16a4b709 
/lib/ld-linux.so.2
__gmon_start__
libc.so.6
_IO_stdin_used
srand
puts
time
sleep
__libc_start_main
GLIBC_2.0
PTRh@
[^_]
Reticulating splines, please wait..
If you're pretending to suck, you just passed that Turing test.
There aren't enough bits in my memory to represent how hard you fail.
Your ability to hack is about as good as my ability to have free will.
Have you considered becoming a vacuum cleaner? You're pretty good at sucking.
I've got a good feeling about this one..... wait no. Maybe next time.
Knock knock..
Who's there?
UDP.
UDP who?
9447{This_is_a_flag}
Congrats, you hacked me!

第三题:考察二进制脱壳

解题报告:

题目自己说有壳的

第一步脱壳:使用kali自带的upx进行脱壳

第二步搜索:二进制搜索字符串flag

方法1:使用kali自带的bless搜索字符串flag

方法2:使用Linux系统自带的strings搜索flag

第四题:python-trade考察python反汇编

解题报告:

休息了一个多月没做题,题目顺序都变化了。做事情一定要及时,不然真的少壮不努力,老大徒伤悲。在我的MAC下进行uncompyle6对pyc文件反汇编出py文件,得到源代码:

这就很简单了,顺手写了一个解密函数,得到flag:nctf{d3c0mpil1n9_PyC}

第五题:hello-ctf考察简单的逆向

解题报告:

因为是exe文件,所有这里我用了PEtools查壳神器,5年前吾爱破解送了我一个账号,里面资源相当多,找了一个热门的下载,显示这个文件是windows 32位C++程序,没有加壳。

我们运行一下:

打开IDA pro找一下这个字符串,我们找到了一串奇怪的数字,根据题目的提示,说flag不是明文,那么这个可能就是flag的编码后的值。

写一个小程序,就可以拿到flag:

第六题:logmein考察简单逆向

解题报告:

这是一道Linux下的二进制文件题,让我们猜RC3密码,猜对了就给你flag

打开IDA,找到伪代码如下:

将上面的伪代码改写成Python写如下,得到flag:

第七题:game考察简单逆向

解题报告:

第一步:查壳,发现没有壳

第二步:运行一下,大概的意思呢如下:

玩个游戏,n是灯的序列号,m是灯的状态,如果第N个灯的m为1,则点亮,否则为熄灭。一开始所有的灯都关了,现在您可以输入n更改其状态,但是你要注意一件事,如果您更改第N个灯的状态,第(N-1)和(N + 1)的状态也会改变,当所有指示灯都点亮时,将出现flag

其实很简单,我只要每一个灯点亮一次,所有的灯,都会被点亮,n依次输入12345678,就看到flag了,但是我们还是用逆向工程的思路来解题。

第三步:通过IDA可以查看伪代码,稍微修改一下:

拿到flag:zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

第八题:getit考察动态调试

解题报告:

题目是这个程序有可能偷偷摸摸搞事情,但是运行一下,也不知道搞啥了。

通过IDA pro打开看一下伪代码,原来它在/tmp/flag.txt给我们写flag,然后又悄悄删掉了,于是我们可以通过GDB把它断住,然后去tmp下查看flag,岂不是美滋滋。

幸福来的太突然,它给我来了个星星,瞅一瞅代码,发现flag藏在t里面。

定位一下t的内存位置,发现在0x6010E0的位置:

通过GDB查看这个位置的内容,

得到flag:SharifCTF{b70c59275fcfa8aebf2d5911223c6589}

第九题:re1考察逆向入门

解题报告:

第一步:查壳,没有壳

第二步:运行一下,拿到关键字符串flag不对

第三步:在IDA pro里面找到字符串

第四步:查看伪代码,这里v5就是flag

第十题:no strings attached 考察动态调试

解题报告:

这是一个Linux程序,并且搜不到有价值的字符串

咱们运行一下:直接就是段错误

上IDA pro分析,只要ws和s2相等,那么就是flag

ws是我们输入的值,s2是加密后的值,因此我们拿到s2就拿到flag

使用IDA pro动态调试Linux服务器上的程序:

第十一题:csaw2013reversing2 考察动态调试

解题报告:

第一步:查壳,没有壳

第二步:运行一下,一开始我的电脑运行不了这个程序,然后重启一下可以运行了。哈哈,真的是谜之困惑,重启解决一切系统Bug~

第三步:IDA pro查看伪代码

我们需要做2件事,第一咱们要进入sub_401000函数一看究竟,第二咱们要在ExitProcess之前回到MessageBoxA执行流里面,这里我使用OD来改程序啦。

修改关键跳转

填充nop

F8继续走,修改关键跳转

F8继续走,成功拿到flag

第十二题:maze 考察迷宫行走

解题报告:

一道Linux 64下的题目,运行了一下说是要输入flag

打开IDA pro查看伪代码:

  • ⬆️:O
  • ⬇️:o
  • ⬅️:.
  • ➡️:0

绘制迷宫如下,咱们肉眼看到的2维数组,在内存中长得是右边这样的。

不懂的同学,好好看看C语言

迷宫顺序:⬇️➡️⬇️⬇️➡️➡️⬆️➡️➡️➡️⬇️⬇️⬇️⬇️⬅️⬅️⬆️⬆️

对应的值:o0oo00O000oooo…OO

flag:nctf{o0oo00O000oooo…OO}

至此,RE入门刷完了,哈哈,是不是很简单。

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络安全技术库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值