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

51 lines
1.0 KiB
Markdown
Raw Normal View History

2020-07-31 18:23:33 +05:30
## 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:
```python
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:
```python
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}`