'분류 전체보기'에 해당되는 글 142건

  1. 2010.07.24 http://archive.org 들어가봤습니다... 1
  2. 2010.07.22 YOU JUST ACTIVATED MY TRAP CARD 1
  3. 2010.07.20 KSF Creator2 1.3 final 3
  4. 2010.07.19 API 후킹
  5. 2010.07.18 Reverse Engineering 카테고리 열었어요.
  6. 2010.07.18 정규식에 대한 글을 써야되는데... 1
  7. 2010.07.18 No_Trap_No_More
  8. 2010.07.17 이게 언제적 기획이야..ㅋㅋㅋㅋㅋㅋ
  9. 2010.07.17 오랜만에 MSDN 들어가보니 많이 바꼈네요.
  10. 2010.07.17 C++ 의 mutable 키워드를 아시나요?
  11. 2010.07.17 파일 다이얼로그
  12. 2010.07.17 Self documenting 합시다!! 1
  13. 2010.07.17 자바의 변수 수명
  14. 2010.07.16 Rhythm Nerd 인터페이스 구상중.
  15. 2010.07.16 Rhythm Nerd 0.00000001

http://archive.org 들어가봤습니다...

잡담 2010. 7. 24. 21:01

갑자기 이 사이트 생각나서

어릴 때 만든 홈페이지들 몇개 쳐보니까...... ㅠ,.ㅠ 완전 창피하군요. 그래도 당당한 사람이 됩시다.



http://web.archive.org/web/20030913152258/pigworld.cafe24.com/bbs/zboard.php?id=34board&no=28
누구지? 신애누나? 선옥이? 선옥이는 아는데 신애는...? 아 영훈이가 좋아했던 애? ㅋㅋㅋ
. 근데 왜 신애지? 왜 서울에 가있지? 동창이 아닌가? 뭐지?? ... 누구지.
이거 보니까 갑자기 선옥이 생각나네ㅋㅋㅋ 머하고 지낼까?

http://web.archive.org/web/*/http://pigworld.cafe24.com


http://web.archive.org/web/20040806133000/zsoo.net/bbs/zboard.php?id=free

http://web.archive.org/web/20040806131233/zsoo.net/bbs/zboard.php?id=qna

http://web.archive.org/web/20040912040009/zsoo.net/bbs/zboard.php?id=stdpds

http://web.archive.org/web/20040806132714/zsoo.net/bbs/zboard.php?id=asmlec

http://web.archive.org/web/20040806132845/zsoo.net/bbs/zboard.php?id=crackpds

http://web.archive.org/web/20040614160600/http://pigworld.cafe24.com/

http://web.archive.org/web/20040912040009/zsoo.net/bbs/zboard.php?id=stdpds

http://web.archive.org/web/20041206222239/http://zsoo.net/

http://web.archive.org/web/20040613131228/http://zsoo.net/

http://web.archive.org/web/20060517061804/zsoo.net/drupal/

http://web.archive.org/web/20020802062348/http://pigwarez.gg.ro/ // 멘트 존나 오글거림 -_-;;

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=69&MAEULNO=28&no=5565 // 질문글 올리고 개 까임

:

YOU JUST ACTIVATED MY TRAP CARD

컴퓨터 이야기 2010. 7. 22. 00:32

프로그램 버전ㅋㅋ


:

KSF Creator2 1.3 final

컴퓨터 이야기/KSF Creator2 2010. 7. 20. 01:30
군 입대를 시작으로 사실상 손을 못대게 된 프로젝트 ..

지금이야 언제든지 손대는게 가능하지만 별다른 요청이 들어오지 않아서 방치중.

:

API 후킹

컴퓨터 이야기/C++ 2010. 7. 19. 02:53
API 후킹이 뭐냐면, 말 그대로 다른 프로그램이 특정 API 를 호출할 때 낚아채는 기법을 말함

아래 void main() 에서 핸들값을 적절한 다른 값으로 바꾸세요.

