freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

看雪ctf—流浪者
2019-03-25 13:28:03

下载题目得到一个MFC程序,打开看一下有一个窗口。任意输入一串字符串看一下返回结果貌似没啥用。

图片.png图片.png通过IDA打开该程序,打开字符串窗口(如果是有字符串的程序,搜索字符串最便捷)

图片.png看到这两个字符串很可疑,感觉可以从这找到突破点

图片.png双击字符串,可以在程序中找到这串字符

图片.png选择字符串,键盘输入“x”查看交叉引用

图片.png按F5查看伪代码

图片.png这段伪代码的意思是通过接收一个变量a1来控制数组aAbcdefghiabcde的角标获取数组中的字符并赋值给Str1,通过Str1与字符串“KanXueCTF2019JustForhappy”进行比较,如果相同则返回pass!

图片.png理清了思路,现在只要求出控制这串字符串的变量a1即可解出此题。所以我们继续向上找寻sub_4017F0这个函数,按“x”查看在哪引用了这个函数

图片.png

可以看到这里通过对用户输入的判断以及运算返回一个值v5,这个值将传给上面的a1。


经过对伪代码的分析,我写了下面一段C程序解出flag,仅供参考。

#include<stdio.h>    

intmain(){ 

chara[]="KanXueCTF2019JustForhappy";

charb[]="abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ";     

intc[25];   

inti;int j;   

for(i=0;i<sizeof(a);i++){     

       for(j=0;j<sizeof(b);j++){    

             if(a[i]==b[j])    

              c[i]=j;                      

       }                   

}//计算每个字符在字符串中的位置   

                     

intx;               

for(i=0;i<25;i++){   

       for(j=48;j<=122;j++){                                                                     

              if(j>57||j<48){    

               if(j>122||j<97){        

                           if(j>90||j<65)    

                               continue;     

                            else             

                            x=j-29;          

                    }                

               else         

                  x=j-87;      

         }              

              else               

         x=j-48;        

       if(x==c[i])         

       printf("%c",j);//此处直接将ASCII码值转换为字符串  

       }                   

}                    

printf("\n");        

return0;            

}           

# CTF
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者