zoukankan      html  css  js  c++  java
  • 《Linux内核分析》实践3

    《Linux》实践——程序破解

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

    • NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
    • JNE:条件转移指令,如果不相等则跳转。(机器码:75)
    • JE:条件转移指令,如果相等则跳转。(机器码:74)
    • JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)
    • CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

    二、掌握反汇编与十六进制编程器

    • 指令“objdump -d login”查看反汇编代码

    • 将750e改为7500
      (改为74e0也可以,但是正确的密码输入会出错)
      注:为了跳过口令检查,也就是无论比较的结果如何,都正常登陆。
      jne是条件跳转,如果条件满足,则跳转;
      jne下两行可知是输出内容;
      jmp是跳转语句(没有条件,则直接跳转)
      jmp下两行也是输出内容。
      jne表示当比较不相等时,跳转。也就是说,当输入与已存口令不相等时,跳转到jmp下一行mov,如果比较结果相等,则执行jne下两行mov、call行,说明,执行mov、call行输出的为“right”。
      现在可以明确,需要修改红线处,使其在比较结果不等时也跳转到下一行。
      所以,将0e改为00即可。

    • vi打开login,输入“:%!xxd”

    • 输入:/750e查找到那个位置,比对四周,确定位置后将其修改为7500

    • 输入“:%!xxd -r”保存

    • 输入“:wq”保存

    • 运行login测试结果

    思考:
    1.不可以正常登陆,即需要无条件跳转到错误的地方,无条件跳转为jmp,则同理需要将750e改成eb0e.(eb为段内无条件跳转,无条件跳转到错误的地方);
    2.同理若需要出现相反效果,即输入正确密码不能登录,输入错误密码能够登陆。则需要将其改为740e(74的判断条件和75正好相反)。

  • 相关阅读:
    SpringMVC Controller介绍及常用注解
    spring Handler 映射
    如何更高效的对首页数据的展示
    设计表时给哪些字段加索引,索引的用处,以及能不能给所有字段加索引
    spring mybatis解决application.properties注入变量问题
    Spring配置中的id和name属性区分
    @RequestBody和@RequestParam区别
    SpringMVC中controller中方法返回类型为ResponseEntity乱码的问题
    扩展springMVC消息转换器来支持jsonp数据格式
    SpringMVC——消息转换器HttpMessageConverter
  • 原文地址:https://www.cnblogs.com/shadow135211/p/5528780.html
Copyright © 2011-2022 走看看