当前位置: 首页 > article >正文

新160个crackme - 095-tengxingCrackMe_v1.1

运行分析

在这里插入图片描述

  • 需破解用户名和注册码

PE分析

在这里插入图片描述

  • Delphi程序,32位,无壳

静态分析&动态调试

在这里插入图片描述

  • ida找到关键字符串

在这里插入图片描述

  • 动调调试,Name长度为4~15

在这里插入图片描述

  • 遇到第一个循环:判断Serial必须为大小写字符或数字

在这里插入图片描述

  • 循环二:根据Name得到v23,判断v23与第一段Serial是否相等

在这里插入图片描述

  • 循环三:提取Name长度计算得到v34,判断v34与第二段Serial是否相等

在这里插入图片描述

  • 循环四:将Name从小到大进行排序,得到Name_move

在这里插入图片描述

  • 循环五:提取Name_move每一位计算得到v65,判断v65与第三段Serial是否相等

算法分析

  • 假设Name为4位,爆破Name和Serial
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
for Name_1 in s:
    for Name_2 in s:
        for Name_3 in s:
            for Name_4 in s:
                Name = Name_1 + Name_2 + Name_3 + Name_4
                Serial = []

                # 循环二:提取Name每一位得到v23,判断v23与第一段Serial是否相等
                for i in range(len(Name)):
                    v23 = 3 * len(Name) - 2 * (i+1) - 20 + ord(Name[i])
                    Serial.append(v23)

                # 循环三:提取Name_reverse每一位计算得到v34,判断v34与第二段Serial是否相等
                Name_reverse = Name[::-1]
                for i in range(len(Name_reverse)):
                    v34 = ord(Name_reverse[i]) + 3 * len(Name) - 3 * (i+1) - 20
                    Serial.append(v34)

                # 循环四:将Name从小到大进行排序,得到Name_move
                Name_move = [ord(i) for i in Name]
                n = 0
                while n == 0:
                    n = 1
                    for i in range(3):
                        if Name_move[i] > Name_move[i + 1]:
                            k = Name_move[i]
                            Name_move[i] = Name_move[i + 1]
                            Name_move[i + 1] = k
                            n = 0

                # 循环五:提取Name_move每一位计算得到v65,判断v65与第三段Serial是否相等
                for i in range(len(Name_move)):
                    v65 = Name_move[i] + (len(Name) - 3) * (len(Name) - 3) - 2 * (i+1) - 20
                    Serial.append(v65)

                Serial = "".join([chr(i)for i in Serial])
                n = 0
                for i in Serial:
                    if i in s:
                        pass
                    else:
                        n = 1
                        break
                if n == 0:
                    print(Name + '的Serial为:' + Serial)

在这里插入图片描述

在这里插入图片描述

  • 验证成功

http://www.kler.cn/a/388376.html

相关文章:

  • elasticsearch中使用fuzzy查询
  • 16 循环语句——for循环
  • WSL2上Ubuntu22.04安装Docker
  • 全国硕士研究生入学考试(考研)常识详解之初试科目:政治、外语、数学与专业课
  • 计算机网络概要与习题
  • Flink调优----资源配置调优与状态及Checkpoint调优
  • 界面控件DevExpress WPF中文教程:Data Grid——卡片视图设置
  • 初识Linux · 命名管道
  • 洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵
  • lua 编译网路核心
  • 【系统架构设计师】2024年下半年真题论文: 论多源异构数据集成方法(包括参考素材)
  • 理解 FPGA 的关键知识点整理
  • Scala 中 set 的实战应用 :图书管理系统
  • 华为ensp防火墙配置(纯享版)
  • web——[GXYCTF2019]Ping Ping Ping1——过滤和绕过
  • 【日志】力扣58.最后一个单词的长度//14.最长公共前缀//28. 找出字符串中第一个匹配项的下标
  • PHP API的路由设计思路
  • Java基础面试题
  • strerror函数详解
  • JavaScript缓存之Service Worker workbox
  • Library:Day-02
  • qt QPixmapCache详解
  • 解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递
  • b4tman / docker-squid 可快速安装运行的、容器型代理服务器 + podman
  • contos7.9 部署3节点 hadoop3.4 集群 非高可用
  • 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--访问权限中间件