当前位置: 首页 > news >正文

[逆向工程] 二进制拆弹Binary Bombs 快乐拆弹 详解

二进制拆弹 binary bombs 教你最快速解题,成功拆弹

最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair)

此处头发减n

我刚开始做的时候很是懵逼,首先对linux不熟悉,其次汇编嘛,本来就不简单,(Python是世界上最好的语言)

首先在开始之前呐,先向大家推荐一个linux下的绘图软件 kolourPaint 这个有什么用,看我下面的图就知道了

把相同的地址标出来,方便自己查找.

还有推荐几个GDB 常用命令

x/nfq adress // 查看地址 n是查看的个数 f 是格式 常用 x 16进制 u 10进制无符号 s 字符串 q 是查看几个字

b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,

读写指定字节,并把其当作一个值取出来。

         b //设置断点 这个很重要

      ni 单步执行  

      info reg //查看寄存器的值

这是用的比较多的 ,这个链接有更详细的 推荐大家学习一下

    https://blog.csdn.net/delbboy/article/details/8080738

 

再来说一下拆弹的几个小技巧

1.先看代码里的明码地址,查看一下说不定就是结果

2.然后找比较指令,尤其是什么像0xc(%ebp) 0x8(%ebp) 比较你输入的数的指令,有可能这个地方就告诉你结果了呐

3.再找输入判断指令,就是判断你输入的是不是符合要求,这样能缩小你要输入的值的范围,就算你不懂,拆答案也方便了

4.然后使跳转指令,要跳转到,bomb的指令,前面一般都会有比较指令,这个时候,就能查看相应的内存的数据,查到自己的结果

好了接下来进入正题


 

phase_1  :字符串比较

 这个实验是输入一个字符串,比较与程序里的是否相同,查询明码地址 0x8049ea4

得到字符串When I get angry, Mr. Bigglesworth gets upset.

输入后结果正确 

这个实验比较简单,就不细说了

 

phase_2:  循环图片使用linux下的KolourPaint制作)

 

phase_3:条件分支

 

phase_4: 递归

 

查询地址 

x804a06f

所以要输入两个参数

 

phase_5 : 指针

 

 

查询地址 0x8049f20 得到数组元素

 

 phase_6: 链表指针结构

  • 做前几关的时候还算比较顺利,可以说是运气比较好吧
  • 但是在这一关,看到这个汇编代码几乎没有头绪
  • 好不容易查出了 ,六个结构体,于是猜测,可能要输入的六个数应该是按照
  • 节点值的大小进行排序的结果;

可是我降序排列,升序排列输入了好几次都不对,???还有什么可能那

于是仔细查看了一下代码,发现有一个地方,把输入的数7-

5变成2 6变1 

这就是这个的坑所在啊!

于是又把之前输入的数 7- 了一次 果然对了;

 

 

到这里我们可以猜出结构体应该是这样的

1  strutc asm{
2 
3 int num;   //该处的值
4 
5 int no;   //当前结构体的编号
6 
7 int *next;   //指向下一个元素
8 
9 }

 

 

查询地址得到

 

 

降序排列 5 2 1 4 6 3 分别7- 得到2 5 6 3 1 4

  • 隐藏关 <secret_phase>
  • 这里终于迎来了我们的大BOSS

先来看看怎么进入吧

 

 

进入phase_defused 查看

调用了一个判断输入了几个参数的输入函数,3且第三个参数正确就进入了隐藏关

 

 

 

查询得知 要在第四关 的后面附加的字符串

 

 

于是得到结果0x32 = 50

输入后结果正确

 

至此我们终于解决了我们的大boss,干杯 ,哈哈哈

最后说一下解题最强法宝------你的计算机基础课本

为什么那, 这是你课程的实验,肯定和你所学相关,据我所知用这本书的都有这几个实验,可以说这个实验

和这门课这本书是配套的, 书中自有它的解题之道!

好好看看第三章前40页,你再来做这个实验就会恍然大悟原来是这样啊!

最后希望大家好好学习,取得好成绩 ,一起加油吧!!!

本人水平有限

如有问题,欢迎指正

 

转载于:https://www.cnblogs.com/Cherrison-Time/p/10085616.html

相关文章:

  • 软工 · BETA 版冲刺前准备(团队)
  • [源码和文档分享]基于C语言的PL0编译器
  • 图-连通性-有向图的强连通分量
  • 第四次作业
  • 简单的课程管理系统
  • 钉钉:自定义机器人
  • CF161D Distance in Tree
  • python1210作业
  • 7 练习1 -作业讲解
  • 并发编程
  • Vscode的使用
  • VS2015调用Matlab2017a环境配置(转载)
  • 遍历器 for...of 循环
  • iOS开发实战之搜索控制器UISearchController使用
  • 饭卡
  • 【Amaple教程】5. 插件
  • 【comparator, comparable】小总结
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Java 内存分配及垃圾回收机制初探
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • windows-nginx-https-本地配置
  • Xmanager 远程桌面 CentOS 7
  • 高程读书笔记 第六章 面向对象程序设计
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 漂亮刷新控件-iOS
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 说说动画卡顿的解决方案
  • 通过git安装npm私有模块
  • 用Visual Studio开发以太坊智能合约
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Semaphore
  • UI设计初学者应该如何入门?
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​flutter 代码混淆
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • $L^p$ 调和函数恒为零
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (第二周)效能测试
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (论文阅读40-45)图像描述1
  • (一)appium-desktop定位元素原理
  • .gitignore
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net MVC + EF搭建学生管理系统
  • .net 验证控件和javaScript的冲突问题
  • .NET连接数据库方式
  • .Net面试题4
  • .net中我喜欢的两种验证码