Основной файл приложения падает из-за того, что на сервер влияет ошибка форматной строки при обработке псевдонимов игроков из-за доступа к
недопустимая зона памяти.
Выполнена инструкция «cmp [EAX], 00000000», где EAX содержит 4
байтов в псевдониме и сбивает сервер.
Я отладил и обнаружил, что "% s" отсутствует перед передачей строки регистрации в функцию File_printf. Поэтому я попытался добавить эту строку с помощью отладчика IDA и Successed. После ввода этих байтов теперь происходит сбой сервера с сообщением «сервер не уязвим» перед тем, как произошел сбой с сообщением «сервер уязвим»
CODE
Байты, которые я ввел для исправления приложения:
RVA
00400000
OFFSET
0041dfad cc 68 ; push 0061d0dc
+ cc |0061d0dc
+ cc e8 ; call 0040d270
+ cc ^0040d270
+ cc 83 ; add esp,04
+ cc c4
+ cc 04
+ cc e9 ; jmp 0041e059
+ cc ^0041e059
0041e054 e8 e9 ; jmp 0041dfad
+ ?? ^0041dfad
0055DD63 cmp dword ptr [eax], 0
/*source*/
if ( *(_DWORD *)a1 )
a1 = sub_445D50();
if ( v2 )
{
--*(_DWORD *)(v2 + 4);
*(_DWORD *)a1 = *(_DWORD *)(v2 + 20);
*(_DWORD *)(v2 + 20) = a1;
}
else
{
v3 = *(_DWORD *)((a1 - 4) & 0xFFFFFFFC);
--dword_798ABD0;
sub_445D50();
memset(*(void **)(v3 + 8), 0xCDu, *(_DWORD *)(v3 + 16));
free((void *)v3);
}
}
/ Hex Value /
0055DD63 83 38 00
После тестирования сервера на сбой, после этого произошел сбой сервера с сообщением в инструменте тестирования «Сервер не уязвим», но произошел сбой.
А в IDA отладчика я получаю этот результат с подробным сообщением:
55dd63: The Instruction at 0x55DD63 referenced memory at 0x61616161, The memory could not be read -> 61616161 (exc.code c0000005, tid 4692)
Изображение 1
Изображение 2
Изображение 3
Изображение 4
Изображение 5
Я также могу поделиться инструментом тестирования, но не здесь, потому что инструмент тестирования имеет троянский файл .simplese и может нанести вред вашему компьютеру, но я могу поделиться исходным кодом инструмента тестирования по запросу.