BUU findkey
定位关键函数
跟入flag找到问题位置
两行一样的代码,nop掉第二行,按p生成函数
代码审计
int __userpurge sub_4018C4@<eax>(int a1@<ebp>, int a2, int a3, int a4, int a5)
{
size_t v5; // eax
_WORD *v6; // edx
DWORD v7; // eax
int v8; // edi
int v9; // eax
int v10; // eax
LPSTR v12; // [esp-454h] [ebp-454h] BYREF if ( strlen((const char *)String1) )
{
memset((void *)(a1 - 492), 0, 0x100u);
v5 = strlen((const char *)String1);
memcpy((void *)(a1 - 492), String1, v5);
v12 = (LPSTR)String1;
*v6 = __ES__;
v7 = strlen((const char *)&v12);
sub_40101E(String1, v7, v12);
strcpy((char *)(a1 - 748), "0kk`d1a`55k222k2a776jbfgd`06cjjb");
memset((void *)(a1 - 715), 0, 0xDCu);
v8 = a1 - 715 + 220;
*(_WORD *)v8 = 0;
*(_BYTE *)(v8 + 2) = 0;
strcpy((char *)(a1 - 760), "SS");
*(_DWORD *)(a1 - 757) = 0;
*(_WORD *)(a1 - 753) = 0;
*(_BYTE *)(a1 - 751) = 0;
v9 = strlen((const char *)(a1 - 748));
sub_401005((LPCSTR)(a1 - 760), a1 - 748, v9);
if ( _strcmpi((const char *)String1, (const char *)(a1 - 748)) )
{
SetWindowTextA(*(HWND *)(a1 + 8), "flag{}");
MessageBoxA(*(HWND *)(a1 + 8), "Are you kidding me?", "^_^", 0);
ExitProcess(0);
}
memcpy((void *)(a1 - 1016), &unk_423030, 0x32u);
v10 = strlen((const char *)(a1 - 1016));
sub_401005((LPCSTR)(a1 - 492), a1 - 1016, v10);
MessageBoxA(*(HWND *)(a1 + 8), (LPCSTR)(a1 - 1016), 0, 0x32u);
}
++dword_428D54;
return 0;
}
关键函数
unsigned int __cdecl sub_401590(LPCSTR lpString, int a2, int a3)
{
unsigned int result; // eax
unsigned int i; // [esp+4Ch] [ebp-Ch]
unsigned int v5; // [esp+54h] [ebp-4h] v5 = lstrlenA(lpString);
for ( i = 0; ; ++i )
{
result = i;
if ( i >= a3 )
break;
*(_BYTE *)(i + a2) ^= lpString[i % v5];
}
return result;
}unsigned int __cdecl sub_401590(LPCSTR lpString, int a2, int a3)
{
unsigned int result; // eax
unsigned int i; // [esp+4Ch] [ebp-Ch]
unsigned int v5; // [esp+54h] [ebp-4h] v5 = lstrlenA(lpString);
for ( i = 0; ; ++i )
{
result = i;
if ( i >= a3 )
break;
*(_BYTE *)(i + a2) ^= lpString[i % v5];
}
return result;
}
对字符串进行异或
int __cdecl sub_4013A0(BYTE *pbData, DWORD dwDataLen, LPSTR lpString1)
{
int result; // eax
DWORD i; // [esp+4Ch] [ebp-24h]
CHAR String2[4]; // [esp+50h] [ebp-20h] BYREF
BYTE v6[16]; // [esp+54h] [ebp-1Ch] BYREF
DWORD pdwDataLen; // [esp+64h] [ebp-Ch] BYREF
HCRYPTHASH phHash; // [esp+68h] [ebp-8h] BYREF
HCRYPTPROV phProv; // [esp+6Ch] [ebp-4h] BYREF if ( !CryptAcquireContextA(&phProv, 0, 0, 1u, 0xF0000000) )
return 0;
if ( CryptCreateHash(phProv, 0x8003u, 0, 0, &phHash) )
{
if ( CryptHashData(phHash, pbData, dwDataLen, 0) )
{
CryptGetHashParam(phHash, 2u, v6, &pdwDataLen, 0);
*lpString1 = 0;
for ( i = 0; i < pdwDataLen; ++i )
{
wsprintfA(String2, "%02X", v6[i]);
lstrcatA(lpString1, String2);
}
CryptDestroyHash(phHash);
CryptReleaseContext(phProv, 0);
result = 1;
}
else
{
CryptDestroyHash(phHash);
CryptReleaseContext(phProv, 0);
result = 0;
}
}
else
{
CryptReleaseContext(phProv, 0);
result = 0;
}
return result;
}
windows签名加密函数,其中0x8003u表示md5加密
getflag
我们虽然不知道string1里面放的是什么大师通过a1-748与string1的check我们可以得到md5加密后的内容就是a1-748异或后的内容
se1 = ""
for i in '0kk`d1a`55k222k2a776jbfgd`
s = ['1','2','3','3','2','1']
b = [0x57, 0x5E, 0x52, 0x54, 0x49, 0x5F, 0x01, 0x6D, 0x69, 0x46,
0x02, 0x6E, 0x5F, 0x02, 0x6C, 0x57, 0x5B, 0x54, 0x4C]
flag = ''
for i in range(len(b)):
flag += chr(b[i]^ord(s[i%6]))
print(flag)
06cjjb':
se1 += chr(ord(i) ^ ord('S'))
print(se1)
#c8837b23ff8aaa8a2dde915473ce0991
unsigned char unk_423030[] =
{
0x57, 0x5E, 0x52, 0x54, 0x49, 0x5F, 0x01, 0x6D, 0x69, 0x46,
0x02, 0x6E, 0x5F, 0x02, 0x6C, 0x57, 0x5B, 0x54, 0x4C
};
a1-1016内容
s = ['1','2','3','3','2','1']
b = [0x57, 0x5E, 0x52, 0x54, 0x49, 0x5F, 0x01, 0x6D, 0x69, 0x46,
0x02, 0x6E, 0x5F, 0x02, 0x6C, 0x57, 0x5B, 0x54, 0x4C]
flag = ''
for i in range(len(b)):
flag += chr(b[i]^ord(s[i%6]))
print(flag)
flag{n0_Zu0_n0_die}
BUU findkey的更多相关文章
- Buu刷题
前言 希望自己能够更加的努力,希望通过多刷大赛题来提高自己的知识面.(ง •_•)ง easy_tornado 进入题目 看到render就感觉可能是模板注入的东西 hints.txt给出提示,可以看 ...
- BUU刷题01
[安洵杯 2019]easy_serialize_php 直接给了源代码 <?php $function = @$_GET['f']; function filter($img){ $filte ...
- buu学习记录(上)
前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...
- BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2
BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2 XSS的题目没怎么做过,比赛基本上也没有(=_=),总结下今天做的两题 都是看赵总视频现学现做的,这里附上学习 ...
- BUU [GKCTF 2021]签到
BUU [GKCTF 2021]签到 1.题目概述 2.解题过程 追踪HTTP流 在下面发现了一串可疑字符 Base16转base64 放到010里看看 复制下来,去转字符 好像不是,再回去找找其他的 ...
- Buuctf | BUU LFI COURSE 1
跟着赵师傅学CTF,这里是我的学习记录 ?file=/flag ?file=/var/log/nginx/access.log :包含ngnix的日志记录 在user-agent里面插入 :bbbbb ...
- buu Crypto 刷题记录
1.MD5 直接解. 2.url编码 直接解. 3.一眼就解密 base64. 4.看我回旋踢 对文本内容全部CaesarDecode. 5.摩丝 直接MorseDecode. 6.Quoted-pr ...
- BUU re xor
从13行和18行的0x21(c规定十六进制必须用0x**表示)可以知道这个字符串就是33个字符 shift+e来提取出数组中的字符: 设这个数组是global数组 global[] = { 102, ...
- BUU pwn cn
自己不细心,人家别的博客上写的明明没有那个冒号的,把linux命令好好学一学吧! nc后 ls 发现flag文件 cat就得到flag了
随机推荐
- linux大工程 - 我要一个属于自己的回收站
我要开始装13了 'rm -rf 是一个很"粗鲁"的命令,就像windows的shift+delete,删除的文件是无法找回的(当然,除了数据恢复软件,但是很麻烦,很费时)' '为 ...
- 解决Springboot中的日期解析错误
错误信息: error: Failed to parse Date value '2022-01-12 15:00:00': Cannot parse date "2022-01-12 15 ...
- 设计DFA接受{0,1}上的字符串ω,且ω是3倍数的二进制表示
DFA设计 设计DFA接受{0,1}上的字符串ω,且ω是3倍数的二进制表示 先叙述下思路: 要想证明某数是3的倍数可以让其除以3看余数是否为零即可,现在我们的问题就是如何计算一串二进制数除以3所得的余 ...
- [杂记]CodeBlocks下载、安装及设置
zyy安装codeblocks十次有九次都会卡在奇怪的地方,所以写篇博文以提醒自己少犯蠢[叹气] 下载 http://www.codeblocks.org/downloads/26 这是官网,以win ...
- Clickhouse 分布式表&本地表 &ClickHouse实现时序数据管理和挖掘
一.CK 分布式表和本地表 (1)CK是一个纯列式存储的数据库,一个列就是硬盘上的一个或多个文件(多个分区有多个文件),关于列式存储这里就不展开了,总之列存对于分析来讲好处更大,因为每个列单独存储,所 ...
- Linux添加永久路由的方法
通常我们使用route add -net添加临时路由.当系统重启,临时路由将丢失,重新配置路由带来了不必要的麻烦.可通过固化临时路由为永久路由的方法解决该问题. static-routes文件为路由固 ...
- vue结合webpack打包问题
在使用vue开发项目时,如果要使用其单文件组件特性,必然要使用webpack或者其他打包工具打包,这里我用到的是webpack打包,首先是搭建vue环境和webpack环境,在这里遇到的一个问题是在成 ...
- Python:序列化 pickle JSON
序列化 在程序运行的过程中,所有的变量都储存在内存中,例如定义一个dict d=dict(name='Bob',age=20,score=88) 可以随时修改变量,比如把name修改为'Bill',但 ...
- jq 简易购物车功能实现
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- git常用命令及问题
Git基本操作 git init 创建新的git仓库 git clone [url] 使用 git clone 拷贝一个 Git 仓库到本地 git status 查看工作区 git stash li ...