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了
随机推荐
- [LeetCode]20.有效的括号(Java)
原题地址: valid-parentheses 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类 ...
- php base64格式的图片字符串和图片文件相互转换的代码
在移动端上传图片的时候通常会将图片转换成base64格式的字符串提交,所以此时需要使用服务器端的程序进行转换成二进制的数据.如下PHP代码实现了图片文件和base64格式的图片字符串相互转换的方法,同 ...
- 使用Jitpack发布开源Java库
原文:使用Jitpack发布开源Java库 | Stars-One的杂货小窝 很久之前也写过一篇使用Jitpack发布Android开源库的文章,详见Android开发--发布第三方库到JitPack ...
- 数据库delete from和truncate删除的区别详解
一:区别 1.delete from 后面可以直接接条件,truncate不可以 2.delete from 记录是一条条删除的,所删除的每行记录都会进入日志,而truncate一次性删除整个页,因此 ...
- 手把手教你如何通过CC2531抓取Zigbee包,并解析加密Zigbee包
前言 好久不见啊,大伙假期过得咋样? 最近我在研究 Zigbee ,使用了EFR32(购买链接)的开发板,之前也研究过一点,水了几篇文章,但是没有深了解和使用.最近 arduino 玩腻了,我开始回过 ...
- Stroke
// A simple blur shader, weighted on alphauniform sampler2D texture;void main(){ float radius = 0 ...
- Linux安装ms-office
https://ittutorials.net/open-source/linux/installing-microsoft-office-in-ubuntu/
- 3、如何查看window 下的cpu参数
一.windows下查看CPU信息 windows系统使用systeminfo命令可以查看CPU信息,如: Intel64 Family 6 Model 158 Stepping 10 Genuine ...
- C#实现接口的两种方式:显示实现和隐式实现接口
本示例声明一个接口IDimensions 和一个类 Box,显式实现了接口成员 GetLength 和 GetWidth. 通过接口实例 dimensions 访问这些成员. interface ID ...
- csv 转换为DBF文件的方法
转至:https://www.cnblogs.com/hssbsw/archive/2012/12/01/2797140.html csv 转换为DBF文件的方法 最近从SQL导出了许多CSV文件发到 ...