블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

파이썬 배우는 기념으로 만든 소스(.h, .cpp)의 줄 수 세는 프로그램.
현재 디렉토리를 포함한 모든 하위디렉토리에 속한 소스의 줄 수를 보여준다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# -*-coding:utf-8-*-
import os
 
def count_line(filename):
    file    = open(filename)
    line_num    = 0
    while (file.readline()):
        line_num    += 1
    return line_num
 
def count_code_lines(dirname):
    file_line_list  = []
    filenames   = os.listdir(dirname)
    for filename in filenames:
        filename    = dirname + '\\' + filename
        if (os.path.isdir(filename)):
            file_line_list  += count_code_lines(filename)
        else:
            if ((len(filename) > len('.h') and filename[-2:] == '.h') or
                (len(filename) > len('.cpp') and filename[-4:] == '.cpp')):
                file_line_list.append((filename, count_line(filename)))
    return file_line_list
 
def get_dir_list(path):
    dir_list    = []
    if (os.path.isdir(path)):
        dir_list.append(path)
 
    header  = os.path.split(path)[0]
    if (header == ''):
        return dir_list
    else:
        dir_list    += get_dir_list(header)
 
    return dir_list
 
file_line_list  = count_code_lines('.')
 
dir_line_dict   = {}
 
for filename, line_num in file_line_list:
    dir_list    = get_dir_list(filename)
    for dir in dir_list:
        if (not dir in dir_line_dict):
            dir_line_dict[dir]  = 0
        dir_line_dict[dir]  = dir_line_dict[dir] + line_num
 
dirnames    = dir_line_dict.keys()
dirnames.sort()
 
for dirname in dirnames:
    print "%10d %s"%(dir_line_dict[dirname], dirname)

출력예 : 뭐, 대략 이런식

8388 .
 409 .\MemoryPool
 136 .\MemoryPool\profiler
 862 .\PicTest
 687 .\SimpleMFC
 403 .\SimpleMFC2
1627 .\SimpleTest
 142 .\SimpleTest2
  59 .\UDPClient
 155 .\UDPServer
 963 .\WebViewer
 112 .\cliWrap
  19 .\cppLib
2950 .\rvo_test
 136 .\rvo_test\profiler
 472 .\rvo_test\srv_cntr
2114 .\rvo_test\sti



반응형
Posted by blueasa
, |

높이맵 같은데서 늘어난 텍스쳐를 보정해줄 수 있는 테크닉. 정리 차원에서 포스팅 해봅니다. 
GPU Gems 3권에도 관련 내용이 수록되어있고, GPU Gems 3은 번역서도 나와있으니 참고해보면 될 듯.


nVidia GPU Gems 3 : http://http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html
( 중후반 쯤의 1.5 Texturing and Shading 세션 )



GameDev.net : http://www.gamedev.net/blog/584/entry-2249767-tri-planar-textures-and-bump-mapping/
GameDev.net : http://www.gamedev.net/blog/979/entry-2250761-triplanar-texturing-and-normal-mapping/



반응형
Posted by blueasa
, |


Non-Blocking Algorithm.pdf



링크 : http://mango.dyndns.biz/data/Document/Non-Blocking%20Algorithm.pdf

반응형

'Programming > Algorithm' 카테고리의 다른 글

유도탄  (0) 2011.05.04
알고리즘의 설계  (0) 2010.04.14
Posted by blueasa
, |


링크 : http://curriq.com/course/18


스타트업이든 벤처든 기업에서든 이공대생, 특히 이공대 출신 개발자와 함께 일을 하는 문과생이 알아두면 좋을 법한 지침이나 행동 방향을 대략적으로 정리. 

