eXeL@B —› Основной форум —› Рипнуть ф-цию ? |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 11 июля 2006 23:13 · Личное сообщение · #1 Реверсирую одну прогу. Возникла нужда вставить рипнутую ф-цию. И - облом. 0057FA5C /$ 55 PUSH EBP ; 0057FA5D |. 8BEC MOV EBP, ESP 0057FA5F |. 83C4 F8 ADD ESP, -8 0057FA62 |. 8955 F8 MOV [LOCAL.2], EDX ; ntdll.KiFastSystemCallRet 0057FA65 |. 8945 FC MOV [LOCAL.1], EAX ; unpacked.00583F34 0057FA68 |. A1 14985800 MOV EAX, DWORD PTR DS:[589814]------>>>>>> ВОТ ЭТО 0057FA6D |. 8B00 MOV EAX, DWORD PTR DS:[EAX] 0057FA6F |. B2 01 MOV DL, 1 0057FA71 |. E8 BE70EFFF CALL unpacked.00476B34 0057FA76 |. 59 POP ECX ; unpacked.00584404 0057FA77 |. 59 POP ECX ; unpacked.00584404 0057FA78 |. 5D POP EBP ; unpacked.00584404 0057FA79 \. C3 RETN Этот адрес идет в DATA. Ф-ция вызывает свое окно. Данные всегда одни и теже - 9CDAFD. Чо с этой хренью можно сделать? Или можно долго и нудно искать и нихрена не найти? |
|
Создано: 11 июля 2006 23:43 · Личное сообщение · #2 |
|
Создано: 12 июля 2006 00:43 · Личное сообщение · #3 |
|
Создано: 12 июля 2006 01:15 · Личное сообщение · #4 |
|
Создано: 12 июля 2006 05:39 · Личное сообщение · #5 |
|
Создано: 12 июля 2006 06:10 · Личное сообщение · #6 Если функция использует какие-то переменные, то остаётся: 1) искать в дизассемблере (ida - лучший) место, где они принимают то значение, которое используется в функции 2) загрузить в отладчик (я предпочитаю SoftIce) и посмотреть значения, которые данные переменные имеют при проходе через функцию Только я не совсем правильно понял вопрос. Если функцию создаёт своё окно (а что ещё за "своё окно"), то должен быть какой-то код, который передаёт Windows какую-нибудь ещё информацию (дескрипторы и т.п.), без которой окно создано быть не может. То есть надо узнать с какого адреса идёт переход сюда, а потом добавить необходимый код. Значит, нужно bpm. На счёт "долго и нудно искать и никогда не найти" - зависит от опыта и желания. |
|
Создано: 12 июля 2006 22:04 · Личное сообщение · #7 Эта ф-ция юзается при клике на батон "New project". Потом вылазит форма создания проекта. Т.е - не стандартное виндовское окно. Тот кол ведет из ф-ции в хрен знает какие дебри, где уже вызаваются конкретные апи, передаются хендлы и т.д. Ессно я пробовал подставлять данные. Прога вылетает где-то на третьем уровне подфункций. Код из полной, но старой версии, и надо вставить в новую версию демки. В демке всех нужных ф-ций нет напрочь. Я вот и думаю, что может для демки 9CDAFD - нихрена не значит? Потому как инициализировать нечего, данных нет? |
|
Создано: 12 июля 2006 22:38 · Личное сообщение · #8 |
|
Создано: 13 июля 2006 07:05 · Личное сообщение · #9 |
|
Создано: 13 июля 2006 20:23 · Личное сообщение · #10 |
|
Создано: 13 июля 2006 20:31 · Личное сообщение · #11 |
|
Создано: 13 июля 2006 20:35 · Личное сообщение · #12 |
|
Создано: 13 июля 2006 20:55 · Личное сообщение · #13 |
|
Создано: 13 июля 2006 21:03 · Личное сообщение · #14 |
|
Создано: 13 июля 2006 21:20 · Личное сообщение · #15 |
|
Создано: 13 июля 2006 23:08 · Личное сообщение · #16 |
|
Создано: 14 июля 2006 10:45 · Личное сообщение · #17 |
|
Создано: 14 июля 2006 20:52 · Личное сообщение · #18 |
|
Создано: 14 июля 2006 21:24 · Личное сообщение · #19 |
|
Создано: 15 июля 2006 08:15 · Личное сообщение · #20 stahh пишет: У меня выравнивание 1000. Думаю - это как раз то. А директория импорта тож не открывалась? И чо, статей по реверсу нету? О вот таких сложных пациентах. 1) Выравнивание именно такое было. Я просто удлинял секцию. SizeofImage портился даже при простом пересчете. 2) Статьи тут не при чем. Надо всегда проверять. Rebuild PE на поверку тоже подвирает, но тут я не исследовал. Врут как раз в простых случаях в основном. ============ Если народ настаивает, то "кроликов" предоставлю. Возможно просто плагин-ы у меня не "обновлены". lordpe и petools вроде свежие. |
|
Создано: 15 июля 2006 11:02 · Личное сообщение · #21 tundra37 Знаешь, я пересчитал, вроде все правильно. Сложил виртсайз всех секций плюс офсет первой. Или к каждой секции еще 1000 добавлять? Пробовал добавить 1000 к последней секции - тоже самое. "Файл не является приложением Win32". Может защита? NIKOLA Я ее не могу отрезать, так как она активно юзается. А вручную - "ошибка при инициализации приложения 0*с0000005". У меня во всех прогах на делфи, которые я пытался распаковать - такая хрень. Вроде - все правильно делаю, и импрек находит все ф-ции, а такая хрень. Руки наверное кривые |
|
Создано: 15 июля 2006 16:48 · Личное сообщение · #22 |
|
Создано: 15 июля 2006 20:02 · Личное сообщение · #23 tundra37 Объясни подробней - чо надо сделать. Как ты делал? А то устроили мы тут викторину. SizeofImage - 0C129000. Пробовал и 0C12А000.А ты байты к экзешнику добавил ?! - это где? В атаче - секции. f4b7_15.07.2006_CRACKLAB.rU.tgz - screen.jpg |
|
Создано: 16 июля 2006 09:38 · Поправил: tundra37 · Личное сообщение · #24 stahh пишет: Как ты делал? Может, конечно, я что-то не понял, но petools и lord правят только каталог и длины секций. Сам экзешник они не удлинняют. Я удлиннял через winhex. С SizeofImage проблемы были только в loaddll из олли - там выравнивание 10000 и petools упорно режет по VirtualSize - после такой правки "программа не запускается". Я ее удлиннял, чтобы дамп DLL получить по разным адресам - была тут тема. |
|
Создано: 16 июля 2006 11:30 · Личное сообщение · #25 Забыл - для loaddll в сборке shadow такой фокус не проходит - там в последней секции VirtualSize уже "округлен". Удлиннял секцию ресурсов - виртуальный размер. Рабочий оригинал loadall в аттече +++++++++++++++++++++++++++++++++++++++++++++++ Дополнительно проверил добавление секции к DLL в PeTools. Сразу после добавления пустой секции - нерабочая DLL. a6e5_16.07.2006_CRACKLAB.rU.tgz - loaddll1.exe |
|
Создано: 17 июля 2006 21:40 · Личное сообщение · #26 |
|
Создано: 18 июля 2006 00:15 · Личное сообщение · #27 2 ALL Вот нарыл на винте ___________________________ Ручное добавление секций в EXE Автор......: SunShine Перевод....: NightCat \\ TEAM-53 Инструменты: Hex-Редактор, PEditor(или PE Tools, ProcDump, LordPE) 1. Вступление Иногда добавление новой секции - выход из ситуации, когда больше некуда вставить свой код в PE. Я знаю много редкаторов, которые сделают всё автоьматически, но у вас есть стимул, чтобы хоть раз сделать это руками: вы кое-чем научиться относительно формата PE, особенно что касается секций. Давайте начнём! 2. Добавляем байты Сперва давайте глянем на наш AddSection.exe. Откройте его в PEditor или другой программе и вы увидите, что там 3 секции: Section Virtual Size Virtual Offset Raw Size Raw Offset Characteristics .text 000002C2 00001000 00000400 00000400 60000020 .rdata 000001C2 00002000 00000200 00000800 40000040 .data 000002F8 00003000 00000200 00000A00 C0000040 Откройте этот файл в Hex Workshop. Допустим мы хотим. чтобы наша новая секци была длиной 110h байт. Как вы видите в конце файла есть много нулей. Так что выделите их все начиная с AE0 до BEF (как раз 110h байт), затем выберите Edit->Copy. После этого поместите курсор в самый конец файла и выберите Edit->Paste. Ну вот, у нас есть новая секция. Она начинается с оффсета C00 и заканчивается на D0F. Её длина 110h байт. 3. Модифицируем PE Header Чотбы пофиксить PE Header, нам нужно сделать три шага: - Увиличить число секций (число находится ан оффсете 06 в заголовке PE!) - Увеличить Image Size - Добавить нашу новуюсекцию в section table Как вы видитет, PE signature находится по оффсету B0. На на оффсете B6 вы видите 03 00 (переведём в DWORD - 0003), т.к. у нас в оригинале 3 секции. Надеюсь понятно, что мы должны поменять 0300 на 0400. Теперь нам нужно увеличить Image Size. Вещь о которой обычно забывают =) Давайте снова взглянем на файл через PEditor. Мы видим, что Section Alignment = 1000h, а Image Size = 4000h. Т.к. выравнивание у нас равно 1000h, наша секция должна быть длиной как минимум 1000h. Так что мы должны добавить 1000h к Image Size. Получается, что 4000h + 1000h = 5000h. Image size находится по оффсету 50h в заголовке PE. Идём к B0h + 50h = 100h. Тут меняем 0040 на 0050. Сейчас нам нужно добавить секцию в section table. Эта таблица начинается с оффсета F8h в заголовке PE. На секцию отводится 28h байт в таком порядке: +0 Array[8] of byte Name -> назовём нашу секцию .Sun +08 DWORD PhysicalAddress / Virtual Size -> Virtual size = 110h -> 10010000 +0C DWORD VirtualAddress -> 4000, т.к. для предыдущей 3000 -> 00400000 +10 (16) DWORD SizeOfRawData -> 110h -> 10010000 +14 (20) DWORD PointerToRawData -> мы добавили начиная с C00 -> 000C0000 +18 (24) dword PointerToRelocations -> 00000000 +1C (28) DWORD PointerToLineNumbers -> 00000000 +20 (32) WORD NumberOfRelocations -> 00 +22 (34) WORD NumberOfLineNumbers -> 00 +24 (36) DWORD Characteristics -> C0000040 (как у секции .data) -> 400000C0 Итак, добавьте эти данные в таблицу сразу же за последней секцией по оффсету B0h + F8h + 3*28h = 220h. Если вы всё сделали правильно, то в итоге всё должно выглядеть как на скриншоте finish.gif. Вот и всё. Сохраняйте файл, загружайте в PEditor, чтобы проверить всё ли в порядке. Ага, это совсем не сложно, не так ли? Keep cool! Sunshine ----- Nulla aetas ad discendum sera |
|
Создано: 18 июля 2006 10:16 · Личное сообщение · #28 stahh пишет: Я Винхексом не пользовался. Делаю так: Вставить нулевые биты, указываю 1000 бит, потом сохранить модифицированный. ОК, файл увеличился на 1кб. 1) Чем добавляешь ? Попробуй на loaddll.exe это все повторить. 2) Удлиннение файла ни о чем не говорит. loaddll у меня тоже иногда удлинняется, но никогда не работает. Проверить raw-size можно делая save секции в файл. Flint пишет: Ручное добавление секций в EXE Это все было написано, когда тулзы не делали это автоматом. И petools и lord делают это, но иногда врут. Повторю - возможно у меня плагины старые, но нужно разобраться. На loaddll все могут проверить. |
|
Создано: 19 июля 2006 00:45 · Личное сообщение · #29 |
|
Создано: 19 июля 2006 09:35 · Поправил: tundra37 · Личное сообщение · #30 stahh пишет: Какую-то мелочь я пропускаю Если бы я знал. Прицепи каталог секций и PE-заголовок работающей(!) и неработающей(с добавленной секцией) программ. Эксперименты с Loaddll показали, что дело в SizeofImage, но я добился пока добавления существующей секции, причем пришлось править и параметры секций( я добавил еще одну секцию ресурсов, а потом удалил обе и добавил удлинненую). Попробуй не создавать секцию, а грузить ее (load section), но следи за цифрами. ++++++++++++++++++ Пока подозрение, что у тебя другая проблема. У тебя должно сработать так : 1) Добавляешь через load секцию и просто в PETools тюкни кнопку с вопросом сбоку от SizeofImage - он сам пересчитает. И ни в коем случае не делай REBuild PE - у меня еще ни разу на дампе не получался рабочий экзешник. |
. 1 . 2 . >> |
eXeL@B —› Основной форум —› Рипнуть ф-цию ? |