【LittleXi】binary bomb(二进制炸弹)

【LittleXi】binary bomb(二进制炸弹)

bomb1

解题思路:

进入phase_1,打印一下0x555555557150为"I am the mayor. I can do anything I want.",看到一个<strings_not_equal>函数,可以知道我们要输入的内容要和这个字符串"I am the mayor. I can do anything I want."相同,即为密钥。
在这里插入图片描述

bomb2

解题思路:

进入phase_2,看到一个<read_six_numbers>,即可知道要输入6个数字,通过观察下面的汇编语句,知道第一个数字是0,第二个数字是1,然后继续往下走,发现我们每次需要的数字是前面两个数字的和,即斐波那契数列,所以数列0 1 1 2 3 5即为密钥。
在这里插入图片描述

bomb3

解题思路:

进入phase_3,我们可以直接打印第32行的0x5555555573d5,为 “%d %d”,可以知道我们需要输入两个数字,并且通过第49行,我们知道输入的第一个数字不能大于7,然后我们分析下面的代码,发现是一个switch语句,此时我们第一个数字直接输入7,后面就和149行的0x38a进行比较,这个0x38a即为我们的第二个数字,所以7 906,即为密钥
在这里插入图片描述

bomb 4

解题思路:

进入phase_4,我们可以直接打印第32行的0x5555555573d5,为 “%d %d”,可以知道我们需要输入两个数字,然后分析下面的几行,从55行发现输入的第二个数字不能超过4,所以在这里我们可以输入2,然后关键地来到了函数,我们进入func4,发现这是一个不断调用自身的递归函数,输入值是2,然后我们可以直接利用这个函数计算最终返回的值,当然也可以根据这个函数写一个C代码,然后调用计算最终返回的答案,我们计算得返回值是108,所以108 2 ,即为密钥。
在这里插入图片描述

bomb 5

解题思路:

进入phase_5,看到一个string_length函数,调用该函数后,下面会用%eax和6进行比较,提升我们应该输入长度为6的字符串,然后下面有一个提示:array,说明了%rsp所指向的地址是一个数组[2,10,6,1,12,15,9,3,4]的开头位置,接着往下走,有一个循环while(%rdi!=%rax),循环中%rax每次往上移一格,%edx获取%rax所指向的字符,然后后面有一个与操作0xf&%edx,于得到的数字即作为数组rsi的下表,并赋值给%ecx,并循环6次,最终与0x2e相比较,相等则不爆炸。所以我们应该找到rsp的下标,使得找到的值的和等于0x2e,所以我们对于每个字符的16进制ACSII码的最低位应该为023456,可以对应字符Pbcdef,即为密钥。
在这里插入图片描述

bomb 6

解题思路:

进入phase_6,看到一个<read_six_numbers>,即可知道要输入6个数字,下面进行了两个循环,分别判断输入的数字是否是小于等于6并且互不相同的,接着往下走,找到一个,将按序打印一下,发现是一个链表,然后往下循环判断我们输入的编号排好的节点顺序是否符合前面一个大于后面一个的规则,所以我们可以根据node中的值val来排序就好了,排号的顺序为 6 3 4 1 5 2,即为密钥。

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值