buuctf刷题记录19 buuctf FindKey

27 篇文章 0 订阅

个人感觉这个题出的不好,md5根本找不到(是我太菜)

经典无壳,拖进ida,f12找到关键字符串,发现左边地址是红色的,应该是用了花指令,果然

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWNDmccI-1596277743763)(D:\markdown\文件\图片\7.11.1.png)]

两个一样的指令连在一起,把下面的去掉,按p声明函数,再f5看反编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6mfNkzv-1596277743766)(D:\markdown\文件\图片\7.11.2.png)]

程序逻辑并不是太难,有两处关键运算和一个关键判断

第一个关键运算是将输入的pbdata与v16进行异或,最后与v20进行比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mlF9NUT3-1596277743767)(D:\markdown\文件\图片\7.11.3.png)]

逻辑很简单,直接写脚本,得到第一个字符串:c8837b23ff8aaa8a2dde915473ce0991

然后如果直接按照第二个关键运算算的话,算不出来

看别人的wp说,根据库函数可以看出这里经过md5加密(就这步咋也找不到,真不知道这个人是咋找的)

链接

[]: https://www.dongzt.cn/archives/2019%E5%B9%B43%E6%9C%88%E5%AE%89%E6%81%92%E5%B9%B3%E5%8F%B0%E5%91%A8%E5%91%A8%E7%BB%83%E7%9A%84%E5%81%9A%E9%A2%98%E6%80%9D%E8%B7%AF%E5%88%86%E4%BA%AB.html#0x02findkey

然后把这个字符串去md5解密网站上找一哈,得到:123321

然后再进行第二个关键运算,跟第一个基本一样,只不过是换了换参数,

脚本

#include <stdio.h>
#include<string.h>
int main()
{
int a[] =
{
   48, 107, 107,  96, 100,  49,  97,  96,  53,  53, 
  107,  50,  50,  50, 107,  50,  97,  55,  55,  54, 
  106,  98, 102, 103, 100,  96,  48,  54,  99, 106, 
  106,  98
}; 
int b[]={83,83};
int c[]=
{
   87,  94,  82,  84,  73,  95,   1, 109, 105,  70, 
    2, 110,  95,   2, 108,  87,  91,  84,  76
};
int d[]={49,50,51,51,50,49};
int i;
for (i=0;i<32;i++)
{
	a[i]^=b[i%2];
}
for(i=0;i<32;i++)
{
	printf("%c",a[i]);
}
printf("\n");
for (i=0;i<19;i++)
{
	c[i]^=d[i%6];
}
for(i=0;i<19;i++)
{
	printf("%c",c[i]);
}
}

得到flag : flag{n0_Zu0_n0_die}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值