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
    Linux及安全实践三——程序破解

输出目标文件的所有段概括:objdump -h obj
Linux及安全实践三——程序破解

输出反汇编源代码结果:objdump -d obj
Linux及安全实践三——程序破解

(2)十六进制编程器
查看文件的十六进制编码(输出规范的十六进制和ASCII码):hexdump -C obj
Linux及安全实践三——程序破解

二、程序破解实践
1.登陆结果:
Linux及安全实践三——程序破解

  1. 使用反汇编查看login程序:objdump -d login
    找到main函数部分,可以看到:
    Linux及安全实践三——程序破解

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

  1. 修改程序:用编辑器打开,使用命令:%!xxd转换显示十六进制,进行修改,使用命令:%!xxd -r还原显示,保存退出
    (1)实现任何输入都成功登录
    找到比较750e处:
    Linux及安全实践三——程序破解

将e更改为0,不判断条件而是直接执行下面登录成功的代码,任意输入密码验证:
Linux及安全实践三——程序破解

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

运行,输入密码2046:
Linux及安全实践三——程序破解

(3)实现密码更改
找到密码07fe处,将07fe更改为14bd(即十进制的5309),注意使用大端法写入:
Linux及安全实践三——程序破解

运行,输入原密码2046和新密码5309:
Linux及安全实践三——程序破解

上一篇:SpringBoot+POI报表批量导出


下一篇:Java基础知识二次学习--第三章 面向对象