Hack
-
CreateToolhelp32Snapshot()Hack/Reversing 2015. 1. 15. 02:52
해당함수는 kernel32d에서 임포트하는 함수다. 전에 OpenThread() 함수에서 설명한대로 쓰레드 리스트를 뽑아와야하는데 해당 함수가 쓰레드 리스트를 뽑아와준다. 추가로 이 함수는 프로세스의 힙리스트, 모듈리스트 까지 모두 뽑아와준다. 함수의 프로토타입이다. dwFlags에서는 해당함수가 무엇을 구할지 선택하는 인자이다. 이렇게 많은 인수들이있다. 우리는 실행중인 스레드의 리스트를 구하려면 TH32CS_SNAPTHREAD, 0ㅌ00000004를 주어야한다. 그뒤에 인자는 스냅샷을 구하고자하는 프로세스의 아이디를 입력하면된다.
-
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()함수가 동작하지않게됩니다.