【逆向 | CTF】reverse1

解题要点

【题目来源】BUUCTF

【解题思路】

    -检查壳和多少位程序

    -扔进IDA进行代码分析

    -找到flag在变量里

    -根据程序改改flag即可

【难点】

    -IDA的使用,寻找变量

    -C语言函数的掌握熟悉程度

步骤一:查壳查位,扔进IDA分析

先使用查壳工具检测出是64位程序

【逆向 | CTF】reverse1_第1张图片

二话不说扔进IDA分析,按F12后能显示出检测到的字符串列表,ctrl+F搜索出flag所在的位置

【逆向 | CTF】reverse1_第2张图片

步骤二:伪代码分析

双击点进去后,找到对应字符串,发现两个调用的函数,好像都是同一个函数(点进去都是一样的)

【逆向 | CTF】reverse1_第3张图片

点进去后仔细观察就能发现,这两个东西有点像flag{}

【逆向 | CTF】reverse1_第4张图片

输入进去后闪退,也不知道对不对

【逆向 | CTF】reverse1_第5张图片

那就按F5,生成伪代码,进行手动分析吧

【逆向 | CTF】reverse1_第6张图片

研究了一下发现伪代码不是浪得虚名,简直是乱来的

连标准函数的名字也能是有误差的

代码分析也不太难

就是把str2这个变量的其中一个或几个的ascii码是111改为48,那查一下对应的字符就是把o改成了0

然后下面的strncmp函数是有点难理解,特别是多了个!号

先看strncmp函数,作用是比较两个字符串,如果相等就返回0,不相等就返回正数负数

【逆向 | CTF】reverse1_第7张图片

那如果相等就不触发if,所以要加个!

然后逻辑变成了相等则触发if

看了看下面那函数好像只是打印这段话出来,没啥意义

毕竟填flag在网站上

所以寻找怎么触发if就可以了

步骤三:寻找对应ascii码的字符

根据上面的理解,只需要str1和str2是一样的就可以触发if

之前的反汇编窗口已经看到了str2变量字符是{hello_world}

【逆向 | CTF】reverse1_第8张图片

根据算法改一下那就是{hell0_w0rld},把o改为0就可以了

填了flag,搞掂

你可能感兴趣的:(CTF,c#)