OutDoorFrog의 리버싱 이야기

Reversing.Kr [Csharp] 본문

공부/사이트 문제 풀이

Reversing.Kr [Csharp]

OutDoorFrog 2019. 1. 3. 07:31

안녕하세요~ 블로그의 주인장 OutDoorFrog입니다.


오늘은 Csharp를 풀어봅시다.


일일 초대 손님이 있습니다. 바로... .Net Reflector입니다!


.net reflector에 대한 이미지 검색결과



(Free-Trial이라 14일 시한부 판정을 받은 프로그램입니다 ㅠㅠ)




1. 프로그램 실행



일단 실행시켜보니 Windows Form으로 만들었을 확률이 높겠네요.



리네이밍을 하지 않는다고 가정하면 Form1 클래스에 사용자가 만든 코드가 있고 

Program 클래스의 메인 함수에서 Form1 객체를 생성하여 실행하는 방식이겠네요.


몇몇 답도 찍어봤는데 역시나 맞진 않습니다. 






2. .Net Reflector - 1



역시 예상과 같군요.




main 함수입니다. 자동으로 생성되는 코드들이랑 비슷하네요.





객체를 생성했네요. Form1의 구성을 봅시다.




.ctor(생성자), MetMetMet, MetMett 함수를 주의 깊게 살펴봐야 할 것 같네요.




MetMett 함수를 살펴보았는데 디컴파일에 실패했습니다. (암호화라도 적용된건가?)




MetMett 함수의 위치를 구해서 복호화시켜주는 코드 같습니다!


IDA의 크로스 래퍼런스 기능을 이용해서 MetMett 함수의 위치를 구하고

C언어를 이용해 생성자의 행위를 흉내내서 직접 복호화해봅시다.




BindingFlags.NonPublic : Public이 아닌 멤버를 검색에 포함도록 지정합니다.

BindingFlags.Static : 정적 멤버를 검색에 포함되도록 지정합니다.


GetILAsByteArray() : Byte 배열 형식으로 데이터를 가져오는 것 같습니다.



(크로스 래퍼런스 기능 사용)



데이터 슥삭



코드만들기 슥슥

&0xFF 를 안해주면 값이 이상하게 뜨는 경우가 발생해서 보정해주었습니다.






패치를 해서 복호화를 시켜주면.. 잘 뜹니다!

(근데 저렇게 복호화 해놓으면 패치한 바이너리는.. 사용이 불가능)



신나서 역산한 다음에 대입을 해봤는데 실패합니다.

(왜그럴까요?)




몸이 먼저 반응해서 디코딩 사이트에 가신 분들도 있으시겠지만..




(입력값을 Base64 인코딩한 후 인코딩되어 있는 값과 비교하네요)





& 0xFF 알아내는데 가장 큰 시간이 걸린 것 같습니다.

'공부 > 사이트 문제 풀이' 카테고리의 다른 글

Reversing.Kr [Multiplicative] 수정중  (1) 2019.01.06
Reversing.Kr [HateIntel]  (0) 2019.01.03
Reversing.kr [Music Player]  (0) 2019.01.01
Reversing.kr [Easy_ELF]  (0) 2018.11.03
CodeEngn.com [Advanced] 2  (1) 2018.09.22
Comments