알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

C# 직렬화(Serializable) 통신 패킹된 파일 구조 맞춰 주기 본문

리버싱

C# 직렬화(Serializable) 통신 패킹된 파일 구조 맞춰 주기

백곳 2018. 7. 3. 09:10

C# 직렬화(Serializable) 통신 구조 맞춰 주기



C# 에서 직렬화중에 Binary 직렬화를 사용하는 것들이 있습니다.


해당 Serializable 는 C#의 어셈 블리 정보와 네임 스페이스 클래스 이름 변수 이름 까지 맞춰줘야


deSerializable 이 됩니다. 안 그러면 직렬화 라이브러리 에서 에러를 보냅니다.


그래서 이것만 맞춰 줘서 통신을 하면 됩니다 .


어셈블리 설정 정보 입니다.



일단 어셈블리가 맞지 않으면


$exception    {"'oolon.BaseLibrary, Version=2.1.6591.16683, Culture=neutral, PublicKeyToken=null' 어셈블리를 찾을 수 없습니다."}    


같은 에러가 뜨게 됩니다.


기존에 사용중인 직렬화의 페킷을 보고


이를 파일로 써보면 프로그램에서 사용중인 직렬화 어셈블리 정보를 알수가 있습니다.


일반적으로 통신을 할때 base64인코딩을 하기 때문에 base64인코딩을 디코딩해서 byte 변수로 변환한다음


이를 파일로 써 보겠습니다.


저 같은 경우에 wireshark 로 패킷을 보니



이런식으로 나오는데 이를 프로그램 에서


String text = "AAEAAAD/////AQAAAAAAAAAMAgAAAE9Oc2xvbi5CYXNlTGlicmFyeSwgVmVy ...(너무 길어서 생략 실제 코드에서는 모두 붙여 넣어 주면 됩니다. )

이를 컨버터 해서

byte[] bytDS = Convert.FromBase64String(text);


        try
                       {
                            // Create a new stream to write to the file
                            BinaryWriter Writer = new BinaryWriter(File.OpenWrite("output.dat"));

                            // Writer raw data               
                            Writer.Write(data);
                            Writer.Flush();
                            Writer.Close();
                        }
                        catch
                        {


                        }


로 써 준다음에


파일을 열어서 보면



보면 어셈 블리 정보와


네임 스페이스

PQfguDdpx7KOcdP4J

클래스 이름

YxSeZwFhLwOG2r7kAJ


변수 이름들

JOj5GBrjQd
SUL5iFVjl0
dQh59iSmZR
mua5sXNNnM
QK451KOI61
dUD5lAnYfV
iYF5OcK5d


입니다.


해당 클래스는 dll 파일 디컴파일러로  구조를 봅니다.


만약 패킹된 또는 난독화면 파일에서는 디컴파일러시에 이름을 새로 만들기 때문에  기존 변수 이름을 모릅니다.


그래서 패킹 또는 난독화를 풀어준 다음에  디컴파일한 파일 소스를 참고하여


패킹 되기전에 디컴파일러 결과와 패킹을 해독한 다음 디컴파일 결과를 비교해서 변수 이름을 위와 같이 만들어 줘야 합니다.


그러면 Serializable deSerializable가 잘되게 됩니다.


패킹 해독 되기전




해킹 해독 된후




그래서 


변수와 네임스페이스를 맞춰 준다음에 코딩을 해줍니다.


해당 게시물을 제 자신이 분석한 내용을 추후 기억 하기 위함 이고


두서가 없서 다른 사람이 보기에 어려울수도 있습니다.


이해가 안가는 부분은 답글 달아 주시면 감사하겠습니다.


'리버싱' 카테고리의 다른 글

COM Serial Port Packet Sniffer  (2) 2018.12.12
C# packet 캡쳐 하기  (0) 2018.12.07
UPX packing 과 unpacking (2)  (0) 2018.06.19
UPX packing 과 unpacking (1)  (0) 2018.05.28
C# dll injection 오픈소스 사이트 공유  (0) 2018.05.27
Comments