Сейчас на форуме: _MBK_, asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите разобраться с защитой :: UPX, Markus & Laszlo [Overlay] и ещё много-много страшных слов
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 23 мая 2009 14:50 · Поправил: EST2000
· Личное сообщение · #1

Доброго вам времени суток, уважаемые!

Программа генерирует COFF файл для Proteus. (Тем кто не знает - это из области электроники)
Ограничения: максимум генерация файла в два кб.

Смотрим:
PEID: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay] - Снимаем...
UPX -d сотрудничать отказался (закриптован/модифицирован)
Ручная распаковка, QUnpack, PEiD Generic Unpacker дают одинаковый результат - дамп запускается.
Смотрим дальше:
PEID: Borland Delphi 6.0 - 7.0
Olly упорно твердит, что OEP вне кода, анализ кода тоже помощи не дает. Криптор ?
Смотрим Strings - такому письму позавидуют даже китайцы. Смотрим саму программу - вроде бы всё в порядке, за исключением нескольких мелочей. Во первых программа запускается без автоматического выбора вкладки (не работает OnFormActivate ?), несколько строк - буквы мешаются с русскими (прога на англ.), вобщем - что-то с ресурсами. PE Explorer - в принципе всё в порядке, видим компонент IceLicense с защитой от отладки, монитора и криптованием кода. Ну и ещё заметил: секция ресурсов вроде как отдельно и существует, но фактически ресурсы начинаются в предыдущей секции. От Res.Binder тоже толку мало, всё остается по старому. А вот теперь, то, чего я никак не могу понять, не спрашивайте как я на это вышел, не помню. Открываем файл в WinHex, допишем 1 нулевой байт в конец файла, смотрим: строчки которые шли в перемешку с русскими буквами оправились, но не все. Допишем ещё 1 байт: все строчки читабельны, за исключением всё того-же выбора первой вкладки при запуске программы. PEiD уже показывает Borland Delphi 6.0 - 7.0 [Overlay]. Некоторые строчки уже появляются в Olly, но всё равно недостаточно для работы. Дописываем ещё 1 байт, и сразу же всё приходит в такойже искореженный вид как и сразу после распаковки.

Объясните мне, новичку, почему так происходит, кто в этом виноват и как это убрать.
Чувствуется, что "истина где-то рядом" но что-то не пойму куда копать, ICELicense по идее не так и страшен как его малюют, и кажется что здесь ещё что-то сидит. Хотя я могу и очень ошибаться.
Тема не есть запрос на кряк, интересно понять и убрать защиту с вашей помощью.

Прога + 2 образца для теста (из компл. и второй более 2 кб) rapidshare.com/files/236296481/CM4.32.rar.html




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 23 мая 2009 15:28
· Личное сообщение · #2

EST2000Надо в файле правильно выставить Size of Codeи Base of Code тогда олька небудет ругаться при загрузке файла

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 23 мая 2009 16:02 · Поправил: EST2000
· Личное сообщение · #3

ClockMan пишет:
Надо в файле правильно выставить Size of Codeи Base of Code


Знать бы ещё что выставить Там две секции без имени, которая из них код, какая дата. Поставил Base от первой и Size обоих, и.. да, олька ругаться перестала, добавилось немного читабельных стрингов (в ольке) - остальное по прежнему. А вот ещё, уважаемые, скажите, а возможно как-то раскопать границы секций и разделить их, и как их опознать (имена/типы). Такое впечатление что секции идут примерно так (образно) первая с 0 до 1.5, вторая с 1.5 до 2.5, третья с 2.5 до 4.0
Такое ведь возможно, каким-то модификатором или даже вручную сделать, чтобы запутать анализаторы и таких как я ))



Ранг: 48.2 (посетитель), 49thx
Активность: 0.040
Статус: Участник

Создано: 23 мая 2009 17:36
· Личное сообщение · #4

EST2000 пишет:
Olly упорно твердит, что OEP вне кода, анализ кода тоже помощи не дает

