포스팅 적고 싶은데 적을게 없으니 이런거나 간간히 적어줘야죠.
[ 폴더 생성 ]
BOOL WINAPI MyCreateDirectoryW(LPWSTR lpDirectory){ while(*lpString){
|
[ 현재 실행중인 프로그램의 경로 ]
int WINAPI GetCurrentProcessPathW(LPWSTR lpPath,int nPathLength){
lpString = wPath; dwLength = lpString-wPath; memcpy(lpPath,wPath,dwLength*sizeof(WCHAR)); return dwLength;
|
참고로 GetCurrentDirectory 함수는 비추천함. 설명하기 귀찮으니 이하 생략.
하고 싶은데, 간단히 설명하면 특별한 설정을 해주지 않는 프로세스가 해당 exe를 호출하면
타 프로세스(exe)의 현재 경로 시점에서 처리되어 언제든지 가변될 수 있다.
※ CreateProcess 의 LPCTSTR lpCurrentDirectory 변수 참고바람.
p.s >
// TestApp.cpp
int main(void){ GetCurrentProcessPathW(wPath,MAX_PATH);
|
이런 일이 발생함.
갑작스레 떠오른 비트 구조체와 바이트 순서의 관계 (0) | 2014.10.28 |
---|---|
Visual Studio Runtime Library Compiler Option /MD /MT (0) | 2014.07.20 |
CreateDialogBoxIndirectParam, DialogBoxIndirectParam 구현. (2) | 2013.05.17 |
광고, 악성코드 썰 좀 풀어보자. (4) | 2013.05.04 |
[임시] 티스토리 스팸 덧글/방명록 차단. (8) | 2013.04.27 |
[힐끗]
CreateDialogBoxIndirectParam, DialogBoxIndirectParam 이놈들에 대해 이야기 해보자.
이녀석들을 쓰면 좋은 점이라면, 사용자로 하여금 리소스로 설정된 다이어로그를
리소스 수정 프로그램으로 수정시킬 수 없게 만든다는 점 외에는 장점이 없다.
( 그래봐야, 리버싱하면 리소스 수정 프로그램도 무력화된다. )
리소스 수정 프로그램은 이에 관련해 무지한 사람이더라도
인터페이스를 사용자가 손쉽게 수정 가능하니, 이를 방지하기 위해 한번 손으로 코드를 구현해보았다.
HWND WINAPI CreateDialogIndirectParam( INT_PTR WINAPI DialogBoxIndirectParam(
< 출처 > 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>
// 유저 윈도우 이름 정의 #ifdef UNICODE
// 다이어로그 기본 템플릿 재정의
// 다이어로그 메시지 처리
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ // 위 구조체 크기를 계산하기 위해 임시변수 할당함. // 기존 템플릿 크기 + 윈도우 이름(유니코드) 사이즈 + 여분 공간(1) 을 할당할 준비함. // 메모리 할당 // 메모리를 죄다 0으로 초기화. // 윈도우 이름을 복사함. // 템플릿 옵션 설정함. // 다이어로그 생성 // 메모리 해제 return 0;
|
그냥 귀찮아서 간략하게 구현했는데
자세한건 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v=vs.85).aspx 을 보면
다이어로그 안에 생성되는 윈도우를 좀 더 자세히 구현할 수 있지만
차라리 저렇게 구현할 바에야 CreateWindowEx 나 그냥 리소스로 구현해버리고 말겠다.
Visual Studio Runtime Library Compiler Option /MD /MT (0) | 2014.07.20 |
---|---|
[API] 현재 실행중인 프로그램 경로 구하기 및 폴더 생성 (0) | 2013.05.31 |
광고, 악성코드 썰 좀 풀어보자. (4) | 2013.05.04 |
[임시] 티스토리 스팸 덧글/방명록 차단. (8) | 2013.04.27 |
빡침의 하루 ( ERROR_CANNOT_FIND_WND_CLASS ) (4) | 2013.04.23 |
모 사이트에서 자료 다운받으려니 IE8은 최신이 아니라고
" 크롬이나 파폭쓰세여 (T-T) " 라는 문구가 계속 나오길래 빡쳐서
포터블 크롬을 찾아보던 중 . . .
매우 의심쩍다. 바이러스나 악성코드란 녀석이 클릭하자마자 바로 감염되는 녀석이 아니니 한번 다운받아보자.
( 특수한 스크립트로 이루어진 경우엔 클릭시 바로 감염됨. )
설치파일을 가장한 실행 가능 프로그램 파일 확장명(exe)을 지니고 있다.
보통 저 모양새는 *.msi ( Microsoft Installer ) 의 파일이 지니는데 마치 설치파일 마냥 위장했다.
일단, 실행해보기도 싫으니 슬쩍 뜯어보면
이런식으로 나타나는데, 위 윈도우에 적혀있는 글씨, 모양새야 코드로 언제든지 변경 가능하다 치더라도
UI 베이스를 저렇게 만들었다는건, 일단 기본적으로 낚아보겠다 마음이 있어보인다.
그리고, 저 모양새가 IE의 다운로드 창과 매우 흡사하게 생겼는데, 혹시 서버에서 추가 다운로드를 받아오나 싶어
확인해보니
실행 프로그램 자체가 함수덩어리로 이루어져 있는데 그 함수들 중 하나가 저거다.
딱 함수 이름만 봐도 파일 잘 다운받게 생겼다.
(사실, C# 파일인가 확인하려다, 우연치 않게 발견 . . . )
이 놈의 안을 조금 들여다보면
[ 스크린샷 1 ]
[ 스크린샷 2 ]
스크린샷 1번은 뭐하는건가 자세히 분석해보지 않아 모르겠고
스크린샷 2번은 그냥 딱 눈에봐도 " 다운로드 → 실행 " 한다.
이런식으로 한번 프로그램 잘못 실행하면 다운로드→실행→다운로드→실행 의 반복으로
컴퓨터 내에 계속해서 수많은 광고들이 쌓이게 된다.
( 맨 처음 감염(?)되는 방식이 이렇고 한번 설치된 순간
컴퓨터 시작시마다 자동적으로 실행되어 다운로드 하는 경우도 대다수이다. )
결론적으로, 가능하면 신뢰있는 사이트, 어떠한 공식사이트 제외하고는
가능하면 다운로드하는건 자제하는게 좋다.
[API] 현재 실행중인 프로그램 경로 구하기 및 폴더 생성 (0) | 2013.05.31 |
---|---|
CreateDialogBoxIndirectParam, DialogBoxIndirectParam 구현. (2) | 2013.05.17 |
[임시] 티스토리 스팸 덧글/방명록 차단. (8) | 2013.04.27 |
빡침의 하루 ( ERROR_CANNOT_FIND_WND_CLASS ) (4) | 2013.04.23 |
심심해서 풀어본 키젠미 (4) | 2013.04.06 |
[클릭하시면 이미지가 확대됩니다.]
최근에 스팸덧글, 스팸방명록. 많이 달린다.
이놈들 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){
function MyCmpString(lpString1,lpString2,nLength){ function GotoUrl(url){ </script>
|
[ 해당 국가만 차단 ]
<script> function SetSpamFilter(){ lpBanCountry[0] = "CN"; // China // lpBanCountry[1] = "JA"; // Japan // lpBanCountry[2] = "KR"; // Korea // 위와 같은 식으로 늘려주면 된다. </script>
|
[ 해당 국가외 타 나라 접근시 차단 ]
<script> function SetSpamFilter(){ lpBanCountry[0] = "KR"; // Korea // lpBanCountry[1] = "JA"; // Japan // lpBanCountry[2] = "CN"; // China // 위와 같은 식으로 늘려주면 된다. </script>
|
[ IP로만 차단 ]
<script> $.getJSON("http://jsonip.appspot.com?callback=?", // lpBanIpList[1] = "255.255.255.255"; // 255.255.255.255 로 되는 IP 전부 차단. </script>
|
일단, 오늘 만들어서 조금 사용해봐야 알거 같은데
잘 된다 싶으면 다시 포스팅 날림.
p.s > 해당 사용자가 프로그램으로 HttpRequest 방식을 이용하면 위 방법으론 처리 불가능함.
CreateDialogBoxIndirectParam, DialogBoxIndirectParam 구현. (2) | 2013.05.17 |
---|---|
광고, 악성코드 썰 좀 풀어보자. (4) | 2013.05.04 |
빡침의 하루 ( ERROR_CANNOT_FIND_WND_CLASS ) (4) | 2013.04.23 |
심심해서 풀어본 키젠미 (4) | 2013.04.06 |
심심해서 적어보는 C언어 간략한(?) 총정리. (0) | 2013.03.21 |
[ 문제의 코드 ]
HWND WINAPI function(...){ HWND hWnd; hWnd = CreateWindowExW( 0, L"SysLink",L"<A HREF=\"#\">Link Click</A>",WS_VISIBLE|WS_CHILD,X,Y,nWidth,nHeight,this->hWnd,(HMENU)nIdentNum,this->hInstance,NULL); ... return hWnd; }
|
SysLink 윈도우를 만드는데 . . . 아무리 만들어도 . . . 안된다 !
GetLastError() 로 확인해보니 ERROR_CANNOT_FIND_WND_CLASS 메시지를 뿜어됐던것이 사건의 시작.
3시간 가량을 헤매고 헤매어 검색해봤지만 . . .
아예 답변이 없거나 !
RegisterClass 가 선언되지 않았다 ! 라는 답변 뿐
윈도우 시스템 상 전역으로 처리된 SysLink 가 클래스로 정의되어있지 않을리 없다 -_- . . .
혹시나 싶어 InitCommonControls 이 선언되지 않아서 그런걸까 . . . 해서 !
해봤지만 역시 안된다 . . .
스팀찬다.
기본적으로 시스링크 같은 경우엔 확장형 컨트롤이라 가정하고 . . .
일반 컨트롤과 다르게 따로 뭔가 처리를 해줘야 한다면 . . .
에 도착한 결론은 . .
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
|
.
이 녀석 -_- ; 선언해주어야 하옵니다.
평소 배포용으로 만들 프로그램을 프로그래밍 할 땐, 윈도우 스킨이 맛깔나지 않아서 항상 선언해줘서
문제가 없었는데, 이번 프로그램 만들면서
" 어차피 내가 쓸거니까 상관없잖아 ~ " 하면서 발코딩하면서 생긴 문제.
MSDN을 읽어보니
"The SysLink control is defined in the ComCtl32.dll version 6, and it requires a manifest or directive that specifies that version 6 of the DLL should be used if it is available." |
출처 : http://msdn.microsoft.com/en-us/library/windows/desktop/bb760706(v=vs.85).aspx
라 적혀있고 비쥬얼 스타일 키는 방식에 대해선
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175(v=vs.85).aspx
위와 같이 나와 있는데 결론은 메니페스트만 넣어주면 되는 결론이 나왔다. -_- ; ;
SysLink 외에 RichEdit 와 같은 확장형 컨트롤을 위하여 반드시 위 선언을 넣어주면 너무나 도움될거 같다.
광고, 악성코드 썰 좀 풀어보자. (4) | 2013.05.04 |
---|---|
[임시] 티스토리 스팸 덧글/방명록 차단. (8) | 2013.04.27 |
심심해서 풀어본 키젠미 (4) | 2013.04.06 |
심심해서 적어보는 C언어 간략한(?) 총정리. (0) | 2013.03.21 |
FSCH BETA 1.0v User Manual (2) | 2013.03.06 |
|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |