欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

reverse-box 攻防世界

程序员文章站 2024-03-11 22:59:07
...

工具

gdb脚本

思路展开

攻防世界的题目没给全,原题目是让输出等于
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
main函数逻辑简单,关键函数sub_804858D
reverse-box 攻防世界
看main函数,我们的输入作为位置(数组下标)去取v4大数组的值,取出来的值等
于下面这个数组。95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
v4大数组怎么来的就变的关键。进入sub_804858D函数
reverse-box 攻防世界
时间作为随机数种子,会有很多情况。这时,我们看看汇编
reverse-box 攻防世界
只取低2位,也就是0-ff种情况,下面_ROR1_计算,这是个啥算法,也无法逆。所以采用**,采用**就要有条件约束。
条件约束:1.情况0-ff 2.TWCTF是规定的flag格式,运行时添加此参数,结果的第一位是95
gdb脚本 define XXX

set $i=0
set $total=256
while($i<$total)
  b *0x80485b4
  b *0x8048707
  run TWCTF
  set $i=$i+1
  set *(char*)($ebp-0xc)=$i
  continue
  if ($eax==0x95)
    print $i
    x/256xb $esp+0x1c
    set $i=256
  end
  stop
end
end

运行出v4的表格
reverse-box 攻防世界
拿到表格,脚本找位置,就是flag。

import re
a = "95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a"
box = '''
0xffffcfbc:	0xd6	0xc9	0xc2	0xce	0x47	0xde	0xda	0x70
0xffffcfc4:	0x85	0xb4	0xd2	0x9e	0x4b	0x62	0x1e	0xc3
0xffffcfcc:	0x7f	0x37	0x7c	0xc8	0x4f	0xec	0xf2	0x45
0xffffcfd4:	0x18	0x61	0x17	0x1a	0x29	0x11	0xc7	0x75
0xffffcfdc:	0x02	0x48	0x26	0x93	0x83	0x8a	0x42	0x79
0xffffcfe4:	0x81	0x10	0x50	0x44	0xc4	0x6d	0x84	0xa0
0xffffcfec:	0xb1	0x72	0x96	0x76	0xad	0x23	0xb0	0x2f
0xffffcff4:	0xb2	0xa7	0x35	0x57	0x5e	0x92	0x07	0xc0
0xffffcffc:	0xbc	0x36	0x99	0xaf	0xae	0xdb	0xef	0x15
0xffffd004:	0xe7	0x8e	0x63	0x06	0x9c	0x56	0x9a	0x31
0xffffd00c:	0xe6	0x64	0xb5	0x58	0x95	0x49	0x04	0xee
0xffffd014:	0xdf	0x7e	0x0b	0x8c	0xff	0xf9	0xed	0x7a
0xffffd01c:	0x65	0x5a	0x1f	0x4e	0xf6	0xf8	0x86	0x30
0xffffd024:	0xf0	0x4c	0xb7	0xca	0xe5	0x89	0x2a	0x1d
0xffffd02c:	0xe4	0x16	0xf5	0x3a	0x27	0x28	0x8d	0x40
0xffffd034:	0x09	0x03	0x6f	0x94	0xa5	0x4a	0x46	0x67
0xffffd03c:	0x78	0xb9	0xa6	0x59	0xea	0x22	0xf1	0xa2
0xffffd044:	0x71	0x12	0xcb	0x88	0xd1	0xe8	0xac	0xc6
0xffffd04c:	0xd5	0x34	0xfa	0x69	0x97	0x9f	0x25	0x3d
0xffffd054:	0xf3	0x5b	0x0d	0xa1	0x6b	0xeb	0xbe	0x6e
0xffffd05c:	0x55	0x87	0x8f	0xbf	0xfc	0xb3	0x91	0xe9
0xffffd064:	0x77	0x66	0x19	0xd7	0x24	0x20	0x51	0xcc
0xffffd06c:	0x52	0x7d	0x82	0xd8	0x38	0x60	0xfb	0x1c
0xffffd074:	0xd9	0xe3	0x41	0x5f	0xd0	0xcf	0x1b	0xbd
0xffffd07c:	0x0f	0xcd	0x90	0x9b	0xa9	0x13	0x01	0x73
0xffffd084:	0x5d	0x68	0xc1	0xaa	0xfe	0x08	0x3e	0x3f
0xffffd08c:	0xc5	0x8b	0x00	0xd3	0xfd	0xb6	0x43	0xbb
0xffffd094:	0xd4	0x80	0xe2	0x0c	0x33	0x74	0xa8	0x2b
0xffffd09c:	0x54	0x4d	0x2d	0xa4	0xdc	0x6c	0x3b	0x21
0xffffd0a4:	0x2e	0xab	0x32	0x5c	0x7b	0xe0	0x9d	0x6a
0xffffd0ac:	0x39	0x14	0x3c	0xb8	0x0a	0x53	0xf7	0xdd
0xffffd0b4:	0xf4	0x2c	0x98	0xba	0x05	0xe1	0x0e	0xa3
'''
box = re.sub(r'(0xffff[a-z0-9][a-z0-9][a-z0-9][a-z0-9])',"",box)
p = re.compile(r'(0x[a-z0-9][a-z0-9])')
tmp = p.findall(box)
tmp = [int(i,16) for i in tmp]
print(tmp)
for i in range(len(a)//2):
	print(chr(tmp.index(int(a[i*2:i*2+2],16))),end="")

TWCTF{5UBS717U710N_C1PH3R_W17H_R4ND0M123D_5-B0X}

相关标签: 我的CTF之路