• linux实践——简单程序破解


    一、运行login可执行程序,屏幕显示需要输入密码,随便输入一串字符,结果是Drop dead!

    二、objdump -d login,对login进行反汇编,找到main函数,找到含有scanf的那一行,再看接下来几行,发现有cmp指令进行比较,比较的寄存器是1c和18,找到main函数开始几行,发现1c被赋值7fe,转换成十进制后是2046。再次执行login,输入2046,结果是on your command,my master!破解成功。

    三、修改代码,改变程序功能。

    vi login
    

    :%!xxd
    

    /750e
    

    进入insert模式修改十六进制数
    
    :%!xxd -r
    

    :wq
    

    /login
    

    1.如下图所示,程序进行比较后,不相等时跳转到输入错误的处理语句。找到即将修改的750e字段,将表示jne的75修改为74(表示je,即相等时跳转)或90(nop无效指令),可以将程序修改成输入正确密码时,输出Drop dead!输入错误密码时输出on your command,my master!

    2.如下图所示,修改cmp指令的对象,使得比较结果永远相等。不管输入什么,结果都是on your command,my master!

    3.如下图所示,将含有scanf字符的那一行指令的十六进制数都改为无效指令。结果为直接输出Drop dead!然后再如1、2修改一下,就可以直接输出on your command,my master!

    4.本项修改时尝试修改!将1c和18存储的数值改成一样的。执行login,结果是不管输入什么,结果都是on your command,my master!(不知道是为何如此,按理来说18存储的是输入的密码的值,应该没有变化的……)

    5.程序还有很多其他的改法,在此就不一一列举的。欢迎讨论交流~

    6.以上

  • 相关阅读:
    golang ---cron
    Maven私库安装与配置
    Java8新特性之重复注解(repeating annotations)浅析
    String split
    如何将xml转为python中的字典
    json字符串和dict互转
    为什么空格拷贝到linux 会变成两个
    python之socket编程
    ntpdate设置
    Nginx配置ssl证书
  • 原文地址:https://www.cnblogs.com/whyfarrell/p/5544449.html
Copyright © 2020-2023  润新知