![]() |
eXeL@B —› Основной форум —› Кто-н'ть ковырял LINGVO 11 пробную версию. |
Посл.ответ | Сообщение |
|
Создано: 12 апреля 2006 16:52 · Личное сообщение · #1 Четырёхметровый EXE-шник, подгружающий тьму DLL, нервирует. IDA справляется легко, W32Dasm загибается. Страшно признаться, но не могу уже целый день снять ограничение по времени. Где идёт проверка неизвестно. Выяснил только, что это не всеми любимые GetLocalTime и прочие API. Сей продукт юзает MFC. Это бы ладно, но OLLY просто давится от EXCEPTION'ов(под SICE'ом ещё не пробовал, у меня его на работе нет пока, а сломать попросили именно там). Кстати, интересная эта, блин, версия: В отличие от обычной коммерческой она не содержит НИКАКОЙ возможности для регистрации, хотя DLL-ки для этого предназначенные имеются. Предположительно, влом было их коцать, когда лепили ограничения и вырезали куски. Вообщем, если кто возился с этой прогой, поделитесь инфой, буду рад любой квалифицированной помощи. Заранее спасибо. ![]() |
|
Создано: 12 апреля 2006 19:24 · Личное сообщение · #2 Пробовал ковырять эту штуку отлавливая вызовы API шпионами и максимум что нашёл из вызываемых функций относящееся к дате это следующий участок. Увидев что он делает с данными о дате, а также отзывы что там лучшая в России самописная защита, бросил это дело. push esi lea eax, [ebp+SystemTimeAsFileTime] push eax ; lpSystemTimeAsFileTime call GetSystemTimeAsFileTime mov esi, [ebp+SystemTimeAsFileTime.dwHighDateTime] xor esi, [ebp+SystemTimeAsFileTime.dwLowDateTime] call GetCurrentProcessId xor esi, eax call GetCurrentThreadId xor esi, eax call GetTickCount xor esi, eax lea eax, [ebp+PerformanceCount] push eax ; lpPerformanceCount call QueryPerformanceCounter mov eax, dword ptr [ebp+PerformanceCount+4] xor eax, dword ptr [ebp+PerformanceCount] xor esi, eax mov dword_7954B0, esi jnz short loc_606CD7 mov dword_7954B0, 0BB40E64Eh pop esi leave retn ![]() |
|
Создано: 12 апреля 2006 20:22 · Личное сообщение · #3 ![]() а вот и нет. это не кусок защиты. этот код я встречал почти во всех продуктах, собраных в visual studio 2005 (насчет 2003 тоже подозреваю но не уверен) обычно entry point выгляди так:
где sub_402956 и есть вышеприведенная функция. ![]() |
|
Создано: 12 апреля 2006 20:27 · Личное сообщение · #4 извиняюсь за возможный оверпостинг, но приведу функцию целиком, потому что как-то заинтересовала она меня и теперь вот тоже хочется разобраться, раз уж зашел разговор:
вопрос спецам(на засыпку?): а что это за константа 0BB40E64Eh в данном куске .text:0040296B mov edi, 0BB40E64Eh
гугол помнится ничего толкового не выдавал, где-то упоминалось, что это мол есть magic value, что это за значение и почему оно magic, нигде нет. ![]() |
|
Создано: 12 апреля 2006 20:37 · Личное сообщение · #5 |
|
Создано: 12 апреля 2006 21:16 · Личное сообщение · #6 в общем удалось еще кое-что накопать: оказывается функция эта называется security_init_cookie() в гугле по этому поводу только один резулт(и тот только в кэше), но частично ясность вносит: Micorsoft's protection is similar to Stack Guard in the fact that both use a canary4 to protect the return address. However,there is a subtle difference. Microsoft does protect the frame pointer by placing a random canary between it and the local varaiables. The security cookie in this case is initialized in a function called security_init_cookie() which you can find in the file seccinit.c in crt sources that come with Microsoft's Visual Studio .NET. This function is called once, every time the program is started. The security cookie is generated XORing the answer of 5 different functions: GetCurrentProcessId(), GetCurrentThreadId(), GetTickCount(), GetSystemTimeAsFileTime() and QueryPerformanceCounter()19. In Windows NT and 2000, the first too are generated not so randomly (check PIDs in Task Manager). The other 3 are timers. If exploiting something locally, timers can be determined pretty acu- rately, if exploiting remotely, it's not that easy. As the process being exploited will raise an error if you don't know the right value, and as the precision for QueryPerformanceCounter() is really high, bruteforcing is not that straight forward. Like Stack Guard, it is emebeded in C/C++ compiler. 66.249.93.104/search?q=cache:U1XpQTfq91sJ:www.cse.iitk.ac.in/users/avijitk/cs397/node25.html+security_init_cookie&hl=en&gl=ru&ct=clnk&cd=1 по поводу магического валуя ) вопрос открыт ![]() |
|
Создано: 13 апреля 2006 00:15 · Поправил: bash · Личное сообщение · #7 |
|
Создано: 13 апреля 2006 06:54 · Личное сообщение · #8 Кое-что о магических значениях (числах): "Magic debug values are specific values written to memory during allocation or deallocation, so that it will later be possible to tell whether or not they have become corrupted and to make it obvious when values taken from uninitialized memory are being used. Memory is usually viewed in hexadecimal, so common values used are often repeated digits or hexspeak. Famous and common examples include: 0x..FACADE : Used by a number of RTOSes 0xABABABAB : Used by Microsoft's LocalAlloc() to mark "no man's land" guard bytes after allocated heap memory 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory 0xBADBADBADBAD : Burroughs B6700 "uninitialized" memory (48-bit words) 0xC001D00D 0xC0DEBABE 0xC0EDBABE 0xCACACACA 0xCAFEBABE : Used as the first four bytes of every Java .class file. 0xCAFECAFE 0xCAFEFEED : Used by Sun Microsystems' Solaris debugging kernel to mark kmemfree() memory 0xCCCCCCCC : Used by Microsoft's C++ debugging heap to mark uninitialised stack memory 0xCDCDCDCD : Used by Microsoft's C++ debugging heap to mark uninitialised heap memory 0xDDDDDDDD : Used by MicroQuill's SmartHeap and Microsoft's C++ debugging heap to mark freed heap memory 0xDEADBABE : Used at the start of Silicon Graphics' IRIX arena files 0xDEADBEEF : Famously used on IBM systems such as the RS/6000, also in OPENSTEP Enterprise and the Commodore Amiga 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash. 0xDECAFBAD 0xEBEBEBEB : From MicroQuill's SmartHeap 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory 0xFEEDBABE 0xFEEDFACE : Seen in Mach-O binaries on Apple's Mac OS X platform 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory" ![]() |
![]() |
eXeL@B —› Основной форум —› Кто-н'ть ковырял LINGVO 11 пробную версию. |