분류 전체보기
-
[파이썬해킹프로그래밍]my_debugger_definesPython 2015. 1. 12. 23:58
my_debugger_defines 파이썬파일은 상수,자료형, 구조체등을 선언하는 파이썬파일입니다. 우선 정의부분! from ctypes import * 해당 구문에서는 ctypes모듈 전부를 임포트시킵니다. 그리고나서, 파이썬에서의 타입을 ms에서의 타입대로 하나하나 지정해줍니다 WORD 는 파이썬의 c_ushort가 되고, DWORD 는 c_ulong이됩니다. 그리고 상수 정의! 이제 0x00000001은 힘들게 입력하지않고 DEBUG_PROCESS라는 이름으로 사용할수있습니다. 전부 #define이라고 보시면되요 이제는 구조체 정의부분입니다! 각각 멤버에 함수 파라미터들을 넣고 함수를 구현시킵니다. 이 부분이 나중에 유용하게 쓰이니 잘 봐두세요~~ my_debugger_defines는 하나의 모듈로..
-
CreateProcessA()Hack/Reversing 2015. 1. 12. 23:12
Windows에서 프로세스를 실행시키려면 해당함수를 호출해야합니다 그 프로세스를 디버깅 모드로 실행시킬수도있는데, 일단 함수를 봅시다. 일단 중요한것은 lpApplicationName, lpCommandLine,dwCreationFlag, lpStartupInfo,lpProcessInformation입니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx 자세한정보는 msdn에서 확인하실수있습니다. 밑에서 각 파라미터들을 설명해줍니다! 우선 lpApplicationName 파라미터는 실행시킬 파일 경로를 선정합니다 c://python.exe 등등 인자를 넣을수있습니다. 또, CommandLine파라미터에서는 인자..
-
CheckRemoteDebuggerPresent 우회Hack/Reversing 2015. 1. 12. 03:24
CheckRemoteDebuggerPresent() 함수가 호출되면 그냥 강제로 false를 반환해 디버깅을 종료시킨다. 엔트리포인트를 수정해주면 우회가 쉽게 됩니다. 예를들어 mov edi,edi라는 코드가존재하면 해당 코드를 0으로 만들어버리면되는데, 0으로 만드는법은간단하게 xor 의 연산법칙으로 같은것을 연산하면 0을 반환하니, xor eax,eax를 해주면 0이 성립됩니다. 그럼 0으로 리턴하여, CheckRemoteDebuggerPresent()함수가 동작하지않게됩니다.
-
Remote Debugging 감지Hack/Reversing 2015. 1. 12. 03:06
Remote Debugging에 관한 정보 -http://codeengn.com/archive/Reverse%20Engineering/Tools/IDA%20Remote%20Debugging%20%5BCodeEngn%5D.pdf 해당 문서를 참고하시면 됩니다. 해당 글에서는 리모트 디버깅을 감지하는것에대해 알아볼것입니다 터널에서는 KD_DUBGGER_NOT_PRESENT라는 변수를 통해 시스템이 디버깅중인지 아닌지를 판단해줍니다. 이 변수를 확인하기위해 KdRefreshDebuggerNotPresent()이 함수를 사용할것입니다 해당소스에선, BOOL값이 FALSE라면 디버깅중인걸로 판단하고 디버거 어태치를 출력시킵니다. 디버깅 판단여부는 BOOL 변수값에 달렸어요! 또 원격디버깅을할때는 /debugpor..
-
-
[파이썬 해킹프로그래밍]범용 레지스터Python 2015. 1. 9. 15:12
x86에서의 cpu는 8개의 범용레지스터를 지원합니다!! (EAX,EDX,ECX,ESI,EDI,EBP,ESP,EBX) 리버싱하면서 많이 봐왔던건데요~~ 레지스터는 더 있지만 해당 글에서는 '범용 레지스터'를 다룬다는점!!! EAX 레지스터는 산술연산수행, 함수 리턴값을 전달하기위해 사용됩니다. EAX의 E는 확장이란뜻인 Extend 를 나타내는 걸로알고있구요~ 그다음은 accumulator register라고 하네요연산을 수행한다는것을 딱 알수있습니다~~ 연산이라 하면 당연히 덧셈,뺄셈,비교같은것을 다루겠죠?? 그리고 리버싱을 할떄에도 함수가 리턴될때 그 값은 EAX레지스터에 저장되기때문에 함수가 리턴할때 EAX값을 확인해서 함수호출이 제대로됬는지를 확인할수있습니다! EDX레지스터에 대해서 알아봅시다 우..
-
[파이썬 해킹프로그래밍]C type , Python typePython 2015. 1. 9. 14:44
C언어의 구조체의 경우 struct hello{int hello1;int bye;};이런식으로 hello라는 구조체를 만들고 멤버변수 2개를 만들었습니다.이 형식은 C언어의 타입이고 파이썬의 경우는 ?!! class hello(Structure):_fields_ = [("hello",c_int),("bye",c_int), ] c언어를 써와서 그런지 c가 쉬워보이긴하네여 일단 hello라는것을 선언하고, 필드에는 멤버변수 hello와 bye를 선언했습니당각 변수 타입은 int형으로 두었구요~~~~~~~~~! 뭐 이렇대요 ㅎ... 이제 유니온! C언어에서 그냥 공부만하고 넘어갔던거같은데 실제로 써봅시담 union {long hello;int hello1;char hello2[8];}hello; hello라는..