'분류 전체보기'에 해당되는 글 142건

  1. 2010.09.18 군대에서는 시간이 잘 안가는 이유 2
  2. 2010.09.07 DLL Injection 을 이용한 Win32 API Hooking (2)
  3. 2010.09.07 DLL Injection 을 이용한 Win32 API Hooking (1)
  4. 2010.09.06 리겜 컨트롤러 제작에 들어갑니다. 1
  5. 2010.09.02 라인 트레이서 중간 점검
  6. 2010.09.01 기절ㅋ
  7. 2010.08.20 참 난감한 상황입니다. 1
  8. 2010.08.19 MS Visual Studio Macro 에서 h 과 cpp 파일간의 이동
  9. 2010.08.17 안되네...
  10. 2010.08.16 projecteuler.net : Problem 25
  11. 2010.08.13 휴 한자능력검정시험 준비 사람이 피폐해진다. 2
  12. 2010.08.10 어휴 답답해
  13. 2010.07.30 어느 정도... 윤곽을 보이네요.
  14. 2010.07.27 이스케이프 문자와 기타 반복자
  15. 2010.07.26 연애 시뮬레이션

군대에서는 시간이 잘 안가는 이유

잡담 2010. 9. 18. 15:44
나도 그랬고 군대간 동생, 친구들이 시간 안간다고 징징댄다.

군대에서는 시간이 잘 안간다고 한다. 자기가 싫어하는 곳에서는 시간이 잘 안가는 건지 알았는데

꼭 그런건만은 아닌거 같다. 막내 레벨일 때 청소도구 챙기고, 물떠오고, 식당청소 도맡아서 하고, 빨래도 하고

설거지도 하고 아침에 일어나면 눈치보면서 침구류 미친듯이 빨리 개고 누구보다 빠르게 나가고 잡일을 도맡아서 하면 시간이 잘 가는거 보니 .. 내 생각은 생각하는 시간이 길어질 수록 시간은 더디게 가는거 같다.

군대 특성상 조금의 변화는 있을지언정 거의 똑같은 일상의 반복이기 때문에 특정 짬을 먹으면 그 이후로는 시간이 멈춰있는듯한 느낌이 든다. 보통 상병쯤 되면 정신병 걸린다. 매일 있는 근무를 나가면 처음에는 긴장해서 근무를 서지만 근무가 슬슬 익숙해질 때 쯤 되면 딴 생각만 한다. 나가면 뭐 해야지. 휴가나왔다던 친구는 뭐하고 지낼까. 휴가 나가면 이거 해야지. 저거 해야지. 휴가 나가서 주머니에 손꼽고 싶다. 저 하늘에 떠 있는 별은 무슨 별일까. 궁금하다. 하늘보는 책사서 해볼까. 여긴 별이 셀 수 없이 많다. 전역해서도 이 별들을 볼 수 있을까. 복학하면 어떠어떠한 계획을 세워서 이걸 꾸준히 실천하면서 취미생활도 알차게... 이러한 별 잡생각을 매일 2시간씩 한다. 거기다가 무슨 작업거리가 생기거나 무슨 사건이 생기면 또 짜증이 난다. 좆같은 군대 빨리 나가든지 해야지라는 생각.

한마디로 안에 있을 땐 밖에 있을 때 보다 좋은게 하나도 없다는거. 자고 싶을 때 못 자고 쉬고 싶을 때 못하고 공부하고 싶을 때 못하고 먹고 싶은거 못먹고.

이렇게 혼자있는 시간과 공간속에서 어설픈 인간관계는 떨어져나가더라. 군대에서도 연락되는 사람들이 가까운 사람이라는걸 느꼈었음.

최근 일주일동안 군대간 친구들한테 어택을 많이 받았는데 딱해서 글 한번 써봄.

'잡담' 카테고리의 다른 글

물리 8th solution  (0) 2010.10.17
방학 때 까지 인터넷 활동은 잠시 중단...  (1) 2010.09.24
리겜 컨트롤러 제작에 들어갑니다.  (1) 2010.09.06
기절ㅋ  (0) 2010.09.01
참 난감한 상황입니다.  (1) 2010.08.20
:

DLL Injection 을 이용한 Win32 API Hooking (2)

