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

Linux及安全实践三——程序破解
一、基本知识

  1. 常用指令机器码
    指令 作用 机器码
    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.登陆结果:

  1. 使用反汇编查看login程序:objdump -d login
    找到main函数部分,可以看到:

密码:07feH(即十进制2046)
3. 修改程序:用编辑器打开,使用命令:%!xxd转换显示十六进制,进行修改,使用命令:%!xxd -r还原显示,保存退出
(1)实现任何输入都成功登录
找到比较750e处:

将e更改为0,不判断条件而是直接执行下面登录成功的代码,任意输入密码验证:

(2)实现任何输入都无法成功登陆
找到比较750e处,将75更改为eb,将条件跳转更改为无条件跳转,直接执行登陆失败的代码:

运行,输入密码2046:

(3)实现密码更改
找到密码07fe处,将07fe更改为14bd(即十进制的5309),注意使用大端法写入:

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

原文地址:https://www.cnblogs.com/lxq20135309/p/5551642.html