ROL
ROR
오늘 리버싱을 배운김에 리버싱문제를 풀어봤다
해당 문제의 pseudocode는 아래와 같다
ROL1
라는 함수는 처음 본다 알아보자
rotate bit Left / Right
비트를 count만큼 왼쪽이나 오른쪽으로 옮기는 함수이다
예시 )
__ROL1__(0000 0001, 1) = 0000 0010
__ROR1__(0000 0001, 1) = 1000 0000
이걸 파이썬 코드로 작성해보자
def ROR(data, shift, size=32):
shift %= size
body = data >> shift
remains = (data << (size - shift)) - (body << size)
return (body + remains)
def ROL(data, shift, size=32):
shift %= size
remains = data >> (size - shift)
body = (data << shift) - (remains << size )
return (body + remains)
byte_140003000[i] ^ i
값을 ROR함수에 for문으로 돌려주면 flag를 얻을 수 있다!