컴퓨터 이야기/Reverse Engineering 2010. 9. 7. 02:22

이전 글과 이어서 이번엔 그냥 단순히

다른 프로세스에 DLL 파일을 집어넣는 작업을 해보겠습니다.

DLL 파일은 아무 DLL 파일이든지 상관없으니까


#include <windows.h>
#define MB_OUT MB_OK
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
 HANDLE hThread = NULL;
 switch( fdwReason )
 {
  case DLL_PROCESS_ATTACH :
   MessageBoxA(0, "dll 진입", "dll 진입", MB_OUT);
   break;
 }
 return TRUE;
}
 

DLL 프로젝트로 다음과 같은 코드를 넣고 컴파일을 합니다. 여기서 나온 파일을 dllproject.dll 라고 치고
c:\dllproject.dll 로 옮깁니다.

이제 이 dll 파일을 넣을 타겟 프로그램을 설정하여야 하는데. 이걸로 합니다.

DLL Injection 의 개요는 다음과 같습니다.
#1 타겟프로그램의 적당한 곳에 메모리를 할당한 후 dll 경로를 저장합니다. ("c:\\dllproject.dll" 라는 문자열)
#2 메모리에 맵핑되어있는 kernel32.dll 의 LoadLibraryA 함수의 주소를 구합니다.
#3 타겟 프로그램에 스레드를 생성시켜 LoadLibraryA 함수의 인자로 dll 경로가 전달되게 합니다.
--<1> 스레드를 생성시킬 때 스레드 함수 주소로 #2 에서 구한 LoadLibraryA 의 주소를 넣습니다.
--<2> 인자로 타겟프로그램안에 저장되어있는 "c:\\dllproject.dll" 라는 문자열을 인자로 넘깁니다.

코드로 보면 확실해집니다.

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

// DLL Inject : 다른 프로세스의 주소 공간에 특정 DLL을 넣는다.
void DllInject(DWORD pid, char* path); // processid 와 dll 경로를 받음
 
int main()
{

 HWND hNotepad = FindWindow("ThunderRT6FormDC", 0); // "ThunderRT6FormDC" 인 클래스를 찾아서 ~
 DWORD pid;
 GetWindowThreadProcessId(hNotepad, &pid); // hWnd 로 부터 processid 얻음.
 DllInject(pid, "C:\\dllproject.dll");
 return 0;
}


void DllInject(DWORD pid, char* path)
{
//#1 과정 진행
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
 void* dllpath = VirtualAllocEx(hProcess, 0, // 원하는 주소(0은 알아서 해달라)
  _tcslen(path)+1, // 크기
  MEM_RESERVE | MEM_COMMIT, // 예약과 동시 확정
  PAGE_READWRITE);
 // 이제 DLL의 경로를 담을 문자열 복사
 // WriteProcessMemory()는 다른 프로세스 주소 공간에 무언가를 쓸 수 있다.
 // 타겟의 주소공간에 메모리를 할당하고, DLL의 경로를 복사해준다.
 // VirtualAlloc은 가상 메모리를 할당하는 API이지만, Ex가 붙으면 다른 프로세스의 주소공간을 할당할 수 있다.
 DWORD len;
 WriteProcessMemory(hProcess, dllpath, path, _tcslen(path)+1, &len);
//#1 과정 끝

//#2 과정 진행
 HMODULE hDll = GetModuleHandle("kernel32.dll"); // kernel32.dll 모듈의 핸들값을 GetModuleHandle로 구한다.
 PTHREAD_START_ROUTINE loadlibthread = (PTHREAD_START_ROUTINE)GetProcAddress(hDll, "LoadLibraryA");
//#2 과정 끝

//#3 과정 진행
 // 타겟에 새로운 스레드를 만든다.
 // CreateRemoteThread는 다른 프로세스에 스레드를 생성시킨다.
 HANDLE hThread = CreateRemoteThread(hProcess, // 타겟 핸들
  0, 0, 
  loadlibthread, dllpath, // 함수, 인자
  0, 0);
 CloseHandle(hThread);
 CloseHandle(hProcess);
//#3 과정 끝
}


네 c:\dllproject.dll 위치시키고 프로그램을 실행시켰더니 예상대로 이렇게 뜹니다.





그리고 Process Explorer 로 확인해본 결과 메모리에 이제 dllproject.dll 가 떠있군요.

이로써 Win32 API Hooking 을 하기 위한 기초작업은 다 된겁니다.
:

DLL Injection 을 이용한 Win32 API Hooking (1)

컴퓨터 이야기/Reverse Engineering 2010. 9. 7. 01:55

후킹은 원래 진행되어야하는 프로세스를 중간에 낚아채서 내가 원하는 코드를 집어넣는 작업을 말합니다.      
        
다른 프로그램에서 MessageBox 를 호출 하는 순간을 잡을 수 있다. .!! 흥분되지 않습니까?
        
        
Win32 API 하에서 다른 프로세스나 전역적으로 호출되는 API 함수를 후킹하는것을        
        
API Hooking 이라고 함. 어디에 어떻게 쓰이느냐. 사람마다 응용하기 나름인데 디버깅 관점에서 보면         
API 함수로 호출되는 파라메터의 값을 뿌려줄 수도 있고,        
리버싱에서 보면 중간에 추가적인 기능을 다른 프로그램에 삽입할 수 있다는 것.        
        
전체적인 구조를 보면 MessageBox 가 호출이 되면 my.dll 에 있는 MyMessageBox 가 호출 되고         
MyMessageBox 의 형태는         
MyMessageBox { 내가 조작해야될 명령들, ..., call kernel32!MessageBox }         
같은 형태가 될거고         
MyMessageBox 가 리턴되면서 원래 있던 프로그램으로 입싹 닦고 유유히 사라지는거죠.        
        
API Hooking 하는 방법은 여러가지 방법이 있지만 저는 일반적인 방법인         
실행중인 프로세스의  DLL Injection 을 이용하여 Import Table 을 조작해 API Hooking 을 해보려고 합니다.         
        
다음 글에서는 기본적인 API Hooking 은 제외한 DLL injection 하는데 까지만 해보겠습니다.
:

리겜 컨트롤러 제작에 들어갑니다.

잡담 2010. 9. 6. 08:38

결제수단은행명을 클릭하시면 입금 계좌번호를확인하실수 있습니다.

          
상품 옵션 원가 할인 판매가 적립금 수량 거래상태 배송업체 송장번호
W12-A(LOCK)-노랑 780원 0원 780원 0원 1 주문접수  
AVRMEGA128모듈(AM-128PRO) 20,000원 0원 20,000원 0원 1 주문접수  
PBS-101(LOCK)-빨강 400원 0원 400원 0원 1 주문접수  
NT-USB2UART 5,900원 0원 5,900원 0원 1 주문접수  

       
상품 옵션 원가 할인 판매가 적립금 수량 거래상태 배송업체 송장번호
LP-13-13(TS2-2A)-회색 800원 0원 800원 0원 1 주문접수  
브레드보드 WBU-301 6,000원 0원 6,000원 0원 1 주문접수  
3파이 고휘도 LED 반투명 (빨간색) 60원 0원 60원 0원 10 주문접수  
LP-13-13(TS2-2A)-빨강 800원 0원 800원 0원 1 주문접수

이런건 처음 해보지만 -_-;;
 잘될려나요

'잡담' 카테고리의 다른 글

방학 때 까지 인터넷 활동은 잠시 중단...  (1) 2010.09.24
군대에서는 시간이 잘 안가는 이유  (2) 2010.09.18
기절ㅋ  (0) 2010.09.01
참 난감한 상황입니다.  (1) 2010.08.20
안되네...  (0) 2010.08.17
:

라인 트레이서 중간 점검

컴퓨터 이야기 2010. 9. 2. 01:54


김창희 - 하드웨어
한경수 - 프로그래밍

        
알디 : 잘가네, 좀 어설프긴 해도        
친구 : 지금 여기서 좀만 다듬으면 되겠다        
알디 : 커브돌 때 좀 더 빨리 돌아야 하나? 빨리 돌면 더 안되지 않나?        
친구 : 그치        
친구 : 이제 길만 외면 된다        
알디 : 건전지잡고 따라가야되는건 쫌..ㅋ        
친구 : 난 이거 최고 마지막은 무선으로 되야한다 전기공급이. 무선으로 된다든데 그게         
알디 : 야 반대방향으로 돌아보자.         
친구 : 아 또 안되노 아 ~        
알디 : 아 왜 이래 어?        
친구 : 건전지 묶있다        
알디 : 어~ 꺼라꺼라 ㅇㅋㅇㅋ        
        
        
부끄러운 목소리        
        
        
        
