• 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文件格式分析。

     

  • 相关阅读:
    android 的 ExpandableListView Example Tutorial
    EOS token 代币兑换的资料
    EOS 的网站及资料doc
    Cardano(ADA), EOS, RChain(RHOC), Aeternity(AE) 都是极其好的币
    zcash 的资料
    office很抱歉遇到一些临时服务器问题
    win10windows无法创建快捷方式 请检查磁盘
    FYI是什么意思?
    Wamp win10 1077error
    如何注销考拉?
  • 原文地址:https://www.cnblogs.com/lhc-java/p/5549549.html
Copyright © 2020-2023  润新知