Linux实践:文件破解
Linux实践:文件破解
标签(空格分隔): 20135321余佳源
一、掌握NOP、JNE、JE、JMP、CMP汇编指令的机器码
- NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
- JNE:条件转移指令,如果不相等则跳转。(机器码:75)
- JE:条件转移指令,如果相等则跳转。(机器码:74)
- JMP:无条件转移指令。
- 段内直接短转Jmp short(机器码:EB)
- 段内直接近转移Jmp near(机器码:E9)
- 段内间接转移Jmp word(机器码:FF)
- 段间直接(远)转移Jmp far(机器码:EA)
- CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
二、掌握反汇编与十六进制编程器
1. 通过反汇编求出用户名、密码
1.编写一个简单的需要验证密码的程序
代码相当简单,对应密码是20135321。
2.编译并运行查看其结果
3.在终端使用指令objdump -d fish进行反汇编查看
4.找到main函数
可以看到图中有一句cmp的比较语句,然后使用了一个jne即不符合条件时跳转,这里就是比较输入密码和设定密码,不等就跳转。而这两个密码对应存放的寄存器则是,0x1c和0x18。而0x1c中的16进制数对应的十进制数就是设定的密码20135321,0x18中的值是原定的0。
而0x75 0e表示jne指令的跳转量为0x0e,从0x8048456跳转到0x8048464一行(即imp一行)。也就是说,当输入与已存口令不相等时,就不会执行函数调用(call)。
那么,如果要破解程序使得无论输入的口令是否是正确的,都可以实现函数调用,就需要将这条jne指令修改一下,使得其跳转到0x8048458行的movl处,从而顺利执行call语句。也就是说其实这个jne被修改成原地回旋跳。
5.程序破解
- vi打开login,输入“:%!xxd”
- 输入指令“/750e”查找到那个位置,确定位置后“INSERT”将其修改为7500
- 输入“:%!xxd -r”并输入“:wq”保存
- 成功破解
- 开启反汇编验证修改
三、其他的破解方式
把不相等时跳转到输入错误的处理语句jne改成相等时跳转到输入错误的处理语句je。找到即将修改的750e字段,将表示jne的75修改为74(表示je,即相等时跳转),可以将程序修改成输入正确密码时,输出Failed!输入错误密码时输出Hello Fish!
修改cmp指令的对象,使得比较结果永远相等,就是把要对比的两个寄存器数值0x1c和0x18进行修改,把两者修改同为1c或者18。使得不管输入什么,对比的结果都将是一样,而程序的输出结果都是Hello Fish!
Linux实践:文件破解的更多相关文章
- LINUX实践--程序破解
实验思想 本次实验的主要思想有两个,第一个是修改跳转指令,把它变成无条件跳转使得无论输入什么用户名都跳转到失败的那个选项中去,第二个思想是修改比对的内容,即不判断条件,从而成功 实验步骤 1.首先从老 ...
- 【实践报告】Linux实践三
Linux实践——程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP ...
- linux实践之程序破解
linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on y ...
- linux实践之ELF文件分析
linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...
- Linux Makefile文件编写详细步骤与实践
Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...
- linux普通文件权限和系统目录权限的实践及结论
测试结论:linux普通文件的读.写.执行权限说明 1.可读r:表示具有读取\阅读文件内容的权限 2.可写w:表示具有新增.修改文件内容的权限 1)如果没有r配合,那么vi编辑文件会提示无法编辑(但可 ...
- Linux 本地文件或文件夹上传服务器
Linux 本地文件或文件夹上传服务器 一.权限设置 本地文件或文件夹上传服务器,你首先需要获取到root权限: 二.上传方式 上传方式有两种 : 1.通过 FTP 客户端上传文件或文件夹: 2.通过 ...
- linux清空文件内容的几种方式与区别
虽然linux清空文件内容的方式有很多种,但是他们之间有着细微的差别.通过实践我将他们分为两类: 将文件清空,文件大小为0k $ : > filename $ > filename $ ...
- 其他综合-使用Xshell远程连接管理Linux实践
使用Xshell远程连接管理Linux实践 1. Xshell整体优化 1)点击 工具 ,然后选择 选项 2)在 常规 选项中,下面的存放路径根据个人爱好修改(可选默认) 3)在 更新 选项中,将 √ ...
随机推荐
- oracle经验记录
1.添加新User时必须要增加的角色权限:connect.dba.resource 2.添加表空间的语句 create tablespace DEMOSPACE datafile 'D:/test.d ...
- Apha冲刺! Day2 - 砍柴
Alpha冲刺! Day2 - 砍柴 今日已完成 晨瑶:没做和主项目相关的事情,除了教队友用gitkraken. 昭锡:学习LitePal对数据库进行操作. 永盛:切换 API 管理平台,继续撰写 A ...
- JS思维导图(转)
思维导图不得不说是学习及温习的极佳方法,这里转载一波网上他人的精品JS思维导图十张,共同学习,如有冒犯原著可联系本人及时处理.
- activiti获取可回退的节点
在处理流程回退时,需要获取某个节点当前可以回退到的节点,简单分析下: 1. 只支持回退到userTask. 2. 如果流程流转过某节点时生成了多个任务,从其中某一个任务回退到该节点后,不处理另外的任务 ...
- ajax 数据类型结构
- session、cookie 记住登录状态的实现
Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...
- 导入其他python文件或者python文件的函数
from abc import xxx 从abc的py文件导入一个具体的函数或者类 import abc 直接导入文件 a.b写在同一个文件目录下,a要使用b,直接import就可以了
- PAT A1140 Look-and-say Sequence (20 分)——数学题
Look-and-say sequence is a sequence of integers as the following: D, D1, D111, D113, D11231, D112213 ...
- TP4212 FM9836C
今天拆了两个充电宝,发现充电宝的电路是由一个集成芯片控制的.芯片型号:TP4212, FM9836C,
- java算法----排序----(7)堆排序
package log; import java.util.Arrays; public class Test4 { /** * 堆排序 * * @param args */ public stati ...