하드웨어 제어가 생각보다 어렵구나... 소프트웨어만 해서 이런건 생소했음..    
:

기절ㅋ

잡담 2010. 9. 1. 05:05

D3DXSPRITE9 쓰다가 DIRECT3DDEVICE9 버텍스 기반으로 바꿨는데 화면 저렇게 나와서 충격 먹어서 스샷 했음
 -_-;;;;
:

참 난감한 상황입니다.

잡담 2010. 8. 20. 09:22


//playsong.h
#include "rhythmnerd.h"
class PlaySong { ... RhythmNerd rn; ...}

//rhythmnerd.h
#include "test.h"

//test.h
#include "playsong.h"

..... 순환 참조 -_-

RhythmNerd 를 포인터로 만들어버릴까

'잡담' 카테고리의 다른 글

리겜 컨트롤러 제작에 들어갑니다.  (1) 2010.09.06
기절ㅋ  (0) 2010.09.01
안되네...  (0) 2010.08.17
휴 한자능력검정시험 준비 사람이 피폐해진다.  (2) 2010.08.13
어휴 답답해  (0) 2010.08.10
:

MS Visual Studio Macro 에서 h 과 cpp 파일간의 이동

컴퓨터 이야기/C++ 2010. 8. 19. 16:04


매크로를 쓰면 된다(ALT+F11)


Public Module SwitchCHPP
    Sub OpenPartnerFile()
        Dim filename As String
        Dim partnerFilename As String
        filename = DTE.ActiveDocument.FullName
        If (filename.EndsWith(".h")) Then
            partnerFilename = filename.Substring(0, filename.Length() - 2) + ".cpp"
        End If
        If (filename.EndsWith(".cpp")) Then
            partnerFilename = filename.Substring(0, filename.Length() - 4) + ".h"
        End If
        DTE.ItemOperations.OpenFile(partnerFilename)
    End Sub
End Module
그리고 옵션에서 단축키로 등록해서 ALT+O 와 같은 단축키로 등록시켜두면 유용하다.

'컴퓨터 이야기 > C++' 카테고리의 다른 글

Vito's Family  (0) 2011.01.02
Erdos Numbers  (0) 2011.01.01
projecteuler.net : Problem 25  (0) 2010.08.16
API 후킹  (0) 2010.07.19
C++ 의 mutable 키워드를 아시나요?  (0) 2010.07.17
:

안되네...

잡담 2010. 8. 17. 13:42


class FirstSelect
{
public:
 int cursel;
 FirstSelect(){cursel = 0;}
 void test(const DirectInput& ksooinput, State* st, void* param)
 {}
};

 


class State
{
public:
 map<tstring, void(const DirectInput& ksooinput, State* st, void* param)> inputhandler;
 map<tstring, void(State* st, void* param)> renderhandler;
};

FirstSelect firstselect;
State state;
state.inputhandler["firstselect"] = firstselect.test;

'잡담' 카테고리의 다른 글

기절ㅋ  (0) 2010.09.01
참 난감한 상황입니다.  (1) 2010.08.20
휴 한자능력검정시험 준비 사람이 피폐해진다.  (2) 2010.08.13
어휴 답답해  (0) 2010.08.10
http://archive.org 들어가봤습니다...  (1) 2010.07.24
:

projecteuler.net : Problem 25

컴퓨터 이야기/C++ 2010. 8. 16. 05:12


피보나치 수열이 천자리수가 되는 첫번 째 항은 무엇인가? 가 문제인데

음...... 생각 많이 하다가 도저히 안되겠어서 시간이 느리더라도 프로그램으로 구해보려고 했다.

하지만 예상밖으로 1초만에 항을 구할 수 있었고, 답은 4000항 정도쯤.

근데 자리수가 바뀔려면 몇번째 항을 넘어가야 바뀌는걸까 궁금해서 코딩을 해봤다.



BigInteger fibo[] = new BigInteger[10000];
  fibo[1] = new BigInteger("1");
  fibo[2] = new BigInteger("1");
  BigInteger cmp = new BigInteger("1");
  
  for(int j=1; j<=20; j++)
  {
   cmp = new BigInteger("1");
   for(int i=1; i<=j; i++)
    cmp = cmp.multiply(new BigInteger("10"));
   
   
   for(int i=3; i<10000; i++)
   {
    fibo[i] = fibo[i-1].add(fibo[i-2]);
    if(fibo[i].compareTo(cmp) == 1)
    {
     System.out.println(i + "항에서 자리수가 바뀜");
     //System.out.println(fibo[i].toString());
     break;
    }
    
   } 
  }

결과는
7항에서 자리수가 바뀜
12항에서 자리수가 바뀜5
17항에서 자리수가 바뀜5
21항에서 자리수가 바뀜4
26항에서 자리수가 바뀜5
31항에서 자리수가 바뀜5
36항에서 자리수가 바뀜5
40항에서 자리수가 바뀜4
45항에서 자리수가 바뀜5
50항에서 자리수가 바뀜5
55항에서 자리수가 바뀜5
60항에서 자리수가 바뀜5
64항에서 자리수가 바뀜4
69항에서 자리수가 바뀜5
74항에서 자리수가 바뀜5
79항에서 자리수가 바뀜5
84항에서 자리수가 바뀜5
88항에서 자리수가 바뀜4
93항에서 자리수가 바뀜5
98항에서 자리수가 바뀜5

잘 보시라 대부분 4항이나 5항째에서 바뀌는것을 알 수 있다. 왜 그런걸까?

작은 수 뿐만 아니라 큰수에도 똑같이 적용이 되던데, 이건 예외가 있는건가?

또 하나의 규칙을 발견할 수 있다. 바뀔 때 네번혹은 다섯번마다 4의 항간격이 나타난다는 것이다.

이게 사실인가? 사실이면 증명을 어떻게 할까?



'컴퓨터 이야기 > C++' 카테고리의 다른 글

Erdos Numbers  (0) 2011.01.01
MS Visual Studio Macro 에서 h 과 cpp 파일간의 이동  (0) 2010.08.19
API 후킹  (0) 2010.07.19
C++ 의 mutable 키워드를 아시나요?  (0) 2010.07.17
파일 다이얼로그  (0) 2010.07.17
:

휴 한자능력검정시험 준비 사람이 피폐해진다.

잡담 2010. 8. 13. 23:21
불합격하든 말든 시험쳐서 빨리 이 상황을 탈출하고 싶다.

휴... 그냥 휴...

지금 발목 다친 상태 + 시험 압박 + 한달동안 욕구해소 못함 겹쳐서 -_-;;

발목만 정상적으로 돌아오면 욕구 폭발하지 않을까 생각중임. 지금 마치 전역하기전 1달전 느낌을 가지고 있음.

ㅋㅋㅋㅋㅋ 발목 낫기만 하면 이몸 하나 불태워 놀아야지.

'잡담' 카테고리의 다른 글

참 난감한 상황입니다.  (1) 2010.08.20
안되네...  (0) 2010.08.17
어휴 답답해  (0) 2010.08.10
http://archive.org 들어가봤습니다...  (1) 2010.07.24
정규식에 대한 글을 써야되는데...  (1) 2010.07.18
:

어휴 답답해

잡담 2010. 8. 10. 04:15
Rhythm Nerd 판정 관련해서 왜케 코딩이 안되지.

지금 상태가

키입력되는 순간의 시간 알 수 있고 (keytime 같은 변수)
노트별 정확한 시간 테이블이 있음.

miss 범위 정확한 노트시간에서 300ms 초과된 시간이 흐른 경우 미스로 판정
bad 범위 -300ms ~ +300ms
good 범위 -200ms ~ +200ms
great 범위 -100ms ~ + 100ms
perfect 범위 -50ms ~ + 50ms

키 누른시간 keytime (ex : keytime = 6900)
6250 <= [1번노트] < 6650
6650 <= [2번노트] < 7050
7050 <= [3......] < 7450
7450 <= [4......] < 7850

어휴 답답하다. 깔끔한 코드가 왜 안나올까 -_-

컴퓨터 앞에서 그냥 3시간 동안 멍하니 있었다. 젠장....
:

어느 정도... 윤곽을 보이네요.

컴퓨터 이야기/Rhythm Nerd 2010. 7. 30. 09:24



필기.txt 의 일부 내용을 가져온다면

판정상의 문제가 있음. 해당 스텝 진행이 아니면 아예 판정이 안뜸.
mp3 재생하는 부분 싱크 맞추기 코드 추가할려면 해야됨.
SIGNLE, DOUBLE 속성 얻어오는데에 LoadKSF 를 쓰고 있는건 낭비임. 고쳐야됨.
RhythmNerd::DrawNotes 여기에 중복되는 코드조각들이 너무 많음
(firsttime < starttime*10 상태에서 배속 조절하면 문제가 발생함. // ok
해당 노트에서 딱 |E4| 하면 걸쳐야ㄷ외는데 몇픽셀 이격됨 // ok
다른 KSF 하다가 다른 KSF 하면 이전거에 영항 받아져있음 static 문제로 보임 // ok
setKSF 하는 부분에서 부터 createTable // 탐닉 완료 ㅋㅋ
drawNote 까지 좀 이상함. 정밀 탐독할 필요가 있음. // 탐닉 완료

음. 일단 어느정도 돌아가네.

변칙적인 KSF 패턴들도 처리가능하고. 흠, 뿌듯;;

'컴퓨터 이야기 > Rhythm Nerd' 카테고리의 다른 글

Rhythm Nerd 인터페이스 구상중.  (0) 2010.07.16
Rhythm Nerd 0.00000001  (0) 2010.07.16
Rhythm Nerd 0.0000000000001  (0) 2010.07.03
:

이스케이프 문자와 기타 반복자

컴퓨터 이야기/정규식 2010. 7. 27. 05:40
Non Greedy repeats

기본적으로 정규식은 greedy 방법을 사용한다. greedy 방법은 가능한한 최대의 입력을 취급한다는 이야기다.
non-greedy 방법은 가능한한 최소의 입력을 받는다.

abcdaXbcdabcdX 와 같은 문자가 있으면
(a.+X).* 로 매치했을 때 abcdaXbcdabcdX 가 매치되지만
아래와 같은
(a.+?X).* 같은 표현으로 매치하면 abcdaX 가 매치된다.
*?
+?

{n,}?

{n,m}?

이까지는 이해가 가는데

?? 라는 표현도 있음.

예를 들어 표현하면

a??c 를 했을 때

abc444ac 라는게 있다면 abc 를 찾는게 아니고 ac 를 찾음

가능한한 짧은걸 찾음.

 

Back references

std::string s("apple banana");
 std::tr1::regex rg("(.+) (.+)");
 s = std::tr1::regex_replace(s,rg,std::string("$2 $1"));
 cout << s << endl;

결과값 : banana apple
매치하면서 썼던 문자집합을 $n 와 같은 표현으로 사용가능.


 

이스케이프 문자 

같은 표현

\d

[0-9]

\l

소문자

\s

모든공백문자

\u

대문자

\w

대소문자와 밑줄을 포함하는 모든 영숫자 [a-zA-Z0-9_] 와 같음

\h

\v

수직 탭

\D

[^0-9] 와 같음

\L

소문자를 제외한 것

\S

공백이 아닌 문자

\U

대문자를 제외한것

\W

[^a-zA-Z0-9_] 와 같음

\H

수평탭을 제외한 것

\V

수직탭을 제외한 것


 

'컴퓨터 이야기 > 정규식' 카테고리의 다른 글

정규식 입문  (1) 2010.06.21
정규식 ( Regular Expression ) 소개  (0) 2010.06.20
:

연애 시뮬레이션

유희거리 2010. 7. 26. 16:43


'유희거리' 카테고리의 다른 글

블랙 드래곤가는 길에 대한 모든것  (0) 2011.04.14
한국사람 하모니카  (0) 2011.04.10
똥냄새 중독.jpg  (1) 2011.03.15
흔한 수학갤의 까칠이.  (0) 2011.03.13
No_Trap_No_More  (0) 2010.07.18
: