반응형

방법은 2가지가 있다.

 

1. 콘솔에서 하는 방식

 

2. 시스템 구성에서 하는 방식

 

우선, VMWare에서 시리얼 포트를 생성한다. 생성하는 과정은 아래와 같다.

그리고 유심히 봐야할 것은 시리얼 포트의 번호 이다. 시리얼 포트의 번호가 따로 없는데 새로 생성하면

2로 만들어지는 것은 VMWare 상에서 우선적으로 사용하고 있기 때문에 향후 콘솔 설정에서 유의하여 연결 해야 한다.

 

 

 

 

 

 

 

 

 

Serial Port 2로 추가 된 것을 볼 수 있다.

VMWare 상태에서 끝났으므로 windbg에서도 대기 접속 대기 상태를 유지한다.

 

 

 

 

(단축키로 만들어 놓으면 좋다.)

windbg.exe -k com:pipe,port=\\.\pipe\babyhack,baud=115200, resets=0, reconnect

 

자 이젠 준비가 완료 되었다.

그럼 진행 해보도록 하자.

 

1. 콘솔 모드로 연결하는 방법

(* cmd.exe를 실행할 때는 반드시 관리자 권한으로 해야 한다.)

 

  부트로더 생성 Debug mode로 실행시키고 싶지 않을때를 위하여 부트로더를 하나 추가하여 사용하는 것이 좋다.

 

       C:\Windows\system32>bcdedit /copy {current} /d DebugEntry

       The entry was successfully copied to {dcffe704-9da4-11e1-a0dd-8c5e574c6735}.

 

       C:\Windows\system32>bcdedit /debug {dcffe704-9da4-11e1-a0dd-8c5e574c6735} ON

       The operation completed successfully.

 

       C:\Windows\system32>bcdedit /default {dcffe704-9da4-11e1-a0dd-8c5e574c6735}

       The operation completed successfully. 

        

C:\Windows\system32>bcdedit

....................................

Windows 부팅 로더
-------------------
identifier                    {current}
device                       partition=C:
path                          \Windows\system32\winload.exe
description                 DebugEntry
locale                        ko-KR
inherit                        {bootloadersettings}
recoverysequence      {dcffe704-9da4-11e1-a0dd-8c5e574c6735}
recoveryenabled         Yes
osdevice                    partition=C:
systemroot                 \Windows
resumeobject             {dcffe702-9da4-11e1-a0dd-8c5e574c6735}
nx                            OptIn
debug                       Yes 

 

     bcdedit /dbgsettings serial debugport:2 baudrate:115200

     (* debugport를 2로 사용한 이유는 COM1은 프린트 용도로 VMWare에서 선점하고 있기 때문에

        COM2를 의미하는 2로 설정한 것이다.)

 

2. 시스템 구성에서 하는 방식

 

   msconfig 명령을 이용하여 부팅 옵션을 설정 변경 할 수 있다.

 

 

 

  시스템 구성 방식에서 설정한 것 처럼 추가하는 방법은 제공하지 않고 있다.

  따라서, 부트로더를 적용하기 위해서는 bcdedit를 이용하던지 부트로더 등록 프로그램을 활용하여 설정하는 것이 안전하고

  편할 것으로 보인다.

 

3. 접속 테스트

  

   심볼 주소 등록 : srv*d:\symbols*http://msdl.microsoft.com/download/symbols

 

 

  ctrl + break 명령을 통하여, Interrupt를 걸고 이 후 g 명령을 통해서 Interrupt 건 상태를 풀어 윈도우가 정상적으로

  동작하게 유지한다. 

 

 

 

참고 사이트

  - http://msdn.microsoft.com/en-us/library/windows/hardware/ff538143(v=vs.85).aspx

  - http://sinarn.blog.me/130183074480

  - http://lucid7.egloos.com/viewer/2760612

  - http://blog.naver.com/bbasyoong/20190453141

  - http://sanaigon.tistory.com/178 (Virtual KD Application 소개)

