CSICTF-Writeups/Miscellaneous/Machine Fix/README.md

1.0 KiB

Machine Fix

The main idea finding the flag is just understanding the algorithm.

Step-1:

After I downloaded code.py, I tried to understand the workflow here:

def convert (n):
    if n == 0:
        return '0'
    nums = []
    while n:
        n, r = divmod(n, 3)
        nums.append(str(r))
    return ''.join(reversed(nums))

count=0
n=1
while(n<=523693181734689806809285195318):
	str1=convert(n)
	str2=convert(n-1)
	str2='0'*(len(str1)-len(str2))+str2
	for i in range(len(str1)):
		if(str1[i]!=str2[i]):
			count+=1
	n+=1

print(count)

Step-2:

For every number n, n and n - 1 are converted to base 3 & then, the program compare the digits, the number of differences is added to total.

So I wrote a simple flag.py script to get flag:

def flag(n):
    sum = 0
    while (n > 0):
        sum += n
        n //= 3
    return sum

print(flag(523693181734689806809285195318))

On running it by python3 flag.py

Step-3:

Finally the flag becomes: csictf{785539772602034710213927792950}