Admin | Write | GuestBook
[공지] 해당 블로그에 용건이 있으신 분께서는 http://blog.fore.kr/ 의 방명록(Guestbook)으로 부탁드립니다.
인터넷 임시 파일 자동 다운로드 방지 프로그램
Category : Programming/Release Program | URL : | Written by 포레 ( 2014. 7. 20. 04:29 ) | 신고

 

(ウチ、カードで見たんよー)

 

 

 

DownloadAlwaysOpen.exe

 

( 일단, Windows Vista 상위계열 전용입니다.

XP 같은거 들고와서 안되요 징징거려도 처리하기 귀찮으니, [클릭] 을 보시면 참고하시면 되겠습니다. )

 

::: 간단한 프로그램 소개 :::

 

인터넷 익스플로어(이하, 익플) 에서 다운로드 하는 도중 다운로드 경로를 지정하고 싶은데

 

 평소에도 내말을 안듣는 이 미친것이 자동으로 '임시 폴더' 로 저장하는 경우

 

윈도우 XP 의 경우엔 ' 내 컴퓨터 > 도구 > 폴더 옵션 > 파일 형식 > 확장명 선택 > 고급 ' 으로

 

어찌어찌 처리가 가능하지만

 

윈도우 (Windows) 7 계열에서는 이 기능이 사라졌다고 . . .

( 이 기능을 윈7에서 찾아보려고 3일정도 찾아봤는데 안보여서 포기.

인터넷으로 검색 결과, MS에서 만들지 않았고, 앞으로도 추가할 계획이 없다는 설이 . . . )

 

그래서 만들었습니다 -_- ;;;

( 매번 레지스트리가서 수정하기 귀찮고 . . . )

 

적당히 매번 자동으로 임시 경로로 갈 법한 녀석을 클릭하고 아래 삭제버튼을

 

무한 반복 . . . 하시다 다되신 경우 적용 누르시면 바로 적용되십니다.

 

주의 ! 혹시나 "잘못 편집했는데 복구해주세요 !! ㅠㅠ" 라 말씀하셔도 제작자는 일절 책임지지 않으며,

만약, 복구를 원하시면, 원하는 확장명 파일 다운로드를 걸고 옵션에서 설정해보세요.

거의 99% 확률로 다시 처리됩니다.

나머지 1%는 사용자의 부주의로 인한 오류(악성코드, 바이러스 등)으로 안 될 경우 있음. ]

 

 

오류, 버그 등 제보는 덧글 혹은 방명록에 달아주시면

 

가능한 한 친절하고 신속하고 정확하게 답변할 수 있도록 노력하겠습니다.

 

 

 

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

OleUnRePack  (27) 2014.09.12
한국 EMS 다중 배송 추적/조회  (0) 2014.08.01
Applocale Autoclick Loader  (4) 2013.04.01
Fore's Secret ClipboardHooker SDK Beta 1.02v  (0) 2013.03.29
IE7 이상 추가 검색 공급자 직접만들기  (16) 2013.02.18
[API] 현재 실행중인 프로그램 경로 구하기 및 폴더 생성
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2013. 5. 31. 15:24 ) | 신고

포스팅 적고 싶은데 적을게 없으니 이런거나 간간히 적어줘야죠.

 

 [ 폴더 생성 ]

 

 BOOL WINAPI MyCreateDirectoryW(LPWSTR lpDirectory){
  LPWSTR   lpString = lpDirectory;

  while(*lpString){
   if ( *lpString == L'\\' ){
    *lpString = 0;
    CreateDirectoryW(lpDirectory,NULL);
    *lpString = L'\\';
   }
   lpString++;
  }
  return CreateDirectoryW(lpDirectory,NULL);
 }

 

 

 [ 현재 실행중인 프로그램의 경로 ]

 

 int WINAPI GetCurrentProcessPathW(LPWSTR lpPath,int nPathLength){
  WCHAR    wPath[MAX_PATH+1];
  LPWSTR    lpString;
  DWORD    dwLength;

 

  lpString = wPath;
  lpString += GetModuleFileNameW(NULL,lpString,MAX_PATH);
  while(*lpString != L'\\') lpString--;
  *lpString = 0;

  dwLength = lpString-wPath;
  dwLength = (dwLength<nPathLength)?dwLength:nPathLength;

  memcpy(lpPath,wPath,dwLength*sizeof(WCHAR));
  *(lpPath+dwLength) = 0;

  return dwLength;
 }

 

 

참고로 GetCurrentDirectory 함수는 비추천함. 설명하기 귀찮으니 이하 생략.

 

하고 싶은데, 간단히 설명하면 특별한 설정을 해주지 않는 프로세스가 해당 exe를 호출하면

 

타 프로세스(exe)의 현재 경로 시점에서 처리되어 언제든지 가변될 수 있다.

※ CreateProcess 의 LPCTSTR lpCurrentDirectory 변수 참고바람.

 

 

p.s >

 // TestApp.cpp

 

 int main(void){
 WCHAR   wPath[MAX_PATH+1];

 GetCurrentProcessPathW(wPath,MAX_PATH);
 wprintf(L"GetCurrentProcessPath : %s\n",wPath);
 GetCurrentDirectoryW(MAX_PATH,wPath);
 wprintf(L"GetCurrentDirectory : %s\n",wPath);
 return 0;
}

 

 

 

 

이런 일이 발생함.

 

 

CreateDialogBoxIndirectParam, DialogBoxIndirectParam 구현.
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2013. 5. 17. 03:03 ) | 신고

 

[힐끗]

 

CreateDialogBoxIndirectParam, DialogBoxIndirectParam 이놈들에 대해 이야기 해보자.

 

이녀석들을 쓰면 좋은 점이라면, 사용자로 하여금 리소스로 설정된 다이어로그를

 

리소스 수정 프로그램으로 수정시킬 수 없게 만든다는 점 외에는 장점이 없다.

( 그래봐야, 리버싱하면 리소스 수정 프로그램도 무력화된다. )

 

리소스 수정 프로그램은 이에 관련해 무지한 사람이더라도

 

인터페이스를 사용자가 손쉽게 수정 가능하니, 이를 방지하기 위해 한번 손으로 코드를 구현해보았다.

 

 

 HWND WINAPI CreateDialogIndirectParam(
  _In_opt_  HINSTANCE hInstance,
  _In_      LPCDLGTEMPLATE lpTemplate,
  _In_opt_  HWND hWndParent,
  _In_opt_  DLGPROC lpDialogFunc,
  _In_      LPARAM lParamInit
 );

 INT_PTR WINAPI DialogBoxIndirectParam(
  _In_opt_  HINSTANCE hInstance,
  _In_      LPCDLGTEMPLATE hDialogTemplate,
  _In_opt_  HWND hWndParent,
  _In_opt_  DLGPROC lpDialogFunc,
  _In_      LPARAM dwInitParam
 );

 

 < 출처 >

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

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

 

 

일단 함수들은 이렇게 생기셨다.

 

근데 이녀석들의 웃긴점은

 

두번째 인자가 LPCDLGTEMPLATE 되어 있지만, 실제 DLGTEMPLATE 값만 넘기면 실행되지 않는다.

 

왜냐하면, DLGTEMPLATE 은 하나의 헤더일 뿐, 내용이 들어가지 않기 때문이다.

 

구현은 이렇게 . . .

 

 

#include <windows.h>
#include <tchar.h>

 

// 유저 윈도우 이름 정의
#define USER_WINDOW_NAMEW   L"TestWindow"
#define USER_WINDOW_NAMEA    "TestWindow"

#ifdef UNICODE
 #define USER_WINDOW_NAME USER_WINDOW_NAMEW
#else
 #define USER_WINDOW_NAME USER_WINDOW_NAMEA
#endif //  UNICODE

 

// 다이어로그 기본 템플릿 재정의
// DLGTEMPLATE : http://msdn.microsoft.com/en-us/library/windows/desktop/ms645394(v=vs.85).aspx
// 추가 옵션 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v=vs.85).aspx
typedef struct _USERDLGTEMPLATE{
 DLGTEMPLATE   Template;
 WORD    wMenu;
 WORD    wDialogBoxClass;
 WCHAR    tDialogBoxTitle[1];
 // 이 아래부터는 다이어로그에 관련된 아이템이 있지만 귀찮으므로 생략한다.
}USERDLGTEMPLATE, *PUSERDLGTEMPLATE;

 

// 다이어로그 메시지 처리
int CALLBACK DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){
 switch(uMsg){
  case WM_CLOSE:
   DestroyWindow(hDlg);
  break;
  case WM_DESTROY:
   EndDialog(hDlg,0);
  break;
 }
 return FALSE;
}

 

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
 // 유저 템플릿을 생성한다.
 // 윈도우 이름을 동적으로 할당하기 위해 포인터로 생성함.
 PUSERDLGTEMPLATE   pTemplate;

 // 위 구조체 크기를 계산하기 위해 임시변수 할당함.
 int       nLength;

 // 기존 템플릿 크기 + 윈도우 이름(유니코드) 사이즈 + 여분 공간(1) 을 할당할 준비함.
 // 윈도우 이름은 ANSI 함수를 사용해도 IndirectParam 함수에선 윈도우 이름에 대해서 유니코드로 인식한다.
 nLength = (sizeof(USERDLGTEMPLATE)+(lstrlenW(USER_WINDOW_NAMEW)+1)*sizeof(WCHAR));

 // 메모리 할당
 pTemplate = (PUSERDLGTEMPLATE)malloc(nLength);

 // 메모리를 죄다 0으로 초기화.
 memset(pTemplate,0,nLength);

 // 윈도우 이름을 복사함.
 // ANSI를 사용해도 IndirectParam 함수에선 유니코드로 인식한다.
 lstrcpyW((LPWSTR)&pTemplate->tDialogBoxTitle,USER_WINDOW_NAMEW);

 // 템플릿 옵션 설정함.
 pTemplate->Template.style = WS_VISIBLE | WS_SYSMENU;
 pTemplate->Template.cx = 100;
 pTemplate->Template.cy = 100;

 // 다이어로그 생성
 DialogBoxIndirectParam(NULL,(LPDLGTEMPLATE)pTemplate,NULL,DlgProc,NULL);

 // 메모리 해제
 free(pTemplate);

 return 0;
}

 

 

그냥 귀찮아서 간략하게 구현했는데

 

자세한건 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v=vs.85).aspx 을 보면

 

다이어로그 안에 생성되는 윈도우를 좀 더 자세히 구현할 수 있지만

 

차라리 저렇게 구현할 바에야 CreateWindowEx 나 그냥 리소스로 구현해버리고 말겠다.

 

광고, 악성코드 썰 좀 풀어보자.
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2013. 5. 4. 23:17 ) | 신고

 

모 사이트에서 자료 다운받으려니 IE8은 최신이 아니라고

 

" 크롬이나 파폭쓰세여 (T-T) " 라는 문구가 계속 나오길래 빡쳐서

 

포터블 크롬을 찾아보던 중 . . .

 

 

 

 

매우 의심쩍다. 바이러스나 악성코드란 녀석이 클릭하자마자 바로 감염되는 녀석이 아니니 한번 다운받아보자.

( 특수한 스크립트로 이루어진 경우엔 클릭시 바로 감염됨. )

 

 

 

설치파일을 가장한 실행 가능 프로그램 파일 확장명(exe)을 지니고 있다.

 

보통 저 모양새는 *.msi ( Microsoft Installer ) 의 파일이 지니는데 마치 설치파일 마냥 위장했다.

 

일단, 실행해보기도 싫으니 슬쩍 뜯어보면

 

 

이런식으로 나타나는데, 위 윈도우에 적혀있는 글씨, 모양새야 코드로 언제든지 변경 가능하다 치더라도

 

UI 베이스를 저렇게 만들었다는건, 일단 기본적으로 낚아보겠다 마음이 있어보인다.

 

그리고, 저 모양새가 IE의 다운로드 창과 매우 흡사하게 생겼는데, 혹시 서버에서 추가 다운로드를 받아오나 싶어

 

확인해보니

 

 

실행 프로그램 자체가 함수덩어리로 이루어져 있는데 그 함수들 중 하나가 저거다.

 

딱 함수 이름만 봐도 파일 잘 다운받게 생겼다.

