新160个crackme - 064-CR-Game0.7

运行分析

在这里插入图片描述

  • 需破解Name、Company、Serial

PE分析

在这里插入图片描述

  • 32位程序,EP Section为.text,猜测无壳

静态分析&动态调试

在这里插入图片描述

  • ida搜索关键字符串,双击进入函数

level 0

在这里插入图片描述
在这里插入图片描述

  • 动调sub_401403函数,注释如上
  • Serial输入JPL-168-39,level 0通过

level 1

  • 需要满足Serial值为CR-Game vXO,且因第8位为空格,第11位需减去31
  • O的ascii值为79,减去31后为48,即数字0,因此Serial最终值为CR-Game vX0
    在这里插入图片描述
    在这里插入图片描述
  • 验证成功,点击确定后,左下角Level变为Level 002

level 2

在这里插入图片描述

  • sub_401403函数处按X返回上一层函数,发现了level 1-7的函数

在这里插入图片描述

  • 动态调试level 2函数sub_4014C7,得到Serial为2leveL1GC,其中第7位ascii值要-59,即第7位=108-59=49=‘1’

在这里插入图片描述

  • 验证成功

level 3

在这里插入图片描述

  • 动调level 3函数sub_40154B,注释如上,逻辑如下:
  • 1、Name长度为5~20
  • 2、Name字母小写转大写
  • 3、提取Name每个字符-65,找到其对应v7下标处的字母,拼接在一起
  • 4、上述得到的值要等于Serial

Name = 'conceal'
Serial = ''
v7 = 'QWERTYUIOPASDFGHJKLZXCVBNM'Names = []
for i in range(len(Name)):Names.append(ord(Name[i])-32)for i in range(len(Names)):Serial += v7[Names[i] - 65]print(Name + '的Serial为:\n' + Serial)

在这里插入图片描述
在这里插入图片描述

  • 验证成功

level 4

在这里插入图片描述

  • 动调level 4函数sub_401602,注释如上,逻辑如下:
  • 1、Name长度为5~20,Serial长度为2倍Name
  • 2、循环一:提取Name每个字符,若为大写-65,找到其对应v7下标处的字母;若为小写-97,找到其对应v8下标处的字母
  • 3、循环二:提取Name每个字符,若为大写-65,找到其对应v8下标处的字母;若为小写-97,找到其对应v7下标处的字母
  • 4、上述得到的值要等于Serial

Name = 'conceal'
Serial = ''
v7 = 'QWERTYUIOPASDFGHJKLZXCVBNM'
v8 = 'polkiujmnhytgbvfredcxswqaz'for i in range(len(Name)):if ord(Name[i]) < ord('a') or ord(Name[i]) > ord('z'):Serial += v7[ord(Name[i]) - 65]else:Serial += v8[ord(Name[i]) - 97]for i in range(len(Name)):if ord(Name[i]) < ord('a') or ord(Name[i]) > ord('z'):Serial += v8[ord(Name[i]) - 65]else:Serial += v7[ord(Name[i]) - 97]print(Name + '的Serial为:\n' + Serial)

在这里插入图片描述

在这里插入图片描述

  • 验证成功

level 5

在这里插入图片描述

  • 动调level 5函数sub_40172D,注释如上,逻辑如下:
  • 1、Name长度为5~20,Serial长度与Name长度相等
  • 2、循环一:Name小写字母转大写字母
  • 3、循环二:提取Name每个字符,找到其对应在v10的下标k
  • 4、需要满足v9[k] = Serial[k]

Name = 'conceal'
Serial = ''
v10 = 'QWERTYUIOPASDFGHJKLZXCVBNM'
v9 = 'pOlKiUjmnhytgbVfredCXSwqaZ'for i in range(len(Name)):if ord(Name[i]) >= ord('a'):k = v10.index(chr(ord(Name[i]) - 32))Serial += v9[k]else:k = v10.index(chr(ord(Name[i])))Serial += v9[k]print(Name + '的Serial为:\n' + Serial)

在这里插入图片描述
在这里插入图片描述

  • 验证成功

level 6

在这里插入图片描述

  • 动调level 6函数sub_401823,注释如上,逻辑如下:
  • 1、Name长度大于4,company存在,Serial长度大于9
  • 2、Serial第一位为’J’,第二位为’i’,第三位为’P’
  • 3、通过计算,得到Serial第4-14位
  • 4、提取Name每个字符,小写字母转大写字母,再减去61,找到v7[字符]下标对应字母,拼接到Serial第14位之后

