Talks 썸네일형 리스트형 [리버싱 핵심원리] 2주차 3-21장 (Windows 메시지 후킹) 21장 Windows 메시지 후킹메시지 훅(Message Hook) Windows 운영체제는 Event Driven 방식으로 동작합니다. 마우스 이동, 창 크기 변경등의 작업은 모두 이벤트(Event)입니다.이런 이벤트가 발생할 때 OS는 미리 정의된 메시지를 해당 응용 프로그램으로 통보합니다. 응용 프로그램은 해당 메시지를 분석하여 필요한 작업을 진행하는 것입니다. 메시지 훅이란 바로 이런 메시지를 중간에서 엿보는 것입니다. 이러한 메시지 훅 기능은 Windows 운영체제에서 제공하는 기본 기능이며, 대표적인 프로그램으로 Ms Visual Studio에서 제공되는 SPY++가 있습니다.SetWindowsHookEx() hook procedure는 운영체제가 호출해주는 콜백 함수입니다. 메시지 훅은 걸 .. 더보기 [리버싱 핵심원리] 1주차 2-13,14,15장 (PE,UPX) 13장 PE File FormatPE 포맷이란? PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행파일 형식입니다. 애초에는 (Portable 단어가 의미하는 대로) 다른 운영체제에 이식성을 좋게 하려는 의도였으나 실제로는 Windows 계열의 운영체제에서만 사용되고 있습니다. 기본구조 DOS header부터 Section header까지를 PE 헤더, 그 밑의 Section들을 합쳐서 PE 바디(Body)라고 합니다. 파일에서는 offset으로, 메모레에서는 VA(Virtual Address, 절대주소)로 위치를 표현합니다. 파일이 메모리에 로딩되면 모양이 달라집니다. 파읠의 내용은 보통 코드(.text), 데이터(.data), 리소스(.rsc) 섹션에 나뉘어서 .. 더보기 HTTPS Connection 만들기 이번에 수강신청매크로를 짜면서 배웠던 점입니다. 보통 urllib library를 웹 패킷을 생성하는 데 많이 씁니다.하지만 HTTPS Connection같은 경우에는 urllib library로 가능하긴 합니다만(opner해서.. 생각보다 쓰기 복잡하더군요.) 저는 httplib library로 HTTPS Connection 만드는 방법을 소개해드리려고 합니다.일단 httplib.HTTPSConnection함수로 연결을 합니다.저같은 경우에는 프록시로 어떻게 웹요청이 지나다니는 지 볼려고 했기 때문에 .set_tunnel까지 해줬습니다. 원래는 HTTPSConnection 함수에 URL과 포트를 적으시면 됩니다. Request에서 header를 다 설정할 수 있고 나머지는 urlib library와 대.. 더보기 구글 SSL PacketCapture 시도 저번에 Self-Certificated 인증서를 이용해 구글에 접속해서 Packet들을 볼려고 했지만 실패했었습니다.이번주에도 구글 Packet들을 보기 위해서 여러가지 시도들을 해봤습니다.그 시도와 결론에 관해서 말해보기로 하겠습니다. 일단 인증서와 브라우져와의 관계에 대해 조사해봤습니다.SSL 인증서는 클라이언트와 서버간의 신뢰관계를 구성하기 위해 사용되는 것입니다.클라이언트와 서버 양 쪽이 신뢰있는 인증서를 가지고 있어야만 SSL 통신이 성립되고 패킷들을 주고받으며 상호작용을 하는 것입니다.하지만 어떤 기관에서 발급한 인증서를 신뢰하고 사용해야 될 지, 그리고 그 절차를 간소화 할 수 있을지에 대한 대처방안으로 나온 것이 루트 인증기관에서 발급한 CA인증서입니다.각 각의 브라우져들은 자기 자신만의 .. 더보기 fiddler 소개 이번에 소개할 툴은 Fiddler라는 툴이다. 피들러 공식 웹사이트에 들어갔을때 나온 피들러에 대한 소개를 보면 알 수 있듯이,피들러는 웹 디버깅 프록시이다. 주요 기능으로는 다음과 같은 것이 있다.1. 웹 디버깅2. 퍼포먼스 테스팅3. HTTP/HTTPS 트래픽 기록4. 웹 세션 조작5. 보안성 테스트6. 피들러 기능 커스터마이징 뭔가 여러가지 기능이 있는 것 같지만 사실 1~5의 기능은 간단히 프록시의 기능이라고 볼 수 있다. 그리고 6의 기능은 그냥 사용자의 구미에 맞게 스크립트나 response 자동화 정도의 기능을 사용할 수 있다는 정도로 보면 된다. 다음은 피들러를 실행한 모습이다. 피들러를 실행하면 피들러는 자동으로 HTTP/HTTPS 패킷들을 캡쳐하고 그 결과들을 왼쪽 목록에 띄워준다. 그.. 더보기 Charles Proxy를 이용한 SSL Traffic Capture Charles Proxy를 이용한 SSL Traffic을 캡쳐해보겠습니다. 일단 Proxy - Proxy Setting에서 Enable SSL proxying 항목을 체크 해 줍니다. 그 다음Proxy - Client SSL Certificates에서 사용할 SSL 인증서를 등록해주어야 합니다. 여기서 인증서를 등록해주어야 하는데 처음에는 certmsg.msc 콘솔에서 자기가 보유한 인증서를볼 수 있습니다. 여기서 인증서 내보내기를 한 후에 Charles Proxy에 등록을 해서 써보았는데요런 항목이 뜹니다. 이 Certificate Password는 자기가 처음 인증서를 생성할 때 개인키를 보호할암호를 지정하게 되는데 이 인증서는 발급한 사람이 아니면 알 수가 없습니다. (지금 crack 하는 방법에 .. 더보기 디버깅에 유용한 툴 소개 (strace, ltrace) 이번에는 디버깅이나 리버싱에 매우 유용한 프로그램인 strace 와 ltrace에 대해서 소개하겠다. 1. strace 이 프로그램은 system call 이 있을때마다 이에 대한 정보들을 추적해 화면에 표시해준다.글쓴이가 사용한 Ubuntu에는 기본으로 깔려있다. Debian GNU/Linux의 경우, 만약 깔려있지 않다면 apt-get을 이용하여 설치할 수 있다. 기본적인 사용법은 다음과 같다.1$strace [program name | -p PID]cs 위의 스크린샷은 "Hello, World!"를 화면에 찍어주는 간단한 프로그램을 작성한 뒤, strace로 실행시켜본 결과이다. 보면 알 수 있듯이, system call들의 흐름에 따라 각 system call에 어떤 인자들이 전달되고, 결과값은 .. 더보기 웹 어플리케이션 동작 방식의 이해 웹 어플리케이션이란 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말하는데 이러한 어플리케이션을 통해 전자상거래, 이메일, 뉴스구독 등 우리가 웹 상에서 이용하고자 하는 기능들의 대부분이 웹 어플리케이션을 통해 이루어집니다.웹 어플리케이션이 갖는 공통적인 특징 한 가지는 사용된 언어와 관계없이 모두 클라이언트-서버가 서로 데이터를 주고받는 데이터베이스 기반이라는 것입니다. 단순 어플리케이션 구조 (3계층 구조)데이터베이스 기반 웹 어플리케이션은 공통적으로 3계층으로 이루어집니다. 사용자 인터페이스(인터넷 브라우저나 변환엔진), 비즈니스 로직(프로그램 언어로 C#, ASP, .NET, PHP, JSP 등), 데이터베이스 계층(MY-SQL, Oracle 등) 으로 설명할 수 있.. 더보기 Python으로 구현한 로그인 유지 (쿠키 이용) 본 포스팅에서는 글쓴이가 [webhacking.kr] 11번 문제풀이 (300) 에서 사용한 Python을 이용해서 웹에 접근해야할때 로그인 유지시키는 방법에 대해서 이야기할 것이다. 일반적으로 로그인을 유지시키는 방법에는 쿠키를 이용한 방법과 세션을 이용한 방법 총 두가지가 있다. 두 방법의 차이는 다음과 같다.쿠키 : 유저의 정보를 쿠키로 사용자 시스템에 저장, 유저는 매 요청마다 서버에 쿠키 전달.세션 : 유저의 정보를 세션으로 서버에 저장, 유저는 매 요청마다 세션 고유키만 서버에 전달. webhacking.kr 은 쿠키를 이용하는 방법으로 로그인 유지를 시킬 수 있었다. 따라서 글쓴이가 사용했던 방법인 쿠키를 이용하여 로그인 유지하는 방법에 대해 설명하도록 하겠다. 로그인 유지는 총 3가지의 단.. 더보기 IP와 Subnet, 그리고 TCP/IP 패킷간의 상관관계 여태까지는 똑같은 IP가 존재하더라도 서브넷팅을 통해 그 ip를 구분한다고 생각했는데 엄청난 착각이었다. ip는 인터넷상의 고유한 번호이며 서브넷팅을 아무리 하더라도 같은 ip가 존재하지는 않는다.(사설 ip제외)서브넷팅은 단지 네트워크를 효율적으로 사용하기 위해서 사용하는 것 뿐이며 우리가 아무리 서브넷팅을 하더라도 그 IP가 중복될 수는 없다는 것이다. 만약 내가 10.30.0.0/16 이라는 네트워크를 할당받았다면 그것을 서브넷팅해서 10.30.10.0/24이란 네트워크를 만들었다고 가정한다면10.30.10.16/16 이라는 IP는 존재하지 않고 10.30.10.16/24이라는 IP만 존재한다는 것이다. 애초에 서브넷팅은 IP를 늘려주는게 목적이 아니고 효율적으로 사용하기 위해 사용하는 것이기 때문.. 더보기 Python의 iterator, generator 본 포스팅에서는 파이썬에서 매우 유용하게 쓰이는 몇가지에 대해서 이야기하겠다. 1. iterator it·er·ate 동사[자동사][V] (계산・컴퓨터 처리 절차를) 반복하다 iterator는 컨테이너의 요소를 스캔하기 위한 객체이다. 파이썬에서 사용되는 반복 관련된 거의 모든 것은 사실은 이 iterator가 쓰이는 것이라 봐도된다. 가장 쉬운 예로 제어문 중 하나인 for문을 들 수 있다. for문은 다음과 같이 쓰인다.12for x in obj: #statmentscs그런데 사실 이 for문은 iterator 타입으로 다음과 같이 구현되어 있다.1234567_iter = obj.__iter__()while 1: try: x = _iter.next() except StopIteration: break.. 더보기 이전 1 다음