测试文件:https://static2.ichunqiu.com/icq/resources/fileupload/CTF/BSRC/BSRC-11-3/CrackMe01_97D2BF0DBD2EC13065E7104F24CAAED9.zip

1.准备

获取信息

  • 32位文件

2.IDA打开

熟悉Windows API的话,一般组成的就是MessageBox,ShowWindow...这里测试错误答案时,没有窗口提示,也就排除了MessageBox,而且要处理消息事件的话,直接查找默认消息处理DefWindowProc。

在import里面搜索DefWindowProc

点击进入之后,Ctrl+X查找用到的地方

一个一个进入,F5分析就行。(实际上就是第一个)

找到这么一段代码

 LRESULT __stdcall sub_4027F0(int a1, UINT Msg, WPARAM wParam, LPARAM lParam)
{
UINT v4; // eax
LPARAM v5; // edx
__int16 v6; // bx
void *v7; // edi
HDC v9; // esi
unsigned int v10; // ecx
__int16 v11; // ax
unsigned int v12; // eax
int v13; // edi
int v14; // eax
struct tagRECT v15; // [esp+18h] [ebp-68h]
struct tagRECT Rect; // [esp+28h] [ebp-58h]
struct tagPAINTSTRUCT Paint; // [esp+38h] [ebp-48h] v4 = Msg;
v5 = lParam;
v6 = ;
v7 = (void *)wParam;
if ( Msg > 0xF )
{
if ( Msg != )
return DefWindowProcW((HWND)a1, v4, (WPARAM)v7, v5);
v10 = ;
do
{
v11 = *(_WORD *)(wParam + * v10++);
v6 += v11;
}
while ( v10 <= lParam );
v12 = ;
do
{
*(const WCHAR *)((char *)&chText + v12) ^= v6;
v12 += ;
}
while ( v12 < 0x2C );
GetWindowRect((HWND)a1, &v15);
v13 = (v15.left - v15.right + GetSystemMetrics()) / ;
v14 = GetSystemMetrics();
SetWindowPos((HWND)a1, HWND_MESSAGE|0x2, v13, (v15.top - v15.bottom + v14) / , -, -, 5u);
SetWindowPos((HWND)a1, (HWND)0xFFFFFFFE, , , , , 3u);
if ( (v6 & 0xF00) == 0x400 && (v6 & 0xF0) == 0xB0u && (v6 & ) == )
{
ShowWindow((HWND)a1, );
UpdateWindow((HWND)a1);
}
v7 = (void *)wParam;
LABEL_18:
if ( v7 )
free(v7);
v5 = lParam;
v4 = Msg;
return DefWindowProcW((HWND)a1, v4, (WPARAM)v7, v5);
}
switch ( Msg )
{
case 0xFu:
v9 = BeginPaint((HWND)a1, &Paint);
GetClientRect((HWND)a1, &Rect);
DrawTextW(v9, &chText, -, &Rect, 0x25u);
EndPaint((HWND)a1, &Paint);
goto LABEL_18;
case 1u:
return ;
case 2u:
PostQuitMessage();
return ;
}
return DefWindowProcW((HWND)a1, v4, (WPARAM)v7, v5);
}

3.代码分析

去除掉代码中对窗口消息,创建,我们需要的代码就是

    do
{
*(const WCHAR *)((char *)&chText + v12) ^= v6;
v12 += ;
}
while ( v12 < 0x2C );

这里实际上就是对chText的前0x2c个进行了异或处理,代码中两个字节为一组,总共22组。

chText

F0  DA  D7  D1   8C  FF  F5  FE
E3 F8 E7 FF E3 E9 F0 F3
F2 F4 F3

因此chText为

chText[]={0x4F0, 0x4DA, 0x4D7, 0x4D1, 0x48C, 0x4FF, 0x4F5, 0x4FE,  0x4E3, 0x4F8, 0x4E7, 0x4FF, 0x4E3,  0x4E9, 0x4F0, 0x4F3, 0x485, 0x480, 0x484, 0x4F2, 0x4F4, 0x4F3}

v6的值我们可以通过第44行代码

if ( (v6 & 0xF00) == 0x400 && (v6 & 0xF0) == 0xB0u && (v6 & ) ==  )
{
ShowWindow((HWND)a1, );
UpdateWindow((HWND)a1);
}

得到v6=0x4b6

4.脚本获取

chText = [0x4F0, 0x4DA, 0x4D7, 0x4D1, 0x48C, 0x4FF, 0x4F5, 0x4FE, 0x4E3, 0x4F8, 0x4E7, 0x4FF, 0x4E3, 0x4E9, 0x4F0,
0x4F3, 0x485, 0x480, 0x484, 0x4F2, 0x4F4, 0x4F3]
flag = '' for i in range(22):
chText[i] ^= 0x4b6
flag += chr(chText[i]) print(flag)

5.get flag!

Flag:ICHUNQIU_FE362DBE