распаковал в ручную и олька не ругается ни разу, да и со строками вроде все нормально
вот посмотри sderni.ru/34007




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 мая 2009 18:10
· Личное сообщение · #5

В общем случае границы, как и имена секций, не распознаешь. Хотя это и не нужно обычно, работает и ладно. А что за фиговина с дописыванием 1-хз, смотреть надо.



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 23 мая 2009 20:06
· Личное сообщение · #6

EST2000
А почему PE Explorer'ом не распаковывал. Ему пофиг обфускация UPX, и секции нормальные будут.



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 23 мая 2009 20:53
· Личное сообщение · #7

LIZARD пишет:
распаковал в ручную и олька не ругается ни разу, да и со строками вроде все нормально
вот посмотри sderni.ru/34007

У меня не запускается, и олька тоже самое твердит

SVLab пишет:
А почему PE Explorer'ом не распаковывал. Ему пофиг обфускация UPX, и секции нормальные будут.


А вот я как-то и не знал даже )) Я знаю что он может их просматривать, но мне и в голову не пришло, что сохраняется файл уже распакованный Спасибо!

Распакованный PE Explorer-ом файл действительно не покореженный, секции красиво смотрятся, дописывать ничего не надо, видимо уже всё дописанно. PEiD говорит: Borland Delphi 6.0 - 7.0 [Overlay]
Такой вариант был после "дописывания" байтов. Как-то вот непонятно мне это. Может действительно всё дело в искареженных секциях, не знаю, на ум ничего не приходит. И опять же, куда пропадает стартовая вкладка ? (OnFormActivate)



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 23 мая 2009 22:08
· Личное сообщение · #8

Возможно, все дело в этом overlay, в смысле, на него завязана какая-нибудь проверка, потому и вкладка не активируется (ну и последующие глюки возможны). Это два байта в конце нераспакованного файла, которые как-бы отсутствуют, вернее в заголовке файла сказано, что файл заканчивается до этих байт, они не входят в последнюю секцию. Pe Explorer их тоже дописывает, а при ручной распаковке они, естественно, теряются.
Но у меня, что вручную распакованный (без этих байт), что експлорером, работают одинаково, без твоих "страшных" глюков , но без активной вкладки. Дописывание также ничего не меняет. Возможно, имеет значение не только их наличие, но и значение и расположение. Попробуй удали их у запакованного файла - получишь еще один вариант работы программы.



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 23 мая 2009 23:31 · Поправил: EST2000
· Личное сообщение · #9

SVLab пишет:
Но у меня, что вручную распакованный (без этих байт), что експлорером, работают одинаково


Получается - что у меня фигня какая-то получается )) Первое где заметно - на вкладке "About" посередине вместо "No license" пишет "Пи license", и на вкладке "License" в окошках, что открываются по ссылкам - тоже крякозябы. Эти глюки исчезают после дописывания этих байт. Распаковываю стандартным способом, Нахожу OEP (005116A4), дамп через PETools, затем ImpRec и в заключении ResBinder. Может я чего пропустил, но уже не первый раз так распаковываю, вроде нормально получалось.

SVLab пишет:
получишь еще один вариант работы программы


Вот я чего и боюсь, программа генерирует отладочный код, если она его будет генерить так же, как я: "а не дописать ли мне ещё 2 байта ?" - то дело плохо )))

Хотя, по идее, если дамп запускается и не вылетает спустя время - проверки целостности кода нет, т.е. подменив прыжок на OEP (прога уже будет висеть в памяти распакованная) я могу прыгнуть на свободный участок, где пропатчу нужное место, а затем как и задумывалось прыгну на OEP, то вобщем больше ничего и не надо. Но всё же интересно остается про 2 байта ))) И почему именно 2 )))




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 24 мая 2009 04:13
· Личное сообщение · #10

EST2000 пишет:
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay]

EST2000 пишет:
Открываем файл в WinHex, допишем 1 нулевой байт в конец файла

В конец фало надо дописать в бинарном виде 99A0 это оверлей по которому скорей всего идёт расшифровка ресурсов файла

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2009 01:13 · Поправил: EST2000
· Личное сообщение · #11

ClockMan пишет:
В конец фало надо дописать в бинарном виде 99A0


А "ткните пальцем" пожалуйста, куда смотреть. Очень уж интересно именно разобраться в подробностях.

SVLab пишет:
Но у меня, что вручную распакованный

Коротко опишите процесс распаковки, если не сложно. Я распаковывал как по статье Распаковка UPX-Scrambler - нет ничего проще. И получил далеко не лучший вариант. По такому же принципу работают и Generic Unpacker и QUnpak (и на выходе файл один-в-один)

Вобщем-то я уже сломал её, но онтересны именно мелочи.
Слом такой (ориг. файл, не распакованный):

Code:
  1. ; меняем стандартный прыжок пакера на OEP
  2. 00595E2B    E9 74B8F7FF     jmp 005116A4

Code:
  1. ; на прыжок в пустое место...
  2. 00595E2B    E9 BE000000     jmp 00595EEE
  3. ; а там уже не пустое место, а вот что:
  4. 00595EEE    C705 23715000 00A00F00  mov [dword ds:507123],0FA000
  5. 00595EF8    E9 A7B7F7FF             jmp 005116A4

Первая строка - меняем байты в распакованном коде с 2 на 0FA000, и получаем вместо 2кб - 64мб (куда уж больше ). в процессе последующего умножения получим не 0х800 (2048), а 0x3E80000 (65536) это число и будет занесено как ограничение на размер файла

Вторая строка - прыжок на OEP.


Все комментарии, замечания и критика приветствуются, ибо новичек, до советов - голодный.



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 25 мая 2009 02:53
· Личное сообщение · #12

Ну, вообще-то, я соврал немного, оказывается. После твоего поста посмотрел в About, - также без оверлея "Пи license". С оверлеем нормальное "No license". А распаковать UPX как-то не так надо еще умудриться, не думаю, что файлы у нас получились разные. Посмотри, если хочешь
rapidshare.com/files/236871780/Dumped1.rar.html
Процесс для UPX (неважно, скрэмблированный или нет): В Оле идем в конец секции кода (по Олиной интерпретации) и ставим брейкпойнт на последний JMP. Запускаем. После прерывания еще один шаг и мы на OEP. Дамп, импорт, правка заголовка дабы Оля не ругалась, прикручивание оверлея (если есть). Вроде всё.
По поводу "ткните пальцем", уже ведь тыкали - в конце нераспакованного файла.
По твоему инлайну, а зачем такой длинный прыжок аж на 595еее?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 25 мая 2009 04:27 · Поправил: ClockMan
· Личное сообщение · #13

EST2000WinHex и PeTools тебе в руки
Открываешь упакованный файл в ре редакторе на вкладке секций смотришь последнию секцию а именно значение RawOffset и Raw Size складываешь их вместе и запоменаешь это число,открываешь этот фаый в WinHex и идёшь по этому адресу точто начинается с этого адреса это оверлей в твоём случае это 99A0

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 мая 2009 10:37
· Личное сообщение · #14

Сходу вопрос: поставить галку в QuickUnpack для обработки оверлея не пробовал? Если дело в нём, должно прокатить.



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2009 11:06
· Личное сообщение · #15

SVLab пишет:
По твоему инлайну, а зачем такой длинный прыжок аж на 595еее?


Пробовал недалеко от прыжка делать - перестал запускаться, может проверка пакера какая-то, а может нужно это место для чего, пробовал отследить на запись, результатов не получил, не стал дальше копать - спустился почти под конец файла и всё заработало.

ClockMan пишет:
начинается с этого адреса это оверлей в твоём случае это 99A0

Точно! ) Соответственно оверлей надо положить так-же как и был ? Т.е. на распакованном файле также делаем как и на запакованном (RawOffset + Raw Size) - положить туда то же что и в запакованном ?



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2009 11:36
· Личное сообщение · #16

Archer пишет:
Сходу вопрос: поставить галку в QuickUnpack для обработки оверлея не пробовал? Если дело в нём, должно прокатить.


прокатило, а почему раньше не сделал - QUnpack ещё 1.5 без галочки этой был (ступил сильно не ругайте). Да, дописал оверлей, вроде всё на месте. Единственный вопрос остался непонятным - про стартовую вкладку. Казалось-бы всё есть, программа работает, ограничение сняты. Но интересно же ))
Неужели придется трейсить и сравнивать потом киллометры трейс-лога ?!




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 25 мая 2009 12:20
· Личное сообщение · #17

EST2000 пишет:
Соответственно оверлей надо положить так-же как и был

Ты сам ответил на свой вопрос ))

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 25 мая 2009 16:29 · Поправил: Jupiter
· Личное сообщение · #18

файл можно распаковать при помощи upx -d
для этого нужно исправить имена секций (на UPX0 и UPX1) и подкорректировать данные для распаковки UPX

по шагам:

1. Имя первой секции: UPX0
2. Имя второй секции: UPX1
3. На позиции файла 3E0h вписать данные значения:

Code:
  1. 555058210D09080798E48BD396852C534F35190079BC070000A0180026140087


после чего файл будет распакован по команде

Code:
  1. upx -d CofMaker.exe


CofMaker.v4.32.Unpacked.exe.only.rar

-----
EnJoy!




Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2009 19:12
· Личное сообщение · #19

Jupiter пишет:
1. Имя первой секции: UPX0
2. Имя второй секции: UPX1
3. На позиции файла 3E0h вписать данные значения:


Какой оригинальный способ )
Восстановить заголовок UPX и распаковать тем же, чем и запакованно )



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 25 мая 2009 21:06
· Личное сообщение · #20

EST2000
это не оригинальный способ это правильный способ




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 25 мая 2009 22:44
· Личное сообщение · #21

EST2000 пишет:
Какой оригинальный способ


это способ, который я пробую первым: он экономит время, не нужно запускать отладчик, всё происходит в статике - так безопаснее.

-----
EnJoy!




Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2009 23:07
· Личное сообщение · #22

tihiy_grom пишет:
это не оригинальный способ это правильный способ

Век живи, век учись )) Я слышу первый раз ))

Jupiter пишет:
это способ, который я пробую первым: он экономит время

За описание данного способа - спасибо )))

Также выражаю огромную благодарность всем, за помощь, комментарии и потраченное (надеюсь не совсем зря) время. Спасибо!

Тему пока не закрываю, всё интересно всё же про панельки узнать, в принципе мелочь-мелочью, любопытно отчего так происходит (получается из-за распаковки). по идее это есть часть кода, которая перестала работать, интересно почему, а главное - нет ли где ещё таких участков "кривых". Наверное надо всё же трейсить и сравнивать. Но если есть у кого какие мысли или догадки - пишите ) Принимается любая информация.



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 26 мая 2009 00:26
· Личное сообщение · #23

EST2000
рекомендую порыться тут ;)

0050FC5D |. E8 4E57F8FF CALL CofMaker.004953B0

и сразу станет всё понятно



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 26 мая 2009 18:47 · Поправил: EST2000
· Личное сообщение · #24

tihiy_grom пишет:
рекомендую порыться тут ;)
0050FC5D |. E8 4E57F8FF CALL CofMaker.004953B0
и сразу станет всё понятно


Точно!!! Проверка на размер файла! tihiy_grom - ты молодец!

Образец размера файла франится в самом же файле:

Code:
  1. 00513478    02 E4 07 00     ; 0x07E402 = 517122 byte (запакованный файл)



При запуске - текущий размер записывается сюда:
Code:
  1. 0051A2EC   02 A0 18 00      ; 0x18A002 = 1613826 byte (расп. UPX -d файл)



В следствии дальнейших матем. манипуляций по адресу 0051A2F0 будет запись 00 00 (размер совпадает), либо значения не равные 00 00 (не совпадает). Насколько правильно я понял - в функции по дресу 004933C4 происходит загрузка компонентов формы, где и "всплывает" это значение. В зависимости от значения 0051A2F0 процес будет происходить по разному.

Открываем WinHex, идем на смещение 122078h и меняем 02 E4 07 00 на 02 A0 18 00.
Теперь вроде бы всё в порядке. С запакованным файлом таких проблем нет, т.к. хоть он и пропатченный, но размер от этого не изменился.



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 26 мая 2009 20:09 · Поправил: Valemox
· Личное сообщение · #25

EST2000, перезалей таргет плиз (ссыль ужо сдохла) хотца глянуть ее.
ADD: SVLab спс



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 26 мая 2009 21:25 · Поправил: SVLab
· Личное сообщение · #26

EST2000 пишет:
по адресу 0051A2F0 будет запись 00 00 (размер совпадает)

Вроде там должно оставаться 01 00, а нули должны оставаться в 51а2е8

Valemox
rapidshare.com/files/237524903/CM4.32.rar.html



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 27 мая 2009 02:01 · Поправил: Valemox
· Личное сообщение · #27

EST2000 пишет:
Открываем WinHex, идем на смещение 122078h и меняем 02 E4 07 00 на 02 A0 18 00

Слишком много телодвижений, так проще - лечится правкой 1-го байта
0050FC6F 668B02 MOV AX,WORD PTR DS:[EDX] <-- етого (был EAX)



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 27 мая 2009 07:10 · Поправил: SVLab
· Личное сообщение · #28

Valemox
Вариант EST2000'а более надежный и правильный, т.к. проверяется не только здесь. Вызовов функции, которая возвращает размер, - 3, возможно, есть и скрытые.
Единственно, что править можно в самой Оле.



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 27 мая 2009 10:57 · Поправил: Valemox
· Личное сообщение · #29

SVLab пишет:
Вариант EST2000'а более надежный и правильный, т.к. проверяется не только здесь.

Спорить не буду, но на мой вариант, покупается эта проверка. А где ты нашел еще проверку, которая не прокатывает?
Если быть до конца точным, то вариант предложенный EST2000'ом можно упростить до замены 1-го байта по адресу 00513479 с E4 на A0, но он привязан к размеру файла (что не есть камильфо).



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 27 мая 2009 11:57 · Поправил: EST2000
· Личное сообщение · #30

SVLab пишет:
Вроде там должно оставаться 01 00, а нули должны оставаться в 51а2е8

Очень может быть, я другие функции не проверял, ограничился тем, что функции сравнивают размер, и все берут его из одного места. Следовательно дав им понять, что размер действительно правильный - остальное должно идти правильно (теоретически)

Valemox пишет:
А где ты нашел еще проверку, которая не прокатывает?

Я например нашел два места:
Code:
  1. ; размер файла лежит тут: 00513478 (02 E4 07 00)
  2. 0050FC6A  |.  A1 98A65100   mov eax,[dword ds:51A698]  ; [ds:0051A698]=00513478
  3. 0050FC6F  |.  66:8B00       mov ax,[word ds:eax] ; Место, где ты предложил исправить.
  4. ;
  5. ; ...а вот смотри, точно такое же место, но по другому адресу
  6. 00510ADF  |.  A1 98A65100   mov eax,[dword ds:51A698]   ; [ds:0051A698]=00513478
  7. 00510AE4  |.  66:8B00       mov ax,[word ds:eax]
  8. ;


Поэтому и решил исправить сам размер, чтобы не отлавливать все запросы на сравнение.

А вот ещё вопрос:
Если бы не эта самая вкладка, которая не открывалась, и не подсказка tihiy_grom может никогда и не узнал бы, что есть проверка на размер файла. Может быть там и проверка CRC есть ? Если пропатчивание файла не идет в разрез с его размером, то уж точно идет поперек CRC. Может такая проверка тоже есть, и тоже не видна "глазом" ? Как вообще можно определить такую проверку ?
Как писал Jupiter "это способ, который я пробую первым", кто какой способ пробует первым для определение таких проверок ?


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Помогите разобраться с защитой :: UPX, Markus & Laszlo [Overlay] и ещё много-много страшных слов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати