[Zer0pts2020]easy strcmp细节探究
这道题大多数的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细节探究相关推荐
- re -12 buuctf [Zer0pts2020]easy strcmp
[Zer0pts2020]easy strcmp 前话:这题要用到ida64位远程调试先记录一下配置方法,因为本人使用的是ida7.6版本差异可能导致问题. application与input fil ...
- [buuctf][Zer0pts2020]easy strcmp
[Zer0pts2020]easy strcmp 思路 脚本 思路 第一步还是先查壳 放在linux中运行一下,发现竟然没有任何输入的位置. 放入ida64中查看,因为这个是一个64位的可执行文件,有 ...
- [Zer0pts2020]easy strcmp
是elf格式的64位程序,无壳 int64指的是64位有符号整型 fastcall是一种函数调用规定 按理来说main函数的写法上是只能有2个参数的,不知道为什么这里有3个 初看main函数的逻辑是输 ...
- [Zer0pts2020]easy strcmp 分析与加法
无壳,放入IDA自动跳到main函数 __int64 __fastcall main(int a1, char **a2, char **a3) {if ( a1 > 1 ){if ( !str ...
- Zer0pts2020 easy strcmp
打开文件,直接在main函数里找到比较的地方,但是发现flag不是这个. 猜测strcmp函数有问题,或者输入经过了处理,于是开始动调,把断点下载a1 > 1的位置,发现strcmp函数不是那个 ...
- buuctf————[Zer0pts2020]easy strcmp
1.查壳. 无壳.64位 . 2.IDA反编译. 找到主函数只是一个简单的比较. 只需要找到对a2做的变换.(函数不多). 找到是sub_6EA函数. 分析函数: 把输入的flag8个一组(三组)与q ...
- buu-[Zer0pts2020]easy strcmp
64位 查看字符串 查看main函数 __int64 __fastcall main(signed int a1, char **a2, char **a3) {if ( a1 > 1 ){if ...
- SpringBoot基础篇(二):HelloWorld细节探究
1.场景启动器 1.1依赖 <!--Hello World项目的父工程是org.springframework.boot--><parent><groupId>or ...
- 自定义ContentProvider的一些细节探究
http://blog.csdn.net/sadfishsc/article/details/7419573 1. 适用范围 对于什么情况下才会用到自定义的ContentProvider,官方文档 ...
最新文章
- 非此即彼的逻辑错误_MBA逻辑攻略-逻辑知识大全,快来收藏吧!
- 智能手机的开放与封闭刍议
- LeetCode 206. 反转链表
- Linux学习总结(79)—— Shell 编程规范
- 数据库表设计必需元素_HTML5输入,必需,模式,数据列表
- 地面控制点的定义与作用_彩色透水混凝土路面在海绵城市建设中能起多大作用?...
- DEVONthink Pro作为浏览器插件脚本,如何使用
- [Leetcode] Climbing Stairs
- api 读内存整数_10万+QPS 真的只是因为单线程和基于内存?
- 服务器虚拟机系统镜像安装win7系统,在虚拟机中怎么安装Win7旗舰版系统
- 和风天气OUC——通过搜索城市快速查询天气
- Google Earth Engine(GEE)——导出视频和存储到云端!
- JAVA 事务不生效的常见场景和修改方案
- trans系列是sci几区_怎么确定SCI论文期刊是几区的?
- Notepad++软件安装教程
- 怎样提高平面设计色彩表现力
- js实现数字的千分化
- windows10关闭系统更新方法总结
- Kubernetes安装报错nodeRegistration.name: Invalid value: “vm_0_14_centos“: a DNS-1123 subdomain
- 任务管理系统算法-Kahn’s algorithm for Topological Sorting(一)
热门文章
- Python微信防撤回,基于itchat模块
- 智能家居雷达模块应用,毫米波雷达传感器,雷达感应技术应用
- oCPC实践录 | oCPC产品设计与出价原理(1)
- excel只显示公式,不显示结果
- 阿里云直播集成简要指南
- 大牛揭秘:如何快速在阿里云搭建视频直播平台
- 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting)
- 使用showdown.js将Markdown文档转换为HTML
- python批量计算cosine distance
- pytorch---Cosine learning rate scheduler