| Сейчас на форуме: Adler, asfa, bartolomeo (+8 невидимых) | 
| eXeL@B —› Вопросы новичков —› Не фиксит проверку на правильность файла | 
| Посл.ответ | Сообщение | 
| 
 | 
Создано: 14 июня 2012 20:14 · Поправил: ghaiklor  · Личное сообщение · #1 Здравствуйте профессионалы ![]() Есть ехе-шник, в котором реализована проверка на CRC32. Не могу никак побороть эту беду. PEiD выдает UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo. С помощью PE Explorer успешно снимаю дамп с восстановленной таблицей импорта. Через Resource Binder перепаковываю ресурсы PE и получаю доступ ко всем ресурсам этого ехе-шника, через DeDe получаю инфу о всех функциях и классах - казалось бы, вот оно, уже все открыто. Но при запуске программы она не запускается. Молча не запускается. Сразу же лезу в KANAL, вот что выдает: ADLER32 :: 002ED12F :: 006EDB2F ADLER32 :: 003563BD :: 00756DBD ADLER32 :: 00356486 :: 00756E86 ADLER32 :: 00356493 :: 00756E93 CRC32 :: 004AD04C :: 008AE04C List of primes [long] :: 0049C5F4 :: 0089D5F4 ZLIB deflate [long] :: 004A9670 :: 008AA670 ZLIB deflate [word] :: 004AC4AC :: 008AD4AC Через плагины CRC32 и Fix CRC PEiD попробовал пофиксить контрольную сумму, но это не дало результатов. Начал копать в сторону поиска механизма проверки, но тут же и застопорился. Нашел три "идентичных" блока кода, которые, по моему мнению, считают и проверяют контрольную сумму, но ни один из бряков на них не сработал. Программа сразу же вылетала. Дал все данные, которые я смог обнаружить. Надеюсь вы поможете мне пофиксить ехе, чтобы он после дампа запускался. Все действия провожу в целях тестирования системы защиты этой программы и использовать найденные уязвимости в коммерческих или личных целях не собираюсь. ![]()  | 
| 
 | 
Создано: 14 июня 2012 20:22  · Личное сообщение · #2  | 
| 
 | 
Создано: 14 июня 2012 21:04 · Поправил: ghaiklor  · Личное сообщение · #3 Сделал как ты говорил. Поставил бряк на CreateFileA/W. Выскочил сразу в кернеле32. Прошло вроде три цикла вызова CreateFile, после этого вышел в программе по адресу: 00416F94 |. E8 63993D00 CALL <JMP.&OLEAUT32.#161> После этого следует такой код:[ASM] 00416F99 |. 8BD8 MOV EBX,EAX 00416F9B |. FF4F 1C DEC DWORD PTR DS:[EDI+1C] 00416F9E |. 6A 02 PUSH 2 ; /Arg2 = 00000002 00416FA0 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] ; | 00416FA3 |. 52 PUSH EDX ; |Arg1 00416FA9 |. 83C4 08 ADD ESP,8 00416FAC |. 66:C747 10 180>MOV WORD PTR DS:[EDI+10],18 00416FB2 |. 85DB TEST EBX,EBX 00416FB6 |. 8BC3 MOV EAX,EBX 00416FB8 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 00416FBB |. 50 PUSH EAX 00416FBC |. FF4F 1C DEC DWORD PTR DS:[EDI+1C] 00416FBF |. 6A 02 PUSH 2 ; /Arg2 = 00000002 00416FC1 |. 52 PUSH EDX ; |Arg1 Следуя по этим функциям проверки вроде не заметил. Попал дальше на значительное считывание данных с реестра и частое указывание в EAX адреса моего ехе. Подозреваю, что он подготавливает систему для проверки хэш-суммы, поэтому в этих кусках кода веду тщательный анализ. Но пока монотонные RegCreate... и куча записей в EAX полного расположения моего ехе. ![]()  | 
| 
 | 
Создано: 14 июня 2012 21:14  · Личное сообщение · #4  | 
| 
 | 
Создано: 14 июня 2012 21:17  · Личное сообщение · #5  | 
| 
 | 
Создано: 14 июня 2012 21:20 · Поправил: ghaiklor  · Личное сообщение · #6 Dart Sergius Похоже, но дело в том, что этот тест идет сразу после выхода с CreateFile. Он еще ничего не считал даже. r_e Иду не от ОЕП, а благодаря Dart Sergius после выхода с CreateFile. Дошел к тому, что вот этот цикл берет имя файла и его каталог:[ASM] 007D2023 |> 66:8338 00 /CMP WORD PTR DS:[EAX],0 007D2029 |. 8D50 02 |LEA EDX,DWORD PTR DS:[EAX+2] 007D202E |> 8BD0 |MOV EDX,EAX 007D2030 |> 66:8338 5C |CMP WORD PTR DS:[EAX],5C 007D2036 |. 66:8338 2F |CMP WORD PTR DS:[EAX],2F 007D203C |. 66:8338 3A |CMP WORD PTR DS:[EAX],3A 007D2042 |> 8BCA |MOV ECX,EDX 007D2044 |> 8BC2 |MOV EAX,EDX 007D2046 |> 66:8338 00 CMP WORD PTR DS:[EAX],0 Искренне надеюсь на то, что после этого последует открытие этого файла и расчет его хэша. ![]()  | 
| 
 | 
Создано: 14 июня 2012 21:23 · Поправил: ghaiklor  · Личное сообщение · #7 А это еще что за?  
Code: 
 По Mutex видно, что программа еще даже не собирается закрываться, но что за IsDebuggerPresent? Это каким образом может вообще работать? Впервые это вижу. ![]()  | 
| 
 | 
Создано: 14 июня 2012 21:34 · Поправил: ghaiklor  · Личное сообщение · #8 Значит идем дальше: Правлю проверку на наличие дебагера: Code: 
 Затем правлю проверку на файл-сайз: Code: 
 Затем попадаю на: Code: 
 Понял то, что в случае ошибки, сразу же вызываются функции на CloseHandle и ReleaseMutex. Так вот они после этого ReadFile и вызываются. Еще не очень разобрался. После изменения попадаю все равно на закрытые хендла. Получается в любом из случаев попадаю, есть прыжок или нету. После заливки функции, которая закрывает все это, нопами все равно идет закрытие программы все тем же релейсом. Где-то должен быть прыжок на дальнейшую загрузку, только где? Вот весь этот подозрительный код: Code: 
 ![]()  | 
| 
 | 
Создано: 14 июня 2012 21:41  · Личное сообщение · #9  | 
| 
 | 
Создано: 14 июня 2012 21:42  · Личное сообщение · #10 ghaiklor 004151FC JNZ 0041528E - занопить 00415285 AND EAX,1 - заменить на mov al,1   | Сообщение посчитали полезным: ghaiklor | 
| 
 | 
Создано: 14 июня 2012 21:46  · Личное сообщение · #11 NikolayD после хэндла попадаем на вот это: Code: 
 SReg выше поправил сообщение, добавил весь код с ReadFile. Сейчас сделаю твои изменения. ![]()  | 
| 
 | 
Создано: 14 июня 2012 21:50 · Поправил: ghaiklor  · Личное сообщение · #12  | 
| 
 | 
Создано: 14 июня 2012 21:59  · Личное сообщение · #13  | 
| 
 | 
Создано: 14 июня 2012 22:07  · Личное сообщение · #14 Уязвимость найдена. Огромное спасибо всем вам, особенно SReg ![]() Рассказываю: 1) Проверка на наличие дебаггера - залил нопами. 2) Проверка на размер файла - залил нопами. 3) Еще какая-то проверка, когда считывает с файла побайтово. Спасибо SReg за Code: 
 После этого получаем полностью работоспособный ехе. ![]()  | 
| 
 | 
Создано: 14 июня 2012 22:16 · Поправил: NikolayD  · Личное сообщение · #15 ghaiklor пишет: 1) Проверка на наличие дебаггера - залил нопами. это лишнее. ghaiklor пишет: 00415285 AND EAX,1 - заменить на MOV AL,1 а это одно и тоже Code: 
 поменять на Code: 
 только у SReg'a на три байта меньше ))   | Сообщение посчитали полезным: ghaiklor | 
| 
 | 
Создано: 14 июня 2012 22:50  · Личное сообщение · #16  | 
| 
 | 
Создано: 14 июня 2012 23:02  · Личное сообщение · #17 Нулевой бит не выделяется операцией 'И' (в результате этого получали 0 в EAX), а устанавливается непосредственно в единицу. ----- Следуй за белым кроликом   | Сообщение посчитали полезным: ghaiklor | 
| 
 | 
Создано: 15 июня 2012 01:46  · Личное сообщение · #18  | 
| 
 | 
Создано: 15 июня 2012 09:50  · Личное сообщение · #19  | 
| eXeL@B —› Вопросы новичков —› Не фиксит проверку на правильность файла | 
| Эта тема закрыта. Ответы больше не принимаются. | 














 Для печати