CodeEngn Malware05 풀이
Wargame | CTF/Reversing

CodeEngn Malware05 풀이

5번문제입니다. 악성코드의 일부분이 주어지고 무슨일을 하는 함수인지 알아내는 문제입니다.


코드를 살펴보면 이 함수는 3개의 파라미터를 인자로 받고 있습니다. 아마도 데이터가 들어있는 버퍼, 그리고 함수에서 어떤동작을 한뒤에 결과물을 받을 Output버퍼주소 그리고 데이터의 사이즈. 이걸로 유추해 보았을 때, 데이터를 받고 어떤 알고리즘을 거친뒤에 기존데이터를 어떤 문자값으로 바꾼후 종료해주는 것 같습니다.

인터넷을 찾아보니 전형적인 base64 인코딩 방식이라고 합니다.


 

Base64 인코딩방식을 한번 알아보겠습니다.

문자열은 알파벳 대소문자와 숫자, 그리고 "+", "/" 기호 64개로 이루어지며, "="는 끝을 알리는 코드로 쓰인다

베이스64의 정확한 규격은 RFC 1421, RFC 2045에 정의된다. 연속된 8비트 바이트를 인코딩하도록 정의되어 있으며, 이는 대부분 시스템에서 파일의 정의와 들어맞는다. 베이스64코딩을 거친 결과물은 원본보다 대략 4/3 정도 크기가 늘어나게 되며, 보통 의미없어 보이는 문자열이 나열된 형태가 된다.

데이터를 베이스64로 바꾸는 과정은 다음과 같다. 우선 24비트 버퍼에 위쪽(MSB)부터 한 바이트씩 세 바이트를 집어넣는다. 그리고 남은 바이트가 3바이트 미만이라면, 버퍼의 남은 부분은 0으로 채워넣게 된다. 그리고, 버퍼의 위쪽부터 6비트[1]씩 잘라 그 값을 읽어, 다음에 정렬된 64

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

의 문자 중에서 읽은 값 번째 문자를 골라 출력한다. 만약 입력된 바이트가 하나라면 출력 중 두 개만이 사용되고 나머지 둘은 "="으로 패딩되며, 입력된 바이트가 둘이라면 출력 중 세 개 만이 사용되고 나머지 하나는 "="으로 패딩되게 된다. 이것은 원본으로 되돌릴 때 원본에는 없던 비트가 생기는 것을 방지하기 위함이다. 이 과정은 입력 데이터가 끝날 때까지 반복하면 인코딩이 된다.

출처 :  https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464

 

그러면 여기서 하나드는 생각이 있습니다인터넷에 base64 디코딩 사이트를 이용하면 간단하게 디코딩이 가능한데 왜 쓰는걸까요? Base64를 사용하는 가장 중요한 이유는 바이너리 데이터의 손실을 막기 위해서 라고합니다.  문자 정보를 전송할 때, byte에서 char 형으로 변환 시 음수데이터는 인식을 하지 못하므로 데이터 손실이 발생합니다. byte(-128~127) char(0~255)


'Wargame | CTF > Reversing' 카테고리의 다른 글

CodeEngn Malware07 풀이  (0) 2018.08.07
CodeEngn Malware06 풀이  (0) 2018.08.07
CodeEngn Malware04 풀이  (0) 2018.08.07
CodeEngn Malware03 풀이  (0) 2018.08.07
CodeEngn Malware02 풀이  (0) 2018.08.07