“百度杯”CTF比赛 十一月场--CrackMe01的更多相关文章

  1. “百度杯”CTF比赛 十一月场(Misc)

    签到题: 题目提示: 文件在i春秋的ctf2群里,加群下载文件 下载下来之后发现有压缩密码 题目提示有提示解压密码:key:ichunqiumemeda 打开文件,得到flag 签到题2: 点击下载附 ...

  2. [i春秋]“百度杯”CTF比赛 十月场-Hash

    前言 涉及知识点:反序列化.代码执行.命令执行 题目来自:i春秋 hash  如果i春秋题目有问题可以登录榆林学院信息安全协会CTF平台使用 或者利用本文章提供的源码自主复现 [i春秋]"百 ...

  3. "百度杯"CTF比赛 十月场——EXEC

    "百度杯"CTF比赛 十月场--EXEC 进入网站页面 查看源码 发现了vim,可能是vim泄露,于是在url地址输入了http://21b854b211034489a4ee1cb ...

  4. “百度杯”CTF比赛 十二月场_blog(kindeditor编辑器遍历,insert注入,文件包含)

    题目在i春秋的ctf训练营中能找到 首先先是一个用户登录与注册界面,一般有注册界面的都是要先让你注册一波,然后找惊喜的 那我就顺着他的意思去注册一个号 注册了一个123用户登录进来看到有个文本编辑器, ...

  5. “百度杯”CTF比赛 九月场_YeserCMS

    题目在i春秋ctf大本营 题目的提示并没有什么卵用,打开链接发现其实是easycms,百度可以查到许多通用漏洞 这里我利用的是无限报错注入 访问url/celive/live/header.php,直 ...

  6. “百度杯”CTF比赛 九月场_Test(海洋cms前台getshell)

    题目在i春秋ctf训练营 又是一道cms的通用漏洞的题,直接去百度查看通用漏洞 这里我使用的是以下这个漏洞: 海洋CMS V6.28代码执行0day 按照给出的payload,直接访问url+/sea ...

  7. “百度杯”CTF比赛 九月场_123(文件备份,爆破,上传)

    题目在i春秋ctf训练营 翻看源码,发现提示: 打开user.php,页面一片空白,参考大佬的博客才知道可能会存在user.php.bak的备份文件,下载该文件可以得到用户名列表 拿去burp爆破: ...

  8. “百度杯”CTF比赛 九月场_SQLi

    题目在i春秋ctf大本营 看网页源码提示: 这边是个大坑,访问login.php发现根本不存在注入点,看了wp才知道注入点在l0gin.php 尝试order by语句,发现3的时候页面发生变化,说明 ...

  9. “百度杯”CTF比赛 九月场_SQL

    题目在i春秋ctf大本营 题目一开始就提醒我们是注入,查看源码还给出了查询语句 输入测试语句发现服务器端做了过滤,一些语句被过滤了 试了一下/**/.+都不行,后来才发现可以用<>绕过 接 ...

随机推荐

  1. 莫队算法 ( MO's algorithm )

    莫队算法是由清华大学神牛莫涛发明的一种处理区间问题的离线算法 算法核心是通过先将问询区间总长度平方分块.然后将所有的问询区间按照左端点所在的块编号排序.在同一块内的则按右端点升序 然后设置左右两个下标 ...

  2. Android系统关机或重启的几种实现方式

    前阵子工作上遇到一些关于Android系统关机或重启的系统修改,于是,做了一些尝试,也搜集了一下资料,现在整理一下,做一些总结,方便学习或者日后工作的需要. 默认的SDK并没有提供应用开发者直接的An ...

  3. Spotlight_on_linux 安装和监控

    一.下载 下载并安装 Spotlight_on_linux 二.建立连接 注意:用户名不能使用root连接,需要自己创建个用户root权限的用户 1.useradd  xiaoxitest   2.p ...

  4. android界面的滑动切换功能

    左右滑动切换是几乎所有应用中都会用到的功能.在这里将相关资源进行总结 (1)viewflipper结合手势检测进行左右滑动. http://www.cnblogs.com/hanyonglu/arch ...

  5. 大数据笔记(二十七)——Spark Core简介及安装配置

    1.Spark Core: 类似MapReduce 核心:RDD 2.Spark SQL: 类似Hive,支持SQL 3.Spark Streaming:类似Storm =============== ...

  6. LeetCode_001.两数之和

    LeetCode_001 LeetCode-001.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输 ...

  7. [NLP] nlp-lstm-cos -> sin

    LSTM 看了官方lstm以及相关原理,然后自己按照理解写了一遍,然后在网上看到cos预测sin问题,然后用lstm完成了建模. 看到好多论文里图像文本特征用lstm的,对学ocr有点帮助. 官方ls ...

  8. Type.MakeGenericType 方法 (Type[]) 泛型反射

    替代由当前泛型类型定义的类型参数组成的类型数组的元素,并返回表示结果构造类型的 Type 对象. 命名空间:   System程序集:  mscorlib(mscorlib.dll 中) public ...

  9. 6、Shiro之自定义realm

    1.创建一个包存放我们自定义的realm文件: 创建一个类名为CustomRealm继承AuthorizingRealm并实现父类AuthorizingRealm的方法,最后重写: CustomRea ...

  10. Vue创建局部组件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...