디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

안티 리버싱 연습하는데 이상한게 있다.

MOBIUS(121.158) 2013.03.17 00:52:10
조회 142 추천 0 댓글 2

분명 책에는 이러이러하게 코드짜면 이렇게 뚫림 이라고 설명해놓았는데

안뚫린다 ㅋㅋㅋ
뭐 안뚫리면 좋은거긴 한데, 왜 안뚫리는건지 모르니까 찜찜하네...

코드 일부 공개한다.

// NtQueryInformationProcess 디버깅 무력화
typedef DWORD (WINAPI *APINtQueryInformationProcess)(HANDLE, DWORD, PVOID, DWORD, PVOID);
APINtQueryInformationProcess NtQueryInformationProcess;
HANDLE CheckDebugPort(HANDLE hProcess)
{
        HANDLE hPort = NULL;
        ULONG result = 0;
        HMODULE hntdll;

        hntdll = GetModuleHandle(L"ntdll.dll");

        NtQueryInformationProcess = (APINtQueryInformationProcess)GetProcAddress(hntdll, "NtQueryInformationProcess");

        NtQueryInformationProcess(hProcess, 7, &hPort, sizeof hPort, &result);

        return hPort;
}

// DebugObject 디버깅 무력화
typedef _Return_type_success_(return >= 0) LONG NTSTATUS;
/*lint -save -e624 */  // Don't complain about different typedefs.
bool DebugObjectCheck()
{
        HANDLE hDebugObject = NULL;
        NTSTATUS Status;

        ULONG result = 0;
        HMODULE hntdll;

        hntdll = GetModuleHandle(L"ntdll.dll");

        NtQueryInformationProcess = (APINtQueryInformationProcess)GetProcAddress(hntdll, "NtQueryInformationProcess");

        Status = NtQueryInformationProcess(GetCurrentProcess(), 0x1e // ProcessDebugObjectHandle
                                                                                , &hDebugObject, 4, NULL);

        if( Status!= 0x00000000 )
        {
                return FALSE;
        }

        // 디버거 감지.
        if(hDebugObject)
        {
                return TRUE;
        }

        return FALSE;
}
// DebugInherit 디버깅 무력화
bool CheckProcessDebugFlags()
{
        DWORD NoDebugInherit = 0;
        NTSTATUS Status;

        ULONG result = 0;
        HMODULE hntdll;

        hntdll = GetModuleHandle(L"ntdll.dll");

        NtQueryInformationProcess = (APINtQueryInformationProcess)GetProcAddress(hntdll, "NtQueryInformationProcess");

        Status = NtQueryInformationProcess(GetCurrentProcess(), 0x1f // ProcessDebugObjectHandle
                , &NoDebugInherit, 4, NULL);

        if( Status!= 0x00000000 )
        {
                return FALSE;
        }

        // 디버거 감지.
        if(NoDebugInherit == FALSE)
        {
                return TRUE;
        }

        return FALSE;
}
// HideThread 디버깅 무력화
bool HideThreadFromDebugger(HANDLE hThread)
{
        typedef LONG NTSTATUS1;
        typedef NTSTATUS1 (NTAPI *TNtSetInformationThread)(HANDLE,UINT,PVOID,ULONG);

        NTSTATUS1 Status;

        TNtSetInformationThread NtSetInformationThread = (TNtSetInformationThread)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtSetInformationThread");
        if(NtSetInformationThread == NULL)
        {
                return FALSE;
        }

        if(hThread == NULL)
        {
                Status = NtSetInformationThread(GetCurrentThread(), 0x11 //ThreadHideFromDebugger
                        , 0, 0);
        }
        else
        {
                Status = NtSetInformationThread(hThread, 0x11, 0, 0);
        }

        if( Status != 0x00000000)
        {
                return TRUE;
        }

        return FALSE;
}




