C/S Reversing은 필요한 기술이지만 마땅히 테스트 할 대상이 없어
reversing.kr에 있는 CSHOP.exe를 대상으로 정리하였다.
가장먼저 수행해야될 것은 다운받은 파일을 실행하여 어떤 동작을 수행하는지 확인하는 것이다.
프로그램을 실행하면 빈 페이지만 가득한 채 더이상 진행되지 않는다.
PEiD를 이용하여 대상 파일이 어떤 언어로 구현되어 있는지 확인한다.
PEiD로 파일을 열어보면 C# / .NET으로 이루어진 것을 확인할 수있다. .NET은 IDA로 분석이 어려우니
dnspy를 이용하여 분석을 진행한다.
[PEiD 다운로드 주소]
[dnspy 다운로드 주소]
dnspy의 왼쪽 탭에 CSHOP.exe 파일을 드래그&드랍 하면 위 그림와 같이 디컴파일되어 분석이 가능하다. 하지만 자세히 보면 난독화하여 \uFFFD와 같은 문자가 존재하여 분석에 어려움이 있다.
복호화는 de4dot를 이용하여 진행 한다.
apt -y install de4dot
r 옵션을 이용하면 해당 디렉터리 내에 있는 모든 파일을 대상으로 복호화를 진행한다.
mkdir ./out
de4dot -r ./ -ro ./out
이제 다시 복호화된 파일을 dnspy로 열어보면 깔끔하게 보이는것을 확인할 수 있다.
이제 분석을 시작하는데 기초 문제답게 시작과 동시에 힌트가 나와있다.
버튼을 생성하는데 버튼의 사이즈가 [0,0] 으로 지정되어 있어 프로그램 실행 시 아무것도 보이지 않는 것이다.
문제점을 알았으니 코드를 패치해야 한다. 코드 패치는 .NET refletor와 reflexil를 사용하여 진행한다.
[.NET refletor 다운로드]
.NET Decompiler: Decompile Any .NET Code | .NET Reflector
Find and fix bugs fast Decompile, understand, and fix any .NET code, even if you don't have the source Download free trial Introduction to .NET Reflector Look inside any .NET code Debug your application Follow bugs through your application to see where the problem is – your own code, third-party lib...
www.red-gate.com
[reflexil 다운로드]
reflexil는 reflexil.for.Reflector.2.7.AIO.bin.zip 파일을 다운 받는다.
압축 해제 후 reflexil.for.Reflector.2.7.AIO.dll파일은 Addins폴더 하위에 복사하고 Reflector를 실행한다.
Tools - Add-ins에서 AIO.dll파일을 추가하면 Tools탭에 Reflexil 도구가 추가된다. Reflexil 도구 클릭
조금전에 확인했던 함수에서 버튼 [0,0]의 값을 [50,50]으로 변경하였다.
대상에서 우클릭 후 다른이름으로 파일을 저장한다.
이제 파일을 실행하면 네모 크기의 버튼이 보이고 버튼을 클릭하면 키값을 얻을 수 있다.