반응형
반응형

 

 

 

 버전을 끊어가면서 해야할 것 같아

중간 중간 마무리 되면 버전을 남기기로 하였다.

 

W7PD by crattack. (v.0.3)

- 기능

  ★  Memory break point 적용

 

 

W7PD by crattack. (v.0.2)

- 기능

  ★  hardware break point 적용

 

 

 

Win7 Python Debugger by crattack. (v. 0.1) (- 이후 부턴 W7PD by crattack)

- 기능

  ★  GetModuleHandle 사용한 메모리 주소 찍기

  ★  해당 함수 주소 찍기

  ★  soft break point 적용

 

 

반응형
반응형

 

Windows 7에서는 Unicode 형태로 지원하고 있어서 문자열을 유니코드 또는 바이너리 형으로

변환하여 호출 해야 된다.

 

 

def Get_DLL_Function(self, dll, function)

        handle = kernel32.GetModuleHandleW(dll)

        if handle <= 0:
            print ("[##] GetModuleHandle False\n")
            return False

        print ("[##] \"%s\" GetModudleHandle : 0x%08x\n" % (dll, handle))

        address = kernel32.GetProcAddress(handle,function)

        if address <= 0:
            print ("[*] Error: 0x%08x." % kernel32.GetLastError())

            print ("[##] GetProcAddress \"%s\" False\n" % function)
            kernel32.CloseHandle(handle)
            return False

        print ("[##] \"%s\" GetProcAddress : 0x%08x\n" % (function, address))
        kernel32.CloseHandle(handle)
        return address

 

해당 코드는 크게 다를 것이 없다.

그러나 호출하는 과정에서 문자열을 b"..." 형태로 변환하여 사용하지 않으면 호출되지 않는다.

(u"..." 형태도 있지만 python 3.x 에서부터는 사용하지 못하고 있다.)

http://docs.python.org/3.0/whatsnew/3.0.html

 You can no longer use u"..." literals for Unicode text. However, you must use b"..." literals for binary data.

 

위 내용을 기반으로 b"..."로 변환하니 결과가 나오게 된다.

 

Get_DLL_Function("msvcrt.dll",b"printf") 

 

[결과 값]

 

