re学习(36)看雪CTF 2017 -Crackme

news2024/11/15 17:40:07

百度网盘已收集,需要回顾在文件夹【CTF题库收集】查看即可

刚开始先运行一下

这是一道crackme类型题目,是一道看雪CTF上的竞赛题,用OD进行分析一下。

刚开始用的是IDA分析,分析了半天也没有看出来什么,然后就在网上搜,还真搜出来了,直接上flag,解决了我的燃眉之急,哈哈,事后又看了看wp,才知道了真正的解法,还是应该总结的,毕竟有的题目是搜不到的......

问题:为什么用OD,不用IDA呢?

OD可以动态跟踪变量变化过程。OD反汇编代码可以着色,比较醒目。Crackme类题目

                              →动调首选

IDA可以看到数据结构乃至反汇编至C代码,有利于把握整体结构。

                              →静调首选

在OD中运行程序,发现在地址00401494处运行函数后出来messagebox,可知这是关键函数,F2下断点,F7跟进

在跟进这个函数的过程中,会发生Windows GUI -- 消息循环与消息,可以参考这篇文章

Windows GUI -- 消息循环与消息_gui 消息循环_我家有一口鱼塘的博客-CSDN博客

好像是必须得输入东西才能跳出这个循环,然后下断点,F9运行并输入字符跳出循环

在哪里下断点呢?如果在这里下断点,下图,

运行完后,就会直接报错了因为汇编指令retn用来结束当前过程返回到上一调用过程

所以最早得在这条汇编指令的下一条指令下断点

成功在断点处运行下来了,接下来就是反汇编的关键代码了:
 

