记录攻防世界REVERSE新手区-1

5 篇文章 0 订阅

1.logmein

题目描述:
在这里插入图片描述
下载附件,将其转换为.exe,查壳发现是一个64位的ELF文件
在这里插入图片描述
用IDA打开,找到main函数,F5查看伪代码
在这里插入图片描述
分析代码的运算逻辑:

先是将指定字符串复制到v8;

s是用户输入的字符串
先比较其与v8的长度,如果长度比v8小,就进入sub_4007c0函数
在这里插入图片描述
可以看到输出了:Incorrect password!
如果长度大于或等于v8则进入下面的循环
如果 i >= strlen(v8) 则进入sub_4007C0()函数
同样,如果s[i]不等于后面那一连串的运算结果,则进入sub_4007C0()函数
否则进入sub_4007F0()函数
在这里插入图片描述
通过分析可知,算法的关键在于 V6、V7、V8 的异或处理,得到如下代码:

在这里插入图片描述
即可得到flag:RC3-2016-XORISGUD

2.insanity

题目描述:
在这里插入图片描述
查壳,发现是32位的ELF文件
在这里插入图片描述
拖入IDA,找到main函数,F5查看伪代码
在这里插入图片描述
发现是取这个字符串输出,然后,跟进strs
就发现了flag
在这里插入图片描述

3.getit

题目描述:
在这里插入图片描述
查壳发现是一个64位的ELF文件
在这里插入图片描述
拖入IDA
找到main函数,F5查看伪代码
在这里插入图片描述
找到代码的关键部分,是这个for循环
里面提到的几个参数,t和s,查看参数的值
在这里插入图片描述
脚本在这里插入图片描述
在这里插入图片描述
你会发现这不太像是正确的flag
再仔细看一下题目
在这里插入图片描述
题目来源是SharifCTF 而这里t的值却是harifCTF

修改代码,即可得到正确的flag
在这里插入图片描述

4.re1

题目描述:
在这里插入图片描述
下载附件,查壳后,发现是Microsoft Visual c++编译的32位的程序
在这里插入图片描述
拖入IDA,找到main函数,F5查看伪代码
在这里插入图片描述
可以看到一个关键的字符串,print(aFlag),继续往上分析:
可以看到v3的值与v5有关,继续往上分析:
可以看到开头的_mm_storeu_si128()涉及到了v5,对其分析,发现它是将xmmword_413E34的值赋值给v5,所以双击413E34跟进

可以看到一堆十六进制的数
使用IDA的功能 R ,将十六进制进制的数转换为字符串。

在这里插入图片描述
最后的flag应该是:DUTCTF{We1c0met0DUTCTF}

补充一个知识点
假设一个十六进制数0x12345678
大端的存储方式是:12,34,56,78,然后读取的时候也是从前往后读
小端的存储方式是:78,56,34,12,然后读取的时候是从后往前读取

5.python-trade

题目描述:
在这里插入图片描述
打开附件:是一个.pcy文件
用反编译工具,在这里插入图片描述
得到源码
在这里插入图片描述
脚本
在这里插入图片描述
得到flag:nctf{d3c0mpil1n9_PyC}

6.game

题目描述:
在这里插入图片描述
用OD动态调试
搜索字符串在这里插入图片描述
找到了关键的字符串,双击
在这里插入图片描述
注意记住上面的0006E940是判断正确函数的入口点
现在我们要做的是找到判断我们输入是否正确的函数,将其跳转到判断正确的函数入口点来
在这里插入图片描述
此处应该是我们输入的值
设置个断点,单步运行,找到跳转的指令
在这里插入图片描述
将其改为:jle long 0006E940
然后运行就可得到flag
在这里插入图片描述
flag: zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

7. Hello, CTF

题目描述:
在这里插入图片描述
用IDA打开附件
找到main函数,F5查看伪代码
在这里插入图片描述
分析代码:
v9为我们的输入,长度≤0x11
v10储存的就是v9,和v13进行比较。相同就success
因此v13储存的就是我们要的flag
十六进制转字符串:
在这里插入图片描述
得到flag: CrackMeJustForFun

