测试文件: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. luogu P2661 信息传递 x

    P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知 ...

  2. 珍珠x

    题目描述 有n颗形状和大小都一致的珍珠,它们的重量都不相同.n为整数,所有的珍珠从1到n编号.你的任务是发现哪颗珍珠的重量刚好处于正中间,即在所有珍珠的重量中,该珍珠的重量列(n+1)/2位.下面给出 ...

  3. 如何查看运行的docker container 的 执行 docker run的命令

    前言 就是我备份了一下 mysql_container, 然后我想启用 新的备份的mysql_container 但是之前的docker run image xxxxxx这些都已经忘记了 我想找一下之 ...

  4. java jts

    来自:UCMapForOpenGIS https://bbs.csdn.net/topics/380204896?list=992863 对比 其实geotools就是基于jts开发的,而geoser ...

  5. create-react-app 构建的项目使用释放配置文件 webpack 等等 运行 npm run eject 报错

    使用 git 提交一次记录即可正常 git add . git commit -m 'init' npm run eject

  6. windows 全局安装 express 但无法命令行执行

    从 express 的官网直接按照命令行全局安装 express 后, express 命令无法执行, 在 cmd 中显示 该命令行无法识别.基本可判断是 环境变量配置 这边没有搞定. 1. 卸载 n ...

  7. Mybatis 中在xxx.mapper书写模糊查询

    1.在mybatis中,书写sql,有时候会有一些不细心,如: <!-- 首页商品 关键字搜索--> <select id="getGoodsByLikeTitle&quo ...

  8. 使用私有仓库(Docker Registry 2.0)管理镜像

    1. 执行以下命令新建并启动一个Docker Registry 2.0 docker run -d -p 5000:5000 --restart=always --name registry2 reg ...

  9. 超过 150 个最佳机器学习,NLP 和 Python教程

    超过 150 个最佳机器学习,NLP 和 Python教程 微信号 & QQ:862251340微信公众号:coderpai简书地址:http://www.jianshu.com/p/2be3 ...

  10. 【后台管理系统】—— Ant Design Pro结合插件(一)

    一.富文本braft-editor 安装并引用 npm install braft-editor --save import BraftEditor from 'braft-editor' impor ...