Python
-
immuity IsDebuggerPresent 우회Python 2015. 1. 21. 00:12
kernel32.dll의IsDebuggerPresent함수는 제일 대표적인 안티디버깅 함수이다. 안티디버깅은 디버깅을 방해하는 기술인데, 엄청나게 많은함수들이 존재한다. IsDebuggerPresent함수는 1과 0으로 나눠 1이면 디버거가 실행중, 0이면 디버거가 없는것으로 판단한다. 디스어셈블한 코드는 아래와같다 MOV EAX,DWORD PTR FS:[18]MOV EAX,DWORD PTR DS:[EAX+30]MOVZX EAX,BYTE PTR DS:[EAX+2]RETN 하나하나 설명하자면 FS 레지스터로부터 0x18에 위치해있는 TIB의 주소를 로드한다.그리고 EAX에서 0x30위치에있는 PEB의 주소를 로드한다.그다음 PEB의 오프셋 0x2위치에있는 BeingDebugged의 값을 EAX에 할당하는데..
-
findinstructionPython 2015. 1. 20. 22:03
우선 소스를 보자 파이썬 해킹 프로그래밍에서 보면 imm.Assemble로 나와있는데 imm.assemble로 수정해주면 잘된다. immlib을 뒤져보면 함수들이 구현되어있는데 이름이 assemble과 밑에 search마저 책에서는 Search로 나와있는데 소문자로 수정해주자 그리고나서 getMemoryPageByAddress로 수정해주어야한다. 책에서는 by 로나와있다. 이렇게 해주고나서 이뮤니티 디버거에 들어가 !findinstruction 원하는명령어를 해주자 나는 PUSH EBP를 했다. 해주면 아래에 로그가 성공적으로 남겨졌다는 문장이나온다. (제가 설정한거에요) 그럼 이제 로그 윈도우를보면된다. 위에 보면 올리디버거처럼 문자 하나하나 버튼이있다 거기에 맨첫번째에 있는 l버튼을누르면 로그 윈도우..
-
snapshot 결과Python 2015. 1. 20. 20:25
snap 을 입력받으면 처리하는 구문을보자. Suspending all threads를 출력한다음, self.dbg.suspend_all_threads()구문을 통해서 프로세스들을 일시중지시킨다. 그리고나서 이제 컨텍스트 정보들을 구해야한다. 그래서 self.dbg.process_snapshot()구문으로 정보를구한다, 그리고 다 구해지면 바로 resume_all_threads()로 프로세스들을 재실행시킨다. 이제 restore부분이다 해당부분은 스냅샷 찍은부분으로 돌아가는 부분이다. 똑같이 suspend_all_threads()함수를 호출해, 프로세스를 일시중지시킨다. 그리고나서, process_retore()함수를 호출시켜 복귀를 한다음 resume_all_threads()함수로 재실행시킨다.
-
Process SnapshotPython 2015. 1. 20. 19:57
Pydbg 모듈은 프로세스 스냅샷이라는 기능을 제공한다. 이 기능은 프로세스를 일시중지시켜 메모리 내용을 얻을수있다.또, 얻고나서는 일시정지를 풀어 실행시킬수있다. 스냅샷을 만들고, 언제든지 프로세스 상태를 생성지점으로 갈수있다. vmware에서도 snapshot이라는게 존재한데 이와같은원리로, 찍어놓았다가 언제든지 그 시점으로 돌아갈수있다. 프로세스 스냅샷을 얻기위해서는 아래와같은것을 구해야한다 - Thread List- Thread CPU Context info- Process Memory Page 위 프로세스 정보를 얻기위해서는 실행중인 프로세스들을 정지시켜야한다. 그래야하는이유는 프로세스가 실행되면 안에있는 데이터가 계속해서 변경되기때문에 중지하지않으면 데이터가 계속 변경되어 스냅샷을 얻는데 데이..
-
Python utils modulePython 2015. 1. 20. 05:06
import utils오류가 뜰경우 utils모듈이 존재하지 않기때문이다. https://pypi.python.org/pypi/utils 해당 링크로들어가 다운을받은후, 압축파일을 풀어준다. 그럼 dist폴더안에 또다른 압축파일이있는데 그것마저 풀어주면 setup.py가 나오게된다. 그럼 cmd로 해당경로로 가서 python setup.py install 해당명령을 입력해준다. 그럼 엄청나게 많은 문자열들이 나오는데 cmd를 재시작하고 python -> import utils해보면 정상적으로 임포트가 되는것을 확인할수있다
-
Python BOFPython 2015. 1. 20. 04:48
Python bof도 손쉽게 가능하다. 우선 c 라이브러리를 담아준다. 바로 크러쉬가 나는것을 방지해 입력하는 것을 하나 둔다. buffer에다가 AAAAA, 5바이트크기의 버퍼를 만든다. 그 밑에 overflow변수데다가 "A"해당 문자열을 100개 넣는다. 그럼 overflow는 100개의 A 문자가 담겨 100바이트를 가지게된다. 그리고 C함수의 strcpy함수를 사용해 buffer에 overflow값을 담는다. 소스 설명은 이렇게 해석할수있고, 중요한부분만 설명 하자면 strcpy로 문자열을복사해 buffer값에 넣는다. 하지만 위에 보게되면 buffer값은 5바이트 크기인데, overflow는 A를 100개넣어 100바이트의 크기를 가지고있다 5개가 넘쳐버려 오버플로우 즉, 넘치게되어 공격이 성..