您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页CTF实验吧——证明自己吧

CTF实验吧——证明自己吧

来源:纷纭教育

没有壳 ,vc++ 写的

 

拖进OD观察观察,发现代码很短哟,先来看这俩个call 怀疑他们其中有正确的flag和我们输入的东西对比

 

再进IDA里 main 空格,发现 关键函数就是sub_401060

 

双击进入查看sub_401060的伪C代码

分成三个部分:

第一,将我们输入的a1与v5的长度比较,将a1的每一项都进行异或。

第二,将v5的每一项都减去5

第三,可以当成这样看, while(   *(a1 + v3) == *(_BYTE *)&V5+V3)    ) 就是把我们输入的a1与v5逐个比较

 

关系就是 :  a1 ^ 0x20 = v5 - 5 

根据异或的性质 我们要得到的a1 =(v5-5)^0x20 

ps:这里的if(strlen((const char *)v5)==0)return 1;判断v5元素为0个就返回1,没啥用。有点迷惑,不管他。

 

拿下来,用python或者C语言写脚本即可解得答案。

python:

a=" "
code=(0x68,0x57,0x19,0x48,0x50,0x6E,0x58,0x78,0x54,0x6A,0x19,0x58,0x5E,0x06)
for i in code:
    i=(i-5)^0x20
    a+=chr(i)
print(a)

 C:

#include<stdio.h>
int main()
{
int a[14]={0x68,0x57,0x19,0x48,0x50,0x6e,0x58,0x78,0x54,0x6a,0x19,0x58,0x5e,0x06};
int i;
for(i=0;i<14;i++)
{
a[i]=a[i]-5;
a[i]=a[i]^0x20;
printf("%c",a[i]);
}
return 0;
}

验证一下,对的

 

转载于:https://www.cnblogs.com/tqing/p/11494705.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务