여기서 소개하는 Register와 Stack은 모두 32bit 운영체제의 CPU를 기준으로 작성된다. General Purpose Register (범용 레지스터) EAX : Accumulator for operands and Result data. EBX : Pointer to data in the DS Segment. ECX : Counter for string and loop operations. EDX : I/O Pointer. EBP : Pointer to data on the Stack. ( SS Segment ) - 이게 맞나..? ( Stack Base Pointer 아닌가..? ) ESI : Source pointer for string operations. EDI : Destinatio..
정적분석 - 파일의 겉모습을 관찰하여 분석. - File Type, File Size, Header, API, String, 압축여부 등등의 정보를 획득한다. 동적분석 - 파일을 직접 실행시키고 그 행위를 분석. - 디버깅을 통해 코드 흐름 및 메모리 상태등을 살펴보는 방법. - 각종 이벤트 등을 적절하게 발생시켜 그에 대응하는 동작들을 확인한다. 정적분석을 통해 동적분석을 위한 아이디어를 얻을 수 있다. 지금까지 하던 '디버깅'은 리버싱 기술중 한 가지에 불과하다.
C#으로 만들어진 프로그램 중에서 CryptoStream을 통해 암호화된 문자열을 복호화해야되는 경우가 간혹 있다. 그럴때 아래코드를 통해 빠르게 해결해보도록 하자. ( 자세한 설명은 하지 않겠다. ) 여기서 중요한점은 Mode와 Padding은 문제마다 다르니 꼭 확인하고 수정해야한다!!! 추가로 Key도 문제마다 다르니 꼭 확인하고 수정해야한다. 그러나 무조건 8글자인건 동일!! byte[] 와 String에대한 처리에도 익숙해지자. String → byte[] ASCIIEncoding.ASCII.GetBytes("ABCD"); Encoding.UTF8.GetBytes("ABCD"); byte[] → String Encoding.UTF8.GetString(byte[]); 코드 using System;..

PEiD를 통해 확인해 봤더니 해당 exe파일은 C#으로 만들어졌다는 것을 확인할 수 있다. 그래서 C# 디컴파일 도구를 사용해 디컴파일 했다. (dnspy, DotPeek) 키자마자 버튼 이벤트에대해서 나와서 바로 분석했다. 같이 첨부되어있던 account.dat 파일을 읽어와서 해당 내용을 Split 해준다. account.dat을 HxD를 사용해 내용을 확인해보자. 콜론(:) 을 구분자로 삼아 Split 하게 되면 strArray에는 strArray = { "guest", "7C685308952 ....", "01541" } strArray = { "admin", "A0F60D70FA ....", "31337" } 이 차례로 들어가게 된다. 근데 밑에 if문을 보니 admin에대해 처리를 해줘야 할..

우선 dll을 OllyDBG에 올린후, Debugging options에서 Break on new module (DLL)을 설정한다. 그렇게 F9를 통해 진행하다보면 내가 원하는 DLL이 올라오는 순간이 있다. 그 때 그 주소를 찾아가서 원하는 주소를 찾는다. ( 여기서는 스트링 탐색 기능을 사용했다. ) 그리고 내가 바로 넘어가고싶은 함수의 시작부에 New Origin here을 설정한다. 그러면 아래 사진과 같이 EIP가 해당 함수로 넘어오는 것을 확인할 수 있다. x64dbg에도 "여기를 새로운 원점으로지정" 이라는 옵션이 존재한다. 결과적으로 dll만으로는 접근할 수 없었던 포인트에 접근해 Key값을 찾아낼 수 있었다.
Windows Message Loop ? 윈도우즈 프로그램에서 메세지를 읽어들이고, "윈도우 프로시저"에 메세지를 전달하는 역할 Winodws Message Loop는 윈도우즈 기반 GUI 프로그램에 반드시 포함되는 루틴이다. (엄격하지는 않고 수정도 가능하지만 유사한 기능을하는 루틴이 반드시 있어야한다.) 기본적으로 아래 그림과 같이 구성된다. 사용자가 수정할 수 있어서 조금씩 차이가 있을 수 있다. 윈도우즈 시스템은 각각 프로세스에 대해서 개별적인 메세지 큐를 할당한다. 메세지 발생시 운영체제가 해당 프로세스의 메세지 큐에 메세지늘 넣는다. (스스로 추가도 가능) 프로세스는 자신의 메세지 큐에서 메세지를 지속적으로 읽어들이며 대응하는 함수로 메세지를 전달한다. 위 Windows Message Loop..