글
Technical Article/펌 2005. 10. 13. 11:32디버그 모드 방지~
아래 어느분이 고생하셧다는 글을 보고.. 생각나 한자 적습니다..
---------------------------------------------------------------------------------------------------
if(IsDebuggerPresent())
{
AfxMessageBox("디버거가 검출되었음.. 크래킹 좀 하지 마.. 이자식아..!!");
// SystemHalt(); - 파란화면 의사코드 ;;;; 또는 Reboot(); or Format("C:");
}
F5 디버깅모드로 실행해보세요..~~
----------------------------------------------------------------------------------------------------
위와 같이 해버리면 IsDebuggerPresent 이놈 break point 걸어 jmp 해버리면 그만입니다.
크래킹은 결국은 할수 있는것이죠..
컴파일 되어봐야 어차피 이진코드로 된 코드이기 때문입니다.
다만 크래커들을 골탕을 먹이거나 복잡해 스스로 포기하게 만들면 어느정도의 효과는 기대해도 좋을 것입니다.
__declspec( naked ) int IsDebuggerRunning(void)
{
__asm
{
mov eax, dword ptr fs:[00000018h];
mov eax, dword ptr [eax+30h];
movzx eax, byte ptr [eax+2];
ret
}
}
실제 IsDebuggerPresent 내용을 그대로 옮긴것임.. 아마 NT계열 일때.. 98은 잘 모르겠습니다. 직접 어셈블리 내부로 트레이싱해보시길;;
fs:[00000018h] 이놈이 고정주소값이라 쓸 수 있는것이죠;;
물론 자신의 코드이기때문에 크래커들은 모릅니다. - 이점을 이용하는것이죠
그리고 메세지박스나 기타 윈도우를 띄울경우 그놈도 break point로 잡을 수 있으니
가급적 그 기회를 주지 말아야 합니다.
타이머를 이용해 아래를 주기적으로 체크하면서..
if(IsDebuggerRunning())
{
PostMessage(.....); // 이렇게 비동기적으로 한번 더 꼬아라..
}
void OnMessageHandler(...)
{
SendLocalInfoToServer(ip, computer_name, etc); // 잡아서 혼내주세요..
Reboot();
}
어떤 안내메세지도 띄우지 마세요.. 그것이 또 크래킹의 도구가 될수 있음..
조용히 컴터를 부팅하거나 꺼버리세요..
크래커들은 당황할것입니다.
여러 응용도 가능할것입니다. 자신만의 Anti-Cracking을 해보는것도...
---------------------------------------------------------------------------------------------------
if(IsDebuggerPresent())
{
AfxMessageBox("디버거가 검출되었음.. 크래킹 좀 하지 마.. 이자식아..!!");
// SystemHalt(); - 파란화면 의사코드 ;;;; 또는 Reboot(); or Format("C:");
}
F5 디버깅모드로 실행해보세요..~~
----------------------------------------------------------------------------------------------------
위와 같이 해버리면 IsDebuggerPresent 이놈 break point 걸어 jmp 해버리면 그만입니다.
크래킹은 결국은 할수 있는것이죠..
컴파일 되어봐야 어차피 이진코드로 된 코드이기 때문입니다.
다만 크래커들을 골탕을 먹이거나 복잡해 스스로 포기하게 만들면 어느정도의 효과는 기대해도 좋을 것입니다.
__declspec( naked ) int IsDebuggerRunning(void)
{
__asm
{
mov eax, dword ptr fs:[00000018h];
mov eax, dword ptr [eax+30h];
movzx eax, byte ptr [eax+2];
ret
}
}
실제 IsDebuggerPresent 내용을 그대로 옮긴것임.. 아마 NT계열 일때.. 98은 잘 모르겠습니다. 직접 어셈블리 내부로 트레이싱해보시길;;
fs:[00000018h] 이놈이 고정주소값이라 쓸 수 있는것이죠;;
물론 자신의 코드이기때문에 크래커들은 모릅니다. - 이점을 이용하는것이죠
그리고 메세지박스나 기타 윈도우를 띄울경우 그놈도 break point로 잡을 수 있으니
가급적 그 기회를 주지 말아야 합니다.
타이머를 이용해 아래를 주기적으로 체크하면서..
if(IsDebuggerRunning())
{
PostMessage(.....); // 이렇게 비동기적으로 한번 더 꼬아라..
}
void OnMessageHandler(...)
{
SendLocalInfoToServer(ip, computer_name, etc); // 잡아서 혼내주세요..
Reboot();
}
어떤 안내메세지도 띄우지 마세요.. 그것이 또 크래킹의 도구가 될수 있음..
조용히 컴터를 부팅하거나 꺼버리세요..
크래커들은 당황할것입니다.
여러 응용도 가능할것입니다. 자신만의 Anti-Cracking을 해보는것도...
RECENT COMMENT