윈도우 shell 에서 '특수문자 이스케이프 문자'를 몰라서 다른 걸 쓰고 그랬는데...
윈도우 도움말에 있네 ㅋㅋㅋ

특수 문자 사용

<, >, |, &, ^ 문자는 특수 명령 셸 문자로 이스케이프 문자(^) 다음에 와야 하고 string으로 사용될 때는 따옴표로 묶여야 합니다(예: "StringContaining&Symbol"). 따옴표로 특수 문자를 포함한 문자열을 묶는 경우, 따옴표를 환경 변수 값의 일부로 설정해야 합니다.

728x90
Visual Studio 2003.net 에서 작업하는데
공통 프로젝트 라이브러리 설정을 다음 위치에서 해왔다.

Tools > Options > Projects > VC++ Directories > Include files / Library files

간혹 라이브러리 수정 작업을 하면서 기존 라이브러리 작업을 할 때
경우에 따라 path를 수정하는게 번거로웠다.

VS 2008에서는 property sheet를 이용하는 방법이 있다고 하는데
참고 - http://naiades.tistory.com/79
이것도 프로젝트 별로 세팅해줘야 해서 번거로운 면이 있는 것 같다.

VC++ Directories 설정이 로긴 유저에 따라가니
작업별로 로그인 유저를 달리하는 방법도 있다.
하지만 로그아웃하고 로그인하는 것도 번거롭다.

'바로 가기 > 고급 > 다른 자격 증명으로 실행'을 이용하면 재로그인은 필요가 없는데
솔루션 파일을 직접 열 수는 없는 단점이 있다.

그래서 생각해낸게 runas를 이용하는 거다.

runas /user:%userId% "%devenv.exe 위치% \"%solution 위치%\""

그래도 매번 패스워드를 쳐야하는 불편함은 있다. ;;;

덧1) RunasSpc라는 프로그램이 있긴 한데 회사에서는 상용

덧2) /savecred 옵션을 사용하면 한번만 패스워드를 치면 저장되네 ;;;

RUNAS 사용법:

RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
        /user:<UserName> 프로그램

RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
        /smartcard [/user:<UserName>] 프로그램

   /noprofile        로드하지 않을 사용자 프로필을 지정합니다.
                     응용 프로그램을 빠르게 로드할 수 있지만,
                     일부 응용 프로그램이 올바로 동작하지 않을 수 있습니다.
   /profile          로드할 사용자 프로필을 지정합니다.
                     기본값으로 설정되어 있습니다.
   /env              사용자 환경 대신 현재 환경을 사용합니다.
   /netonly          지정된 자격 증명이 원격 액세스를 위한 경우에
                     사용합니다.
   /savecred         사용자가 저장한 자격 증명을 사용합니다.
                     이 옵션은 Windows XP Home Edition에서는
                     사용할 수 없으므로 무시합니다.
   /smartcard        스마트 카드에서 자격 증명을 제공한 경우에
                     사용합니다.
   /user             <UserName>은 USER@DOMAIN 또는 DOMAIN\USER 형식이어야 합니다
.
   프로그램         EXE용 명령줄입니다. 아래 예를 보십시오.

예:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""

참고: 암호를 물어보면 사용자 암호를 입력하십시오.
참고:  USER@DOMAIN은 /netonly와 호환되지 않습니다.
참고:  /profile은 /netonly과 함께 사용할 수 없습니다.

(2011.05.30) 윈7 에서 UAC 를 켠 상태에서
권한 상승이 필요한 프로그램을 runas 로 실행할 경우
권한 상승 오류가 발생한다.
cmd 에서 권한 상승 명령어가 없는 관계로
technet 에서 제공하는
elevate라는 스크립트를 이용해야 하는데
이 스크립트가 파라미터가 1개만 사용하도록 되어 있어 수정이 필요하다.






728x90

NSIS 사용 중에 다음과 같은 메시지가 뜰 때가 있다.

NSIS error
error launching installer

파일이 깨졌거나 등 다양한 이유가 있을 수 있지만...
설치된 OS가 사용자의 '국가 및 언어 옵션 > 고급'에 설정된
'유니코드를 지원하지 않는 프로그램용 언어'가 지원하지 않을 경우도 있다.

해당 프로그램이 윈도우2003 지원하지 않는 줄 알고 개삽질했네 ㅡㅜ

728x90
윈도우 메시지 루프에서 로직을 처리할 경우 메시지 루프를 Pause 시켜버리면
해당 시간 동안을 건너뛰는 효과를 가져온다.

사례 1. App 창을 윈도우 영역 밖으로 걸치게 하고 메뉴 키나 Shift + F10을 누르는 경우
; WM_CONTEXTMENU 를 무시하자.

사례 2. ALT 키나 시스템 메뉴를 이용하는 경우
; WM_SYSCOMMAND의 SC_KEYMENU, SC_MOUSEMENU, SC_PREVWINDOW, SC_NEXTWINDOW, SC_MOVE를 무시하자.

사례 3. 최대화, 최소화 버튼 등을 이용하는 경우
; WM_NCLBUTTONDOWN의 HTSYSMENU, HTMAXBUTTON, HTCAPTION, HTMINBUTTON, HTCLOSE를 무시하자.
; 각 버튼의 기능을 따로 구현하는 편이 안전하다.

사례 4. 캡션 영역을 이용하는 경우
; WM_NCRBUTTONDOWN을 무시하자.

로직 쓰레드는 메시지 루프와 분리시키는게 조금 더 안전하다는 ;;
프로세스 목록에서 해당 쓰레드를 찾아내서 Pause 시키는 경우도 고려하는 게 좋다.

728x90

클라이언트 분석을 어렵게 하기 위해 exe 암호화 툴이 필요하다.
써본 건 Asprotect랑 Themida 밖에 없는데...
요새 대세는 Themida 인 듯...

Asprotect는 USER_POLYBUFFER를 통해
특정 영역의 코드에 더미 코드를 집어넣는 방식이었다.

Themida는 분석하기 더 어렵게하기 위해 다음과 같은 기능을 추가로 제공한다.

## VM Macro
; VM_START ~ VM_END
; SecureEngine VM에서 코드 실행
 * 주의
; iteration 피할 것
; switch 동작 안할 수 있음
; exception 동작 안할 수 있음

## VM Macro with v level
; VM_START_WITHLEVEL(x) ~ VM_END
; v level : 0 ~ 255
; 20 이상은 vm 코드가 커질 우려가 있음
; Dynamic Opcodes 옵션이 켜져 있어야 함
; for harder

## CodeReplace
; CODEREPLACE_START ~ CODEREPLACE_END
; application code를 garbage code로 변경
; 실제 코드는 secure engine 코드에 encrypt 해서 저장
; 실행될 때 dynamic하게 decrypt해서 실행

## Encode
; ENCODE_START ~ ENCODE_END
; ENCODE_START에서 코드 블럭 decrypt
; ENCODE_END에서 코드 블럭 encrypt
; ENCODE_END가 불리지 않고 return하지 않도록 주의

## Clear
; CLEAR_START ~ CLEAR_END
; 어플리케이션에서 한번 실행되는 코드에 사용
; 사용후 삭제됨

## Unprotected
; UNPROTECTED_START ~ UNPROTECTED_END
; unprotect 상태에서만 실행될 수 있는 코드
; unprotect된 코드가 릴리즈되는 실수를 막기 위해 사용

가장 이상적인 부분은 모든 것을 서버에서 처리하도록 해야하는데...
현실상 그럴 수 없으니 위와 같은 툴로 분석하게 힘들게라도 해서
해커를 귀찮게 해야한다. ㅡㅜ



728x90

UAC 관련해서 2003에서는 Resource에 다음과 같은 manifest를 추가해줘야 했는데...

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.1.0.0"
    processorArchitecture="x86"
    name="testApp"
    type="win32"
/>
<description>Test App</description>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel
                level="requireAdministrator"
                uiAccess="false"
            />
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

2008에서는 프로젝트 속성에 추가되었다.
Property > Configuration Properties > Linker > Manifest File


728x90
아래와 같은 알수없는 LIBCMTD.lib와 LIBCMT.lib의 충돌

LIBCMTD.lib(dbgheap.obj) : error LNK2005: __heap_alloc already defined in LIBCMT.lib(malloc.obj) LIBCMTD.lib(dbgheap.obj) : error LNK2005: __recalloc already defined in LIBCMT.lib(recalloc.obj) LIBCMTD.lib(dbgheap.obj) : error LNK2005: __msize already defined in LIBCMT.lib(msize.obj)

STL 때문인 것 처럼 보이고 해결책은 /NODEFAULTLIB:LIBCMT 라고 함
좀 야매인거 같아서 찜찜하다능

참조 : http://kign.blogspot.com/2008_06_01_archive.html : Visual Studio Tricks
728x90

OS 버젼을 확인할 때 쓰던 _winmajor, _winminor 가 사라졌다.
이제는 GetVersionEx를 써야할 시간

728x90
000X:00ABCDEF [function description] [memory address] X X [obj file name]

특정 주소의 memory address를 Ctrl + F로 찾아서 function description을 보면 된다능

자세한 map file 설명은 http://kuaaan.tistory.com/102 참조
728x90
SQL Server 2008로 오면서 사라진 기능이 몇 개 있는데...
로그를 지우는데 사용했던 'backup log with no_log'가 사라졌다.
디스크 용량 때문에 로그 지우고 로그 파일 크기를 줄이는 식으로 처리하고 있었는데 난감 난감.

SQL Server 2008에서는 복구 모델을 '단순 복구 모델'로 바꾸는 식으로 처리해야 한다는...

* SQL Server 2000
backup log database_name with no_log -- 트랜잭션 로그 삭제
Go
use database_name
Go
dbcc shrinkfile (database_log, 0) -- 트랜잭션 로그 파일 줄이기
Go

* SQL Server 2008
alter database database_name set recovery simple -- 단순 복구 모델로
Go
use database_name
Go
dbcc shrinkfile (database_log, 0) -- 트랜잭션 로그 파일 줄이기
Go
alter database database_name set recovery full -- 기존 복구 모델로
Go

http://msdn.microsoft.com/ko-kr/library/ms144262.aspx

728x90

+ Recent posts