.net 프로그램 리버싱 툴
리버싱을 하다보면 가끔 닷넷 프로그램을 리버싱 해야 할 경우가 있다. 사실 나도 닷넷 프로그래밍을 공부해본 적은
없기 때문에 자세한 내부구조 까지는 알 수 없으나, 리버싱이 언제나 그렇듯이 중요한 건 프로그램에서 내가 고칠
부분을 찾고, 코드 패칭 등 원하는 작업을 할 수 있으면 되기 때문에 큰 어려움은 없었다.
가장 중요한 사실은 닷넷 프로그램은 관리코드 기반 언어이기 때문에 디컴파일이 매우 잘 된다는 것이다. :)
이번 코드 게이트 대회에서도 닷넷 프로그램이 문제에 나와서 나온 김에 정리를 해둔다.
# 닷넷 프로그램
- 관리 기반 코드 ( = java JVM처럼 중간언어로 컴파일됨, MSIL 이란 언어로 컴파일 됨 )
- 그러므로 디컴파일이 매우 쉽게 됨
- 난독화 솔루션 존재하나, 어느정도 원복해주는 툴 또한 존재함
# 관련 리버싱 툴
1) .net reflector ( 디컴파일러, http://www.red-gate.com/products/dotnet-development/reflector/ )
- 가장 많이 사용되는 닷넷용 디컴파일러 / .net 다양한 언어 지원 / 다양한 플러그인 지원 / 유료(ㅠㅠ)
[ 그림1 ] .net reflector
2) dotpeek ( 디컴파일러, http://www.jetbrains.com/decompiler/ )
- 최근에 알게된 닷넷용 무료(!) 디컴파일러 / 깔끔한 인터페이스 / 아직은 플러그인이 별로 없는 것이 단점
[ 그림 2 ] dotpeek
# 닷넷 reflector 유용한 필수 플러그인
1) Reflexil
- MSIL 언어 수정을 가능하게 해주는 플러그인
- MSIL 언어를 알아야함 =_=/ 아니면 소스 받아서 컴파이를 아예 다시 하거나~!
2) deblector
- 닷넷 디버깅 도우미(?)
- 리플렉터 상에서 디버깅을 하며 값 변경, 셋팅 등 일반적인 디버거의 기능을 추가해줌
# 코드게이트 문제 풀이
[ 그림 3 ] 코드게이트 binary 100 문제
문제를 열어보면 닷넷파일이고, 숫자키를 입력하게 되어 있다. 전형적인 crackme or keygen 문제이다.
닷넷이니 일단 디컴파일을 한 뒤 소스를 확인 해보면, 아래와 같은 비교 루틴을 찾을 수 있다.
TransFormable() 함수 내부를 살펴보면, 입력받은 키값이 16글자인지 비교한 뒤 , 입력받은 키값을 AES 함호화 하여
저장되어 있는 키값과 비교한다. 이 2 조건을 통과하면 정답을 출력하도록 되어 있다. 즉, 소스만으로 평문 키값을 알
아내긴 어렵다. 방법은 여러가지가 있겠지만, 여기선 플러그인을 활용하여 코드패칭을 하고 실행하여 바로 키값이 출
력되도록 할 것이다.
[ 그림 4 ] 키값 비교 및 정답 출력 함수
[ 그림 5 ] 무조건 정답출력 루틴으로 가도록 코드 패칭 ( ceq -> cgt 로 조작 )
[ 그림6 ] 파일명을 우클릭하여 Save as 로 패칭된 파일 저장
[ 그림 7] 정답화면
'Reversing' 카테고리의 다른 글
Windows Kernel Reversing - Object 분석 (0) | 2015.01.28 |
---|---|
온라인 디컴파일러 - decompiler.fit.vutbr.cz (3) | 2014.10.31 |
비주얼 베이직 리버싱 팁 - vb decompiler To IDC(ida script) (1) | 2013.12.23 |
Windbg 기본 - (2) 기본 명령어들-2 (0) | 2012.08.08 |
Windbg 기본 - (1) 기본 명령어들 (0) | 2012.08.07 |