boom二进制 解出该密码,密码为6个整数,题目如下,请大神帮忙解一下!!!
08048bb4<phase_2>:8048bb4:53push%ebx8048bb5:83ec38sub$0x38,%esp8048bb8:8d442418lea0x1...
08048bb4 <phase_2>: 8048bb4: 53 push %ebx 8048bb5: 83 ec 38 sub $0x38,%esp 8048bb8: 8d 44 24 18 lea 0x18(%esp),%eax 8048bbc: 89 44 24 04 mov %eax,0x4(%esp) 8048bc0: 8b 44 24 40 mov 0x40(%esp),%eax 8048bc4: 89 04 24 mov %eax,(%esp) 8048bc7: e8 70 05 00 00 call 804913c <read_six_numbers> 8048bcc: 83 7c 24 18 00 cmpl $0x0,0x18(%esp) 8048bd1: 79 22 jns 8048bf5 <phase_2+0x41> 8048bd3: e8 3d 05 00 00 call 8049115 <explode_bomb> 8048bd8: eb 1b jmp 8048bf5 <phase_2+0x41> 8048bda: 89 d8 mov %ebx,%eax 8048bdc: 03 44 9c 14 add 0x14(%esp,%ebx,4),%eax 8048be0: 39 44 9c 18 cmp %eax,0x18(%esp,%ebx,4) 8048be4: 74 05 je 8048beb <phase_2+0x37> 8048be6: e8 2a 05 00 00 call 8049115 <explode_bomb> 8048beb: 83 c3 01 add $0x1,%ebx 8048bee: 83 fb 06 cmp $0x6,%ebx 8048bf1: 75 e7 jne 8048bda <phase_2+0x26> 8048bf3: eb 07 jmp 8048bfc <phase_2+0x48> 8048bf5: bb 01 00 00 00 mov $0x1,%ebx 8048bfa: eb de jmp 8048bda <phase_2+0x26> 8048bfc: 83 c4 38 add $0x38,%esp 8048bff: 5b pop %ebx 8048c00: c3 ret
展开
2个回答
展开全部
看到你说是6个整数,虽然不知道<read_six_numbers>函数的代码,看下面这段代码是比较了7个4 bytes的整数,它们分别存储在0x18(%esp)、0x1C(%esp)、0x20(%esp)、0x24(%esp)、0x28(%esp)、0x2C(%esp)、0x30(%esp),所以猜测这其中前6个就是你说的6个整数!不过仅仅是猜测,因为“没看到<read_six_numbers>函数的代码”,其中是怎么样不知道。
8048bda:89 d8 mov %ebx,%eax
8048bdc:03 44 9c 14 add 0x14(%esp,%ebx,4),%eax
8048be0:39 44 9c 18 cmp %eax,0x18(%esp,%ebx,4)
8048be4:74 05 je 8048beb <phase_2+0x37>
8048be6:e8 2a 05 00 00 call 8049115 <explode_bomb>
8048beb:83 c3 01 add $0x1,%ebx
8048bee:83 fb 06 cmp $0x6,%ebx
8048bf1:75 e7 jne 8048bda <phase_2+0x26>
注意这段代码,依次检测这7个4 bytes的整数,可以看出这7个数字的关系。假设第一个数字是n,那么这7个数字必须为:n、n+1、n+3、n+6、n+10、n+15、n+21才不会爆炸。
这7个数字中,只有确定了其中一个,那么其余6个数字随之确定。
8048bcc:83 7c 24 18 00 cmpl $0x0,0x18(%esp)
8048bd1:79 22 jns 8048bf5 <phase_2+0x41>
8048bd3:e8 3d 05 00 00 call 8049115 <explode_bomb>
看这里比较了0x18(%esp)和0,只是说了0x18(%esp)大于0,也就是n>0。
还有一些细节就不知道了啊!调用本函数时的压栈信息不知道。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询