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적용중에 죽던지 프로그램이 죽던지 합니다...^^
2. VirtualMachine종류도 타고 기타 설정도 좀 탑니다..
특정 코드 + VM 종류에 따라 Code Virtualizer가 죽는 일이 빈번합니다..
SHARK32로 했을때 CodeVirtualizer자체가 Crash날 때 TIGER32으로 하면 오류가 나지 않는 등...
혹은 Fake Emulation을 하면 오류가 나거나 Compress code을 하면 오류가 나거나 Location of Protection Code을 바꾸면 오류가;;;;
쨋든... Code Virtualizer가 만병통치약도 아니고 꽤나 불안정한 부분이 많이 보입니다.
전 지금... Code Virtualizer을 사용하면 동작둥 Illegal Instruction 오류가 나는 문제를 해결하는 중입니다...ㅠㅠ
이건 이 부분만 다른 VM을 사용하니 정상작동하네요...
3. 그런데 또 다른 부분에서 Illegal Instruction오류가 났는데
VIRTUALIZER_START와 VIRTUALIZER_END는 같은 블럭안에서 사용..
예를들어
VIRTUALIZER_START
while(...){
....
VIRTUALIZER_END
}
예시가 이상하긴 하지만.. 쨋든 이렇게 다른 블럭안에서 사용하면 문제가 생길 가능성이 있습니다.
4. 생각난김에
int function()
{
VIRTUALIZER_START
.....
return 1;
VIRTUALIZER_END
}
이런식의 코드 금지. (Code virtualizer에서 END를 인식하지 못합니다.)
int function()
{
int a;
VIRTUALIZER_STARTif(aaaa)
return 1;
a = 2;
VIRTUALIZER_END
return a;
}
이런식으로 맨 마지막 return뒤에는 VIRTUALIZER_END을 쓰지 않습니다.
5. 또 생각난김에
Virtualized된 코드안에 for문이 있으면 쥐약입니다..
물론 수백번정도의 반복은 괜찮지만 수만~수백만의 반복이 발생한다면..
가상화되지 않은 코드는 눈 깜짝할사이의 1/100의 시간안에 작동하겠지만
가상화를 시키면 몇분이 걸려서 프로그램이 무한루프에 빠진것처럼 멈춰버리는 현상이 발생합니다.
해결책은.
1. 이 부분만 가상화를 하지 않거나
2. 이 부분만 빠른 가상화를 시킨다. (FISH32(White)같은거) 빠를수록 복잡성은 감소.
결론. 속도와 복잡성은 반비례한다..
'개발 및 운영 > 프로그래밍' 카테고리의 다른 글
WindowsPE에서 디버깅하기 (0) | 2018.11.07 |
---|---|
libcef 멈춰버리는 문제 해결 (0) | 2018.07.02 |
효율적인 그리고 안전한 소켓 통신 서버 (0) | 2017.11.13 |
KiUserApcDispatcher Hooking (0) | 2017.10.21 |
DebugActiveProcess, WaitForDebugEvent, ContinueDebugEvent 삽질기 (0) | 2017.10.19 |
댓글