어잌후님께서 궁금해 하셔서 간단히 설명드립니다. 아마 대부분 분들은 이미 알고 계신 부분일 겁니다. CE의 dll과 sys 사이에서는 DeviceIoControl이라는 API를 통해 통신을 합니다. XTrap은 이 API의 파라메터를 관찰해서 차단을 하고 있습니다. 아래는 CE에서 IoControlCode와 In/OutBufferSize를 바꾸는 방법입니다. DLL과 SYS 두 곳을 동일하게 바꾸어 주어야 합니다. 먼저 sys 부분은 DBKKernel/DBKDrvr.c에 보면, #define IOCTL_UNKNOWN_BASE FILE_DEVICE_UNKNOWN 이런 부분이 있습니다. 0x800 이 부분을 완전 다른 값으로 바꾸셔도 됩니다. 하지만 이러면 DLL에서 다 대응되게 바꾸어 주여야 되므로 좀 귀찮죠. 그냥 FILE_DEVICE_UNKNOWN 이것이 0x22이므로,
다음 dll 부분은 dbk32/DBK32functions.pas에 보면, const FILE_DEVICE_UNKNOWN=$00000022; 이런 부분이 있는데, 역시 $00000022를 $00000033으로 바꾸어줍니다. (위에서 0x33으로 바꾸었다면 말입니다) 만약 sys에서 0x800 이 부분을 건드리셨다면, cc:=CTL_CODE(IOCTL_UNKNOWN_BASE, $080f, METHOD_BUFFERED, FILE_READ_ACCESS or FILE_WRITE_ACCESS); 이런 모든 deviceiocontrol 호출을 찾아서 CTL_CODE의 $080f 부분을 sys에서 바꾸었던 대응되는 값으로 바꾸어줘야 합니다. 그리고 마지막으로, deviceiocontrol(hdevice,cc,@ao[0],512,@ao[0],512,br,nil) 이런 호출들이 아마 두 군데 있습니다. 이 512 부분이 입력버퍼사이즈와 출력버퍼사이즈입니다. 이 512를 적절한 다른 값으로 바꾸어주면 사이즈 체크를 피할 수 있습니다 메모리뷰에 ??가 나오면 이 부분을 한번 의심해 보시면 좋을 것 같네요. 수고하세요~ |
'Security' 카테고리의 다른 글
MySQL SELECT 문 - php와 관련하여 (0) | 2007.07.15 |
---|---|
네이버카페 모든글보기(등급무시) (3) | 2007.07.14 |
Cheat v.42 (0) | 2007.07.09 |
GameGuard Nop 처리 부분 (1) | 2007.07.09 |
How to way Bypass CRC Check (0) | 2007.07.09 |