8.open-source

题目描述:
在这里插入图片描述
附件是一份c语言源码
在这里插入图片描述
值得注意的是第29行进行计算flag,第32行代码输出十六进制形式
式子由三个部分组成; first,second,argv[3]
第一部分:
在这里插入图片描述
由此处可知 first = 0xcafe

第二部分:
在这里插入图片描述
second = 25

第三部分:
在这里插入图片描述argv[3] = “h4cky0u”
脚本:
在这里插入图片描述
得到flag: c0ffee

9. simple-unpack

题目描述:
在这里插入图片描述
查壳:
在这里插入图片描述
发现是upx壳
方法一:
upx -d 文件名 即可对upx壳进行脱壳
在这里插入图片描述
在查壳,可以看到已经没有壳了
在这里插入图片描述
拖入IDA
查看main就能看到flag了
在这里插入图片描述
flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}
总结:
upx的详细使用链接:https://blog.csdn.net/The_whale_demon/article/details/104111320
cd命令介绍:https://jingyan.baidu.com/article/73c3ce28480637e50343d992.html

方法二:
IDA一二进制形式打开文件
shift+F12 查找字符串就能找到flag
在这里插入图片描述
参考文章:https://www.cnblogs.com/Mayfly-nymph/p/11397369.html

10.csaw2013reversing2

题目描述:
在这里插入图片描述
打开文件,果然,显示的是乱码
在这里插入图片描述
查壳:
在这里插入图片描述
拖入IDA,找到main函数,查看伪代码
在这里插入图片描述
分析代码;
在这里插入图片描述
此处应该是弹框显示flag值的代码,但程序运行显示的是上图所示的乱码
继续分析代码
在这里插入图片描述
在这个if语句中,IsDebuggerPresent()这个函数就是判断是否处于调试器中,满足条件后,进入执行语句。
接着看到sub_401000函数,双击进入
在这里插入图片描述
看起来是个加密函数,应该和flag有关,将v2进行一系列操作后返回,然后退出,弹出flag。然而事实上并未显示flag,所以我们猜测这个函数并没有被执行,

于是我们再用OD打开文件
搜索字符串:
可以看到有两个flag
在这里插入图片描述
先双击进入第一个flag
在这里插入图片描述
可以找到IsDebuggerPresent()函数的地址
进行if判断后,程序直接跳过了sub_401000函数,然后跳出弹框,显示乱码,所以我们需要对程序进行修改使其执行sub_401000函数。
在这里插入图片描述
双击修改转汇编代码,使其跳转到sub_401000函数地址的前一处也就是00DE109B,程序运行后就会执行生成flag的函数。
接下来我们还需要使弹框显示flag,所以需要修改sub_401000函数之后的跳转语句,使其跳转到弹框位置
在这里插入图片描述
运行:
你会发现它停在了 int 3 这个位置,将它nop掉,再运行,就能得到正确的flag
在这里插入图片描述
参考文章:https://blog.csdn.net/qq_43786458/article/details/102150779

11.maze

题目描述:
在这里插入图片描述
下载附件,用IDA打开,找到main函数,F5查看伪代码
将能转换为字符的都转换(快捷键R)
在这里插入图片描述
分析代码
在这里插入图片描述
这里表示,输入字符长度必须是24,开头必须是nctf{,结尾必须是}。在125处按R就可以变成字符。
在这里插入图片描述
这部分说明最后必须走到#

分析函数sub_400650
在这里插入图片描述
v10的下一字节减1
分析函数sub_400660
在这里插入图片描述
v10的下一字节加1
分析函数sub_400670
在这里插入图片描述
v10减1
分析函数sub_400680
在这里插入图片描述
v10加1

进入函数asc_601060
在这里插入图片描述
可以看到一个8*8矩阵

在这里插入图片描述
得到flag: nctf{o0oo00O000oooo…OO}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值