一、基本知识

1. 常用指令机器码

  • 不同版本对应机器码不同,这里以我做实验的kali(Intel 80386)为例。
指令 作用 机器码
nop 无作用(no operation) 90
call 调用子程序,子程序以ret结尾 e8
ret 返回程序 c3
cmp 比较 c3
jmp 无条件跳转 eb
je/jz 若相等则跳转 74/84
jne/jnz 不相等则跳转 75/85
mov 传值 89
movl 长字传值 c7
  • 实际上使用更改的主要是跳转指令。

2. 修改工具

(1)反汇编:objdump

  • 输出目标文件的符号表:

      objdump -t obj

  • 输出目标文件的所有段概括

      objdump -h obj

  • 输出反汇编源代码结果

      objdump -d obj

(2)十六进制编程器

  • 查看文件的十六进制编码(输出规范的十六进制和ASCII码):

      hexdump -C obj

二、程序破解实践

1. login程序简述

  • 基本功能:模拟登陆过程。

  • 初始密码:2046

  • 登陆成功:

  • 登陆失败:

2. 使用反汇编查看login程序

objdump -d login
  • 找到main函数部分,可以看到:

  • 密码:07feH(即十进制2046)

  • 输入比较:

    • 若成功,继续执行后面的代码(804858),打印成功信息。
    • 若失败,则跳转到8048466处的代码,打印失败信息。

3. 修改程序

  • 基本步骤:

      - 用编辑器打开
    - 使用命令 `:%!xxd` 转换显示十六进制
    - 进行修改
    - 使用命令 `:%!xxd -r` 还原显示
    - 保存退出

(1)实现任何输入都成功登录

  • 找到比较 750e 处:

  • e更改为 0,不判断条件而是直接执行下面登录成功的代码:

  • 运行,任意输入密码验证:

(2)实现任何输入都无法成功登陆

  • 找到比较 750e 处:

  • 75更改为 eb,将条件跳转更改为无条件跳转,直接执行登陆失败的代码:

  • 运行,输入密码2046:

(3)实现密码更改

  • 找到密码 07fe 处:

  • 07fe 更改为 14c5(即十进制的5317),注意使用大端法写入:

  • 运行,输入原密码2046和新密码5317:

Linux课程实践三:简单程序破解的更多相关文章

  1. 20135337——Linux实践三:程序破解

    程序破解 查看 运行 反汇编,查看汇编码 对反汇编代码进行分析: 在main函数的汇编代码中可以看出程序在调用"scanf"函数请求输入之后,对 [esp+0x1c] 和 [esp ...

  2. Linux实践三:程序破解

    一.汇编指令机器码 二.反汇编与十六进制编程器 三.可执行文件的基本格式 hexdump -x login 用16进制数字显示login内容 objdump -x login 显示login中各个段以 ...

  3. 20135302魏静静——linux课程第三周实验及总结

    linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...

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

    2.3   程序破解 20135318 刘浩晨 1.     掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一 ...

  5. 信息安全系统设计基础课程实践:简单TUI游戏设计

    简单TUI游戏设计                目       录               一                      Curses库简介与基本开发方法             ...

  6. Linux课程实践一:Linux基础实践(SSH)

    一.SSH服务 1. 安装SSH (1)查看是否已经安装过ssh服务 rpm -qa |grep ssh (2)进行安装 sudo apt-get install openssh-server Ubu ...

  7. Linux课程实践一:Linux基础实践(基础操作)

    一.软件源维护 1. 基本操作 (1)查看源列表 sudo vim /etc/apt/sources.list deb:二进制软件安装包 deb-src:源码包 (2)备份软件源列表 sudo cp ...

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

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

  9. Linux多线程实践(9) --简单线程池的设计与实现

    线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以 ...

随机推荐

  1. 设置树莓派3 B+的静态IP

    修改/etc/dhcpcd.conf 文件 sudo vim /etc/dhcpcd.conf interface eth0 static ip_address= static routers=192 ...

  2. Junit4参数化测试实现程序与用例数据分离

    http://touchfu.iteye.com/blog/732930 现状:你是不是还在为自己的TestCase代码杂乱无章而苦恼,咎其根本还在于针对不同的用例,输入参数和mock信息的组装全部作 ...

  3. 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco

    Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...

  4. boost asio tcp server 拆分

    从官方给出的示例中对于 boost::asio::ip::tcp::acceptor 类的使用,是直接使用构造函数进行构造对象,这一种方法用来学习是一个不错的方式. 但是要用它来做项目却是不能够满足我 ...

  5. 【解决】AWS服务控制台中上传文件失败

    使用IE 11,在 AWS Services Console 中不管是 S3 还是 Elastic Beanstalk 的页面中上传页面都会失败,提示信息如下: A problem occurred ...

  6. 给iOS开发新手送点福利,简述文本属性Attributes的用法

    给iOS开发新手送点福利,简述文本属性Attributes的用法   文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...

  7. ShellExecute 使用方法

    ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 有几个API函数都可以实现这些功能,但是在大多数情况下She ...

  8. 如何在centos 6.7 上安装oracle 11gR2

    1.软件准备: centos6.7(64位); oracle11gR2((Linux x86-64)) 2.执行如下命令安装好相关的包: yum -y install \ binutils \ com ...

  9. 如何生成JavaAPI doc

    1         准备工作 1.1    填写完整的注释 对需要生成API的类,填写完整的注释,包括类注释,方法注释,具体格式如下: 类注释: 原先可能author是作者,需要修改成author英文 ...

  10. leetcode-【中等题】228. Summary Ranges

    题目: 228. Summary Ranges Given a sorted integer array without duplicates, return the summary of its r ...