본문 바로가기

Research

Anti Reverse Engineering - BreakPoint 리버스 엔지니어가 사용하는 BP 의 종류에는 보통 세가지 - 하드웨어 / 메모리 / INT 3h - 가 있다. 동적 분석에 있어 리버서에게 필수적인 BP 는 실행 중인 코드 어디든 설치할 수 있으며 또한 실행을 멈출 수 있다. BP를 적절히 활용함으로써 리버서는 API 를 분석할 수 있고 또한 원하는 메시지를 훨씬 쉽게 찾을 수 있다. BP는 리버싱 과정에서 문자열을 검색하는 것 만큼이나 가장 많이 활용되며, MessageBox / VirtualAlloc, CreateDialog 와 같은 중요도가 높은 API 함수를 체크하는 데 활용할 수 있다. INT 3 BP를 가장 흔히 표현하는 방법이며 IA-32 명령어에서 0xCC opcode로 표현하고 있다. 0xCC 를 0xCD 0x03 으로도 표현 가능한데 .. 더보기
설치된 드라이버 살펴보기 시작 - 실행 - msinfo32 - 소프트웨어 환경 - 시스템 드라이버. 헐.... 이런 쉬운 툴이. 더보기
FreeBSD 에서 proc 디렉토리에 PID 가 없을때 # mount -t procfs proc /proc # mount Open /etc/fstab - file system table, enter: # vi /etc/fstabAppend following line so that procfs get mounted automatically at boot time: proc /proc procfs rw 0 0 http://www.cyberciti.biz/faq/howto-freebsd-mount-procfs/ 더보기
ThreadPool simple example #define DELAY_COUNT 20 #define CACHE_LINE_SIZE 64 void CALLBACK Worker(PTP_CALLBACK_INSTANCE, PVOID, PTP_WORK); int workerDelay = DELAY_COUNT; DWORD tid[256]={0,}; __declspec(align(CACHE_LINE_SIZE)) typedef struct _THARG{ SRWLOCK SRWL; int threadNumber; unsigned int tasksToComplete; unsigned int tasksComplete; } THARG; int _tmain(DWORD argc, LPTSTR argv[]) { int nThread, iThread; HANDLE* pWorkOb.. 더보기
SYSENTER 가 보이지 않는 이유 lkd> u ntdll!ntcreatefilentdll!ZwCreateFile:7c93d090 b825000000 mov eax,25h7c93d095 ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300)7c93d09a ff12 call dword ptr [edx]7c93d09c c22c00 ret 2Ch7c93d09f 90 nop lkd> u SharedUserData!SystemCallStubSharedUserData!SystemCallStub:7ffe0300 f0e493 lock in al,93h7ffe0303 7cf4 jl SharedUserData+0x2f9 (7ffe02f9)7ffe0305 e493 in al,93h7ffe0307.. 더보기
C++ / Mysql Connector 일단 링크http://yamoe.tistory.com/159 더보기
Mutex - Event Simple Code 뮤텍스 - 이벤트 사용 기본코드 DWORD _tmain(int argc, LPTSTR argv[]) { HANDLE hProduce, hConsume; mBlock.mGuard = CreateMutex(NULL, FALSE, NULL); // 두번째 인자가 TRUE 이면 생성 즉시 뮤텍스 할당 mBlock.mReady = CreateEvent(NULL, FALSE, FALSE, NULL); //mBlock.mReady = CreateEvent(NULL, TRUE, FALSE, NULL); // 두번째 인자 ManualReset 가 TRUE 이면 수동 재설정 이벤트(All Thread Signaled)-셋이벤트 후 계속 signaled 상태로 남음. FALSE 이면 자동으로 ResetEvent. // 세번.. 더보기
simple critical section 크리티컬 섹션 기본코드 typedef struct MSG_BLOCK_TAG { CRITICAL_SECTION mGuard; DWORD fReady, fStop; volatile DWORD nCons, mSequence; DWORD nLost; time_t mTimestamp; DWORD mChecksum; DWORD mData[DATA_SIZE]; } MSG_BLOCK; DWORD WINAPI Produce (void *arg) { srand ((DWORD)time(NULL)); while (!mBlock.fStop) { Sleep(rand()/100); EnterCriticalSection (&mBlock.mGuard); __try { if (!mBlock.fStop) { mBlock.fReady = .. 더보기