【BUUCTF】 xor~SimpleRev

xor

按题目意思本题关键在于异或,将程序拖入IDA中,发现有主函数

 快速分析其逻辑后,可以知道_b为本体中输入字符串所放置的变量,其由memset初始化,再由getline接受字符串

 可以看见flag应该为一个33位的字符串,且异或从第二个字符开始

_b 与global相比较得出结论,尝试搜索global,无果

 打开字符串表,发现一个疑似目标字符串

 

从"f"到"O"一共33 个字符,故编写脚本(也可以一个一个复制),将字符相异或

可以得到答案为flag{QianQiuWanDai_YiTongJiangHu} 

hello world

apk文件,拖入Android Killer中

打开MainActivity,发现flag

 

 reverse3

将程序拖入IDA中,看见ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=为base64编码的基础表

 常规打开字符串表,发现有一串奇怪的字符串

反编译后看主函数逻辑

故想到那串字符串str2 e3nifIH9b_C@n@dH 是最后正确的结果,那么可以通过伪代码逻辑反推flag

反向解出Str2原来的值为 

 得到flag{i_l0ve_you}

不一样的flag

打开main函数

 以及同时运行程序,发现只有按照一定规律输入1 2 3 4这些数字才能保证程序不退出

 v3中装载了目标字符串

 以上为推测的函数逻辑

 以上为验证移动的逻辑,因此我们知道v3中装的字符串是一个5*5的矩阵,需要我们按照不踩到1且从左上角走到#处应该可以得出答案(推测的过程全在注释中)

*1111

01000

01010

00010

1111#

因此flag应该为222441144222(记得包在flag里)

SimpleRev

打开main函数,发现加密函数Decry

 

打开Decry函数,src,和v9[0]里面装载了两个十六进制长整型

 看到join函数推测应该将v9转化为字符串,且双击进入key3发现key3确实为字符串‘kills’

同理图中的key1 == "ADSFK"

注意一件事,join和strcat的方式均为小端序

故最后拼接的结果应该为

 之后是一段转换

 最后根据这段逻辑编写脚本爆破

 最后一个问题,爆破的字符组的顺序不同会导致结果不同,我也是看了答案才知道,原因是取了模之后大小写中会出现多对一的解密映射

flag{KLDQCUDFZO}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值