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

    2.3   程序破解

    20135318 刘浩晨

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

    NOPNOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)

    JNE条件转移指令,如果不相等则跳转。(机器码:75)

    JE条件转移指令,如果相等则跳转。(机器码:74)

    JMP无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)

    CMP比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。 
    2、掌握反汇编与十六进制编程器

    (1)通过反汇编求出登录密码

    打开终端,输入objdump –d name,找到main函数:

    (objdump是gcc工具,用来查看编译后目标文件的组成)

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

    esp+0x1c为首地址被定义为:0x963d3301

    esp+0x18为首地址被定义为:0x00000000

    如果从低地址往高地址连续的就是01 33 3d 96,即为20135318(密码)

    (2)修改可执行文件,玩转密码登陆

    实践目的:不管密码输入正确与否都可以正常登陆。

    代码name.c:

     

    运行测试:

     

    使用objdump -d a.out查看main:

     

    为了跳过口令检查,也就是无论比较的结果如何,都正常登陆。

    jne是条件跳转,如果条件满足,则跳转到80484b7;

    jne下两行可知是输出内容;

    jmp是跳转语句(没有条件,则直接跳转),直接跳到80484ca;

    jmp下两行也是输出内容。

    jne表示当比较不相等时,跳转。也就是说,当输入与已存口令不相等时,跳转到jmp下一行mov(80484be),如果比较结果相等,则执行jne下两行mov、callq行,说明,执行mov、callq行输出的为“OK!”。

    现在可以明确,需要修改红线处,使其在比较结果不等时也跳转到下一行。

    所以,将0e改为00即可。

    使用vi编辑器进入a.out,输入:%!xxd

     

    输入/750e,找到其位置

      

    将0e改为00:,然后输入:%!xxd –r,保存退出。

     

    再次查看main:

     

    测试结果:(无论输入什么,都表示正确)

     

    3、掌握可执行文件的基本格式

    Linux可执行文件格式为ELF即Executable and Linkable Format。

    ELF格式:

    ELF header

    program header table

    .txt .rodata .data

    Section header table

        详细内容可以见ELF文件格式分析。

     

  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/lhc-java/p/5549549.html
Copyright © 2011-2022 走看看