Admin | Write | GuestBook
[공지] 해당 블로그에 용건이 있으신 분께서는 http://blog.fore.kr/ 의 방명록(Guestbook)으로 부탁드립니다.
FSCH BETA 1.0v User Manual
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2013. 3. 6. 21:04 ) | 신고

 

 

 

 

Fore's Secret Clipboard Hooker BETA 1.0v

 

[기본 인터페이스]

 

이리 생겨 먹었다.

 

우선, 제일 왼쪽 메뉴에 파일을 눌러보면

 

 

 

[ 파 일 ]

 

 

위와 같이 뜬다.

 

[창을 항상 위에]

- 딴창에 안가려지고 게속 항상 위에 있는다.

 

[텍스트 후커 설정]

- 텍스트 상세 옵션을 들어간다.

 

[텍스트 파일로 저장]

- 유니코드로 기록을 저장한다.

 

[프로그램 종료]

- 끈다.

 

 

[ 클 립 보 드 옵 션 ]

 

 

[ 클립보드 감시 ]

- 이거 켜야 적용된다.

 

[ 한글 감시하지 않음 ]

- 이거 켜두면 인터넷 웹서핑이나 요딴거 할 때, 클립보드에 한글 복사되서 보드에 뜨는걸 방지해준다.

 

[ 한줄씩 출력 ]

- 말그대로 한줄씩만 보여줌.

 

[ 클립후커 내용 지움 ]

- 여태까지 로그 싹다지워버림

 

[ 번역기 사용 ]

- 사용한다. 번역기를

 

[ 번역 출력 방식 ]

- 위 메뉴안에는 '원문+번역문' 출력 기능이 있는데, 체크해두면 원문과 번역문이 동시에 출력된다.

 

[ 배경색 설정 ] 

- 배경색 설정한다.

 

[ 글씨색 설정 ]

- 글씨색 설정한다.

 

[ 폰트 설정 ]

- 글씨 모양, 크기 꼴리는데로 바꿀 수 있다.

 

 

 

 

[ 파일 - 텍스트 후커 설정 ]

 

 

[ Hook Program - Path ]

- Agth, Ith 등 옆에 있는 Browse 버튼을 눌러 찾아주면 된다.

 

[ Hook Program - Type ]

- 설정해주면 도움된다.

 

[ Hook Program -Other program command line ]

- Aght, Ith 외에 다른 프로그램이 나오고 그 프로그램이 커멘드 라인으로 실행 가능하다면

Type 에서 Other Program 눌러주고 커멘드 라인 적어주면 된다.

커멘드 라인에 예약어가 두개 정도 있다.

$PROCESSNAME$ = 프로세스 이름이 적용된다.

$PROCESSID$ = 프로세스 ID가 적용된다.

 

Agth 커멘드라인을 예로 들면 Agth /L411 [/Hcode etc..] [/P(ProcessId)] 로 커멘드가 적용되는데

이때 Other Program 을 적용시키고 /L411 /HS-4@FFFFFF /P$PROCESSID$ 라 적어도

Agth 가 정상적으로 실행된다.

 

[ Hook Process ]

밑에 버튼에 Save & Attach 버튼을 이용할 때 써먹으면 유용할지도 모른다.

 

[ Hook program additional code - Additional code ]

Agth나 Ith 를 이용할 때, H 코드를 여기다 입력해주면 된다.

 

[ Startup ]

- Only Text window : 프로그램 실행시 텍스트 윈도우를 먼저 띄워준다.

- User Setting window : 프로그램 실행시 위 설정화면을 먼저 띄워준다.

- Text window & Hook program : 프로그램 실행시 텍스트 윈도우와 Hook Program 에

설정된 프로그램을 동시에 실행시켜준다.

※ Text window & Hook program 사용 시, 프로세스 Attach 는 되지 않으므로

ITH - Save 기능 이용할 때 유용함.

 

 

- 끝 -

 

p.s > 아참, 텍스트창에 옮겨진 모든 로그 클립보드 복사도 가능함.

 

 

위 프로그램 장점과 하자 : http://foreblog.tistory.com/631

 

BETA 1.0 v 계획에 따른 완성도 : 100 %

 

아마 배포 예정일자 : 3/9 [지인한정]

 

< 1.0v 향후 추가 업데이트 방향 >

- 한글 및 기타 문자열 감시하지 않음 or 스마트 감시(적당히보고 감시 안함)

- 프로그램 내 유저 번역 처리문 추가

- 플러그인 및 SDK 배포 예정

- 꼴리면 웹업데이트 기능도 추가함.

 

IE7 이상 추가 검색 공급자 직접만들기
Category : Programming/Release Program | URL : | Written by 포레 ( 2013. 2. 18. 23:55 ) | 신고

올해 2013년.

 

기분 좋게 포멧하고 추가 검색 공급자를 넣으려니까 . . .

 

보이질 않는다.

 

[위 이미지를 클릭하시면 확대됩니다.]

 

네이버고 구글이 검색해도 원하는 답변은 정말 찾아보기 힘들다.

(찾아보면 나오긴 나온다. 절차가 좀 복잡할 뿐)

 

그래서, 직접 만들어봄 -_- ; ; ;

 

 

[이전 버전]

IESearchAdder1.0v.exe

 IESearchAdder1.01.exe

IESearchAdder1.02.exe 

[최신 버전]

IESearchAdder1.03.exe

※ Windows 7 에선 확인됐으나 XP에서 정상 작동은 검증되지 않았습니다.

(일단, XP에 맞게 코드는 넣어뒀는데...)

 

────────────────────────────

< 업데이트 사항 >

 

1.0v 

최초 배포.

 

1.01v

 아이콘 경로 생성 상 오류 코드 수정.

실패했는데 성공했다는 오류 수정.

 

1.02v

 아이콘 경로 생성 상 오류 코드 수정.

 

1.03v

Windows Vista 계열 이상 관리자 권한 요청 추가.

────────────────────────────

 

[사용방법]

 

1번칸에는 검색 공급자의 이름을 설정하기 위해 원하는 이름으로 입력한다.

 

 

위 스크린샷의 빨간색 칸에 해당된다.

 

 

2번칸에는 검색 공급자의 주소를 입력하되

반드시 TestSearch 라는 단어를 한번 입력한 주소로 입력해주어야한다.

 

예를 들어, 네이버에 'TestSearch' 라 검색해보고 주소창을 보자.

주소 창에는

http://search.naver.com/search.naver?where=nexearch&sm=ies_hty&query=TestSearch&ie=utf8

이런 주소가 나와있고, 주소 안에 문자열중에 "TestSearch" 라는 문자가 있다.

 

위의 예와 같이 주소안에 TestSearch 라는 단어가 있어야하고, 그 단어를 넣기 위해선

해당 사이트에서 한번이상 검색한 주소로 검색 공급자 주소란에 넣어주면 된다.

 

3번칸에는 원하는 아이콘을 집어서 선택해주면 된다.

※ 선택하지 않아도 진행된다.

 

4번칸에는 코드페이지 설정인데, 대부분의 검색사이트가 UTF-8 을 사용하지만,

옛날 사이트 같은 경우엔 euc-kr 등을 사용한다.

 

[위 이미지를 클릭하시면 확대됩니다.]

 

알아보는 방법은 위 스크린샷 같이 해당 홈페이지를

오른쪽 마우스 클릭 > 인코딩 탭에 설정된 값으로 넣어주면

대부분 맞게 들어가리라 예상한다.

 

그리고 5번칸을 누르면 검색 공급자 추가 시작 !

 

 

그리고, 이 메시지가 뜨면 성공된 것 입니다.

 

 

 

'Programming > Release Program' 카테고리의 다른 글

Applocale Autoclick Loader  (4) 2013.04.01
Fore's Secret ClipboardHooker SDK Beta 1.02v  (0) 2013.03.29
Switch Run  (2) 2012.09.14
Fore database list creater beta 1.0v  (2) 2012.09.06
네이트온 로그인 기록 제거 프로그램  (8) 2011.11.20
심심하니 fread, fwrite, fseek, ftell 구현. (Windows)
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2012. 10. 21. 19:10 ) | 신고

 

# fread

 

 size_t __cdecl fread( void *buffer, size_t size, size_t count, FILE *stream){
 unsigned long ul_rs = 0; //unsigned long return size
 ReadFile( (HANDLE)_get_osfhandle(stream->_file),
     buffer,
     count*size,
     &ul_rs,
     NULL) );
  return (size_t)ul_rs;
 }

 

 

# fwrite

 

 size_t __cdecl fwrite( void *buffer, size_t size, size_t count, FILE *stream){
 unsigned long ul_rs = 0; //unsigned long return size
 WriteFile( (HANDLE)_get_osfhandle(stream->_file),
    buffer,
    count*size,
    &ul_rs,
    NULL) );
 return (size_t)ul_rs;
 }

 

 

# fseek

 

 #define SEEK_SET FILE_BEGIN
 #define SEEK_CUR FILE_CURRENT
 #define SEEK_END FILE_END

 

 int __cdecl fseek( FILE *stream, long offset, int origin ){
  return (SetFilePointer(_get_osfhandle(stream->_file),offset,origin))0:(int)GetLastError();
 }

 

 

# ftell

 

 int __cdecl ftell(FILE *stream){
  return (int) SetFilePointer(_get_osfhandle(stream->_file),0,FILE_CURRENT);
 }

 

 

 

심심하니, 쓰레드에 대해 이야기해보자.
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2012. 10. 10. 14:52 ) | 신고

 

[번뜩 !]

 

진짜 할거없네 . . . 쓰레드에 대해 이야기해보자.

 

주제는 크게 지역변수와 쓰레드와의 관계이다.

 

쓰레드는 한 프로세스에 여러일을 동시에 해주는거처럼 보이게하는 아주 편리한 역활을 하고 있다.

 

이 편리한 쓰레드는 윈도우상 크게 쓰래드 함수가 2가지 종류로 존재한다.

 

 

 < CRT(C-RunTime) 함수 >

 

 uintptr_t _beginthread( 
   void( *start_address )( void * ),
   unsigned stack_size,
   void *arglist 
 );

 uintptr_t _beginthreadex( 
   void *security,
   unsigned stack_size,
   unsigned ( *start_address )( void * ),
   void *arglist,
   unsigned initflag,
   unsigned *thrdaddr
 );

 

 < 출처 >

 http://msdn.microsoft.com/en-us/library/kdzttdcb(v=VS.80).aspx

 

 

 

 < WIndows API 함수 >

 

 HANDLE WINAPI CreateThread(
  _In_opt_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_       SIZE_T dwStackSize,
  _In_       LPTHREAD_START_ROUTINE lpStartAddress,
  _In_opt_   LPVOID lpParameter,
  _In_       DWORD dwCreationFlags,
  _Out_opt_  LPDWORD lpThreadId
 );

 

 HANDLE WINAPI CreateRemoteThread(
  _In_   HANDLE hProcess,
  _In_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_   SIZE_T dwStackSize,
  _In_   LPTHREAD_START_ROUTINE lpStartAddress,
  _In_   LPVOID lpParameter,
  _In_   DWORD dwCreationFlags,
  _Out_  LPDWORD lpThreadId
 );


 HANDLE CreateRemoteThreadEx(
  _In_       HANDLE hProcess,
  _In_opt_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_       SIZE_T dwStackSize,
  _In_       LPTHREAD_START_ROUTINE lpStartAddress,
  _In_opt_   LPVOID lpParameter,
  _In_       DWORD dwCreationFlags,
  _In_opt_   LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
  _Out_opt_  LPDWORD lpThreadId
 );
 ※ CreateRemoteThreadEx 의 경우 Windows 7 상위계열에서만 사용가능
 

 < 출처 >

 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682437(v=vs.85).aspx

 http://msdn.microsoft.com/en-us/library/windows/desktop/dd405484(v=vs.85).aspx

 

 

귀찮으니 사용 방법은 출처를 확인.

 

위 빨간색 부분을 제일 많이 애용한다.

 

그럼, 위 쓰레드는 어떤식으로 함수가 호출되는가 ?

 

[WIndows XP]

_beginthread -> CreateThread -> CreateRemoteThread

[Windows 7]

_beginthread -> CreateThread -> CreateRemoteThread -> CreateRemoteThreadEx

※ Windows 7 은 분석해보지 않아서 확실하지 않습니다.

 

이런식으로 호출된다.

 

결론적으로 윈도우에서는 CreateRemoteThread로 호출하는게 제일 빠른 결론이 나옴.

 

이야기가 산으로 갔는데, 쓰레드생성시 Parameter에 지역변수를 사용하면 안된다 ?

 

답은 'NO' 이다. 사용해도 되는데, 문제는 정적변수로 지역변수를 사용해야한다.

 

 

 잘못된 예

 

 #include <windows.h>

 #include <stdio.h>

 

 DWORD WINAPI CallThread(LPVOID pVal){

   DWORD dwCnt = 0;

 

    if ( pVal )

       while(dwCnt++<10){

          printf("%d\n",*(int *)pVal);

          Sleep(1000);

       }

    return 0;

 }

 

 HANDLE WINAPI Call(){

    DWORD dwThreadId;

    HANDLE hThread;

    int nVal = 1;

 

    hThread = CreateThread(NULL,0,CallThread,&nVal,0,&dwThreadId);

    if ( hThread )

       return hThread;

    return NULL;

 }

 

 int main(void){

    HANDLE hThread;

 

    hThread = Call();

    if ( hThread ){

       WaitForSingleObject(hThread,INFINITE);

       CloseHandle(hThread);

    }

 

    return 0;

 }

 

 

 

 올바른

 

 #include <windows.h>

 #include <stdio.h>

 

 DWORD WINAPI CallThread(LPVOID pVal){

   DWORD dwCnt = 0;

 

    if ( pVal )

       while(dwCnt++<10){

          printf("%d\n",*(int *)pVal);

          Sleep(1000);

       }

    return 0;

 }

 

 HANDLE WINAPI Call(){

    DWORD dwThreadId;

    HANDLE hThread;

    static int nVal = 1;

 

    hThread = CreateThread(NULL,0,CallThread,&nVal,0,&dwThreadId);

    if ( hThread )

       return hThread;

    return NULL;

 }

 

 int main(void){

    HANDLE hThread;

 

    hThread = Call();

    if ( hThread ){

       WaitForSingleObject(hThread,INFINITE);

       CloseHandle(hThread);

    }

    return 0;

 }

 

 

이런 느낌이다.

 

그럼 왜 지역 변수로 사용하면 안되는걸까 ?

 

정적 변수의 경우엔 '자신만의 저장소(메모리주소)를 독립적으로 가지고 있는' 반면

 

지역 변수의 경우엔 '함수 호출시에 변수를 할당' 하기 때문이다.

 

따라서, 해당 함수가 끝나면, 할당된 지역변수는 해제되고 해제된 지역변수 메모리 주소는

 

다른 함수등에 의해 새로운 값으로 덮어씌워지게 된다.

 

물론, 지역변수가 해제되고 해당 지역변수의 주소에 있는 메모리의 값이 변동이 없다면

 

값은 바뀌지 않는다.

(하지만, 그런일은 거의 없다.)

 

[ 잘못된 예의 예제 그림 ]

 

 

[ 올바른 예의 예제 그림 ]

 

그림으로 나타내면 이런 느낌 ?

 

Local Memory 부분에서 서로의 값이 충돌하는 사태가 벌어져서 지역변수로 쓰면 안된다는 이야기.

 

그럼 여기서 문제

 

 

 

이런것도 가능할까 ?

 

 

이야기는 여기서 마치도록 하겠습니다 ' ' ;

 

 

 

 

 

아, 소켓프로그래밍 모르겠는데 ! 소켓 프로그래밍의 시작
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2012. 10. 9. 01:10 ) | 신고

 

 

최근에 리버싱만해서 피폐해진 머리를 소켓 프로그래밍으로 옮겨서 연구 시작 !

 

프로그래밍 공부는 하고 싶은데, 책은 사기 싫고 . . . 그럴땐 역시 사랑스러운 MSDN 쨔응 !

 

 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms738545(v=vs.85).aspx

 

자, 이렇게하면 된다. 외국어영역 5등급정도만 나와도 충분히 이해할 수 있는 글뿐(?)이다.

 

차근 차근 읽어보면

 

소켓 프로그래밍의 통신에는 크게 두가지로 분류되는 듯하고 내부 절차는 이러한듯 하다.

 

 Server

 Client

 

1. Initialize Winsock.

2. Create a socket.

3. Bind the socket.

4. Listen on the socket for a client.

5. Accept a connection from a client.

6. Receive and send data.

7. Disconnect.

 

 

1. Initialize Winsock.

2. Create a socket.

3. Connect to the server.

4. Send and receive data.

5. Disconnect.

 

너무 쉽죠 ?

 

자, 이제 서버와 클라이언트의 소스를 작성해보자.

 

 

위 홈페이지를 들어가면 Client 와 Server 를 구축하는 간단한 예제 소스가 나와있다.

 

Server 부터 구축해야 Client를 시험해볼 수 있기 때문에 Server -> Client 순으로 구축하는걸 추천한다.

 

 

 

Server.cpp 

 #include <Winsock2.h>
 #include <windows.h>
 #include <stdio.h>

 

 #pragma comment(lib,"Ws2_32.lib")

 

 int main(void){
    SOCKET           s;
    WSADATA         wsa;
    SOCKADDR_IN   addr;
    hostent             *host;
    char                *lpIPString;

 

    // WSA 초기화
    memset(&wsa,0,sizeof(wsa));
    if ( WSAStartup(MAKEWORD(2,2),&wsa) )
        return 0;

 

    // 소켓 생성
    s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

 

    // 현재 컴퓨터의 IP 정보를 얻어옴
    host = gethostbyname(NULL);
    lpIPString = inet_ntoa( **((in_addr **)host->h_addr_list) );

 

   // 소켓 주소 생성
    memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET; // type (IPv4)
    addr.sin_addr.s_addr = inet_addr(lpIPString); // ip
    addr.sin_port = htons(8181); // port

 

    // 소켓 주소 생성
    bind(s,(SOCKADDR *)&addr, sizeof(addr));

    {
        SOCKET   apt_s;
        int            nRecv;
        char         cBuffer[4096];
        char        *lptString = "Success SEND!! - Server\n";
        int            cnt = 0;

 

        // socket 및 bind 확인.

        listen(s,SOMAXCONN);
        memset(&apt_s,0,sizeof(apt_s));

        while ( cnt < 2 ){
            // connec t가 올 때까지 대기
            apt_s = accept(s,NULL,NULL);

            do{
                // send 가 올때까지 대기
                memset(cBuffer,0,4096);
                nRecv = recv(apt_s,cBuffer,4096,0);
                if ( nRecv == 0xFFFFFFFF )
                    break;
                if ( nRecv ){
                    send(apt_s,lptString,lstrlenA(lptString),0);
                    printf("%s",cBuffer);
                }
            }while(nRecv);
            closesocket(apt_s);
            cnt++;
        }
    }

    closesocket(s);

 

    WSACleanup();

 

    return 0;
 }

 

 

 

 Client.cpp 

 #include <Winsock2.h>
 #include <Ws2tcpip.h>
 #include <windows.h>
 #include <stdio.h>

 #pragma comment(lib,"Ws2_32.lib")

 

 int main(void){
    SOCKET        s;
    WSADATA     wsa;
    ADDRINFOA   addr;
    ADDRINFOA   *paddr;
    hostent         *host;
    char             *lpIPString;
    char             *lpPort = "8181";

 

    memset(&wsa,0,sizeof(wsa));
    if ( WSAStartup(MAKEWORD(2,2),&wsa) )
        return 0;

 

    memset(&addr,0,sizeof(addr));
    addr.ai_family = AF_INET;
    addr.ai_socktype = SOCK_STREAM;
    addr.ai_protocol = IPPROTO_TCP;

    host = gethostbyname(NULL);
    lpIPString = inet_ntoa( **((in_addr **)host->h_addr_list) );

    getaddrinfo(lpIPString,lpPort,&addr,&paddr);

 

    s = socket(paddr->ai_family,paddr->ai_socktype,paddr->ai_protocol);

 

    connect(s,paddr->ai_addr,paddr->ai_addrlen);

    {
        SOCKET  apt_s;
        int   nSend;
        int   nRecv;
        char  cBuffer[4096];
        char  *lptString = "Success RECV!! - Client\n";

 

        do{
            nSend = send(s,lptString,lstrlenA(lptString),0);
            if ( nSend == 0xFFFFFFFF )
                break;
            memset(cBuffer,0,4096);
            nRecv = recv(s,cBuffer,4096,0);
            printf("%s",cBuffer);
            Sleep(1000);
        }while(nRecv);
    }

 

    shutdown(s, SD_SEND);

 

    closesocket(s);

 

    WSACleanup();

 

    return 0;
}

 

이런식으로 구축되지 않는가 !?

 

자, 그럼 이쯤에서 남자라면 한번씩 해보는 도전 !

 

 

 

인터넷을 접속하면 어떻게 될까 ?

 

 

 

조짐이 있어보인다 !

 

서버에서 다중연결을 원할 경우엔 accept 부터 thread 를 이용하여 적당히 뿌려주면 될 것같다 > < !!

 

조금 더 연구해서 한번 서버구축도 노려볼만할거 같음 ' ')b

( 인터넷 계층도 알아볼 필요가 있어보임 )

 

 

 

Category
분류 전체보기 (605)
Notice (6)
Programming (79)
DISKER (1)
FSCH (7)
Caption (0)
Rest Time ! (443)
Hobby (64)
Tour (5)
Blind Post (0)
Recent Post
Recent Comment
Link
Calender
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Total :
Today :
Yesterday :