(사실, C# 파일인가 확인하려다, 우연치 않게 발견 . . . )

 

이 놈의 안을 조금 들여다보면

 

[ 스크린샷 1 ] 

 

 

[ 스크린샷 2

 

스크린샷 1번은 뭐하는건가 자세히 분석해보지 않아 모르겠고

 

스크린샷 2번은 그냥 딱 눈에봐도 " 다운로드 → 실행 " 한다.

 

이런식으로 한번 프로그램 잘못 실행하면 다운로드→실행→다운로드→실행 의 반복으로

 

컴퓨터 내에 계속해서 수많은 광고들이 쌓이게 된다.

( 맨 처음 감염(?)되는 방식이 이렇고 한번 설치된 순간

컴퓨터 시작시마다 자동적으로 실행되어 다운로드 하는 경우도 대다수이다. )

 

결론적으로, 가능하면 신뢰있는 사이트, 어떠한 공식사이트 제외하고는

 

가능하면 다운로드하는건 자제하는게 좋다.

 

 

[임시] 티스토리 스팸 덧글/방명록 차단.
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2013. 4. 27. 11:51 ) | 신고

 

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

 

최근에 스팸덧글, 스팸방명록. 많이 달린다.

 

이놈들 IP를 확인해보면

 

 

 

전부다 중국놈들이다.

( 가끔 딴나라도 섞이긴하는데 높은 확률로 중국놈들이더군요 )

 

그래서, 임시적으로 자바스크립트를 발동해봄.

 

[ 공통 스크립트 ]

 

 <script language="javascript" src="http://j.maxmind.com/app/geoip.js"></script>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>

 <script>

 function StrLength(lpString){
   for(var i=0;lpString[i]!=undefined;i++);
   return i;
 }

 

 function MyCmpString(lpString1,lpString2,nLength){
   var i;
   for(i=0;i<nLength;i++)
      if( lpString1[i] != lpString2[i] ){
          if ( lpString1[i] > lpString2[i] )
              return 1;
          else
              return 2;
       }
  return 0;
 }

 function GotoUrl(url){
        location.replace(url);
 }

 </script>

 

 

[ 해당 국가만 차단 ]

 

<script>

function SetSpamFilter(){
   var lpCurrentCountry = geoip_country_code();
   var lpBanCountry = new Array();
   var nLength;
   var i;

   lpBanCountry[0] = "CN"; // China

// lpBanCountry[1] = "JA"; // Japan

// lpBanCountry[2] = "KR"; // Korea

// 위와 같은 식으로 늘려주면 된다.

   nLength = StrLength(lpCurrentCountry);
   for(i=0;i<lpBanCountry.length;i++){
      if ( !MyCmpString(lpBanCountry[i],lpCurrentCountry,nLength) )
         GotoUrl ("about:blank");
   }
 }
SetSpamFilter();

</script>

 

 

[ 해당 국가외 타 나라 접근시 차단 ]

 

<script>

function SetSpamFilter(){
   var lpCurrentCountry = geoip_country_code();
   var lpBanCountry = new Array();
   var nLength;
   var i;

   lpBanCountry[0] = "KR"; // Korea

// lpBanCountry[1] = "JA"; // Japan

// lpBanCountry[2] = "CN"; // China

// 위와 같은 식으로 늘려주면 된다.
   nLength = StrLength(lpCurrentCountry);
   for(i=0;i<lpBanCountry.length;i++){
      if ( MyCmpString(lpBanCountry[i],lpCurrentCountry,nLength) )
         GotoUrl ("about:blank");
   }
 }
SetSpamFilter();

</script>

 

 

[ IP로만 차단 ] 

 

<script>

 $.getJSON("http://jsonip.appspot.com?callback=?",
    function(data){
       var lpCurrentClientIP = data.ip;
       var lpBanIpList = new Array();
       var i;
       lpBanIpList[0] = "91.124."; // 91.124.xxx.xxx. 로 되는 IP 전부 차단.

//    lpBanIpList[1] = "255.255.255.255"; // 255.255.255.255 로 되는 IP 전부 차단.
       for(i=0;i<lpBanIpList.length;i++){
          if ( !MyCmpString(lpBanIpList[i],lpCurrentClientIP,StrLength(lpBanIpList[i])) ){
              GotoUrl("about:blank");
          }
       }
  });

</script>

 

 

 

일단, 오늘 만들어서 조금 사용해봐야 알거 같은데

 

잘 된다 싶으면 다시 포스팅 날림.

 

p.s > 해당 사용자가 프로그램으로 HttpRequest 방식을 이용하면 위 방법으론 처리 불가능함.

 

 

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 :