CPU Disasm
地址        十六进制数据            指令                             注释                                                             标签
00401225   .  83F8 04       CMP EAX,4
00401228   .  59            POP ECX
00401229   .  0F85 A0000000 JNE 004012CF                   strlen()函数
0040122F   .  6A 30         PUSH 30
00401231   .  59            POP ECX
00401232   .  384D E4       CMP BYTE PTR SS:[EBP-1C],CL    判断key第1个字符是否为“0”
00401235   .  0F84 94000000 JE 004012CF
0040123B   .  384D E5       CMP BYTE PTR SS:[EBP-1B],CL    判断key第2个字符是否为“0”
0040123E   .  0F84 8B000000 JE 004012CF
00401244   .  384D E6       CMP BYTE PTR SS:[EBP-1A],CL    判断key第3个字符是否为“0”
00401247   .  0F84 82000000 JE 004012CF
0040124D   .  384D E7       CMP BYTE PTR SS:[EBP-19],CL    判断key第4个字符是否为“0”
00401250   .  74 7D         JE SHORT 004012CF
00401252   .  807D E4 31    CMP BYTE PTR SS:[EBP-1C],31    判断key第1个字符是否等于“1”,不等于则直接跳转弹出“error”
00401256   .  75 77         JNE SHORT 004012CF
00401258   .  807D E5 35    CMP BYTE PTR SS:[EBP-1B],35    判断key第2个字符是否等于“5”,不等于则直接跳转弹出“error”
0040125C   .  75 71         JNE SHORT 004012CF
0040125E   .  74 03         JE SHORT 00401263              花指令
00401260   .  75 01         JNE SHORT 00401263
00401262      E8            DB E8                          CHAR 'è'
00401263   >  66:B8 0800    MOV AX,8
00401267   .  66:35 0700    XOR AX,0007
0040126B   .  0FBE45 E6     MOVSX EAX,BYTE PTR SS:[EBP-1A] 取输入key的第3位数
0040126F   .  2BC1          SUB EAX,ECX                    减去0x30,得到a
00401271   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX   把得到的值保存在[ebp-0x4]中
00401274   .  0FBE45 E4     MOVSX EAX,BYTE PTR SS:[EBP-1C] 取输入key的第1位值“1”
00401278   .  DB45 FC       FILD DWORD PTR SS:[EBP-4]      把[ebp-0x4]中保存的值压入到ST(0)中
0040127B   .  2BC1          SUB EAX,ECX                    0x31减去0x30,则为1
0040127D   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX   把得到的值1保存在[ebp-0x4]中
00401280   .  0FBE45 E5     MOVSX EAX,BYTE PTR SS:[EBP-1B] 取输入key的第2位值“5”
00401284   .  DB45 FC       FILD DWORD PTR SS:[EBP-4]      把[ebp-0x4]中保存的值1压入到ST(0)中
00401287   .  2BC1          SUB EAX,ECX                    0x35减去0x30,则为5
00401289   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX   把得到的值5保存在[ebp-0x4]中
0040128C   .  DA75 FC       FIDIV DWORD PTR SS:[EBP-4]     st(0)中的值1除以[ebp-0x4]中的值5,得到0.2保存到st(0)中
0040128F   .  0FBE45 E7     MOVSX EAX,BYTE PTR SS:[EBP-19] 取输入key的第4位值
00401293   .  2BC1          SUB EAX,ECX                    减去0x30,得到b
00401295   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX   把得到的值b保存在[ebp-0x4]中
00401298   .  DEE9          FSUBP ST(1),ST                 st(1)-st并保存在st(0)中,即(a-0.2)
0040129A   .  DA4D FC       FIMUL DWORD PTR SS:[EBP-4]     st(0)乘以[ebp-0x4] 中保存的值b,结果保存在st(0)中
0040129D   .  D80D 1C714000 FMUL DWORD PTR DS:[40711C]     数据段ds:[0x40711C]值为16,这里则是st(0)乘以16
004012A3   .  D95D FC       FSTP DWORD PTR SS:[EBP-4]      把上面得到值保存在[ebp-0x4]中
004012A6   .  74 03         JE SHORT 004012AB
004012A8   .  75 01         JNE SHORT 004012AB
004012AA      E8            DB E8                          CHAR 'è'
004012AB  />  66:B8 0800    MOV AX,8
004012AF  |.  66:35 0700    XOR AX,0007
004012B3  |.  D945 FC       FLD DWORD PTR SS:[EBP-4]       取出[ebp-0x4]中保存的值
004012B6  |.  D81D 18714000 FCOMP DWORD PTR DS:[407118]    得出的值与384比较是否相等
004012BC  |.  6A 00         PUSH 0
004012BE  |.  68 78804000   PUSH OFFSET 00408078           ASCII "CrackMe 2017 CTF"
004012C3  |.  DFE0          FSTSW AX
004012C5  |.  9E            SAHF
004012C6  |.  75 0E         JNE SHORT 004012D6
004012C8  |.  68 5C804000   PUSH OFFSET 0040805C           ASCII "Registration successful !"
004012CD  \.  EB 0C         JMP SHORT 004012DB
004012CF  />  6A 00         PUSH 0
004012D1  |.  68 48804000   PUSH OFFSET 00408048           ASCII "CrackMe 2017 CTF v2"
004012D6  |>  68 40804000   PUSH OFFSET 00408040           ASCII "error !"

 0x01  判断输入值的长度

可以查看到我们输入后传入值的部分,并通过 strlen 来获取其长度是否为 4 ,不为 4 则直接跳转到 004012CF

现在可以确定key的长度为4

0x02 验证key前2位的值

这里验证key的值是否都为字符串“0”,如果4位的key又一个为“0”,则直接跳转到“error”弹出框

然后接着就是继续验证key前2位字符串的值,即给出字符串的前2位为“15”
如果 key 的前 2 位的值不为 “15” ,则直接跳转到 “error” 弹出框

这里得到前2为key的值为“15”

0x03 分析算法

这里运作流程:

1、取key中第3位的十六进制值,然后减去0x30,这里则假定值为a

2、取key中第1位值为“1”的十六进制值即0x31,然后减去0x30,0x31-0x30 =1

3、取key中第2位值为“5”的十六进制值即0x35,然后减去0x30,0x31-0x30 =5 ,接着就是1除以5得出浮点数0.2

4、取key中第4位的十六进制值,然后减去0x30,这里则假定值为b

5、接着就是(a-0.2)*b乘以16得出的结果为c

6、判断c与384是否相等,相等则Registration successful !,不相同则“error”
公式: (a-0.2)*b*16 = 384 求解 a 和 b
0x04 编写算法脚本

这里根据上面分析,写了个简单的脚本,跑出了 2 个结果 “151N” 和 "1555"

for i in range(126):
    for j in range(126):
        if(((i-48)-0.2)*(j-48) == 24):
            print(i)
            print(j)
            print("15"+"%s"%(chr(i))+"%s"%(chr(j)))
            print("------")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络与卷积神经网络

全连接神经网络 概念及应用场景 全连接神经网络是一种深度学习模型,也被称为多层感知机(MLP)。它由多个神经元组成的层级结构,每个神经元都与前一层的所有神经元相连,它们之间的连接权重是可训练的。每个神经元都计算…

CAD关于在别人图纸上设计点位信息的办法【推荐】

背景: cad中有时候需要在客户的底图上进行设计,如何避免客户的底图影响你的内容呈现呢,就是把他原有的图纸进行“灰色话”,这样你的图层颜色就是都是展示出来了。 1.如何“灰话”呢 步骤: 1.图层特性---选中你使用的…

昨天面试的时候被提问到的问题集合(答案)

1、vue的双向绑定原理是什么?里面的关键点在哪里? Vue的双向绑定原理是基于Object.defineProperty或者Proxy来实现的,其关键点在于数据劫持,即对数据的读取和修改进行拦截,在数据发生变化时自动更新视图 2、实现水平垂…

Python读取遥感影像并计算NDVI指数

Python读取遥感影像并计算NDVI指数 先附上源码 读取的遥感影像数据需要先进行预处理 from osgeo import gdal import numpy as np import pandas as pd import os np.seterr(divideignore, invalidignore)class Grid:# # 1. 函数1 read_tiff读取影像# def read_tiff(self…

element中Notification组件(this.$notify)自定义样式

1、自定义样式效果 2、vue代码 this.notifications this.$notify({title: ,dangerouslyUseHTMLString: true,duration: obj.remindMethod3 ? 0:4500,customClass: notify-warning,offset: 50,showClose: false,message: this.$createElement("div",null,[this.$…

五指山下500年

工作中的困难 在工作中,我曾经遇到一件事情让我有强烈的情绪波动。那是一次团队内部分配任务的时候,我遇到了一个非常棘手的问题。 我需要在几个团队成员之间分配任务,但是我不知道如何分配才能让每个人都满意。我知道,如果任务…

微服务-sentinel详解

文章目录 一、前言二、知识点主要构成1、sentinel基本概念1.1、资源1.2、规则 2、sentinel的基本功能2.1、流量控制2.2、熔断降级 3、控制台安装3.1、官网下载jar包3.2、启动控制台 4、项目集成 sentinel4.1、依赖配置4.2、配置文件中配置sentinel控制台地址信息4.3、配置流控4…

美国陆军网络司令部利用人工智能增强网络攻防和作战决策能力

源自: 奇安网情局 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨,并不意味着支持其观点或证实其内容的真实性。版权归原作者所有,如转载稿涉及版权等问题,请立即联系我们删除。 “人工智能技术与咨询…

零侵入,零改造,模拟人的“统计数字员工”成就新时代智能普查

“您好,我们是余杭区经济普查员,这是第五次全国经济普查告知书。”近期,小编陆陆续续看到了许多普查人员的辛勤身影。 啥是第五次全国经济普查? 第五次全国经济普查是一项重大国情国力调查,主要目的是全面调查我国第…

护眼灯什么价位的好?有什么性价比的台灯吗

台灯是卧室和书房必备的家用电器之一,现在市场上销售的台灯种类琳琅满目,样式让人眼花缭乱,价格和质量又参差不齐,再加上口若悬河的销售人员为产品做广告的误导,如果事先没有做足功课,盲目地去挑选一台适合…

Kind创建本地环境安装Ingress

目录 1.K8s什么要使用Ingress 2.在本地K8s集群安装Nginx Ingress controller 2.1.使用Kind创建本地集群 2.1.1.创建kind配置文件 2.1.2.执行创建命令 2.2.找到和当前k8s版本匹配的Ingress版本 2.2.1.查看当前的K8s版本 2.2.2.在官网中找到对应的合适版本 2.3.按照版本安…

分库分表篇-2.4 springBoot 集成Mycat(1.6) 分库分表,读写分离,分布式事务

文章目录 前言一、分库分表:二、读写分离:2.1 读写分离的实现:2.2 主从延迟:2.2.1 主从延迟造成的问题:2.2.2 主从延迟的原因:2.2.3 主从延迟的解决方案:2.2.3.1 db 层面:2.2.3.2 程…

苹果手机QQ聊天记录怎么恢复?不容错过的3个好方法!

之前把很久不用的QQ给卸载了,但是现在突然想起来里面有很重要的聊天记录,友友们,有什么办法能够帮我找回聊天记录吗? 随着微信的崛起,现在很多人已经不怎么使用QQ了,因此很多小伙伴都把QQ卸载了。但是卸载后…

BST55电子式流量传感器

原理、 结构 基于热式原理, 在封闭的探头内包含两个电阻, 其中一个被加热作为探 测电阻, 另一个未被加热作为基准电阻, 当介质流动时, 加热电阻 上的 热量被带走, 电阻值被改变, 两个电阻差值被…

分库分表篇-2.2 Mycat-分片规则

文章目录 前言一、Mycat table的分片:二、常用分片规则:2.1 id 范围分片:2.2 id 取模分片:2.3 按照枚举值 分片:2.4 一致性hash hash 环:2.5 ER 分片:2.6 库内分表:2.7 全局表&#…

七天内连续登陆天数

一、需求描述 业务理解1:七天内最大连续登陆天数 业务理解2:七天内最近连续登陆天数(最近一天如果未登陆则连续登陆天数为0) 示例说明: 二、数据结构 流量表 tracking 字段名字段中文名userid用户iddt分区 口径描…

如果你觉得自己很失败,请观看此内容 视频学习

目录 什么是成功?​​​​​​​ How can we succeed in such an unfair world? 我们如何在这个不公平的地球上获得成功? 如何去找到自己的不公平优势呢? 最开始也有常有人跟她说你做视频是赚不到钱的 你做了,并不代表你做…

河道漂浮物检测:安防监控/视频智能分析/AI算法智能分析技术如何助力河道整治工作?

随着社会的发展和人们生活水平的进步,水污染问题也越来越严重,水资源监管和治理成为城市发展的一大困扰,水面上的漂浮垃圾不仅会影响河道生态安全并阻碍船舶航行,还会影响人们的身体健康。 TSINGSEEE青犀AI智能分析平台在环保场景…

当连锁零售超市遇上温湿度监控,简直是王炸!

在食品行业中,温湿度监控是确保食品质量和安全性的至关重要的环节之一。温度和湿度是影响食品保存期限、品质、口感以及微生物滋生的关键因素。通过有效的监测和管理,可以降低食品受损和变质的风险,保障消费者的健康和权益。 客户案例 福建某…

设计模式之建造者模式与原型模式

目录 建造者模式 简介 使用场景 优缺点 模式结构 实现 原型模式 简介 应用场景 优缺点 模式结构 实现 建造者模式 简介 将复杂对象的构建与表示进行分离,使得同样的构建过程可以创建不同的表示。是一个将复杂的对象分解为多个简单的对象,然…