• 该提不简单


    无语了,想给你们制造点悬念都没有了,哎!直接去做题吧
    解题链接: http://ctf5.shiyanbar.com/crack/3/
    关键字:
     破解 逆向 调试 
    破解[crackme1.zip](http://ctf5.shiyanbar.com/crack/3/CrackMe1.zip)压缩包的程序 
    要求:请找出用户名为hello的注册码

    下载并解压题目提供程序
    尝试运行程序 :


    Paste_Image.png

    Paste_Image.png

    发现输入错误的时候会有一个 AlertDialog 弹出 , 提示 "密钥无效"

    首先使用 bash 的 file 工具查看一下文件类型 :


    Paste_Image.png
    CrackMe1.exe: PE32 executable (GUI) Intel 80386, for MS Windows

    打开 IDA , 载入该程序 , 由于我们之前运行该程序的时候注意到了关键字符串 "密钥无效"
    这时可以通过搜索定位 "密钥无效"


    Paste_Image.png

    双击后面的注释跳转到 图形视图


    Paste_Image.png

    这里调用了这个函数 : sub_4011D0
    当返回值不为 0 的时候 , 就跳转到 密钥无效 的分支
    我们继续查看这个函数 : sub_4011D0
    直接 f5 反编译为 C代码


    Paste_Image.png

    Paste_Image.png

    通过分析可以知道 , 这段代码会将用户输入的用户名的每个字符遍历一遍
    把每个字符的序号(从 0 开始算)与这个字符的ASCII码的平方相乘 , 然后整体再加上序号 , 得到的和继续对 0x42 求余 , 最后将结果加上 33 , 然后再转为ASCII码
    然后再将上述结果连接在字符串 'Happy@' 之后构成注册码

    分析清楚了思路 , 然后就是写注册机

    #!/usr/bin/env python
    
    username = "Hello"
    counter = 0;
    password = "Happy@"
    for i in username:
        password = password + chr((counter + counter * ord(i) * ord(i)) % 0x42 + 33)
        counter = counter + 1
    print(password)

    运行后结果为 :


    Paste_Image.png

    得到 hello 用户的注册码为 : Happy@!GA0U


    Paste_Image.png


    作者:王一航
    链接:http://www.jianshu.com/p/6e7396cdb0f1
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    SQL 开窗函数
    使用 git 管理源代码
    mybatis常见问题
    es-删除记录
    Jmeter使用
    websocket在服务端获取客户端IP
    单点登录
    java中的HTTP客户端
    SpringBoot利用Redis管理分布式Session
    springboot中的统一异常处理
  • 原文地址:https://www.cnblogs.com/HacTF/p/7750734.html
Copyright © 2020-2023  润新知