본문 바로가기

개발 및 운영123

CodeVirtualizer 주의점 #1 CodeVirtualizer을 한국에서 사용하는 사람들이 별로 없는거 같네요.. 제가 사용해 보면서 겪고있는 일들을 기록합니다.. 1. 중첩 Virtualizer 금지VIRTUALIZER_START....VIRTUALIZER_FISH_WHITE_START....VIRTUALIZER_FISH_WHITE_END....VIRTUALIZER_END 이런 식도 그렇고 void function(){VIRTUALIZER_START...VIRTUALIZER_END} int main(){VIRTUALIZER_START...function();...VIRTUALIZER_END} 이런것도 그렇고 중첩해서 VIRTUALIZER을 하면 CodeVirtualizer프로그램이 Protect적용중에 죽던지 프로그램이 죽던지 합니다... 2017. 12. 26.
효율적인 그리고 안전한 소켓 통신 서버 Thread pool을 이용해서 소켓 서버를 만들 때 recv하는 방법은 대체로 쉽다.Windows에서는 IOCP로, Linux에서는 epoll을 이용하면 된다.이런걸 이용한 예제는 참 많지만... 실제 서버에 적용하면 문제가 생길 가능성이 있다.TCP send의 경우 클라이언트가 데이터를 받는걸 확인해야만 return한다.(물론 전송 실패 시에는 한참 뒤에 return한다.)만약 한정된 Thread pool에서 클라이언트에게 데이터를 전송하는데 마침 전송중인 모든 클라이언트의 연결이 강제로 끊긴 다면?서버는 오랜 시간 Waiting하다가 겨우겨우 다음 데이터를 처리할 것이다.이런일이 발생할까? 고려해야 할까? 할 수도 있지만 충분히 가능한 시나리오고이걸 악용한다면 매우 쉽게 DoS공격을 할 수도 있다... 2017. 11. 13.
KiUserApcDispatcher Hooking ntdll.dll의 KiUserApcDispatcher API을 후킹하려고 시도했는데 일반적인 후킹방법으로는 프로그램이 잘못된 메모리를 참조해서 오류가 나게 되었습니다. 인터넷을 찾아보면 이런 소스도 찾아볼 수 있는데... https://github.com/blaquee/APCHook/blob/master/AntiDebugAPC/Source.cpp 일단 __forceinline(함수의 prologue을 없애기 위해) 때문에 Debug모드에서는 당연히 작동하지 않고 Release모드에서도 APC Queue을 실행시키는 SleepEx함수를 실행하면 오류가 뜹니다. 후킹된 KiUserApcDispacher에서 다른 작업을 하고 원래 KiUserApcDispatcher을 실행하면 원래함수를 call 할 때 rs.. 2017. 10. 21.
DebugActiveProcess, WaitForDebugEvent, ContinueDebugEvent 삽질기 DebugActiveProcess(pid); while(WaitForDebugEvent(&dbgEventInfo, INFINITE)){if (dbgEventInfo.dwDebugEventCode == EXCEPTION_DEBUG_EVENT){dwdbgContinueStatus = DBG_EXCEPTION_NOT_HANDLED; // 중요!}ContinueDebugEvent(dbgEventInfo.dwProcessId, dbgEventInfo.dwThreadId, dwdbgContinueStatus);} 디버거에서 Exception가 발생했을 때 DBG_EXCEPTION_NOT_HANDLED 을 설정해주지 않으면클라이언트 프로세스가 죽는다...이거때문에 오늘 4시간넘게 암걸리는줄,,,,ㅠㅠㅠㅠ 안전한 예외.. 2017. 10. 19.
[JsServerSocket] Linux용 다중클라이언트 서버 라이브러리 JsServerSocket은 Linux에서 다중클라이언트 서버 프로그램 개발시 사용할 수 있는 라이브러리입니다. Server : i5-6100Client : i5-2390에서 CGCII Network TCP Test Client으로 테스트한 결과로 Connections : 4000 100ms마다 2번 1KBytes의 데이터를 송수신(ECHO)-> client에서 send/recv => 7.85MB/s / 7.85MB/s 100ms마다 10번 4Kbytes의 데이터를 송수신(ECHO)-> client에서 send/recv => 51.99MB/s / 51.89MB/s interval(10 ms) / range(3800~4000) 안에서 계속 연결과 연결해제를 반복하는 작업도 잘 작동하였습니다.수십만번 해도 .. 2017. 4. 12.
라이브러리 없이 mktime등 time함수 구현 AVR에서 필요해서 구현했습니다. 그래서 좀 type같은게 더럽(the love)습니다..하하... tm을 epoch time 으로 변환하는건 만들었는데... 반대 상황은 또 언제 만들지...하하..ㅠㅠ 10분만에 만들었네요...ㅎ 최신 버전은 https://github.com/jic5760/jstime 을 확인해 주세요~ 구현소스 /* * jstime.c * * Created: 2016-02-20 PM 11:54:05 (GMT+09:00) * Author: jichan (jic5760@naver.com) */ #include "jstime.h" /* MSVC(Visual Studio)에서는 inline가 작동하지 않기 때문 */ #ifdef _MSC_VER #define _JSTIME_INLINE st.. 2016. 2. 21.
반응형