BOOL isRelease = TRUE;
        if( isRelease )
        {
                // IsDebuggerPresent 디버깅 무력화.
                // OllyAdvanced - IsDebuggerPresent 무력화로 우회가능
                DWORD dwIsDebugger = 0;
                __asm
                {
                        mov                eax, fs:[18h]
                        mov                eax, [eax+30h]
                        movzx        eax, byte ptr [eax+2]
                        mov                [dwIsDebugger], eax
                }
                if( dwIsDebugger != 0 )
                {
                        MessageBox(NULL,L"you can not run with debugger!!!",L"IsDebuggerPresent",MB_OK);
                        return FALSE;
                }

                // OllyAdvanced - CheckRemoteDebuggerPresent 무력화로 우회가능
                // single step (F7,F8)엔 효과가 없다.
                BOOL bDebugged = FALSE;
                CheckRemoteDebuggerPresent(GetCurrentProcess(), &bDebugged);
                if(bDebugged)
                {
                        MessageBox(NULL,L"you can not run with debugger!!!",L"NtQueryInformationProcess",MB_OK);
                        return FALSE;
                }

                // single step (F7,F8)엔 효과가 없다.
                int dwDebugger = Int3SingStepDetection();
                if(dwDebugger)
                {
                        MessageBox(NULL,L"you can not run with debugger!!!",L"9 Int3SingStepDetection",MB_OK);
                        return FALSE;
                }

                // 디버거로부터 감추길 원하는 스레드를 넘겨준다.
                // single step (F7,F8)엔 효과가 없다.
                // OllyAdvanced - ZwSetInformationThread 무력화로 우회가능하다고 하나 이상하게 무력화가 안됀다. 대체 뭐지 ㄱ-
                bDebugged = HideThreadFromDebugger(GetCurrentThread());
                if(bDebugged)
                {
                        MessageBox(NULL,L"you can not run with debugger!!!",L"5 NtSetInformationThread",MB_OK);
                        return FALSE;
                }

                // single step (F7,F8)엔 효과가 없다.
                // OllyAdvanced로 무력화 가능하다고 하나. 이상하게 무력화가 안됀다. 대체 뭐지 ㄱ-
                bDebugged = DebugObjectCheck();
                if(bDebugged)
                {
                        MessageBox(NULL,L"you can not run with debugger!!!",L"6 NtQueryInformationProcess::DebugObject",MB_OK);
                        return FALSE;
                }

                // OllyAdvanced로 무력화 가능하다고 하나. 이상하게 무력화가 안됀다. 대체 뭐지 ㄱ-
                bDebugged = CheckProcessDebugFlags();
                if(bDebugged)
                {
                        MessageBox(NULL,L"you can not run with debugger!!!",L"7 NtQueryInformationProcess::DebugInherit",MB_OK);
                        return FALSE;
                }
        }



