본문 바로가기

원래 소스

아이다(IDA)의 Debugging - IF문 분석 C언어로 if문을 컴파일한 것을 IDA로 분석해보자. #include void main() { int a = 3; int b = 5; if( a > b) { printf(" a 가 크다 "); } else { printf(" b 가 크다 "); } } IDA 그래프 기능으로 본 해당 소스의 흐름이다. 가운데 지점에서 빨간선과 초록선으로 분기하고 각각의 일을 실행한 후 하나로 합쳐지며 프로그램이 종료된다. .text:00411390 push ebp 에 breakpoint를 설정한다. 디버그 모드로 전환(F9)하여 분석을 해보겠다. 다음은 Main함수이다. .text:00411390 main proc near ; CODE XREF: j_mainj .text:00411390 .text:00411390 var_.. 더보기
아이다(IDA)의 Debugging - FOR문 분석 C언어로 for문을 컴파일한 것을 IDA로 분석해보자. #include int main(void) { int i = 0; int result = 0; for ( i ; i 더보기
아이다(IDA)의 Debugging - Stack 분석 IDA의 디버깅을 통한 스택의 Stack 분석 분석해볼 프로그램은 IDA의 사용법을 알아보기 위해 예제로 썻던 것을 계속 쓰겠다. 다시 한번 설명하면 func( ) 함수에 세 개의 값을 파라미터로 전달하고 그 값들의 합을 리턴하는 프로그램이다. #include func(int a, int b, int c) { return a+b+c; } int main(void) { int sum; sum = func(1, 2, 3); return sum; } 프로그램이 실행되기 전의 Stack이다. ESP, EBP의 위치를 살펴본다. .text:00401060 push ebp : EBP가 가리키는 곳이 SFP(Saved Frame Pointer)로 변하고, 그 윗부분이 RET로 바뀌며 스택에 EBP값 12FFC0h값을.. 더보기
아이다(IDA) 사용법 디스어셈블러 : 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴 IDA가 거의 독보적인 자리를 차지하고 있고, 기능도 다양하다. 아이다(IDA)의 장점 : 1. 거의 모든 CPU를 지원 2. FLIRT(Fast Library Identification and Recognition Technology)는 기계어의 코드로부터 컴파일러 특유의 Library 함수를 산출해낼 수 있는 강력한 기능 3. 각종 플러그인 지원 4. Obfuscation(난독화) 코드도 해석이 잘됨 IDA 설정 : IDA의 설정 파일은 ..\IDA\cfg 경로에 있으며 세부 설정을 할 수 있다. 단축키(idagui)를 재설정할 수 있고 disable된 설정을 enable시킬 수도 있다. 디스어셈블 상태와 디버깅 상태에서 특정 어셈블.. 더보기
올리디버거(OllyDBG)를 이용한 KeyFile 체크 문제 풀이와 바이너리 수정 KeyFile : 인증을 위해서 시리얼키를 원하는 것과 비슷하게 키값을 파일에 저장하거나 어떤 파일 이름이 같은 위치에 있는 것을 확인하는 인증을 할 때 사용되는 파일을 의미한다. 파일과 관련된 문제에서는 파일이나 레지스트리 사용하는 것을 확인하기 위해서 모니터링툴을 사용하는데, Filemon을 주로 사용할 것이다. (Filemon 사용법 참고 : http://dakuo.tistory.com/22) CrackMe 15 문제를 풀어보도록 하겠다. 다운로드 하여 Project1.exe을 실행해보면 올리디버거로 열어서 스트링에 참고할 만한 내용이 있는지 찾아본다. 스트링 추출을 하고 살펴보면 solved라는 문자열을 보인다. 이상한 점은 File Monitor라고 해서 Sysinternals 홈페이지 표시되어.. 더보기
올리디버거(OllyDBG)를 이용한 키젠(Keygen) 문제 풀이 키젠 문제는 프랑스의 haiklr라는 아이디를 쓰는 사람의 홈페이지에서 다운받았다. http://haiklr.new.fr/ 문제를 다운로드 받아서 압축을 풀어보면 ReadMe.txt 파일이 있다. Type : Keygenme Level : Newbie Langage : C (console) Packed : Non 시리얼키들을 생성해내는 문제고, 난이도는 쉬운 편이며, C언어 콘솔어플리케이션이고, 패킹은 하지 않았다고 설명되어 있다. 문제를 실행해보자. Name과 Serial을 입력하라고 나타난다. 입력을 하니까 '잘못된 패스워드'라는 문자열이 출력된다. 올리디버거로 열어서 어떤 알고리즘에 의해서 잘못된 패스워드로 판단했는지 확인해보고 정확한 시리얼값을 찾아보겠다. 문제 파일을 열고, 마우스 우클릭 메뉴에.. 더보기
올리디버거(OllyDBG)를 이용한 CrackMe 문제 풀이 2 이번에 풀어볼 문제는 upx로 패킹이 되있는 문제로 upx -d 옵션으로 압축을 풀어도 되지만 메뉴얼 언패킹하는 방법을 간단하게 설명하기 위해서 올리디버거의 덤프 플러그인을 사용하여문제를 풀어보도록 하겠다. 다음을 다운받아 Plugin 폴더에 넣는다. 올리디버거의 메모리 덤프의 리빌드 기능만으로도 upx 압축은 풀리기 떄문에 쉽게 따라할 수 있는 문제이다. 먼저 PEID로 바이너리를 확인해본다. (PEID 사용법 참고 : http://dakuo.tistory.com/entry/바이너리-분석툴) upx 압축되어 있는 문제 파일인 CrackMe2.exe를 올리디버거로 열어본다. 코드가 압축되었으며, 분석을 더할 것인지 묻는다. 예를 누른 후 아래쪽으로 내려가다 보면 압축이 모두 풀려서 메모리에 올라가 있는 .. 더보기
올리디버거(OllyDBG)를 이용한 CrackMe 문제 풀이 crackme author : abex type : cdrom check level : easy tute author : HaQue Ollydbg.exe 실행해서 abexcm1.exe를 open한다. 프로그램이 어떻게 작동되는지 보기 위해 Run(F9)을 한다. 첫 번째 메시지박스가 나타나고, 확인을 클릭하면 두 번째 메시지박스가 나타난다. 확인을 클릭하고 올리디버거를 보면 프로그램이 종료되었음을 알 수 있다. 첫번째 메시지박스에는 CD-ROM을 체크하는 루틴을 우회하라고 나오고 두번째 메시지박스에는 CD-ROM이 아니라고 하며 프로그램이 종료되었다. 이 문제를 푸는 방법에는 메모리 주소 흐름을 바꾸는 방법과, CD-ROM을 체크하는 함수의 리턴값을 변경해서 푸는 방법 2가지 방법이 있다. 1번 방법 풀.. 더보기
올리디버거(OllyDBG) 사용법 리버싱을 하기 위해서 이용되는 툴중에 디버거라는 것이 있다. 이 디버거들 중에 가장 대표적인 것은 올리디버거(OllyDebugger)이다. odbg110.zip를 다운로드 받아서 odbg110 폴더에 압축을 풀고 Plugin폴더와 UDD폴더를 생성한다. Win32_Programmers_Reference.rar로 압축을 풀어 wn32.hlp 파일을 obdg110 폴더에 넣는다. BOOKMARK.dll과 cmdline.dll은 Plugin폴더에 넣는다. Ollydbg.exe를 실행하고 Option -> Appearance ->Directories를 열고 그림과 같이 경로 설정을 하고 다시 실행을 해준다. 이외에 설정해 주면 좋은 옵션은 작업관리자의 프로세스 목록에서 바로 디버깅 연결이 가능한 Jit(Just.. 더보기
Reverse Engineering 이란. Reverse Engineering이란 역으로 분석하는 것이라고 정의할 수 있다. (줄여서 Reversing) 즉, 개발자가 소스 코드를 작성하고 그것을 실행 가능한 바이너리를 만들기 위해 원하는 컴파일러를 선택하여 컴파일시킨다. 이 바이너리의 원래 소스를 파악하기 위해 여러가지 방법을 통해 원래 소스의 구조와 원리를 분석하는데 이러한 과정이 리버싱(Reversing)이다. 또 리버싱은 완성된 프로그램의 수정, 디버깅, 호환과 프로그램의 분석 등 다양하게 쓰이고 있다. 더보기