아래 소스 방법은 Dll Injection 임. 메모리에 로드된 import table 을 바꿔치기 해서 내가 원하는 dll 을 호출하게 만듬.
#include <iostream>
#include <windows.h>

// DLL Inject : 다른 프로세스의 주소 공간에 특정 DLL을 넣는다.
void DllInject(DWORD pid, char* path)
{
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);

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


        // 계산기의 주소공간에 메모리를 할당하고, DLL의 경로를 복사해준다.
        // VirtualAlloc은 가상 메모리를 할당하는 API이지만, Ex가 붙으면 다른 프로세스의 주소공간을 할당할 수 있다.
        void* p = VirtualAllocEx(hProcess, 0, // 원하는 주소(0은 알아서 해달라)
                strlen(path)+1, // 크기
                MEM_RESERVE | MEM_COMMIT, // 예약과 동시 확정
                PAGE_READWRITE);

        // 이제 DLL의 경로를 담을 문자열 복사
        // WriteProcessMemory()는 다른 프로세스 주소 공간에 무언가를 쓸 수 있다.
        DWORD len;
        WriteProcessMemory(hProcess, p, path, strlen(path)+1, &amp;len);

        // 계산기에 새로운 스레드를 만든다.
        // CreateRemoteThread는 다른 프로세스에 스레드를 생성시킨다.
        HANDLE hThread = CreateRemoteThread(hProcess, // 계산기 핸들
                0, 0, 
                f, p, // 함수, 파리미터
                0, 0);


        CloseHandle(hThread);
        CloseHandle(hProcess);
}

void main()
{
        using namespace std;
        HWND hwnd = (HWND)0x0005115A;
        DWORD pid;
        DWORD tid = GetWindowThreadProcessId(hwnd, &amp;pid);
        DllInject(pid, "C:\\spy1.dll");
}
[DLL]
#include <urlmon.h>
#include <iostream>
#include <commctrl.h>
#include<windows.h>
#include<dbghelp.h>
#include<stdio.h>
#pragma comment(lib,"dbghelp.lib")



// Repalce 부분..

void Replace( char *dll_name,                          // dll 이름

                                         PROC proc,             // hooking 할 함수

                                         PROC new_proc,     // 새로운 함수

                                         HMODULE hMod)     // .idata 섹션을 조사할 모듈 핸들

                                                                         // (exe 주소)

{

             // hMod 주소에서 .idata의 위치를 찾는다.

             ULONG sz;

             PIMAGE_IMPORT_DESCRIPTOR pImport = (PIMAGE_IMPORT_DESCRIPTOR)

                        ImageDirectoryEntryToDatahMod, 

                        TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,       // IMPORT하고 있는 곳

                         &amp;sz);



             if(pImport==0)                // .idata section이 없는 경우.

                          return;



             //===================================================

             // .idata에서 원하는 dll의 위치를 찾는다.

             for(;pImport-&gt;Name;++pImport)

             {

                          char* p = (char*)hMod+pImport-&gt;Name;



                          if(strcmpi(p,dll_name)==0)                   // 찾은 경우

                                       break;

             }

             if(pImport-&gt;Name==0)             return; // .idata항목에 해당하는 DLL이 없다.

             //====================================================

             // thunktable에서 원하는 함수를 찾아서 바꾸어 쓴다.

             PIMAGE_THUNK_DATA pThunk=(PIMAGE_THUNK_DATA)

             ((char*)hMod+pImport-&gt;FirstThunk);



             

             for(;pThunk-&gt;u1.Function;++pThunk)

             {

                          PROC* pf=(PROC*)&amp;(pThunk-&gt;u1.Function);



                          if(*pf==proc)                // 찾은 경우.

                          {

                                       *pf=new_proc;              // 덮어쓴다.

                          }

             }

}



// MessageBoxW를 대신할 함수

UINT WINAPI foo(HWND hwnd,PCWSTR s,PCWSTR title,UINT btn)

{

             // Console 참을 생성해서 출력해준다.



             AllocConsole();



             freopen("CONOUT$","wt",stdout);



             printf("Messagebox 호출");



             return 0;

}



BOOL WINAPI DllMain(HANDLE h,DWORD r,void*p)

{

             if(r==DLL_PROCESS_ATTACH)

             {

                          Replace("User32.dll",

                                       (PROC)MessageBoxA,

                                       (PROC)foo,

                                       GetModuleHandle(0));

             }

             return TRUE;

}



:

Reverse Engineering 카테고리 열었어요.

컴퓨터 이야기/Reverse Engineering 2010. 7. 18. 19:52

Reverse Engineering 이 뭐냐면...

소프트웨어 공학중에 하난데 이미 만들어진 프로그램을 역으로 풀어서 어떤 원리로 작동되는지 탐구하고 분석하는것을 말함.

순수한 학술 목적으로 발전할 수도 있지만 음지의 기술쪽으로 발달하면 흔히 말하는 크랙이나 키젠을 만들어내는쪽으로도 나올 수 있음.

주로 C/C++ 등으로 만든 Native Code 를 어셈블리어로 번역한 후 디버깅을 하면서 프로그램을 들여다 보는 쪽으로 나가지 않을까 생각중.

여러분 관심 있나요? ㅋㅋ 저도 잘 모르지만 잘해볼게요.

한 때 관심을 가지고 깔짝였는데 아마 깊이 있는 내용은 쓰지 못할거에요.
:

정규식에 대한 글을 써야되는데...

잡담 2010. 7. 18. 19:46
눈에 잘 들어오지도 않고

ㅋㅋㅋㅋㅋㅋㅋㅋ 누가 보는 사람도 없으니까 잘 안쓰게 되네요.

그래도 정리하는겸 쓰는거니깐 ^^;
:

No_Trap_No_More

유희거리 2010. 7. 18. 15:37

'유희거리' 카테고리의 다른 글

블랙 드래곤가는 길에 대한 모든것  (0) 2011.04.14
한국사람 하모니카  (0) 2011.04.10
똥냄새 중독.jpg  (1) 2011.03.15
흔한 수학갤의 까칠이.  (0) 2011.03.13
연애 시뮬레이션  (0) 2010.07.26
:

이게 언제적 기획이야..ㅋㅋㅋㅋㅋㅋ

잡담 2010. 7. 17. 18:17


슈팅게임

캐릭터 소개

김기정(남)
성격 : 근성인이며, 한번 시도한건 쉽게 포기 하지 않는다.
88년생
의상 : 검은옷

동희심(남)
성격 : 우유부단하며, 털털하다.
89년생
의상 : 빨간바지에 녹색옷

심소현(여)
성격 : 매우 활발하고 자기만의 취미에 빠져살 때도 있지만, 유쾌하다.
89년생
의상 : 연두색바지에 흰티

난이도
설정
키설정

 

 

Score

Player

Spell

Level

Exp

(가로200픽셀)
(세로600픽셀)

가로 600픽셀
세로 600픽셀

 

 

전혀 기획형식에 맞지도 않지만 대1 때 대충 워드파일로 만들어논게 보이네요. 3일 하고 때려치운 조루프로젝트요. ㅡ,.ㅡ 결과물도 없음. 슈팅게임 만들어보고프다.

 

 

 

 

 

:

오랜만에 MSDN 들어가보니 많이 바꼈네요.

컴퓨터 이야기 2010. 7. 17. 17:35

한국에서 http://msdn.com 로 들어가면 한국페이지로 자동으로 리디렉션 될텐데요.

사실상 볼거 없고 -_-

http://msdn.microsoft.com/en-us/library

잌ㅋㅋㅋㅋㅋ

'컴퓨터 이야기' 카테고리의 다른 글

라인 트레이서 중간 점검  (0) 2010.09.02
YOU JUST ACTIVATED MY TRAP CARD  (1) 2010.07.22
무언가를 스크롤 해야하는 상황  (1) 2010.06.20
요즘 리듬게임을 개발중입니다.  (0) 2010.06.14
Duff's device  (1) 2010.05.25
:

C++ 의 mutable 키워드를 아시나요?

컴퓨터 이야기/C++ 2010. 7. 17. 17:32

class CClass

{

private:
   mutable int h;
public:
   CClass() { }
   void func() const { h=0; }
   void func2() {h=0;}
};

void main()
{
   CClass t1;
   t1.func();
   const CClass t2;
   t2.func2();
}
const 인데도 변경된다는 말... 사용빈도가 지극히 낮다. -_-;

그치만 클래스를 설계할 때 이 변수는 내부적으로 바뀌면서 쓰이고 const 로 선언 된다고 해도 활용이 가능한 변수를 지칭할 때 쓰임.

C++ 기본서에도 나오는 키워드지만 모르는 사람들이 은근 많음.

'컴퓨터 이야기 > C++' 카테고리의 다른 글

projecteuler.net : Problem 25  (0) 2010.08.16
API 후킹  (0) 2010.07.19
파일 다이얼로그  (0) 2010.07.17
Self documenting 합시다!!  (1) 2010.07.17
TR1 간단하지만 긴 소개  (0) 2010.05.25
:

파일 다이얼로그

컴퓨터 이야기/C++ 2010. 7. 17. 17:28
GetOpenFileName GetSaveFileName 

BOOL GetOpenFileName( 

LPOPENFILENAME lpofn   

); 
BOOL GetSaveFileName( 

LPOPENFILENAME lpofn   

); 
먼저 GetOpenFileName 을 소개하고자 한다. 다이얼로그박스 초기화 구조체, 이 구조체는 사용자의 파일선택정보를 저장한다. 리턴 값 사용자가 한 파일이나 OK 버튼을 클릭하면 0이 아닌값을 리턴한다. 취소나 실패했을 땐 0을 리턴한다. 음 다음으로 OPENFILENAME 구조체를 설명한다.
typedef struct tagOFN { 

   DWORD         lStructSize; 
   HWND          hwndOwner; 
   HINSTANCE     hInstance; 
   LPCTSTR       lpstrFilter; 
   LPTSTR        lpstrCustomFilter; 
   DWORD         nMaxCustFilter; 
   DWORD         nFilterIndex; 
   LPTSTR        lpstrFile; 
   DWORD         nMaxFile; 
   LPTSTR        lpstrFileTitle; 
   DWORD         nMaxFileTitle; 
   LPCTSTR       lpstrInitialDir; 
   LPCTSTR       lpstrTitle; 
   DWORD         Flags; 
   WORD          nFileOffset; 
   WORD          nFileExtension; 
   LPCTSTR       lpstrDefExt; 
   DWORD         lCustData; 
   LPOFNHOOKPROC lpfnHook; 
   LPCTSTR       lpTemplateName; 

} OPENFILENAME; 
보시다 시피 멤버가 엄청 많다. 2000이상에서 또 3개의 멤버가 추가되었다 -_-.. 

lStructSize 

       이 멤버는 그냥 sizeof(OPENFILENAME); 를 대입해 주면 된다. 

hwndOwner 

       대화 상자의 주인을 설정한다. 설정하면 그 대화상자가 끝나기 전까지 주인 윈도우는 사용하지 못한다. NULL 로 설정하면 다른 작업이 가능하다. 

lpstrFilter 

       열 파일의 타입을 지정하는 곳이다. exe 파일이나 php 파일이나 txt 파일등을 지정할 수 있다. (알려지지 않은 파일도 지정할 수 있다.) 
       지정하는 방법은 \0 로 구분해서 쓰는 방법인데, 형식은 이렇다. 
       ="모오든 파일\0*.*\0문서파일\0*.txt;*.doc;*.hwp\0" 
       ="Every File(*.*)\0*.*\0Text File\0*.txt;*.doc\0"; 

lpstrFile 

       이 멤버엔 전체경로가 들어간다. 

nMaxFile 

       적어도 256 이상은 넣어야 한다. 그냥 256 대입해주자. 

lpstrFileTitle 

       파일 이름을 받는다. 필요없으면 NULL 

nMaxFileTitle 

       파일 이름의 최대 길이 
       그러니까 char FileTitle[256]; 
       lpstrFileTitle = FileTitle; 이라고 했으면 여기엔 256 을 넣는게 좋다. 
       더 작은 배열의 크기로 할당했으면 이 값도 바뀌어야 한다. 

lpstrInitialDir 

       파일 열기창이 시작되는 디렉토리, 2000 에서는 이 멤버보다 lpstrFile 멤버가 더 우선순위가 높다. 

lpstrTitle 

       열기 박스의 제목 지정. 

Flags 

       ......MSDN 참고하기 바란다. 

nFileOffset 

       파일명이 시작되는 위치를 리턴한다. lpstrFile 에서 이 멤버만큼 더하면 그게 파일 이름이다. 

nFileExtension 

       위와 같다. 다른건 한가지, 확장자가 시작되는 위치를 리턴한다. 확장자가 입력되지 않았을 경우엔 NULL 을 가리킨다. 

lpstrDefExt 

       확장자를 입력하지 않았을 경우 디폴트 확장자를 지정한다. 
이 정도면 사용하는데 무리없을 듯 싶다. -_-+ 예제코드
#define MAX_PATH 256; 
OPENFILENAME ofn; 
char File[MAX_PATH+1]; 
ZeroMemory(File, sizeof File); ZeroMemory(&ofn, sizeof ofn); 
ofn.lStructSize = sizeof ofn; 
ofn.hwndOwner = hWnd; 
ofn.lpstrFilter = "실행파일\0*.exe\0\0"; 
ofn.lpstrFile = File; 
ofn.nMaxFile = MAX_PATH; 
GetOpenFileName(&ofn) 
주의할 점은 문자열을 초기화 시켜주지 않으면 창이 뜨지 않는다.


'컴퓨터 이야기 > C++' 카테고리의 다른 글

API 후킹  (0) 2010.07.19
C++ 의 mutable 키워드를 아시나요?  (0) 2010.07.17
Self documenting 합시다!!  (1) 2010.07.17
TR1 간단하지만 긴 소개  (0) 2010.05.25
헤더 파일은 적당히 나눠야 한다  (0) 2010.05.25
:

Self documenting 합시다!!

컴퓨터 이야기/C++ 2010. 7. 17. 17:27

Self documenting

Q.

void f() {
	TextHandler t;
	t.sendText("Hello, world", true);
}

class TextHandler {
public:
	void sendText(const std::string& msg, bool sendNewLine);
};

위의 코드에 사용된 boolean 타입에는 어떤 문제가 있을까요? C/C++ Users Journal에 실렸던 Self documenting과 관련된 내용을 소개합니다.


A.

문제의 코드 중 함수 f()를 먼저 살펴보겠습니다. 만약 TextHandler class가 다른 사람이 만들어 놓은 코드이거나 자신이 작성했더라도 어느 정도 시간이 흐른 경우라면 함수 f() 안의 t.sendText() 함수 호출 중 두번째 인자인 true가 의미하는 것이 무엇인지 알아채기가 쉽지 않을것입니다.

물론 현재 쓰이는 많은 영리한 에디터들의 경우에는 마우스 커서를 함수 위에 올려놓거나 적당한 키를 입력함으로써 두번째 인자의 헤더 파일에 선언된 이름인 sendNewLine을 tooltip과 같은 방법으로 보여줄 수도 있습니다만 모든 에디터들이 이러한 기능을 제공하지는 않습니다.

따라서 코드를 읽고 있는 사람은 이를 알기 위해 TextHandler class에 대한 문서나 헤더파일을 찾아보아야만 합니다. 이러한 작업이 필요한 이유는 true라는 값이 코드를 읽고 있는 사람에게 어떠한 부가적인 정보도 제공하지 않기 때문입니다.

문제의 코드는 다음과 같이 enum을 사용함으로써 개선될 수 있습니다.

class TextHandler {
public:
	enum NewLineDisposition { sendNewLine, noNewLine };
	void sendText(const std::string& msg, NewLineDisposition newLineDisposition);
};

void f(){
	TextHandler t;
	t.sendText("Hello, ", TextHandler::noNewLine);
	t.sendText("world", TextHandler::sendNewLine);
}

이제 f() 함수는 그 자체로 개발자에게 코드의 의미를 전달할 수 있습니다. 즉 self-documenting되어 있습니다.

Refactoring시에 적용함으로써 코드의 readability와 maintainability를 높일 수 있을것입니다.

'컴퓨터 이야기 > C++' 카테고리의 다른 글

C++ 의 mutable 키워드를 아시나요?  (0) 2010.07.17
파일 다이얼로그  (0) 2010.07.17
TR1 간단하지만 긴 소개  (0) 2010.05.25
헤더 파일은 적당히 나눠야 한다  (0) 2010.05.25
전 처리기 pragma 키워드  (0) 2010.05.25
:

자바의 변수 수명

컴퓨터 이야기/JAVA 2010. 7. 17. 17:25

자바에서는 수명이 다한 클래스의 할당도 어딘가에서 참조 하고 있다면 계속 물고 늘어지는 경향이 있다

A 라는 클래스가 있으면

A foo;
{
         A bar = new A();
         foo = bar;
} // 여기서 bar 의 수명은 끝이남.

foo.call(); // 과연 에러가 날까?

에러가 안난다. 컴파일에러 및 런타임 에러도 나지 않는다.

자바에서는 내부적으로 참조 카운터를 써서 주소를 다른곳에서 참조하고 있다면 파괴되지 않고 계속 쓰는거 같다.

만약 C++ 였다면? 런타임 에러가 낫겠지.

나는 이것이 좋다고만 보지 않는다. 변수 스코프를 저기서 끝내도록 했으면 프로그래머가 그 뒤론 이 변수를 더 이상 쓰지 않겠다는 의미로 블록을 썼을텐데.

모르는 다른곳에서 나도 모르게 이것을 쓰고 있다면 자칫잘못하면 치명적인 에러로 발전할 수 있기 때문.

뭐 C++ 에서도 지역변수를 포인터로 얻어와서 써도 에러가 나지 않는 경우도 많긴 함.

'컴퓨터 이야기 > JAVA' 카테고리의 다른 글

android studio 단축키  (0) 2015.12.16
java string int 형변환  (0) 2015.12.15
android AlertDialog 띄우기  (0) 2015.12.15
어제 수요일에 자바 스터디 모임을 가졌습니다.  (0) 2010.06.24
:

Rhythm Nerd 인터페이스 구상중.

컴퓨터 이야기/Rhythm Nerd 2010. 7. 16. 08:38

디렉토리 구조 얻어오는것과

파일이름들 하고 기타 게임상에서의 인터페이스?



잠 온다 아휴 -_-;;

'컴퓨터 이야기 > Rhythm Nerd' 카테고리의 다른 글

어느 정도... 윤곽을 보이네요.  (0) 2010.07.30
Rhythm Nerd 0.00000001  (0) 2010.07.16
Rhythm Nerd 0.0000000000001  (0) 2010.07.03
:

Rhythm Nerd 0.00000001

컴퓨터 이야기/Rhythm Nerd 2010. 7. 16. 08:36
살짝 보정.

하지만 동봉된 KSF 외의 복잡한 변속에서 제대로 보이지가 않음.




'컴퓨터 이야기 > Rhythm Nerd' 카테고리의 다른 글

어느 정도... 윤곽을 보이네요.  (0) 2010.07.30
Rhythm Nerd 인터페이스 구상중.  (0) 2010.07.16
Rhythm Nerd 0.0000000000001  (0) 2010.07.03
: