외규장각 도서 환수 모금 캠페인

Search Results for '분류 전체보기'

279 POSTS

  1. 2007.08.07 즐거운 주말 ^^
  2. 2007.07.31 수영 2
  3. 2007.07.31 악성코드 분석
  4. 2007.07.30 라이프가드 철희
  5. 2007.07.30 dll injector & keyboard hooking

즐거운 주말 ^^

Posted 2007. 8. 7. 10:20, Filed under: Story

집에 갔다왔더니 피로가..;;
결과적으로 어제 오늘 학원 빠졌다 ㅋ
(오늘은 일찍 일어났지만 책이 회사에 있어서 걍 다시 잤다.)

즐거운 데이트 & 초록이 생일파티

생일 축하해요 ^-^

Response : ,

수영

Posted 2007. 7. 31. 11:35, Filed under: Story

어제는 자유형과 평영-

여전히 수다쟁이 강사
게다가 말도 짜증나게 한다. 뭐 이런거도 못하냔 식의 약간 갈구는 말투.
그리고 왜 나한테는 말 놓는건데 안그래도 맘에 안드는데 -_-
수영도 잘 못하는거 같구만 말만 많아가지고
(장담하는데 자유형 시합하면 내가 이긴다-_- 내가 평영을 좀 못하기는 하지만 자유형은~)

어쨌거나 난 수영하러 간거니까 마인드 컨트롤
이제 자주 봐서 인사도 하고 하는 아저씨들이랑 놀고 있다.
난 이제 평영 클래스로 떨어져서- 나머지 사람들은 다들 접영으로 넘어갔다- 세명이서 열심히 평영 ㅋ

발차기는 아무리 해도 안된다. 자세가 잘 안나오는 이유가 뭘까
물에서 부력이 있으니까 아무래도 내 맘대로 안되긴 하는데 이건 너무한다.
이제 자유형 할 때는 어느정도 내가 원하는대로 몸이 움직이고 자연스러움이 스스로도 느껴지는데.
평영은 ;;;;;

무릎을 많이 벌어지지 않게 하고 뒤로 올린담에 밑으로 차주는게 관건인데.
발목이 잘 안꺾이는 것도 그렇고 일단 무릎이 옆으로 많이 벌어지니까 힘이 안실린다
연습해서 보란듯이 잘하고 말테다 -_-
어제는 완전 무릎 붙인채로 발목 꺾어서 뒤로 구부리는거만 연습했다.

요즘 자유형이 잘되서 기분이 좋다. 앞으로 쭉쭉 나가는 느낌이 ^^
주말에 덤벨 들고 근육운동 좀 했더니 효과가 있는건가 ㅋ
계속해서 버닝 ㅋㅋㅋ

같으 운동하는 아저씨가 나보고 자유형 팔돌리기가 많이 좋아졌단다.
근데 호흡을 너무 급하게 하는 것 같다고.
팔돌리는 거에 맞춰서 나와서 숨쉬고 들어가면 시간이 충분한데도 머리를 너무 급히 물속으로 넣어서
호흡도 힘들어지고 팔도 부자연스러워지는 것 같단다.
그래서 천천히 팔 돌리는 두박자에 맞춰서 여유롭게 해봤더니 충분히 된다! ^-^

항상 너무 급하게 하려는 마음을 버려야겠다.
충분히 시간이 있고 여유가 되는데도 너무 급하게만 하다보면 잘 안되는 거같다.
수영은 정말.. 물에 저항하지 말고 자연스럽게 하는게 최고인듯~

오늘 철희가 주문한 새 수영복도 왔다고 하니 받아서 열심히 해야겠군하 ㅋ
선수용 5부를 사고 싶었지만 그거 입고 어리버리대면 부끄러운 관계로 아직은 참는다.




Response : ,

악성코드 분석

Posted 2007. 7. 31. 11:15, Filed under: Study/Computer Science

어제 본 샘플-

난 실행압축을 끝까지 못풀고, 드랍하는 파일을 수집을 못해서 완전히 분석을 못했는데.
정진성 주임님이 달아주신 코멘트

철우군 보세요. ~
- msgr.dll 은 C:\WINDOWS\Downloaded Program Files 에 설치가 됩니다.
 (여기는 액티브 엑스가 설치 되는 곳이죠.)

- 해당 폴더내 파일(%windir%\Downloaderd Program Files) 은 탐색기에서는
 보여지지 않습니다
.  다른 파일 관리자를 써보세요. TC 같은 거..

- msgr.dll 은 Win-Trojan/Downloader.9728.CO 로 기진단 되네요. ; )
- 실행압축 해제는.... 올리에서 아래 0040B098 에 BP 걸고
shift+F9 (Pass exceoption to standard handler and run)로 달리세요.
0040B050: 60                       PUSHAD
0040B051: FC                       CLD
0040B052: 0FB60534BC4000           MOVZX EAX, BYTE PTR [40BC34]
0040B059: 85C0                     TEST EAX, EAX
0040B05B: 7531                     JNZ 40B08E
0040B05D: B850B04000               MOV EAX, 0040B050
0040B062: 2B0504BC4000             SUB EAX, [0040BC04]
0040B068: A330BC4000               MOV [40BC30], EAX
0040B06D: A100BC4000               MOV EAX, [40BC00]
0040B072: 030530BC4000             ADD EAX, [0040BC30]
0040B078: A338BC4000               MOV [40BC38], EAX
0040B07D: E89A000000               CALL 0040B11C
0040B082: A350BC4000               MOV [40BC50], EAX
0040B087: C60534BC400001           MOV BYTE PTR [0040BC34], 01
0040B08E: 833D50BC400000           CMP [0040BC50], 00000000
0040B095: 7507                     JNZ 40B09E
0040B097: 61                       POPAD
0040B098: FF2538BC4000             JMP [0040BC38]
고맙습니다.

pushad 해서 레지스트리 값 백업한 다음에 popad 해서 복구한후에 실제 프로그램 시작점으로 jmp
알고 있는 패턴인데도 잘 안보인다

디버거로 따라갈 때는 항상 어느 선까지 쫒아들어갈껀가 고민하는게 너무 힘들다.
너무 세부적인거까지 따라가봤자 결국은 나한테는 별 의미없는 연산, 혹은 시스템내에서 사용하는 콜
그렇다고 안따라가기에는  그 안에 뭐가 숨어있을 지 알 수 없어서  계속 보게되고
보다보면 어느새 미궁- 여기는 어디인가 ㅠ_-

여튼 또 하나 배웠습니다.
친절한 피드백에 감사 ^^

--------------
방금 가르쳐주신대로 풀어봤는데 잘 된다.
그리고 내가 어제 팩을 못푼건 아니었다. 풀고보니 내가 어제 따라갔던데랑 똑같네.
이 방법이 훨씬 쉽긴 하지만..shift+f9 라는 방법이 있다니 ㅋ
(난 pushad에 레지스트리값이 저장되는 곳에 하드웨어 bp를 걸고 반복해서 따라가는 방법으로 풀었다)

풀고난 후의 코드를 이해못했던건데.
Naked Packer V1.0 으로 실행압축되있는 이 코드- 상당히 독특하다.

압축을 풀고보면 push와 jmp의 나열.
대체 어디서 함수를 호출하고 어떤 루틴을 타는건가 모르겠다-_-;
그 jmp를 따라가면 또 무지하게 긴 jmp로 둘러싸인 루프가 나와서 뭔가 했었는데

스택에 어떤 값을 push 한 담에 jmp 로 어딘가로 뛴다.
거기서 무지하게 긴 루프를 도는 과정에서 자기가 호출하고자 하는 api의 메모리상의 주소를 얻어서
해당 api의 파라미터와 함께 스택에 push 해둔다.

마지막에 호출하고 싶은 api 시작주소로 return하면 그때 스택에 남아있던 값이 그 api의 파라미터가 되어
해당 api가 호출된다.

루프를 마지막으로 탈출하는 지점에 bp를 걸고보니 위와 같은 방식으로 api를
호출하는 거였다.
Response : ,

라이프가드 철희

Posted 2007. 7. 30. 10:10, Filed under: Story

2007-제7차 수상인명구조원 자격검정(7. 28)

합격자공고

필기 검정 합격(4명)

실기 검정 합격(5명)

최종 합격자(4명)

심철희, 고영주, 신윤아

임정훈/      이상 4명

심철희, 고영주, 박영일

 신윤아, 임정훈/ 이상 5명

심철희, 고영주, 신윤아

임정훈/      이상 4명



합격을 축하드립니다^^

ㅋㅋ 멋진 내 동생 라이프 가드 합격

인제 철희만 믿고 놀러가면 되는건가 ㅋㅋㅋ

진짜 한참 열심히 하더니 땄네.
나도 열심히 수영해야겠군~

Response : ,

dll injector & keyboard hooking

Posted 2007. 7. 30. 09:28, Filed under: Study/Computer Science
// DLL Inject : 다른 프로세스의 주소 공간에 특정 DLL을 넣는다.

 void DllInject(DWORD pid, char * path) // pid  : 인젝션 하려는 Process id
          // path : 인젝션 될 dll의 경로
{

    HANDLE                  hProcess;
    HMODULE                 hDll;
    PTHREAD_START_ROUTINE   pFunc;
    DWORD                   nLen;
    void *                  pMem;
    HANDLE                  hThread;

   
 // target process의 PID로 프로세스를 연다
 hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);

 // 내 프로세스에 있는 KERNEL32.DLL의 주소와 LoadLibrary의 주소를 구한다.
 // kernel32.dll 모듈의 핸들값을 GetModuleHandle로 구한다.
  hDll = GetModuleHandle("kernel32.dll");

    // PTHREAD_START_ROUTINE은 미리 정의되어 있는 스레드 함수 모양의 함수 포인터
 // LoadLibray 함수의 주소를 얻어옴
    pFunc = (PTHREAD_START_ROUTINE)GetProcAddress(hDll, "LoadLibraryA");

    // 계산기의 주소공간에 메모리를 할당하고, DLL의 경로를 복사해준다.
    // VirtualAlloc은 가상 메모리를 할당하는 API이지만,
    // Ex가 붙으면 다른 프로세스의 주소공간을 할당할 수 있다.

    pMem = VirtualAllocEx(hProcess, 0,      // 원하는 주소(0은 알아서 해달라)
               strlen(path) + 1,             // 크기
                MEM_RESERVE | MEM_COMMIT,   // 예약과 동시 확정
                PAGE_READWRITE
      );

    // 이제 DLL의 경로를 담을 문자열 복사
    // WriteProcessMemory()는 다른 프로세스 주소 공간에 무언가를 쓸 수 있다.

    WriteProcessMemory(hProcess, pMem, path, strlen(path)+1, &nLen);
   
     // 계산기에 새로운 스레드를 만든다.
     // CreateRemoteThread는 다른 프로세스에 스레드를 생성시킨다.

    hThread = CreateRemoteThread(hProcess, 0, 0, pFunc, pMem, 0, 0);   
    CloseHandle(hThread);
    CloseHandle(hProcess);
 }

void main(){

    HWND    hwnd;
    DWORD   pid;
    DWORD   tid;
   
    hwnd = FindWindow(0, "계산기");
    if( hwnd == 0 )
    {
        printf("\"계산기\"를 먼저 실행하여야 정상 동작합니다.\n");
        return;
    }

    tid = GetWindowThreadProcessId(hwnd, &pid);
    DllInject(pid, "C:\\Inject.dll");
}



#include <windows.h>

// 원래 계산기의 메세지 함수의 주소를 담을 변수

WNDPROC    oldProc;

// 계산기의 메세지를 처리할 새로운 함수
LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
    UINT    cmdID;
    switch( nMsg )
    {
        case WM_COMMAND:
            cmdID = LOWORD(wParam);
            if( cmdID >= 0x7C && cmdID <= 0x85 )
                return CallWindowProc(oldProc, hWnd, nMsg, wParam + 1, lParam + 1);
             break;
    }
    return CallWindowProc(oldProc, hWnd, nMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved){

    HWND    hwnd;
    switch( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACH:
            hwnd = FindWindow(0, "계산기");
            oldProc = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (LONG)WndProc);
            break;

        case DLL_THREAD_ATTACH:
            break;
        case DLL_THREAD_DETACH:
           break;
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}



어제 운연이가 갑자기 물어봤던 키보드 메세지 후킹과 dll 인젝션-
하도 많이 듣고 자주 보던 것들이지만 막상 구현해놓은 소스를 보니까 없고 해서
어떤 식으로 하는지에 대해 관련 기법이랑 문서만 알려주고 말았는데
오늘 회사에서 전에 공부하던걸 찾아봤다.
구체적인 방법도 알고있는 거랑 해보는 거랑은 좀 다른 것 같다.

막연히 알고 있는데서 그치지 말고 실제로 내가 할 수 있는 나의 스킬로 만들어야겟다.
그래야 필요할 때 써먹지 ㅋ
Response : ,

« Previous : 1 : ··· : 7 : 8 : 9 : 10 : 11 : 12 : 13 : ··· : 56 : Next »

Recent Posts

Recent Comments

Recent Trackbacks

Total hit (Today , Yesterday )

Admin Write Post