标签:code print input1 RE range BUUCTF 128 pyre x01
初步探索
.pyc文件 通过在线 反编译后
print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
num = ((input1[i] + i) % 128 + 128) % 128
code += num
for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]
print code
code = [
'\x1f',
'\x12',
'\x1d',
'(',
'0',
'4',
'\x01',
'\x06',
'\x14',
'4',
',',
'\x1b',
'U',
'?',
'o',
'6',
'*',
':',
'\x01',
'D',
';',
'%',
'\x13']
解题
①*关于%有注意的点 (;´д`)ゞ算术真头大啊
( a + b ) % c=(a%c+b%c)%c,所以第5行等价于(input1[i]+i)%128。
((input1[i] + i) % 128 + 128) % 128
=((input1[i]+i)%128%128 + 128%128)%128
=(input1[i]+i)%128
②
l=len(code)=23
然后我们异或的范围是rang(l-1)
code[i]=code[i]^code[i+1],
i应该是从0取到l-1-1。处理后,code[22]没有变
也就是说code[21]=code[21]^code[22] 这个异或做到21已经是最大的值了 在l-1的范围内
code[22]^=code[23]是在范围外的
脚本
code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']
l=len(code)
print('Welcome to Reverse!')
for x in range(l-2,-1,-1):
code[x]=chr(ord(code[x])^ord(code[x+1]))
for x in range(l):
print(chr((ord(code[x])-x)%128),end='')
flag
GWHT{Just_Re_1s_Ha66y!}
标签:code,print,input1,RE,range,BUUCTF,128,pyre,x01 来源: https://www.cnblogs.com/Nickyl07/p/12828381.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。