好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 zishen 于 2023-12-22 22:59 编辑
今天遇到一个CTF题
from ctypes import *
from Crypto.Util.number import bytes_to_long
from Crypto.Util.number import long_to_bytes
def encrypt(v, k):
v0 = c_uint32(v[0])
v1 = c_uint32(v[1])
sum1 = c_uint32(0)
delta = 195935983
for i in range(32):
v0.value += (v1.value << 4 ^ v1.value >> 7) + v1.value ^ sum1.value + k[sum1.value & 3]
sum1.value += delta
v1.value += (v0.value << 4 ^ v0.value >> 7) + v0.value ^ sum1.value + k[sum1.value >> 9 & 3]
return (v0.value, v1.value)
if __name__ == '__main__':
flag = input('please input your flag:')
k = [
255,
187,
51,
68]
if len(flag) != 32:
print('wrong!')
exit(-1)
a = []
for i in range(0, 32, 8):
v1 = bytes_to_long(bytes(flag[i:i + 4], 'ascii'))
v2 = bytes_to_long(bytes(flag[i + 4:i + 8], 'ascii'))
a += encrypt([
v1,
v2], k)
enc = [
0xEEC7D402L,
0x99E9363FL,
0x853BDE61L,
558171287,
0x908F94B0L,
1715140098,
986348143,
1948615354]
for i in range(8):
if enc != a:
print('wrong!')
exit(-1)
print('flag is flag{%s}' % flag)
根据这个python代码逆向写出脚本,自己没写出来,看别人的:
是这样的
但是这点很懵,这点还原不是很理解,为什么 要 >>24、16、8 为什么要 ^0xFF ?
wp链接:https://blog.csdn.net/shenkong_/article/details/127359568
请大佬解答!!!
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|