• 该提不简单


    无语了,想给你们制造点悬念都没有了,哎!直接去做题吧
    解题链接: 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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    AcWing 243. 一个简单的整数问题2 (树状数组)打卡
    AcWing 241. 楼兰图腾 (树状数组)打卡
    AcWing 233. 换教室 (期望DP+floyd)打卡
    AcWing 234. 放弃测试 (01分数规划)打卡
    AcWing 232. 守卫者的挑战 (期望DP)打卡
    AcWing 231. 天码 (容斥)打卡
    AcWing 230. 排列计数 水题(组合数+错排)打卡
    AcWing 229. 新NIM游戏 (线性基+博弈论)打卡
    AcWing 228. 异或 (dfs+线性基)打卡
    pstStream->pstPack[i].pu8Addr详解
  • 原文地址:https://www.cnblogs.com/HacTF/p/7750734.html
Copyright © 2020-2023  润新知