우리 나라의 교육 과정이 이과와 문과를 일찍부터 나누다보니 여자와 남자의 사고방식과 행동 패턴이 다르듯 이공대 출신과 문과(상경출신 포함)출신의 사고방식과 행동 양식이 다른 경우가 많다. 특히 프로그램 관련 '개발'이라는 것을 전혀 경험하지 못한 혹은 매우 어설프게 경험한 문과생은 상황이 꽤 심각한 지경. 
그래서 생각나는대로 썼다. 오해하진 말자. 서로를 더 잘 이해하자고 쓰는 것이니. 

참고로 난 개발 안 한지 3년은 되었고 지금은 인터넷 서비스를 기획하는 스타트업 하는 사람이다. 개발자 정서를 잘 이해할 뿐 개발자는 아니다.



STEP1경험한다고 다 아는 것은 아니지만, 경험하지 못하면 절대 모르는 것도 있다.

직관이라는 것과 관련한 고어군님의 좋은 글이 있다. http://blog.gorekun.com/1540 하고자 하는 말은 개발을 경험하지 못한, 혹은 어설프게 경험한(이공대 출신 입장에서는 입문도 하지 못한 수준) 문과생은 '개발'이라는 것을 제대로 이해하지 못할 확률이 매우 높다는 것이다. 개발자의 정서나 언어, 사고방식, 행동양식을 오해하거나 이상한 편견을 갖고 있을 가능성도 높다. 거꾸로, 이과를 나온 이공대 출신의 개발자는 문과 출신의 언어나 사고방식, 행동을 비합리적, 비효율적, 비논리적이라고 폄훼하는 경향이 좀 있다. 이것은 본인도 그렇게 느끼고 있다는 고백과 함께 문과출신이 '성급한 일반화'라고 얘기할 정도로 적은 비율은 아니라는 것을 경험을 바탕으로 밝혀둔다. 이하, 개발 경험이 아예 없거나 입문도 안 되는 수준의 문과 출신이 참고하면 좋을 사항들이다. 어디까지나 대체적으로 이럴 가능성이 높다는 얘기다. 참고: 컴퓨터를 잘 다루는 것과 개발 경험이 있는 것은 다른 문제다. 이미 만들어진 망치를 잘 쓰는 사람과 망치를 만드는 사람의 차이라고 생각하면 된다. Thanks: 오타 수정에 도움을 주신 Minhoryang님 감사합니다:-)




STEP2용어의 뜻을 제대로 이해하고 정확히 사용하려고 애써라 - 오해가 줄어든다.

스스로 잘 이해하지 못하는 용어를 써서 지시/회의 하거나, 처음 듣는 전문용어가 나올 때 아는 척하고 넘어가면 오해가 늘어나고 일이 꼬인다. 업계에서 쓰는 전문 용어는 그 뜻을 정확히 이해하려고 노력하고, 스스로 이해했다고 생각한 용어만 써서 대화하는 것이 좋다. 그래야 무시당하지 않고(대놓고 무시하진 않지만 잘 모르고 떠든다고 생각되면 발언 자체에 무게를 두지 않게된다), 오해해서 벌어지는 오버헤드도 줄일 수 있다. 웹개발과 관련된 일을 하는 문과 출신을 위한 참고 사항: http://www.slideshare.net/yongho/ss-11966428 웹개발과 관련해서 개발자가 쓰는 용어를 이해하면 좀 수월하다. 웹이 아닌 다른 분야도 마찬가지다. 이공대에서 배우는 것은 애매한 것이 별로 없다. 상황에 따라 이렇게도 쓰이고 저렇게도 쓰이는 용어는 없다고 보면 된다. 또는 같은 용어를 업계에 있는 사람이 서로 상이하게 정의하거나 새롭게 해석해서 쓰는 경우도 없다. 예를 들어 parallel processing과 concurrent processing 은 완전히 다른 얘기다. 영어 좀 한다고 사전적 의미로 '대충' 이해하면 안 되는 거다. 컴파일러와 인터프리터는 문과 출신이 볼 때는 그게 그거 아니냐고 할 수 있지만 이건 그냥 다른 거다. Replication도 copy보다 멋있어 보여서 쓰는 용어가 아닌거다. Javascript는 Java에 뭔가 더해진 것이 아니다. Shell은 조개 껍데기를 의미하는 것이 아니고, console은 물리적으로 존재하지 않을 수도 있으며, terminal은 정거장이 아니다. 각 분야마다 사전적인 의미와 다른 의미로 쓰이는 '미리 약속된 정의', 즉 터미놀로지(용어)가 있다. 이를 그들만의 '외계어'로 치부하지 말고 공부해라.



STEP3집중할 때 건드리지 마라.

특히, 코딩하고 있거나 뭔가 개발 문서나 매뉴얼, 책을 찾거나 읽고 있을 때 건드리지 마라. 진짜 어지간히 급하거나 중요한 일 아니면 냅둬라. 일단 집중에 성공하면 생산성이 엄청나게 향상된다. 거꾸로 집중하는 것을 방해하면 '다음에 집중할 마음이 생기기 전까지' 계속 딴짓을 할 가능성이 높아진다. 실제 개발자의 경험담도 참고 하고 http://kimeunseok.com/archives/51 왜 오피스에서 일이 안 되는지, 매니저와 미팅이 문제라고 주장하는 TEDx의 강연도 보고. http://www.ted.com/talks/lang/ko/jason_fried_why_work_doesn_t_happen_at_work.html 집중의 문제는 모두의 문제긴 하지만, 특별히 강조하는 이유는 '프로그래밍' 하는 사람들의 생산성은 '몰입'의 수준과 빈도에 매우 큰 영향을 받기 때문에 그렇다. 진짜로 제대로 집중하면 시간가는 것을 모르고 눈이나 허리 아픈 것도 모른다. '쉬엄 쉬엄 하라'는 말도 때와 장소가 있다. 괜히 신경써 준다고 하는 말이 훼방을 놓는 일일 수 있다. 모니터를 노려보며 코딩을 하고 있거나 매뉴얼/튜토리얼로 추정되는 문서를 보고 있을 때는 좀 냅둬라. (집중하는 척하는 거 아니냐고? 관심법이라도 있는거 아니면 그냥 냅둬라)



STEP4그들이 '쉽게 할 수 있다'라고 말하는 것은 실제로 '쉽다'는 뜻이 아니다.

'필요한 조건이 모두 갖춰져 있으면'이라는 말이 생략된 경우가 많다. 이것은 '내가 이와 관련된 논문이나 매뉴얼을 좀 읽어보고, 테스트할 시간을 좀 가져서 감을 잡는다면' 이라거나 '다른 일 없이 당분간 딱 이것만 하게 해 준다면' 이라거나 '여기서 추가되거나 중간에 수정되지 않는다면' 이라거나 '이걸 잘 아는 사람에게 물어볼 수 있다면' 이라거나 '마침 그와 관련된 책을 사놨는데 책 볼 시간을 좀 준다면' 이라거나 상황에 따라 다양한 말이 생략되어 있는 경우가 많다. 그들은 기본적으로 자존심이 있고, 잘 하는 것이 문제지 해서 안 되는 것은 별로 없다고 생각하는 경향이 있어서 '어렵지 않다'라는 말을 입버릇처럼 하곤 한다. 그렇게 말한다고 해서 실제로 난이도가 낮거나 쉽다는 뜻은 아니다. 그리고 그 일을 몇 시간, 혹은 며칠만에 끝낼 수 있다는 말도 아니다. 예전에 비슷한 것을 해 봤거나, 비슷하게 했던 사람을 안다거나, 비슷하게 한 것을 어디서 슬쩍 본 것 만으로도 그렇게 말할 수 있다. 쉽게 할 수 있다고 한다면 어떤 조건에서 얼마나 걸릴지 확인하도록 하자. 추가 팁: 간혹, '쉽다'고 말하고 정말로 '쉽게' 하는 경우가 있다. 그래서 비슷한 일을 '쉽다'고 인식하고 다음 번에도 '쉬운 일'로 간주하는 경우가 있다. 이것이 정말로 '쉬운 일'인지는 그 일을 해낸 사람의 능력과 스키마(배경지식)을 검토한 후에 판단할 일이다.



STEP5이공대생이 '하면 되겠죠'라고 말하는 것은 실제로 하면 된다는 뜻이 아니다.

이들이 말하는 '하면 되겠죠'는 '효율성이나 리소스를 생각하지 않고 어떻게든 되기만 해도 만족한다면' 이라는 말이 생략되어 있다. 주의할 부분은 조금 더 있는데, 이 말을 하는 상황과 어조가 꽤 중요하다. 이 말에는 약간의 빈정거림이나 무시, 혹은 자포자기나 자괴감이 포함되어 있을 확률이 높기 때문이다. 특히 평소에 Step 2의 '용어' 문제가 걸려서 이미 마음속으로 무시하고 있는 사람에게 이런 말을 하는 것이라면 상당한 수준의 경고로 받아들여야 한다. 그걸 어떻게 아냐고? 짧으면 한 두 주, 길면 몇 달간 얼마나 요구/지시 사항이 바뀌었고 결정이 번복되었고 했던 일을 갈아 엎었는지 짚어보면 바보가 아닌 이상 다 알거다.



STEP6생활 패턴이 불규칙한 경우가 많다.

이는 집중력과도 연관되는데, 한 번 빠지면 타임 워프를 하듯 정신 없이 일을 하고, 체력이 받쳐주지 못해서 반나절 이상 죽어있고... 좀비처럼 멍해 있다가 다시 삘받아서 미친듯이 뭔가 하고... 그런 케이스가 많다. (그래서 좋은 개발자는 체력이 좋은 개발자일수도...) 물론 시간 관리가 잘 되는 케이스도 없지 않다. 뽀모도로 ( http://goo.gl/z359p )같은 시간 관리 기법을 쓰거나, 이에 준하는 자신만의 노하우가 있는 경우도 있다. 그리고 많은 개발자가 시간 관리를 잘 하려고 굉장히 애쓴다. 하지만 그런 노력과 별도로 그냥 일 자체가 몰입을 강제해서, 또는 대부분 본인이 어떻게 할 수 없는 마감시간의 심리적 압박 때문에 생활패턴이 불규칙해지는 경우가 더 흔하다. 대부분 집중될 때 일을 몰아서 하는 경향이 있고 집중이 안 되면 하고 싶은 마음이 들 때까지 다른 일을 하는 경우가 많다. 특히 현실 생활에서의 만족도나 하고 있는 일에서 재미가 떨어지면 자연스럽게 게임, 웹툰, 채팅, 각종 게시판 순회 방문, 영화/드라마/애니 감상 등으로 시간을 쓰게 된다. 간혹 인과관계를 거꾸로 해석하는 경우가 있는데, 저런 딴짓을 많이 해서 일을 안 하는 것이 아니라 일이 재미가 없으니까 딴짓을 많이 하는 거다.



STEP7노는 것처럼 보이는 것이 결론적으로는 자기계발인 경우가 자주 있다.

이공대 출신은 대부분 호기심이 왕성해서 뭔가 하나 잡히면 이리저리 가지를 쳐서 스스로 만족할 때까지 탐구하는 성향이 있다. 이것이 일과 조금이라도 관련이 있다면, 이들이 보내는 시간은 일종의 자기계발일 수 있다. 다만, 문외한이 보기에 그것을 판단하는 것이 애매할 수는 있다. 호기심을 해결하는 과정에서 새로운 도구를 익히거나 기술 트렌드를 따라가거나 없던 능력을 얻곤 한다. http://curriq.com/course/21 에서 '흔한 공대생의 생활'에 링크된 글을 몇 개 읽어보자. 위의 글을 읽고 '이게 뭔 쓸데 없는 짓이야' 라고 생각한다면 당신은 이공대 출신 개발자를 전혀 이해하지 못하는 것이나 다름없다. 개발에 몸담았던 사람이라면 '훗, 이 정도는 나도 할 수 있어. 오히려 이렇게 하는 것이 더 좋지' '오홍, 이런 방법도 있군, 이걸 응용하면 이런 짓도 가능하겠어' '헉, 능력자닷. 난 언제 저런 수준이 되지? 부럽다' 이런 호기심과 잉여로움이 개발자에게 꽤 중요하다. 사실 이런 호기심이 없거나 호기심을 해결할 수 있도록 하는 잉여시간/잉여력이 없으면 자기계발을 할 시간이 절대적으로 부족하다. 구글에서 20% 프로젝트 하고 그런 것이 심심해서 하는 거라고 생각하면 곤란하다.



STEP8좋은 개발자 만나면 고마워할 일이지 좋다고 부려먹을 생각만 하면 안 된다.

개발자의 능력은 천차만별이다. 그리고 개발자의 능력은 거짓말이 어렵다. 일당십, 일당백을 하는 능력자가 실제로 존재한다. 머리도 잘 돌아가고, 성격도 좋고, 경험도 많으면서, 절차탁마 하는 고수가 존재한다. 우연히라도 운이 좋아 이런 개발자랑 같이 일하게 되면 고마워하고 서로 만족할만한 결과물을 내려고 해야지 뽑아먹을 생각만 하면 안 된다. 일당십의 능력자를 평범하게 쓰면 기껏해야 2~3인 분의 일을 할 뿐이다. 받들어 모시라는 얘기가 아니라 소모시키지 않도록 해야 한다는 말이다. 잉여시간이 있기 때문에 일당십, 일당백의 능력을 발휘하고 그런 능력을 유지하는 것이다. 잉여시간을 일에 투입한다고 더 많은 일이 처리되진 않는다. 오히려 부족한 자기계발 시간, 마감 스트레스, 잦은 훼방 등으로 효율이 급격하게 떨어질 수 있다. 한 달에 한 사람의 개발자가 할 수 있는 일을 '1 맨먼쓰(M/M)' 이라고 표현한다. 이 말을 만든 사람은 아마 개발이라는 것을 경험하지 못한 사람일 것이다. 덧: M/M(맨먼쓰)는 한 달에 한 사람의 개발자가 할 수 있는 일이 아니라 한 달에 한 사람의 개발자가 투입됨을 나타낸다고 '리소스' 관점에서 지적해 주신 분들이 있었다. 성취한 결과물의 단위를 투입한 자원으로 환산할 때 사용하는 단위라는 것. 하지만 한 사람이 다섯달을 일한 5M/M과 다섯 사람이 한 달을 일한 5M/M이 차이가 없다고 생각하는 '사고방식'을 표현했다는 점에서 여전히 개발자를 이해하지 못한 말이다. '한 달에 한 사람의 개발자가 할 수 있는 일의 양'이라고 표현한 것은 실제로 M/M을 표현하거나 계산할 때 그렇게 생각하는 사람이 많기 때문입니다. 덧2: M/M은 일반적인 용어라 여러 곳에 사용된다. 하고자 한 말은 이 말이 '(소프트웨어) 개발'에는 적합하지 않은 용어라는 것이다. 혹시 오해 없기를!!


반응형
Posted by blueasa
, |

롯데마트에 왔는데 T와이파이존이 공개형과 폐쇠형이 있네요.

1. T wifi zone
이건 뭐 그냥 사용 가능하고

2. T wifi zone-secure
프로그램을 다운 받아서 설치해야 합니다


그럼 2번에 대한 설명 들어 갑니다

1. PC로 www.tworld.co.kr 에 회원 가입 후 로그인 합니다.
2. towrld > 고객센터 > T와이파이존
3. 중간에 보면 


mobileconfig 파일 다운로드 합니다. (PC에 저장된 상태)
4. 파일을 다운 받운후 자기 이메일로 전송 합니다.
5. 아피패드2 에서 이메일 여시고 참부 파일 실행 합니다.






 

6. 끝



출처 : http://blog.naver.com/nanoace1/30115548917

반응형
Posted by blueasa
, |

http://www.tworld.co.kr/html/customer_center/wifi_zone/SKT_EAP_SIM_v01.mobileconfig

해당 링크를 safari로 열면
profile 설치를 진행합니다.

설치버튼을 눌러 설치가 완료되면
곧바로 t wifi zone secure를
usim인증을 통해 사용할 수 있습니다.

단, skt에서는 iOS 4.3이상이 설치된
iPad 2 3g, iPhone 4에 대해서만
이 profile 사용이 가능하다고 하니
참고하시기 바랍니다.

접속시 skt usim이 장착되어 있어야 하며
skt 데이터쉐어링 usim도 사용가능합니다.





출처 : http://kmug.co.kr/board/view.php?id=itip&no=298

짧은 주소 : http://j.mp/viOP9B

반응형
Posted by blueasa
, |

오류코드

Programming/Python / 2012. 5. 10. 15:53

1) 오류코드 : SyntaxError: Non-ASCII character '\xc7' in file 
2) 원인 : 문자 인코딩 오류로 한글이 코드에 들어갈대 생기는 문제, 링크 따라가면 해결 방법 나옴.
3) 해결 : 소스 맨 위에 다음 문장 추가,
          - 한글 해결  : # -*- coding:cp949 -*-
          - unicode 해결 : # -*- coding:utf-8 -*-

 

 

1) 오류코드 : AttributeError: debugger instance has no attribute 'open_process'
2) 원인 : '해당명' 인스턴스(객체)가 없다는 오류, 저 함수 open_process가 없다는 내용이다.
3) 해결 : 오류난 줄로 가서 해당 함수명을 조사해 보면..  대부분 오타이다!! ㅋ

 

 

 

1) 오류코드 : NameError: global name 'DEBUG_EVENT' is not defined
2) 원인 : 해당 객체가 정의되지 않았다.
3) 해결 : 해당 내용이 생성 및 정의되어 있는지 확인해 본다.



[출처] Python 오류코드|작성자 msBang

반응형
Posted by blueasa
, |

# 문자열 포맷 코드
%s 문자열 (String)
%c 문자 한개 (character)
%d 정수 (Integer)
%f 부동소수 (floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 '%s' 자체)

 


# 자주 사용되는 슬라이싱 예 - 문자열 자르기
>>> a = "20110406Clean"
>>> date = a[:8]
>>> weahter = a[8:]
>>> date
'20110406'
>>> weather
'Clean'

 


# 2개 이상의 값을 치환 - 문자열 포매팅(Formatting)
>>> number = 10
>>> day = "three"
>>> print "I eat %d apples. so I was sick for %s days." % (number, day)
I eat 10 apples. so I was sick for three days.

 


# 문자 갯수 세기(count)
>>> a = "hobby"
>>> a.count('b')
2

 


# 문자 위치 알려주기1(find)
>>> a = "Python is best choice"
>>> a.find('b')   // 존재하지 않으면 -1 반환
10

 

 

# 문자 위치 알려구지2(index)
>>> a = "Life is too short"
>>> a.index('t')
8

 


# 문자열 삽입(join)
>>> a = ","
>>> a.join('abcd') // 문자열의 각각의 문자사이에 변수 a의 값을 삽입
'a,b,c,d'

 


# 왼쪽 공백 지우기(lstrip)
>>> a = " hi"
>>> a.lstrip()
'hi'

 

 

# 오른쪽 공백 지우기(rstrip)
>>> a = "hi "
>>> a.rstrip()
'hi'

 

 

# 양쪽 공백 지우기(strip)
>>> a = " hi "
>>> a.strip()
'hi'

 


# 문자열 바꾸기(replace)
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'

 


# 문자열 나누기 (split) - 결과는 list에 저장됨
>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']

>>> a = "a:b:c:d"
>>> a.split(':')
['a', 'b', 'c', 'd']



[출처] 파이썬 팁) 문자열 다루기|작성자 msBang

반응형
Posted by blueasa
, |

Q. C에서 파이썬 사용이 가능한가?

 

예. 가능합니다. 
파이썬에서 C프로그램을 쓰는 것을 extending이라고 부르고, C프로그램에서 파이썬을 쓰는 것을 embedding이라고 부릅니다. 
파이썬 매뉴얼에 관련 내용이 포함되어 있습니다.

 

http://docs.python.org/ext/ext.html 
http://docs.python.org/ext/embedding.html
_________________
http://twitter.com/hyeshik



[출처] C에서 파이썬 사용이 가능한가?|작성자 msBang

반응형
Posted by blueasa
, |

더미다(Themida) 테스트

 

Themida 실행

 

디버거(올리디버거 등)가 미리 실행되어 있으면 더미다 실행안됨

 

 

Protection Options (보호 옵션)

 

▨ Anti-Debugger Detection

보호된 어플리케이션에서 anti-debugger를 발견할 수 있다. "Ultra"로 설정시 바이러스 감염이나 루트킷 설치여부, Windows OS 여부 확인 가능

 

▨ Anti Dumpers

보호된 어플리케이션에게 가장 위험한 툴 중에 하나는 메모리덤퍼이며, 이 옵션은 메모리 덤핑을 막는다.

 

▨ Themida command line

Themida user interface에서 옵션 내용을 저장하면 .tmd 파일이 생성됨, 명령줄에서 다음 내용 실행

Themida /protect YourProjectFile.tmd

자신의 build system에서 위 내용을 bat 파일로 작성하여 자동화 시키면 됨

 

 

 

 

 

 

 

 

  

 

 

▨ Protection Options > When Debugger Found 적용 테스트

 

1) Display Message 옵션 적용시

 

 

디버거가 실행 중이면 다음 메시지를 출력하고 프로세스는 실행되지 않는다.

 

 

 

2) Exit Silently 옵션 적용시

 

 

디버거가 실행 중이면 옵션 이름처럼 소리없이 조용히 프로세스(패킹된 자기자신)를 종료한다.

 

 

3) Crash Application 옵션 적용시

 

 

디버거가 실행 중이면 Exit Silently 옵션가 같이 프로세스가 자동 종료된다.

 

 

 

▨ 디버거 탐지 제외

Protection Options > Anti-Debugger Detection > Disabled

 

 

위 옵션을 주면 디버거가 실행 중이더라도 패킹된 파일이 실행된다.

 

 

▨ VMware/Virtual PC에서 실행 가능하게 설정

Protection Options > VMWare/Virtual PC > Compatible 체크 (체크시 VM환경에서 실행 가능)

 

 

체크를 해제하면 VM환경에서 실행이 안되고 다음 메시지 뜸

 

 

 

 

 

▨ Command Line을 이용한 자동 패킹

 

테스트 파일 준비

 

 

 

Themida에서 기본 옵션 조금 변경하고 프로젝트 저장하면 같은 폴더에 .tmd 파일과 ._ini 파일 생성됨

 

 

옵션값을 조금씩 바꿔가며 프로젝트 저장하여 ._ini 파일을 여러 개 생성해서 다양하게 옵션 적용 가능



[출처] Themida 실행압축(Packing) 테스트|작성자 msBang

반응형

'Utility > Themida' 카테고리의 다른 글

[Packer/Protector] Themida  (0) 2012.05.10
Posted by blueasa
, |