![]() |
eXeL@B —› Вопросы новичков —› Помогите разломать защиту |
Посл.ответ | Сообщение |
|
Создано: 17 июня 2011 14:56 · Личное сообщение · #1 |
|
Создано: 17 июня 2011 15:17 · Поправил: HandMill · Личное сообщение · #2 Terminate, "основная программа" или какие-то нужные данные находятся "в хвосте" или как он правильно называется в оверлее. Об этом свидетельствует результат сканирования PEiD следующим образом: UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo [Overlay] После распаковки оригинальный UPX оверлей удаляет, поскольку эти данные не имеют никакого отношения к оригинальному файлу. В Вашем случае обращение к оверлею реализовано авторами этой программы очень криво, и для "обхода" самозащиты достаточно проделать следующее: В папке программы храним файл "shareman.exe" в оригинальном, запускающемся виде(РАСПАКОВЫВАТЬ НЕ НУЖНО!). Затем делаем его копию с именем файла(например) "u_shareman.exe" и этот файл распаковываем при помощи UPX. При запуске "u_shareman.exe" будет искать оверлей в файле "shareman.exe" который в коде программы видимо "жёстко" прописан. Сам "shareman.exe" в процессе работы программы "u_shareman.exe" запускаться не должен. Удачи в исследовании "u_shareman.exe"! ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 17 июня 2011 15:43 · Личное сообщение · #3 |
|
Создано: 17 июня 2011 15:44 · Поправил: Wally · Личное сообщение · #4 |
|
Создано: 17 июня 2011 15:45 · Личное сообщение · #5 |
|
Создано: 17 июня 2011 16:01 · Поправил: Wally · Личное сообщение · #6 /*8CF472*/ MOV EAX,[EBP] =======> crc1 /*8CF475*/ PUSH EAX /*8CF476*/ CALL 00487860======>ws2_32.ntohl /*8CF47B*/ MOV [EBP],EAX /*8CF47E*/ MOV EAX,[EBP+4]=====> crc2 /*8CF481*/ PUSH EAX /*8CF482*/ CALL 00487860======>ws2_32.ntohl /*8CF487*/ MOV [EBP+4],EAX /*8CF48A*/ MOV EAX,[EBP+8]=====> crc3 /*8CF48D*/ PUSH EAX /*8CF48E*/ CALL 00487860======>ws2_32.ntohl /*8CF493*/ MOV [EBP+8],EAX /*8CF496*/ MOV EAX,[EBP+C]=====> crc4 /*8CF499*/ PUSH EAX /*8CF49A*/ CALL 00487860======>ws2_32.ntohl /*8CF49F*/ MOV [EBP+C],EAX /*8CF4A2*/ MOV EAX,[EBP+10]====> crc5 /*8CF4A5*/ PUSH EAX /*8CF4A6*/ CALL 00487860======>ws2_32.ntohl crc1 4EF54720 crc2 9E78033D crc3 958A3A94 crc4 3BA38A09 crc5 291DC717 ![]() |
|
Создано: 17 июня 2011 16:11 · Личное сообщение · #7 |
|
Создано: 17 июня 2011 18:49 · Личное сообщение · #8 HandMill пишет: В папке программы храним файл "shareman.exe" в оригинальном, запускающемся виде(РАСПАКОВЫВАТЬ НЕ НУЖНО!). Затем делаем его копию с именем файла(например) "u_shareman.exe" и этот файл распаковываем при помощи UPX. При запуске "u_shareman.exe" будет искать оверлей в файле "shareman.exe" который в коде программы видимо "жёстко" прописан. Сам "shareman.exe" в процессе работы программы "u_shareman.exe" запускаться не должен. не работает такой подход ![]() ![]() |
|
Создано: 18 июня 2011 03:19 · Личное сообщение · #9 |
|
Создано: 18 июня 2011 09:27 · Личное сообщение · #10 Wally пишет: Понял, расспакованный файл нехочет соединятся с инетом у меня и упакованный не хочет соединяться с интернетом(ниже видео, на котором я это показал) Terminate пишет: не работает такой подход А, да, вы правы. Тут не нужно абсолютно никакого подхода! Что-то я вашим словам изначально сильно доверял и не проверил ваши действия. Распаковав upx файл нормально запускается. Видео: http://rghost.ru/11404681 Что я делаю не так? ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 18 июня 2011 09:31 · Личное сообщение · #11 |
|
Создано: 18 июня 2011 11:03 · Личное сообщение · #12 |
|
Создано: 18 июня 2011 15:23 · Личное сообщение · #13 |
|
Создано: 18 июня 2011 15:42 · Личное сообщение · #14 |
|
Создано: 18 июня 2011 16:01 · Личное сообщение · #15 |
|
Создано: 18 июня 2011 19:40 · Личное сообщение · #16 Когда народ научится задавать вопросы? Terminate Кривая прога для кривого сервиса (распакована, соединяется с сервером и даже вроде как работает) ![]() В моем случае запакованный обязательно должен лежать рядом под своим именем. Имя распакованного неважно, но во избежание непроверенных косяков, лучше не делать его короче оригинального. ![]() |
|
Создано: 18 июня 2011 20:19 · Личное сообщение · #17 Я уже боюсь задавать вопросы ![]() Но всеже хотелось бы знать чо ты там подправил? Все говорят.что защита кривая, но никто не может обьяснить что там за защита ![]() Как я понял там вся фигня с размером файла, но если подсунуть ему размер запакованного файла, он всё равно не соединяеться, значит чтото еще он палит ![]() ![]() |
|
Создано: 18 июня 2011 21:05 · Личное сообщение · #18 Terminate пишет: Как я понял там вся фигня с размером файла Там фигня не с размером файла, а с любой его модификацией. Я не разбирался подробно, как там это делается. В общих чертах, считывается файл с диска, подсчитывается его crc и сравнивается со значениями, лежащими в оверлее (наверное). Я просто в нужный момент подменяю путь, чтобы с диска брался запакованный. Хотя мне не совсем понятно, зачем его вообще распаковывать, и что там собрались менять.Terminate пишет: Все говорят.что защита кривая Это нельзя назвать защитой от целенаправленного взлома, скорее против модификации вируснёй. ![]() |
|
Создано: 18 июня 2011 21:21 · Личное сообщение · #19 |
|
Создано: 18 июня 2011 23:06 · Личное сообщение · #20 |
|
Создано: 19 июня 2011 15:01 · Личное сообщение · #21 Terminate Оверлей можно посмотреть в любом hex-редакторе. В оле только после загрузки файла с диска в память. Для загрузки могут использоваться разные API: ReadFile, MapViewOfFile. Порядок действий в общем случае примерно такой: В оле по Ctrl+N выводится список всех импортируемых функций. Ищешь там все вхождения указанных функций, и на каждом правой кнопкой - set breakpoint on every reference (после лучше убрать брейкпойнты с переходников, дабы не путались). Запускаешь выполнение, когда прервешься, вникаешь в параметры API. Например, для ReadFile важными для тебя будут первые три. Во первых, хэндл файла, по его значению в окне хэндлов определяешь, тот ли файл будет читаться. Далее буфер - начальный адрес, куда файл будет считываться, здесь сразу можно вывести этот адрес в окне дампа. И размер считываемых данных (сравниваешь с полным размером фала на всякий случай). После отработки функции идешь в конец загруженных данных и находишь свой оверлей. Ставишь железный бряк доступа на первый байт оверлея и запускаешь программу на выполнение. Дальше уже по обстоятельствам. Намек: заставить нормально работать распакованный (без наличия рядом нераспакованного) можно подменив результат обработки оверлея в распакованном на результат обработки в нераспакованном (или на результат обработки в файле, где подменяется путь). Надеюсь, понятно написал ![]() ![]() |
|
Создано: 19 июня 2011 16:50 · Личное сообщение · #22 |
|
Создано: 19 июня 2011 18:29 · Личное сообщение · #23 |
|
Создано: 19 июня 2011 18:56 · Личное сообщение · #24 Как написано выше ищю вхождения функций ReadFile, их два: Names in Shareman, item 559 008F1028=KERNEL32.ReadFile 008F16E0=KERNEL32.ReadFile Ставлю на них set breakpoint on every reference Запускаю, прерываюсь по адресу 0040C398 |. E8 ABC4FFFF CALL <JMP.&KERNEL32.ReadFile> ; \ReadFile Смотрю хендл он соответствует файлу Shareman.exe, размер соответствует файлу, буфер Buffer=7F8E0018, открываю в дампе буфер, пусто. Трасирую F8, попадаю в kernel32, после 7C80186F FF15 8C11807C CALL DWORD PTR DS:[<&ntdll.NtReadFile>] ; ntdll.ZwReadFile В буфере файл, иду в конец, там вроде этого: 7FFA5400 .........................ШsЕjpS=Дoaў¦п°ЛйЇPEчF^&ИUт“Г=°»wuјА 7FFA5440 ©ѓ›“!vеЊCЇъZ‘xЄ¶ѕи‹&–8Й`эW/ЭХxГyXV°© Ставлю на первый байт hardware, on access -> byte Нажимаю F9 и останавливаюсь на 0040C39D |. 85C0 TEST EAX,EAX ![]() |
|
Создано: 19 июня 2011 19:33 · Поправил: SVLab · Личное сообщение · #25 Ну, вобщем, почти всё так. Только оверлей начинается с 7ffa5418. Железные бряки снимаются в меню Debug>Hardware breakpoints. Что пишется в строке состояния после останова? Да, еще, ты наверное не убрал бряк с переходника 00408848 $- FF25 E0168F00 JMP DWORD PTR DS:[<&KERNEL32.ReadFile>] ; kernel32.ReadFile Убери и не будешь продираться через системную функцию. ![]() |
|
Создано: 19 июня 2011 21:17 · Личное сообщение · #26 Вот сейчас вроде нормально остановился на 0040311B . 8D4401 F8 LEA EAX,DWORD PTR DS:[ECX+EAX-8] В строке: Hardware breakpoint 1 at Shareman.0040311B - EIP points to next instruction В eax адрес начала оверлея 7FFA5418 После F8 в eax последнии 8 байт оверлея Потом цикл, считывается весь оверлей по 8 байт Дальше непонятно что происходит, выхожу на 008D30FC |. 33DB XOR EBX,EBX ; Shareman.006C5450 В ebx 006C5450 Потом начинается какойто цикл там вроде какаето запись считывается начиная где-то с 012DCDC8 Тоесть это возможно и есть сравнение оверлея с каким то расчетом програмы? ![]() |
|
Создано: 19 июня 2011 21:50 · Личное сообщение · #27 Не понял, о каком цикле ты говоришь, но ты на верном пути. Тебе надо дойти до цикла с такими командами Code:
Оверлей не сравнивается, он ксорится с просчитанными ранее значениями, и результат пишется в [ESI]. Этот результат как-то используется потом для определения, модифицирован файл или нет. Если хочешь, посмотри, что там и как, я не разбирался. Чтобы программа заработала нормально, достаточно подменить этот результат (80 байт) на результат, который получается при считывании с диска запакованного файла. ![]() |
|
Создано: 19 июня 2011 22:05 · Личное сообщение · #28 Вот как раз эти команды которые ты написал и есть в этом цикле, чуть ниже переход, который этот цикл и устраивает: 008D3131 |.^\75 D0 \JNZ SHORT Shareman.008D3103 SVLab пишет: но ты на верном пути Как бальзам на душу, а то я уже прям растроился, что ничего не выходит. Буду теперь сравнивать результаты распакованного и запакованного ![]() ![]() |
|
Создано: 20 июня 2011 17:03 · Личное сообщение · #29 |
![]() |
eXeL@B —› Вопросы новичков —› Помогите разломать защиту |