바로 비교함수를 확인해보자

코드 자체는 그냥 연산을 따라가면 확인할 수 있을 것 같은데 처음보는 어셈블리 명령어가 보인다.

00007FF644D41044 | D2C0                     | rol al,cl                               |

 여기서 rol이라는 명령어를 알아보기 전에 al과 cl에 대해서 먼저 알아보자면 어셈블리어에서는 범용 레지스터가 있다. 32비트로 E(A, B, C, D)X, 그리고 64비트 R(A, B, C, D)X인데 값을 잠깐 저장하는데 쓰인다. (각 레지스터마다 주된 사용처가 있지만 신경쓸 필요 X)
 
 이 범용 레지스터에서 하위 비트를 부르는 명칭이 있다. 예를 들어 AX는 RAX(EAX)의 하위 4바이트(16비트)이다. 아래의 그림을 참고하자.

출처: https://kuaaan.tistory.com/449

그러면 이제 [ROL  AL, CL]이라는 명령어의 의미는 "RAX의 하위 8비트를 RCX의 하위 8비트만큼 ROL해서 AL에 저장해라."라는 의미이다.
 
이번에는 ROL명령어에 대해서 알아보자. 이 부분에 대해서는 아래의 링크를 통해 공부하였다.
https://m.blog.naver.com/sol9501/70091168321

|정수 연산 ①| 시프트와 회전 명령어 및 응용

|정수 연산 1| 시프트와 회전 명령어 및 응용 목표 : 시프트 연산의 기본적이 사용법과 응용 및 각 연산이 ...

blog.naver.com

ROL명령어는 간단히 말해서 왼쪽으로 비트회전이다. 코딩을 조금이라도 해 본 사람이라면 비트시프트에 대해서 알고 있을 것이다. 기본적으로 왼쪽으로 비트시프트를 하면 보통 최상위 비트는 그대로 사라진다. 그러나 비트회전은 최상위 비트를 CARRY 플래그와 최하위 비트로 복사한다. 비트가 말 그대로 회전한다는 것이다. 
 
최종적으로 [ROL  AL, CL]의 의미는  "RAX의 하위 8비트를 RCX의 하위 8비트만큼 왼쪽으로 비트회전해서 AL에 저장해라."라는 뜻이다.
 
따라서 비교함수식은
(rol(input[i], i & 7)) ^ i == enc[i]
 
이를 통해 역산식을 구하면
input[i] = ror(enc[i] ^ i, i & 7)이 된다.
 
ROR코드 및 ROL코드는 아래 링크에서 복사해왔다.
https://hacking-ai.tistory.com/68

어셈블리 ROL, ROR 코드 구현

리버싱 문제를 풀다가 ROL, ROR이 나왔는데, 기드라의 경우 디컴파일 결과가 단지 >>와 같이 쉬프트 연산만 수행하는 방식으로 나오는 문제를 겪었다. 따라서, 이를 해결하기 위해 파이썬으로 ROL, R

hacking-ai.tistory.com

def rol(x, n):
    shiftBit = x << n
    shiftBit &= 255
    carryBit = x >> 8 - n
    return shiftBit | carryBit

def ror(x, n):
    shiftBit = x >> n
    carryBit = x << (8 - n)
    carryBit &= 255
    return shiftBit | carryBit

enc = '52 DF B3 60 F1 8B 1C B5 57 D1 9F 38 4B 29 D9 26 7F C9 A3 E9 53 18 4F B8 6A CB 87 58 5B 39 1E 00'
enc = tuple(enc.split(' '))
res = ''

for i in range(31):
    res += chr(ror((int(enc[i], 16) ^ i), (i&7)))


print(res)

 

 
새로운 명령어로 지식이 늘었다.

'Security > Reversing' 카테고리의 다른 글

Dreamhack rev-basic-9  (0) 2022.07.05
Dreamhack rev-basic-8  (0) 2022.07.05
Dreamhack rev-basic-6  (0) 2022.06.01
Dreamhack rev-basic-5  (0) 2022.05.28
Dreamhack rev-basic-4  (0) 2022.05.25

+ Recent posts