[##] "msvcrt.dll" GetModudleHandle : 0x77250000

[##] "b'printf'" GetProcAddress : 0x7726c5b9 

 

이걸 얻기 위해 얼마나 삽질을 했던가...

비로소 해결을 했다.~!!!

반응형

'프로그래밍 > Python' 카테고리의 다른 글

python 3.x has_key 없어짐!!!!  (0) 2013.07.23
문자열 타입 확인  (0) 2013.07.23
Windows 7에서 GetModuleHandle 사용하기  (0) 2013.07.12
64bit debugger 만들기  (0) 2013.07.02
python thread context 보기(win7 64bit)  (2) 2013.07.02
반응형

 

아..이 문제 때문에 얼마나 고생 했는지 정말 짜증이 난다.

나와 같은 상황이 발생하지 않길 바라며, Windows 7에서의 GetMoudleHandle과 kernel32.dll, kernelbase.dll에 대한

내용을 언급하도록 하겠다.

 

먼저, Windows Vista 이후 바뀐 부분은  kernel32.dll을 사용하느냐 사용하지 않느냐 이다.

Vista까지는 kernel32.dll에서 모든걸 관장하였다. 따라서, kernel32.dll만 사용하더라도 아무 이상이 없었다.

 

그러나,~~

Windows 7으로 넘어오면서 kernel32.dll에서 사용하는 거의 모든 함수들이 kernelbase.dll로 이관되었다.

(그냥 kernel32.dll을 사용해도 된다.

어짜피 kernel32.dll에서 kernelbase.dll를 jmp 하기 때문에 문제 없을 것 이다.)

-> 만약, 잘 안되거나 하면 kernelbase.dll과 kernel32.dll를 뒤져보길 바란다. 그럼 안되는 이유를 알 수 있을 것이다.

 

그럼, python에서 GetModuleHandle을 사용하기 위한 방법을 알려주겠다.

결론부터 말하자면 Windows 7에서는 GetModuleHandleA는 없어졌다.

따라서, 아무리 GetMoudleHandleA()를 이용해봤자 return 값은 "0" 이다.

 

이걸 알기 위해서 일주일이 걸렸다..

몬 짓을 한건지..

괜히 디버기 만든다고 삽질을 하는 거 같은 느낌이 들지만, 그럼 어떻게 찾았는지 History를 적어보도록 하겠다.

 

ollydbg로 모듈 상태를 확인 한다.

해당 Windows 7에서는 kernelbase.dll이 기본으로 올라가 있는 것을 확인 할 수 있다.

kernel32.dll를 열어 보면, kernelbase.dll로 링크가 걸려 있는 것을 확인 할 수 있다.

 

 

Memory Map을 통해 Load된 내용을 확인 하였으니, 이젠 찾아 보도록 하자.

kernel32.dll 내부에서 GetMoudleHandle을 찾아 보면 딱하니

GetMoudleHandleW만 존제하는 것을 볼 수 있다.

 

 

그래서 코드를 아래와 같이 수정하면, Module의 시작 주소를 얻어 올 수 있다.

 

 

 

        handle = kernel32.GetModuleHandleW(dll)

        if handle <= 0:
            print ("[##] GetModuleHandle False\n")
            return False

        print ("[##] \"%s\" GetModudleHandle : 0x%08x\n" % (dll, handle))

 

GetModueHandle을 가지고 나와 같이 삽질 하지 않길 바라며,

이 글을 올린다.

 

반응형

'프로그래밍 > Python' 카테고리의 다른 글

문자열 타입 확인  (0) 2013.07.23
Windows 7에서 GetProcAddress 사용하기  (0) 2013.07.22
64bit debugger 만들기  (0) 2013.07.02
python thread context 보기(win7 64bit)  (2) 2013.07.02
Context 32bit / 64bit 선언  (0) 2013.06.29
반응형
Windows 7에서는 안정성을 높이기 위하여 인증서로 서명이 된 드라이버 파일만을 동작하게 됩니다.
따라서, 인증서로 서명되지 않은 드라이버는 Load 할 수 없게 되었습니다.

하지만, 방법은 있습니다.
바로 테스트 모드.

테스트 모드는 인증서로 서명되지 않은 드라이버도 Load하여 테스트를 할 수 있게 만드는 버전으로
Driver 테스트하기에 좋은 기능입니다.

방법은 bat 파일을 실행 시키거나, 아래의 명령어를 실행 시킨후 재부팅 하면 됩니다.

cmd 를 administrator로 실행 시킨 뒤, 아래의 명령어를 실행 시키시면 됩니다.

                             [출처 : http://support.microsoft.com/kb/982393/ko]

C:\bcdedit /set NoIntegrityChecks ON

bcdedit /set NoIntegrityChecks ON <-- 인증서로 인증하지 않은 Driver를 사용할때 사용하는 명령어.
 
그럼 즐거운 테스트 되시길 바랍니다.
ps ; crack에 사용되는 driver 파일들은 인증서가 적용되지 않아서 실행이 안되는 경우가 있습니다.
그런 부분을 분석하기 위해서는 위와 같은 작업을 하신 후에 테스트 하시면 좋은 결과(?)를 얻을 수 있습니다.
반응형

'Reverse > SystemDoc' 카테고리의 다른 글

[강의자료] 컴퓨터 보안 창과 방패  (0) 2018.01.25
[HowTo] Windows Testing Mode  (0) 2014.02.04
Windows Veriosn Check  (0) 2014.02.03
Key Log List  (0) 2012.08.07
Windows7 64bit Paros 설치  (1) 2012.01.31

+ Recent posts