Hack/Reversing
-
OpenThread()Hack/Reversing 2015. 1. 15. 02:45
디버거는 cpu레지스터를 계속 수시로 확인해야한다. 그래야 에러처리, 예외가 발생했을경우 정보를 가져와서 무엇이 오류인지 알아낼수있다. 이렇게 레지스터를 확인하기위해 OpenThread()함수를 사용한다. OpenThread의 함수 프로토타입이다. OpenProcess함수와 비슷하지만 단 하나가 다르다. dwProcessId가 아닌 , ThreadId로, TID를 입력받는다. PID는 프로세스의 아이디고, TID는 쓰레드의 아이디이다. 프로세스내부에서 실행되는 쓰레드 리스트를 구하고, 리스트에서 원하는 쓰레드를 선택하고해당함수로 핸들을 구해야한다.
-
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..