• CRC(순환 중복 검사)에 대하여

    2020. 7. 15.

    by. ugonfor

    리버싱을 하다보면.. CRC를 만날 때가 꽤나 있다.

    왜 그렇게 CRC를 좋아하는 지 모르겠는 데 생각보다 리얼월드에서도 자주 보인다.


    CRC연산

    def crc(c):
        crc = 0
        for i in range(len(c)):
            crc = table[(crc ^ c[i]) & 0xff] ^ (crc >> 8)
        return crc
    

    CRC연산은 위와 같이 된다.

    여러곳을 확인해봤는 데 위 식이 제일 짧고 보기 쉽기에 가져왔다. 


    그리고 이거 예전에 현대암호학 배울때 배웠는 데...

     

     

    이거 이렇게 된다. ㅇㅇ...

    텍스트가 AB일경우에 위처럼 되고 더 많으면 더 반복하겠지 ㅇㅇ..

     

    그럼 역연산은 어떻게할까???

    지금 만든 PPT파일을 저장을 안하고 꺼버려서 날아가버려서 역연산은 그림 없음 .... ㅠㅠ

     

    지금 CRC값을 보면 맨 상위 1바이트가 과거 CRC값에 영향을 받지 않아서, 해당 table의 값이  맨 위 1바이트를 결정한다.

     

    역연산을 하려고 하면.. 그럼 갖고 있는 crc값에서 상위 1바이트를 뽑고

    그 상위 1바이트와 같은 값을 상위 1바이트로 갖는 table을 찾는다. 그럼 그 table의 index값이 나올 것임.

    이후에 xor을 하게 되면... 이전 crc값의 하위 1바이트를 제외한 값이 나오는 데, 이때 하위 1바이트는 이전 text값과 index값을 xor하면 채울 수 있겠죠.

     

    이 과정을 반복하면 되겠죠.

     

     

     

    'Study > Reversing Skills' 카테고리의 다른 글

    리케알 올솔 -1  (1) 2021.03.19
    Frida Cheat Sheet  (0) 2021.03.10
    IDA, IDAPython, z3사용법  (1) 2020.11.05
    hex-ray 주석  (0) 2020.08.25

    댓글