Name = 'conceal'
company = 'bear'
Serial = 'JiP'# 初始化Serial
Serials = [ord(i)for i in Serial]
Serials.extend([32]*30)# 计算Serial第4/5/5位
Serials[3] = (ord(company[0]) & 6) + ord(Name[0])
Serials[4] = (ord(Name[0]) & 9) + ord(company[0])Name_0_3 = int("".join([hex(ord(Name[i]))[2:]for i in range(3,-1,-1)]),16)
Serial_9_13 = hex(Name_0_3 + ((0x20202020 ^ Name_0_3) & 0x9070503))[2:]
Serials[9] = int(Serial_9_13[6:],16)
Serials[10] = int(Serial_9_13[4:6],16)
Serials[11] = int(Serial_9_13[2:4],16)
Serials[12] = int(Serial_9_13[0:2],16)# 匹配v7下标
v7 = 'JiP4ZAQWSXCDERFVBGTYHNMJUIKLOP'
for i in range(len(Name)):if ord(Name[i]) >= 97:Serials[13 + i] = ord(v7[ord(Name[i]) - 32 - 61])else:Serials[13 + i] = ord(v7[ord(Name[i]) - 32])print(Name + '的Serial为:\n' + "".join([chr(i) for i in Serials]))

在这里插入图片描述
在这里插入图片描述

  • 验证成功

level 7

在这里插入图片描述

  • 动调level 7函数sub_401967,注释如上,逻辑如下:
  • 1、Serial长度为16,Company长度小于17,Name长度小于17
  • 2、通过sub_4012E8函数对Serial进行计算,得到v3
  • 3、Name+company的值与v3相等

在这里插入图片描述

  • 进入sub_4012E8函数进行分析,发现是3个字符处理一次,且有个sub_4011DB函数未知

在这里插入图片描述
在这里插入图片描述

  • 发现码表和取下标操作,是base64decode特征,猜测sub_4012E8函数被base64decode函数

Name = 'conceal'	# Name+Company长度为10-12
company = 'bear'import binascii
Serial = binascii.b2a_base64((Name+company).encode()).decode()print(Serial)

在这里插入图片描述

在这里插入图片描述

  • 直接用python的binascii库进行base64decode逆向运算(即base64加密正向运算)
  • Name + Company长度必须为10-12位,这样base64加密后,Serial长度才是16位
  • 验证成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431636.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …

计算机毕业设计 基于SpringBoot框架的网上蛋糕销售系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

基于springboot+vue的新闻推荐系统

基于springbootvue的新闻推荐系统 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求&#xff0c;创建了一个计算机…

探索AI编程新境界:aider库揭秘

文章目录 **探索AI编程新境界&#xff1a;aider库揭秘**背景&#xff1a;为何选择aider&#xff1f;简介&#xff1a;aider是什么&#xff1f;安装指南&#xff1a;如何安装aider&#xff1f;功能演示&#xff1a;aider的简单用法实战应用&#xff1a;aider在不同场景下的使用常…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

写一个智慧物流园区的提货滚动看板系统

先看效果&#xff1a; 需求分析 作为5A级智慧物流园&#xff0c;每天几百辆的车流量&#xff0c;前台人工查询效率慢&#xff0c;客户急需解决客户查询货单慢的问题提升效率&#xff0c;减少车辆堵塞 第一步编写接口读取数据库数据&#xff1a; 第二步写前端展示代码&#xff1…

AI 文生图快速入门教程:让 Stable Diffusion 更易于上手

Stable Diffusion 是一个强大的 AI 图像生成工具&#xff0c;但它可能会消耗大量资源。在本指南中&#xff0c;我们将学习如何使用 AUTOMATIC1111 的 Stable Diffusion WebUI 来设置它。同时&#xff0c;我们将在 DigitalOcean GPU Droplet 云服务器上运行它&#xff0c;通过 H…

虚拟硬盘数据恢复(vmdk、vdi、vhd等虚拟磁盘文件)

我们用的虚拟机有时候用着用着就启动不起来了&#xff0c;可能是操作系统启动扇区出了问题或者硬盘数据损坏。如果还有重要的数据文件在虚拟机里面&#xff0c;不要慌&#xff0c;一般只是操作系统的问题&#xff0c;硬盘里面的文件一般是不会丢失损坏的&#xff0c;即使磁盘有…

UE学习篇ContentExample解读------Blueprint_Communication-下

文章目录 总览描述批次阅览2.1 Using an Event Dispatcher function to call an event in the level Blueprint2.2 Binding an Event Dispatcher function to a custom event2.3 Binding an Event Dispathcer to a custom event on spawn3.1 Basic communication using a Bluep…

