这道题大多数的wp不知道这个程序是怎么跑的。

这道题是由一个知名的日本战队zer0pts出的,还是挺新颖,挺有意思的

总体感知

首先来看看ida里的情景

这就是main函数的所有了,很简单,感觉啥也没有,输入那串用于比较的字符当然是没用的。

那就看看a1是不是在之前有加密,调交叉引用到start函数

但是从这里找也没找到加密,所以,此题暗藏玄机呀。

函数挺少的,注意看下来不难发现下面这个函数绝对是加密函数

很多wp做到这里就结束了,但这不够!

实现细节分析

交叉引用说明,这个函数没有被引用,但是按照ida反编译的机制,不执行的代码理应不反编译,这么说,这个代码一定是通过某种方式运行了!

这个函数看似平平无奇,但是正是这个程序这么奇怪的关键。

它做了几件非常少见的事情,就是把strcmp这个函数的地址给某个参数了,还把它附给了qword_201090这个变量

另外还把另一个函数附给了off_201028这个参数。

跟随这些交叉引用,去看看这个程序到底是怎么隐藏自己的动机的。

竟然一下子到start里面的init函数了,有点迷惑,还是看汇编吧。

这里调用了一个函数,这后面的funcs_......就是这个函数的地址了,根据之前交叉引用的结果,这应该就是我们上面分析的那个函数了

也就是说,在系统调用start的时候,在这里隐秘地调用了这个函数,执行了上面一系列函数地址的赋值操作。

然后回来看我们上面找到的奇怪函数究竟干了什么?先看qword_201090的交叉引用表。

6eA这个函数就是一开始我们找到的疑似加密的函数。也就是说,那个没有交叉引用的函数,实际上是在程序运行过程中连上主函数的

进入加密函数

由于qword_201090已经装上了strcmp的地址,那么此时返回qword_201090实际上就是在调用strcmp函数了。

再看看off_201028的交叉引用表

点进去看汇编

发现这个_strcmp其实并非真正的strcmp,里面暗藏玄机呀!运行_strcmp的时候就会跳转到off_201028也就是其中装上的6EA函数(即加密函数)

现在逻辑全了

整个程序运行的流程

所以你输入的内容,就这样不知不觉的进行了加密,还是挺巧妙的~

最后答案虽然不重要,但是都做到这一步了,也就给了吧

答案

flag{l3ts_m4k3_4_DETOUR_t0d4y}

[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

    是elf格式的64位程序,无壳 int64指的是64位有符号整型 fastcall是一种函数调用规定 按理来说main函数的写法上是只能有2个参数的,不知道为什么这里有3个 初看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. SpringBoot基础篇(二):HelloWorld细节探究

    1.场景启动器 1.1依赖 <!--Hello World项目的父工程是org.springframework.boot--><parent><groupId>or ...

  9. 自定义ContentProvider的一些细节探究

    http://blog.csdn.net/sadfishsc/article/details/7419573 1.   适用范围 对于什么情况下才会用到自定义的ContentProvider,官方文档 ...

最新文章

  1. 非此即彼的逻辑错误_MBA逻辑攻略-逻辑知识大全,快来收藏吧!
  2. 智能手机的开放与封闭刍议
  3. LeetCode 206. 反转链表
  4. Linux学习总结(79)—— Shell 编程规范
  5. 数据库表设计必需元素_HTML5输入,必需,模式,数据列表
  6. 地面控制点的定义与作用_彩色透水混凝土路面在海绵城市建设中能起多大作用?...
  7. DEVONthink Pro作为浏览器插件脚本,如何使用
  8. [Leetcode] Climbing Stairs
  9. api 读内存整数_10万+QPS 真的只是因为单线程和基于内存?
  10. 服务器虚拟机系统镜像安装win7系统,在虚拟机中怎么安装Win7旗舰版系统
  11. 和风天气OUC——通过搜索城市快速查询天气
  12. Google Earth Engine(GEE)——导出视频和存储到云端!
  13. JAVA 事务不生效的常见场景和修改方案
  14. trans系列是sci几区_怎么确定SCI论文期刊是几区的?
  15. Notepad++软件安装教程
  16. 怎样提高平面设计色彩表现力
  17. js实现数字的千分化
  18. windows10关闭系统更新方法总结
  19. Kubernetes安装报错nodeRegistration.name: Invalid value: “vm_0_14_centos“: a DNS-1123 subdomain
  20. 任务管理系统算法-Kahn’s algorithm for Topological Sorting(一)

热门文章

  1. Python微信防撤回,基于itchat模块
  2. 智能家居雷达模块应用,毫米波雷达传感器,雷达感应技术应用
  3. oCPC实践录 | oCPC产品设计与出价原理(1)
  4. excel只显示公式,不显示结果
  5. 阿里云直播集成简要指南
  6. 大牛揭秘:如何快速在阿里云搭建视频直播平台
  7. 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting)
  8. 使用showdown.js将Markdown文档转换为HTML
  9. python批量计算cosine distance
  10. pytorch---Cosine learning rate scheduler