zoukankan      html  css  js  c++  java
  • 20135337——Linux实践三:程序破解

    程序破解

    查看

    运行

    反汇编,查看汇编码

    对反汇编代码进行分析:


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

    动态调试

    运行目标程序,查看进程信息

    将gdb依附到目标进程:attach

    输入bt查看进程的运行栈情况,输入frame 7 进入main函数的栈帧:

    查看[esp+0x1c] 和 [esp+0x18] 两个内存单元的内容:x/ 查看内存信息

    测试密码:

    Vi打开login文件:修改目标文件的二进制代码

    输入 :%!xxd进入16进制编辑模式

    jne 8048466 对应的16进制数为75 0e,,搜索75 0e : 将75 0e 修改为eb 0c(即jmp 8048472(对应leave指令) )


    输入:%!xxd –r.:wq 保存二进制文件

    查看修改处(jne【750e】是不相等时转移,jmp【eb0c】无条件转移指令)

    再次启动本程序,任意输入口令都leave。

    需注意的是,在动态调试第一步运行完login后,需要另开一个终端,使login的相关进程能持续停留在内存中再进行相关修改。

  • 相关阅读:
    Spring学习之声明式事物管理
    SSH整合所需jar
    Spring学习之AOP
    常见MyEclipse报错—— serialVersionUID的作用
    Spring学习之基本概念
    Java基础——I/O续
    Java基础——I/O
    Vim学习总结
    Java基础——异常处理
    Git 学习总结
  • 原文地址:https://www.cnblogs.com/zzzz5/p/5527637.html
Copyright © 2011-2022 走看看