윈도우 도움말에 있네 ㅋㅋㅋ
<, >, |, &, ^ 문자는 특수 명령 셸 문자로 이스케이프 문자(^) 다음에 와야 하고 string으로 사용될 때는 따옴표로 묶여야 합니다(예: "StringContaining&Symbol"). 따옴표로 특수 문자를 포함한 문자열을 묶는 경우, 따옴표를 환경 변수 값의 일부로 설정해야 합니다.
<, >, |, &, ^ 문자는 특수 명령 셸 문자로 이스케이프 문자(^) 다음에 와야 하고 string으로 사용될 때는 따옴표로 묶여야 합니다(예: "StringContaining&Symbol"). 따옴표로 특수 문자를 포함한 문자열을 묶는 경우, 따옴표를 환경 변수 값의 일부로 설정해야 합니다.
NSIS 사용 중에 다음과 같은 메시지가 뜰 때가 있다.
NSIS error
error launching installer
파일이 깨졌거나 등 다양한 이유가 있을 수 있지만...
설치된 OS가 사용자의 '국가 및 언어 옵션 > 고급'에 설정된
'유니코드를 지원하지 않는 프로그램용 언어'가 지원하지 않을 경우도 있다.
해당 프로그램이 윈도우2003 지원하지 않는 줄 알고 개삽질했네 ㅡㅜ
클라이언트 분석을 어렵게 하기 위해 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된 코드가 릴리즈되는 실수를 막기 위해 사용
가장 이상적인 부분은 모든 것을 서버에서 처리하도록 해야하는데...
현실상 그럴 수 없으니 위와 같은 툴로 분석하게 힘들게라도 해서
해커를 귀찮게 해야한다. ㅡㅜ
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
OS 버젼을 확인할 때 쓰던 _winmajor, _winminor 가 사라졌다.
이제는 GetVersionEx를 써야할 시간