Linux课题实践三——程序破解

时间:2022-12-31 23:06:55

2.3   程序破解

20135318 刘浩晨

1、     掌握NOP、JNE、JE、JMP、CMP汇编指令的机器码

NOPNOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)

JNE条件转移指令,如果不相等则跳转。(机器码:75)

JE条件转移指令,如果相等则跳转。(机器码:74)

JMP无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)

CMP比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。 
2、掌握反汇编与十六进制编程器

(1)通过反汇编求出登录密码

打开终端,输入objdump –d name,找到main函数:

(objdump是gcc工具,用来查看编译后目标文件的组成)

Linux课题实践三——程序破解

在main函数的汇编代码中可以看出程序在调用“scanf”函数请求输入之后,对 [esp+0x1c] 和 [esp+0x18]
两个内存单元的内容进行了比较,其作用应该是对比用户输入和预设口令。

esp+0x1c为首地址被定义为:0x963d3301

esp+0x18为首地址被定义为:0x00000000

如果从低地址往高地址连续的就是01 33 3d 96,即为20135318(密码)

(2)修改可执行文件,玩转密码登陆

实践目的:不管密码输入正确与否都可以正常登陆。

代码name.c:

Linux课题实践三——程序破解

运行测试:

Linux课题实践三——程序破解

Linux课题实践三——程序破解

使用objdump
-d a.out查看main:

Linux课题实践三——程序破解

为了跳过口令检查,也就是无论比较的结果如何,都正常登陆。

jne是条件跳转,如果条件满足,则跳转到80484b7;

jne下两行可知是输出内容;

jmp是跳转语句(没有条件,则直接跳转),直接跳到80484ca;

jmp下两行也是输出内容。

jne表示当比较不相等时,跳转。也就是说,当输入与已存口令不相等时,跳转到jmp下一行mov(80484be),如果比较结果相等,则执行jne下两行mov、callq行,说明,执行mov、callq行输出的为“OK!”。

现在可以明确,需要修改红线处,使其在比较结果不等时也跳转到下一行。

所以,将0e改为00即可。

使用vi编辑器进入a.out,输入:%!xxd

Linux课题实践三——程序破解

输入/750e,找到其位置

Linux课题实践三——程序破解

将0e改为00:,然后输入:%!xxd –r,保存退出。

Linux课题实践三——程序破解

Linux课题实践三——程序破解

再次查看main:

Linux课题实践三——程序破解

测试结果:(无论输入什么,都表示正确)

Linux课题实践三——程序破解

3、掌握可执行文件的基本格式

Linux可执行文件格式为ELF即Executable and Linkable Format。

ELF格式:

ELF header

program header table

.txt .rodata .data

Section header table

详细内容可以见ELF文件格式分析。

 

Linux课题实践三——程序破解的更多相关文章

  1. Linux及安全实践三——程序破解

    Linux及安全实践三--程序破解 一.基本知识 常用指令机器码 指令 作用 机器码 nop 无作用(no operation) 90 call 调用子程序,子程序以ret结尾 e8 ret 返回程序 ...

  2. Linux课题实践五——字符集总结与分析

    Linux课题实践三——字符集总结与分析 20135318  刘浩晨 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字 ...

  3. LINUX第三次实践:程序破解

    LINUX第三次实践:程序破解 标签(空格分隔): 20135328陈都 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP ...

  4. linux实践之程序破解

    linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on y ...

  5. Linux课题实践一

    Linux课题实践一 20135318 刘浩晨 1.1应用安装 (1)掌握软件源的维护方法,配置系统使用软件源镜像  删除过期或者重复的软件包:进入”系统设置“-”软件和更新”-”ubuntu软件“- ...

  6. 20135323符运锦----LINUX第三次实践:程序破解

    程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 ①NOP:NOP指令即"空指令".执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行N ...

  7. Linux课程实践三:简单程序破解

    一.基本知识 1. 常用指令机器码 不同版本对应机器码不同,这里以我做实验的kali(Intel 80386)为例. 指令 作用 机器码 nop 无作用(no operation) 90 call 调 ...

  8. linux实践——简单程序破解

    一.运行login可执行程序,屏幕显示需要输入密码,随便输入一串字符,结果是Drop dead! 二.objdump -d login,对login进行反汇编,找到main函数,找到含有scanf的那 ...

  9. Linux课题实践四——ELF文件格式分析

    2.4   ELF文件格式分析 20135318 刘浩晨 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目 ...

随机推荐

  1. redis数据类型之—List

    (1)list 简单介绍 list是一个有序的字符串列表,是使用双向列表实现的,可以实现最新消息排行.消息队列等功能. (2) list 常用命令

  2. 《数据结构与算法分析》学习笔记(三)——链表ADT

    今天简单学习了下链表,待后续,会附上一些简单经典的题目的解析作为学习的巩固 首先要了解链表,链表其实就是由一个个结点构成的,然后每一个结点含有一个数据域和一个指针域,数据域用来存放数据,而指针域则用来 ...

  3. day5----正则

    %a    本地(locale)简化星期名称     %A    本地完整星期名称     %b    本地简化月份名称     %B    本地完整月份名称     %c    本地相应的日期和时间 ...

  4. HDU 5675 ztr loves math

    ztr loves math Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  5. Exception in thread "main" java.io.IOException: Failed to set permissions of path

    在跑BuildForest的时候,编写了下面的程序: package test.breiman; import org.apache.mahout.classifier.df.mapreduce.Bu ...

  6. MvcPager分页控件以适用Bootstrap

    随笔- 9  文章- 0  评论- 33  修改MvcPager分页控件以适用Bootstrap 效果(含英文版,可下载)   软件开发分页效果必不可少,对于Asp.Net MVC 而言,MvcPag ...

  7. node中定时器, process.nextTick(), setImediate()的区别与联系

    1.定时器 setTimeout()和setInterval()与浏览器中的API是一致的,定时器的问题在于,他并非精确的(在容忍范围内).尽管事件循环十分快,但是如果某一次循环占用的时间较多,那么下 ...

  8. mysql中常用的函数

    -- 基本上都是抄的别人整理的 -- 一.数学函数 ABS(x) -- 返回x的绝对值 BIN(x) -- 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) -- 返回大于 ...

  9. About the Mean Shift

    Mean Shift算法,一般是指一个迭代的过程.即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束. meanshift可以被用来做目标跟踪和图像 ...

  10. Cpp读文件、CString转String、String转CString

    场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...