是elf格式的64位程序,无壳

int64指的是64位有符号整型

fastcall是一种函数调用规定

按理来说main函数的写法上是只能有2个参数的,不知道为什么这里有3个

初看main函数的逻辑是输入的第一个参数和"zer0pts{CENSORED}"一样就成功了

所以直接把"zer0pts{CENSORED}"提交,错了。

看一下这些函数,名字格式是sub_xxx的函数时ida没能识别的函数,后面的数字是函数的起始地址


这里可以看到,init函数在main函数之前调用了,进去看看init函数干了什么

signed指的是有符号数,不写的情况下默认是signed。
db指的是1个字节,dw:2, dd:4, dq:8。
offset指的是偏移量

按道理来讲,&off_200DF0的值应该是这个变量的地址,也就是上图中的0x200DF0
所以v4>0。

这里前面是把(&funcs_889 + i)解引用,解引用之后是一个函数地址,然后再把这个函数地址强制类型转化成函数,后面跟的(a1, a2, a3)是这个函数的参数。
因为这里for循环给的条件是i != v4,所以for循环里面不会调用sub_6A0,只会调用6E0和795这两个函数,6E0函数里面啥也没有,现在进到795里面去看一下。

可以看到,它把off_201028的值设为了sub_6EA函数的地址,我们来看看off_201028里面存的原本是什么东西。

可以看到off_201028是函数表中的数据,原本存的是strcmp函数的地址,这么说来,main函数中,每次调用strcmp函数的时候,实际上调用的其实是sub_6EA函数,接下来好好看看sub_6EA中的内容。

首先i获取了输入的flag字符串的长度,然后把字符串的每8个字节作为一个整体,减去qword_201060数组中对应的8个字节,最后再执行qword_201090函数,返回结果,qword_201090的值在795函数中被赋值成了&strcmp,所以在减完之后的字符串要与"zer0pts{CENSORED}"相等,于是可以写这样一个脚本

#include <iostream>
using namespace std;int main()
{char p[] = "zer0pts{********CENSORED********}";uint64_t k[5] = {0, 0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B, 0};for (int i = 0; i < 4; i++){*(uint64_t *)&(p[i * 8]) += k[i];}cout << p;return 0;
}//flag{l3ts_m4k3_4_DETOUR_t0d4y}

得到flag

[Zer0pts2020]easy strcmp相关推荐

  1. re -12 buuctf [Zer0pts2020]easy strcmp

    [Zer0pts2020]easy strcmp 前话:这题要用到ida64位远程调试先记录一下配置方法,因为本人使用的是ida7.6版本差异可能导致问题. application与input fil ...

  2. [buuctf][Zer0pts2020]easy strcmp

    [Zer0pts2020]easy strcmp 思路 脚本 思路 第一步还是先查壳 放在linux中运行一下,发现竟然没有任何输入的位置. 放入ida64中查看,因为这个是一个64位的可执行文件,有 ...

  3. [Zer0pts2020]easy strcmp细节探究

    这道题大多数的wp不知道这个程序是怎么跑的. 这道题是由一个知名的日本战队zer0pts出的,还是挺新颖,挺有意思的 总体感知 首先来看看ida里的情景 这就是main函数的所有了,很简单,感觉啥也没 ...

  4. [Zer0pts2020]easy strcmp 分析与加法

    无壳,放入IDA自动跳到main函数 __int64 __fastcall main(int a1, char **a2, char **a3) {if ( a1 > 1 ){if ( !str ...

  5. Zer0pts2020 easy strcmp

    打开文件,直接在main函数里找到比较的地方,但是发现flag不是这个. 猜测strcmp函数有问题,或者输入经过了处理,于是开始动调,把断点下载a1 > 1的位置,发现strcmp函数不是那个 ...

  6. buuctf————[Zer0pts2020]easy strcmp

    1.查壳. 无壳.64位 . 2.IDA反编译. 找到主函数只是一个简单的比较. 只需要找到对a2做的变换.(函数不多). 找到是sub_6EA函数. 分析函数: 把输入的flag8个一组(三组)与q ...

  7. buu-[Zer0pts2020]easy strcmp

    64位 查看字符串 查看main函数 __int64 __fastcall main(signed int a1, char **a2, char **a3) {if ( a1 > 1 ){if ...

  8. BUUCTF--[Zer0pts2020]easy strcmp

    测试文件:https://wwa.lanzous.com/i54G4drrp1i 代码分析 打开IDA看了下main函数 这里就是将a2[1]与zer0pts{********CENSORED**** ...

  9. REVERSE-PRACTICE-BUUCTF-13

    REVERSE-PRACTICE-BUUCTF-13 firmware [ACTF新生赛2020]Oruga [Zer0pts2020]easy strcmp [GXYCTF2019]simple C ...

最新文章

  1. 通过application.properties修改打开网页的方式
  2. ad用户和计算机的使用方法,AD技巧之指定用户登录和指定计算机登陆
  3. android动态创建arraylist,Android:二维ArrayList帮助
  4. 玩转html5画图 - TimeLangoliers - 博客园
  5. 程序化广告交易中的点击率预估
  6. 基于 Annotation 拦截的 Spring AOP 权限验证方法
  7. Boost::context模块fiber的stack测试程序
  8. 优化案例(part6)--Feature co-shrinking for co-clustering
  9. 6-23 分离链接法的删除操作函数 (20 分)
  10. 使用Java :: Geci生成setter和getter
  11. CADFANS2012网站源码
  12. 字符串Ascll格式转16进制
  13. new操作符的作用是什么
  14. 华为云API Explorer开发者生态平台正式上线
  15. 求无向图中某顶点的度 (有注释)
  16. ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程
  17. mysql_num_fielfs_mysql_num_fields
  18. 使用EasyPoi完成复杂一对多excel表格导出功能
  19. Advanced Design System 破解教程 ADS 2017
  20. ArduinoUNO实战-第十一章-4位共阴数码管实验

热门文章

  1. linux 清空stdin缓冲,清除stdin缓存中的数据
  2. nice,​使用python生成专属二维码~
  3. 坚果云和亿方云该如何选?
  4. springboot整合jwt_springboot整合jwt实现身份验证
  5. 白话斯坦福机器学习课程-CS229 - 监督学习应用:梯度下降
  6. 题8.13:写一个用矩形法求定积分的通用函数,分别求$\int_0^1 sinxdx, \quad \int_0^1 cosxdx, \quad \int_0^1 e^xdx,$
  7. [转载]徐文兵:梦与健康
  8. FoodDelivered-Robot---送餐机器人(六)模块驱动代码---IO采集部分
  9. 初学者吉他怎么选?适合男女生新手吉他入门品牌推荐!
  10. shape_predictor_5_face_landmarks.dat以及shape_predictor_68_face_landmarks.dat资源分享