내가 뭐 실수한거라도 있는건가?

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
350431 이거해바 [10] 루비•‿•갤로그로 이동합니다. 13.03.19 206 0
350430 이거도 해바 [15] 루비•‿•갤로그로 이동합니다. 13.03.19 204 0
350429 [7] 루비•‿•갤로그로 이동합니다. 13.03.19 116 0
350427 수많은 한국, 일본, 외국인들이 80도시 한계로 울부짓고 있더군 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ [2] (1.214) 13.03.19 123 0
350426 프로그래머에게 논리학이란?? [3] 야간편돌이(175.196) 13.03.19 240 0
350425 밑에글쓴놈 스샷 [4] 늅늅이(58.234) 13.03.19 107 0
350424 횽들 나 안드로이드프로그래밍 이동영상보면서 따라하는데 [2] 늅늅이(58.234) 13.03.19 86 0
350423 윈도우8의 부팅 과정은 전통적인 부팅 과정과 최대 절전 모드의 장점만 [4] 분당살람갤로그로 이동합니다. 13.03.19 987 0
350422 가게부 어플 만들려고 하는데 [1] 무늬만컴공(211.197) 13.03.19 75 0
350420 객체지향의 특징이 [2] 야간편돌이(175.196) 13.03.19 82 0
350419 제 생각만하고 질문해서 그런것같아요 전문대(175.115) 13.03.19 33 0
350418 게임기 에뮬레이터는 대체어떻게만드냐 [9] 개발개발(110.47) 13.03.19 112 0
350417 객체지향이 도대체 어떤느낌인가여? [11] 야간편돌이(175.196) 13.03.19 113 0
350415 c님은 웹프로그래머임? [1] ㅅ3ㅅ(175.215) 13.03.19 65 0
350414 님들 근데 vc++은 객체지향에 대한 이해가 있어야 배울만한가여 [10] 야간편돌이(175.196) 13.03.19 84 0
350412 현재 닉 전문대 어그로중 [4] c(175.208) 13.03.19 67 0
350411 노트북이 무슨 비쥬얼만 실행시키면 각종 dll오류뜨는데 개좆같네 ㅡㅡ [2] ㅁㄴㅇ(121.165) 13.03.19 64 0
350409 성님들 안드로이드 sleep함수 쓰는 법좀.. [1] 새내기(114.206) 13.03.19 450 0
350407 솔직히 아웃사이더라서 프로그래머하는애들 많을걸??? [2] ㅁㄴㅇㄹ(182.208) 13.03.19 96 0
350406 님들도 더블릿하세요 ^ㅆ^ y녀6디리(115.90) 13.03.19 43 0
350404 오늘도 프로그래머 하면 치킨집 사장님 되나요? 라고 물어보는거같아 맘이 슬프다... [5] LastCorona갤로그로 이동합니다. 13.03.19 92 0
350403 드라이버를 가지려면 물건을 뜯어야 한다고 했던가 [3] y녀6디리(115.90) 13.03.19 44 0
350402 근데 클린 언어란게 최적화인가요? [15] 전문대(175.115) 13.03.19 95 0
350398 포춘쿠키 플래시같은거 역공학으로 소스 알아낼수있어? [2] f(211.196) 13.03.19 69 0
350397 float right position fixed 가안됨 [8] 1ㄷ1ㄷㄷ(175.215) 13.03.19 55 0
350395 소수점자리 버림 어찌하나요? [6] ㄷㄷㄷ(125.135) 13.03.19 92 0
350393 프갤은 정모 안함? [3] exploit갤로그로 이동합니다. 13.03.19 87 0
350391 형님들 툴제작을 공부하고싶은대 어떤게요즘 배우면좋나요? 근성가이(211.237) 13.03.19 36 0
350389 1234님 나름 생각해봄 [4] ㅎㅋㅋㅋ(59.152) 13.03.19 36 0
350388 이문제 아무도 해결할줄아는자는 정녕 없는가.. 3주째 고민중 [1] 1ㄷ1ㄷㄷ(175.215) 13.03.19 44 0
350385 저 전문대생인데 솔직히 말씀해주세요 (진지) [3] 전문대(175.115) 13.03.19 104 0
350381 저기 근데 int *pt랑 int (*ptr)이랑 뭐가다름?? [1] 야간편돌이(175.196) 13.03.19 54 0
350380 윈도우프로그래밍과 웹프로그래밍(살려줘요!) 인토(39.7) 13.03.19 44 0
350379 누가 제발좀도와주셈.. css인데이것때문에 3주째 막히다가 결국엔 질문함 [3] 1ㄷ1ㄷㄷ(175.215) 13.03.19 43 0
350378 형들 vmware 해킨토시 설치 진행이 안돼 ㅜㅜ [1] mac(1.252) 13.03.18 69 0
350377 규라타스 [11] 1234(211.189) 13.03.18 104 0
350375 님들 **p 이걸 a[][]대신 쓰려면 어떤식으로씀?? [8] 야간편돌이(175.196) 13.03.18 82 0
350373 winapi) imm32.dll 링커-명령줄에 추가하는거아닌가요? [1] 이힝(175.215) 13.03.18 38 0
350372 님들 증명 중요하다는데 [9] 야간편돌이(175.196) 13.03.18 83 0
350370 어짜피 6개월도 안되서 갤 원래데로 될거다 [1] 생물학(165.194) 13.03.18 71 0
350369 내가 다시 돌아왔다 [3] y녀6디리(115.90) 13.03.18 53 0
350368 사람의 뇌에 저장된 기억들은 몇진법 형태로 되어있음? [7] 야간편돌이(175.196) 13.03.18 88 0
350367 ㅇㅇ형 저때문에 과로하시고 죄송합니다 [1] 징기스칸4갤로그로 이동합니다. 13.03.18 72 0
350366 개갞님들아 질문답변좀 해달라곸ㅋㅋㅋ 증명 중요하냐고 공부 얼마나하냐곸ㅋ [5] 야간편돌이(175.196) 13.03.18 73 0
350365 70대 노인네들은 산책 다니고 등산가는데 저 프갤 늙바리새끼들은 [2] 규라타스(211.189) 13.03.18 107 0
350364 어휴 미친 코드세이퍼 저 늙바리새끼 저거 또 지랄이네 규라타스(211.189) 13.03.18 75 0
350363 리눅스 좃초보 질문좀드릴께요 ㅠㅠ... [1] 뉴비입니다(61.72) 13.03.18 56 0
350362 뒷바다가 어땠는지 기억이 안난다.. ㅋㄱ(183.96) 13.03.18 65 0
350361 이쯤에서 올리는.jpg [2] (1.214) 13.03.18 210 1
350359 ㅇㅇ횽 퇴근 정말 축하드립니다 기다리고 있을게요 [1] 징기스칸4갤로그로 이동합니다. 13.03.18 85 0
뉴스 밀레나, 오늘(11일) 첫 정규앨범 'Where to Begin' 발매! 전곡 작사·프로듀싱 참여 디시트렌드 07.11
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2