20135323符运锦----LINUX第三次实践:程序破解
程序破解
一、掌握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)通过反汇编求出用户名、密码
首先,使用EXP进行分析,输入指令 objdump -d exp后,找到MAIN函数

这里的截图是刚好在scanf函数之后的,因为我们是要比较输入的和提前设置好的变量相比较。我又找到strcmp这个函数之前的几句有两个lea语句,也就是找了两个地址。那么strcmp比较的应该就是这两个为首地址的两个字符串。先看esp+0x38这里在前面有没有定义:

那么可以看到:
esp+0x38为首地址被定义为:0x696d6461
esp+0x3c为首地址被定义为:0x0000006e
如果从低地址往高地址连续的就是61 64 6d 69 6e 00 00 00
转换为字符表示为:admin

同样的我们看到另外一个比较的地址是esp+0x42和esp+0x46
Esp+0x42是0x79736165,由低到高就是65 61 73 79
转换为字符表示为:easy
登录成功后,如下图

(2)修改可执行文件
我主要实现任何密码都可以登录,使用的是老师上课使用的login代码
objdump –d login 查看main:

为了跳过口令检查,也就是无论比较的结果如何,都正常登陆。
jne是条件跳转,如果条件满足,则跳转到8048466;jne下两行可知是输出内容;
jmp是跳转语句(没有条件,则直接跳转),直接跳到8048472;jmp下两行也是输出内容。
jne表示当比较不相等时,跳转。也就是说,当输入与已存口令不相等时,跳转到jmp下一行mov(8048466),如果比较结果相等,则执行jne下两行mov、callq行,说明,执行mov、callq行输出的为正确的。
现在可以明确,需要修改使其在比较结果不等时也跳转到下一行。所以,将0e改为00即可。下一步,使用vi进入login,输入:%!xxd

输入/750c,将0c改为00:,然后输入:%!xxd –r,最后再输入:wq
发现其已经被改正。

测试结果如下,发现输入任何东西都可以输出正确的结果

三、掌握可执行文件的基本格式##
Linux可执行文件格式为ELF即Executable and Linkable Format。
ELF格式:
ELF header
program header table
.txt .rodata .data
Section header table
详细内容可以见4.2ELF文件格式分析。
补充
①不可以正常登陆,即需要无条件跳转到错误的地方,无条件跳转为jmp,则同理需要将750e改成eb0e.(eb为无条件跳转);
②同理若需要出现相反效果,即输入正确密码不能登录,输入错误密码能够登陆。则需要将其改为740e。
20135323符运锦----LINUX第三次实践:程序破解的更多相关文章
- 20135323符运锦----LINUX第二次实践:内核模块编译
Linux实践二--模块 一.知识点总结 ①Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率 ...
- 20135323符运锦----第三周:构建一个简单的Linux系统MenuOS
相关知识点 1.arch目录 占据相当庞大的空间,X86目录下代码需要重点关注. 2.init目录 内核启动的相关代码基本都在此目录下,内含MAIN.C,文件中START_KERNEL是整个LINUX ...
- 20135323符运锦期中总结----Linux系统的理解及学习心得
一.网易云课堂 1.各章节总结 第一周:计算机是如何工作的http://www.cnblogs.com/20135323fuyunjin/p/5222787.html 第二周:操作系统是如何工作的ht ...
- 20135323符运锦----第七周:Linux内核如何装载和启动一个可执行程序
可执行程序的装载 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 ①编译器预处理 gcc -E -o XX.cpp XX.c (-m32)// 注:把include的文件包含进来, ...
- LINUX第三次实践:程序破解
LINUX第三次实践:程序破解 标签(空格分隔): 20135328陈都 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP ...
- linux第三次实践:ELF文件格式分析
linux第三次实践:ELF文件格式分析 标签(空格分隔): 20135328陈都 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文 ...
- linux专题三之如何悄悄破解root密码(以redhat7.2x64为例)
root用户在linux系统中拥有至高无上的权限.掌握了root密码,差不对可以对linux系统随心所欲了,当然了,root用户也不是权限最高的用户. 但是掌握了root密码,基本上够我们用了.本文将 ...
- Linux课程实践三:简单程序破解
一.基本知识 1. 常用指令机器码 不同版本对应机器码不同,这里以我做实验的kali(Intel 80386)为例. 指令 作用 机器码 nop 无作用(no operation) 90 call 调 ...
- LINUX实践--程序破解
实验思想 本次实验的主要思想有两个,第一个是修改跳转指令,把它变成无条件跳转使得无论输入什么用户名都跳转到失败的那个选项中去,第二个思想是修改比对的内容,即不判断条件,从而成功 实验步骤 1.首先从老 ...
随机推荐
- MySQL 聚簇索引和非聚簇索引的认识
聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法.特点是存储数据的顺序和索引顺序一致.一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引. 在<数据库原理&g ...
- SSM框架下使用websocket实现后端发送消息至前端
本篇文章本人是根据实际项目需求进行书写的第一版,里面有些内容对大家或许没有用,但是核心代码本人已对其做了红色标注.文章讲解我将从maven坐标.HTML页面.js文件及后端代码一起书写. 一.mave ...
- <20180923>中秋节日期间的维护日志
(一) 陌生环境下断网是有风险的,提前做好准备. 1.1 某企业的机柜自2017年5月开始就没有作硬件更新和维护了: 趁着这次节日空挡可做一个机柜的重新整理维护: 首先看了下是老款某知名品牌的型号为6 ...
- Hunter -- 批量文件管理工具
一个简单工具, 用来进行批量文件的重命名, 更改后缀, 搜索特定后缀, 等 下载地址:http://download.csdn.net/download/kuangsun/7545179
- (一 ) 天猫精灵接入Home Assistant-服务器搭建
()1登陆阿里云 https://ecs.console.aliyun.com/?spm=5176.2020520001.0.0.6B1Uov#/home 账号dongdongmqtt 密码***** ...
- 表情存储异常--mybatis抛出异常(java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1)
文章参考 https://blog.csdn.net/junsure2012/article/details/42171035 https://www.cnblogs.com/WangYunShuai ...
- android 通讯类资料整理
https://github.com/koush/AndroidAsync(websocket) https://github.com/loopj/android-async-http http:// ...
- 如何应用ML的建议-上
本博资料来自andrew ng的13年的ML视频中10_X._Advice_for_Applying_Machine_Learning. 遇到问题-部分(一) 错误统计-部分(二) 正确的选取数据集- ...
- [03-01] JSP自定义标签
1.自定义标签的概念 目前我们在JSP中使用的标签都是HTML的标签,浏览器会自动解析运行,例如<form action=""></form>,这里的for ...
- angularjs的ng-change事件演示
今天练习angularjs的ng-change事件. 比如用户作出选择时,系统所指定的选项中,没有用户合适的选项.此时我们可以让用户填写. 刚开始文本框是隐藏的.当用户选择了checkbox之后才会显 ...