jQuery——函数的使用

1、作为一般函数调用&#xff1a;$ ( param ) ① 参数为函数&#xff1a;当 DOM 加载完成后&#xff0c;执行此回调函数 ② 参数为选择器字符串&#xff1a;查找所有匹配的标签&#xff0c;并将它们封装成 jQuery 对象 ③ 参数为 DOM 对象&#xff1a;将 DOM 对象封装成 jQu…

828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter

在追求创新与效率并重的今天&#xff0c;我们公司迎难而上&#xff0c;决定自主搭建一款短视频生成AI工具——MoneyPrinter&#xff0c;旨在为市场带来前所未有的创意风暴。面对服务器选择的难题&#xff0c;我们经过深思熟虑与多方比较&#xff0c;最终将信任票投给了华为云Fl…

SW - 将装配体保存成零件给其他装配体用

文章目录 SW - 将装配体保存成零件给其他装配体用概述笔记将子装配图另存为零件给其他装配图用打开另存后的零件图END SW - 将装配体保存成零件给其他装配体用 概述 想做一个散料飞达物料的布局图&#xff0c;初步想法是整一个装配体&#xff0c;然后出工程图标注上散料飞达料…

频谱分析仪:射频领域的多面手

频谱分析仪&#xff0c;作为射频领域的中心工具&#xff0c;其重要性不言而喻。它主要分为实时分析式和扫频式两大类&#xff0c;各自以其独特的方式在信号处理领域发挥着关键作用。实时分析式频谱仪能够即时捕获并分析非重复性、持续时间极短的信号&#xff0c;为科研人员提供…

Mybatis自定义TypeHandler,直接存储枚举类对象

在这篇文章中&#xff0c;我们已经知道如何使用枚举类直接接受前端的数字类型参数&#xff0c;省去了麻烦的转换。如果数据库需要保存枚举类的code&#xff0c;一般做法也是代码中手动转换&#xff0c;那么能不能通过某种机制&#xff0c;省去转换&#xff0c;达到代码中直接保…

C#知识|认识简单工厂的设计模式

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近了解到一个概念信创&#xff0c;即信息技术应用创新产业&#xff0c;是国产化的一个阶段&#xff0c;为了实现信息技术自主可控&#xff0c;规避被外部卡脖子的风险&#xff1b; 随着信创产业的发展&#xff0c;逐…

[附源码]宠物领养管理系统+SpringBoot

今天带来一款优秀的项目&#xff1a;宠物领养管理系统源码 。 系统采用的流行的前后端分离结构&#xff0c;内含功能包括"管理端"&#xff0c;“用户领养端”&#xff0c;“宠物管理”&#xff0c;“权限登录”等功能。 如果您有任何问题&#xff0c;也请联系小编&a…

高密原型验证系统解决方案(上篇)

0 引言 随着当今 SoC 设计规模的快速膨胀&#xff0c;仅仅靠几 颗当代最先进的 FPGA 已经无法满足原型验证的需求。简单的增加系统的容量&#xff0c;会遇到系统时钟复位同 步&#xff0c;设计分割以及高速接口和先进 Memory控制器 IP 验证等多重困难。此时&#xff0c;一个商用…

解决docker目录内存不足扩容处理

当我们使用docker时&#xff0c;经常会创建新镜像和新容器&#xff0c;在新容器中又会安装各种包&#xff0c;这些东西不是虚拟的&#xff0c;而是实实在在存于我们的磁盘中&#xff0c;默认在/var/lib/docker中&#xff0c;这个目录是属于系统盘的&#xff0c;而系统盘的空间往…

Spring Boot房屋租赁平台:现代化解决方案

1 绪论 1.1 研究背景 中国的科技的不断进步&#xff0c;计算机发展也慢慢的越来越成熟&#xff0c;人们对计算机也是越来越更加的依赖&#xff0c;科研、教育慢慢用于计算机进行管理。从第一台计算机的产生&#xff0c;到现在计算机已经发展到我们无法想象。给我们的生活改变很…

OpenHarmony标准系统mipi摄像头适配

OpenHarmony标准系统mipi摄像头适配 本文档以rk3568为例&#xff0c;讲述如何在OpenHarmony 标准系统rk设备上适配mipi摄像头。 开发环境 OpenHarmony标准系统4.1rrk3568设备摄像头ov5648,ov8858 文档约定&#xff1a;4.1r_3568为OpenHarmony标准系统源码根目录 1.适配准备:得…