분류 전체보기

    pydbg 모듈을 활용한 API 후킹 - (1) 디버거의 개념과 pydbg 모듈 설치

    ※ 본 포스팅은 (조성문 정영훈 저) 를 기반으로 작성되었습니다. 지난번에는 Win32 API를 ctypes를 통해서 알아보았다. 이번에는 디버거 모듈인 pydbg를 활용하려 한다. 먼저 디버거의 개념에 대해서 말해보자. 디버거의 개념 디버거는 프로세스 동작을 잠시 멈추고 실행되는 함수이다. 일종의 인터럽트 서브루틴이라고 할 수 있다. 디버거는 디버깅을 원하는 명령어 부분에 중단점을 설정한다. 그 후 이벤트가 발생하고 있는 현황을 지속적으로 모니터링한다. 디버거를 다 돌리고 나면 프로세스는 다시 원래 하던 대로 움직인다. 운영체제는 명령어를 처리하는 도중에 지정된 콜백 함수를 호출한다. 보통 디버거를 이용한 해킹에서는 콜백 함수에 원하는 해킹 코드를 입력해 둔다. 대표적으로 API 후킹 (API Hook..

    애플리케이션 해킹 개요 - Windows 애플리케이션의 기본 개념

    Python으로 윈도우 애플리케이션을 해킹하기 위해서는 Windows API에 대한 기본 지식이 필요하다. Windows API는 Microsoft에서 제공하는 API 모음이다. 애플리케이션을 개발하려면 Windows API를 통해 운영체제, 또는 커널에서 지원하는 다양한 기능을 활용할 줄 알아야 한다. 애플리케이션 해킹 관련 게시글들에서는 Windows 32bit 환경에서 지원되는 Win32 API를 주로 다룰 예정이다. Windows 애플리케이션을 개발할 때에는 lib와 DLL 형태의 라이브러리를 사용한다. lib는 정적 라이브러리로, Windows 실행 파일인 exe 파일이 생성될 때 같이 포함된다. DLL(Dynamically Linked Libraries)는 동적 라이브러리로, 애플리케이션 실행..

    bash 기초 문법을 배워보자 - Hello World! 부터 함수와 반복문까지

    이번 게시글에서는 UNIX나 Linux에서 기본 쉘로 많이 사용되는 bash 쉘에서 스크립트를 작성하는 방법에 대해 다루어 볼 것이다. 물론 bash 쉘 환경을 준비해 놓았다는 가정 아래에서이다. 참고로 글쓴이는 Kali Linux 2018.4-amd64 환경에서 vim 편집기로 실습을 했다. Hello, World! 프로그래밍 언어를 배우는 사람이라면 수도 없이 본 Hello, World!를 여기서도 한 번 출력해 보자. 12#!/bin/bashecho "Hello, World!"cs 파일 이름은 HelloWorld.sh로 저장하였다. 이때 유의해야 할 것은 방금 작성한 스크립트를 실행하려면 실행 권한을 부여해야 한다는 것이다. 아래와 같이 입력하여 실행할 수 있는 파일로 만들어주자. 1chmod u+..

    [SW Expert Academy] 1984. 중간 평균값 구하기

    푼 날짜 : 2019.01.16사용 언어 : Python난이도 : D2문제 링크 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pw_-KAdcDFAUq 1234567avg = []for t in range(int(input())): l = list(map(int, input().split())) l.pop(l.index(max(l))) l.pop(l.index(min(l))) avg.append(str(round(sum(l) / len(l))))for i in range(len(avg)): print("#" + str(i + 1) + " " + avg[i])cs 1행에서 각 테스트 케이스의 정답을 ..

    [SW Expert Academy] 1926. 간단한 369 게임

    푼 날짜 : 2019.01.16사용 언어 : Python난이도 : D2문제 링크 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PTeo6AHUDFAUq 123456for c in [str(x) for x in range(1, int(input()) + 1)]: count = c.count('3') + c.count('6') + c.count('9') if count: print('-' * count, end =" ") else: print(c, end =" ")cs 1부터 입력받은 숫자까지의 자연수를 리스트로 저장하여 반복문으로 리스트의 각 요소를 str형으로 형변환한 후 검사한다. 이때 count..

    쉘 스크립트 개요 - 쉘, 스크립트, 그리고 쉘 스크립트란?

    침투 테스트에서 사용하기를 원하는 다른 프로그래밍 언어나 개발 툴과는 다르게, 거의 모든 시스템에는 쉘이 설치되어 있다. 물론 원하는 쉘을 항상 사용할 수는 없어도, 보통 작업을 진행할 수 있는 쉘이 있기 마련이다. 쉘이란 쉘은 사용자와 운영체제 사이에 있는 인터페이스로, 프로그램을 실행하고, 파일 처리 및 기타 여러 작업들을 할 수 있게 해 준다. 모든 운영체제에서는 쉘을 사용하고 있는데, 크게 텍스트 기반과 그래픽 기반으로 나눌 수 있다. 많은 운영체제가 두 가지 기반의 쉘 모두를 제공하며, 각각 다른 장점이 있다. Microsoft Window 데스크톱 인터페이스, 리눅스의 GNOME와 KDE와 같은 GUI 환경의 쉘은 화려한 그래픽 기반의 메뉴를 사용할 수 있다. 파일 또한 그래픽 아이콘으로 표시..

    Python에서 Win32 API 활용하기 - ctypes 모듈

    개요 Python으로 Windows OS에서 제공되는 강력한 기능을 활용하려면 Win32 API를 활용해야 한다.이를 위해 Python용 외부 함수(foreign function) 라이브러리인 ctypes를 활용해 보자.ctypes는 C 호환 데이터형을 제공하며, DLL 또는 공유 라이브러리에 있는 함수를 호출할 수 있다.또한 Windows, Linux, Unix, OS X, Android 등 다양한 운영체제에서 지원하는 Native Library를 사용할 수 있는 강력한 도구이기도 하다. ctypes는 동적 라이브러리 호출 절차를 단순화하고, 복잡한 C 데이터 형을 지원하며 Low Level 함수를 제공한다는 장점이 있다. DLL 로딩 ctypes는 cdll, windll, oldell 호출 규약을 지..