Русский / Russian English / Английский

Сейчас на форуме: morgot (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Крэки, обсуждения —› Распаковка dll (PEC2)
Посл.ответ Сообщение

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 27 марта 2008 11:51 New!
Цитата · Личное сообщение · #1

Привет.
Собственно появилась необходимость снять PECompact v2.x с dll.
До этого с dll дел не имел, что-то зашёл в тупик.
Может кто-нибудь описать хотя бы в общем как dll-ку распаковать?
У неё же OEP нету, непонятно как потом импорт исправлять.
С EXE я импорт imprec'ом правлю - запускаеш пакованный EXE и дальше Find Import и т.д.
А с dll как быть? И где оно вообще распаковывается? В DllMain при PROCESS_ATTACH или по другому как-то?
В общем опишите кто-нибудь как распаковать dll, можно не очень подробно, только суть, да и не обязательно PEC.
И такой ещё вопрос - в природе существуют статические распаковщики для PECompact? Я не нашёл что-то...


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 27 марта 2008 12:14 New!
Цитата · Личное сообщение · #2

cppasm
Это почему это EP нет у длл? Обычно как раз таки он есть. И при загрузке длл она стартует с EP. Если навешан упаковщик/прот, то скорей всего он (прот/упаковщик) и стартует с EP. Раньше EP может стартовать TLS (так что тоже не забываем про это). Теоретически распаковка длл прикатически похожа на распаковку exe, за исключением правки релоков опосля


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 27 марта 2008 12:15 New!
Цитата · Личное сообщение · #3

оеп у длл есть - это dllentry. в импреке есть кнопка справа сверху - pick dll. там нужно выбрать длл, импорт в которой желаешь найти. дальше все как и при поиске импорта у ехе.

Ранг: 5.2 (гость)
Статус: Участник

Создано: 27 марта 2008 12:19 New!
Цитата · Личное сообщение · #4

По поводу распаковки здесь много инфы вот например --> Link <--
cppasm пишет:
как dll-ку распаковать?

Грузится в отладчик спокойно.
cppasm пишет:
У неё же OEP нету

очень смешно как это нет что DLL разве не WIN32 приложение?
cppasm пишет:
как потом импорт исправлять

зачем запускать путь остаётся в отладчики на оепе висеть.
cppasm пишет:
существуют статические распаковщики для PECompact? Я не нашёл что-то...

я не сталкивался есчё пока

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 27 марта 2008 12:26 New!
Цитата · Личное сообщение · #5

Да, с EP это я погорячился.
Основной вопрос - как её сдампить.
Т.е. гружу я её в Olly, она грузит через свой LOADDLL.
Ну и код я вижу соответственно этого модуля LOADDLL, а не своей dll'ки.
Как попасть на EP запакованной dll?


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 27 марта 2008 12:27 New!
Цитата · Личное сообщение · #6

cppasm
Для тренировки в распаковке длл начни с самого простого. Упакуй UPXом любую дллку и попробуй снять ручками UPX. Впринципе ничего сложного. Потом уже возьмешся и за PEC.


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 27 марта 2008 12:29 New!
Цитата · Личное сообщение · #7

cppasm
PEtools юзай. Очень удобный на мой взгляд. Выберешь процесс, а в этом процессе найдешь свою длл и сдампишь.


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 27 марта 2008 13:06 New!
Цитата · Личное сообщение · #8

[HEX] пишет:
Раньше EP может стартовать TLS (так что тоже не забываем про это).

В DLL TLS не срабатывает, по крайней мере при старте.

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 27 марта 2008 13:06 New!
Цитата · Личное сообщение · #9

[HEX] пишет:
Для тренировки в распаковке длл начни с самого простого. Упакуй UPXом любую дллку и попробуй снять ручками UPX.

Так а разница?
Там что upx что pec один фиг.
Проблема в том что я когда в Olly гружу exe - я стою сразу на EP. Дальше всё понятно.
А как в загруженной dll на EP попасть - фиг знает.
Ну точнее извратным способом пока только могу.
Смотрю EP в бинарнике CFF Explorer'ом, а потом смотрю по какомуадресу загрузились, плюс EP из бинарника и всё.
Но может есть человеческий способ...

Ранг: 617.3 (!)
Статус: Участник

Создано: 27 марта 2008 13:12 · Поправил: Vovan666 New!
Цитата · Личное сообщение · #10

Загружаешь длл в ольку, ставишь бряк hr esp-4, жмешь F9 5-6 раз пока не дойдешь до JMP EAX (это jmp OEP), Открываешь LordPE (или что больше нравится), выбираешь процесс loaddll.exe снизу появятся dll которые этот процесс юзает, дампишь нужную длл, в imprec выбираешь loaddll.exe жмешь Pick DLL и выбираешь нужную тебе. Собственно и всё дальше как с обычным exe если только релоки не надо будет править.


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 27 марта 2008 13:25 New!
Цитата · Личное сообщение · #11

cppasm
ты че, жмешь F9 после открытия длл в олли??? Сразу после загрузки длл олли стоит на ЕП именно длл, а не ехе. А вот если нажать Ф9 - то попадаешь на еп loaddll.exe Дальше трейсишь как обычный ехе. Не понимаю, чо за проблемы у тебя...

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 27 марта 2008 13:33 · Поправил: cppasm New!
Цитата · Личное сообщение · #12

Vovan666 та я так и пытаюсь делать, по сути от exe отличий нет.
Только не выходит нифига. После загрузки код странный (привёл ниже).

Rascal пишет:
ты че, жмешь F9 после открытия длл в олли???

Не, не жму. Может у меня dll какая-то неправильная...
Вот что получаю при загрузке в Olly:

10001000 00 DB 00
10001001 00 DB 00
10001002 00 DB 00
10001003 00 DB 00
10001004 00 DB 00
10001005 00 DB 00
10001006 00 DB 00
10001007 00 DB 00
10001008 00 DB 00
10001009 00 DB 00
1000100A 00 DB 00
1000100B 00 DB 00
1000100C 00 DB 00
1000100D 00 DB 00
1000100E 00 DB 00
1000100F 00 DB 00
10001010 00 DB 00
10001011 00 DB 00
10001012 00 DB 00
10001013 00 DB 00
10001014 00 DB 00
10001015 00 DB 00
10001016 00 DB 00
10001017 00 DB 00
10001018 00 DB 00
10001019 00 DB 00
1000101A 00 DB 00
1000101B 00 DB 00
1000101C 52 DB 52 ; CHAR 'R'
1000101D 53 DB 53 ; CHAR 'S'
1000101E 44 DB 44 ; CHAR 'D'
1000101F 53 DB 53 ; CHAR 'S'
10001020 2C DB 2C ; CHAR ','
10001021 3B DB 3B ; CHAR ';'
10001022 51 DB 51 ; CHAR 'Q'
10001023 A6 DB A6
10001024 E7 DB E7
10001025 A4 DB A4
10001026 8C DB 8C
10001027 4C DB 4C ; CHAR 'L'
10001028 A1 DB A1
10001029 70 DB 70 ; CHAR 'p'
1000102A 2F DB 2F ; CHAR '/'

Блин, полазил CFF Explorer'ом. Это очень похоже на resource only dll.
Секции такие: .rdata, .rsrc, .reloc
Только вот вопросы:
1. нафига тогда .reloc?
2. как его упаковали pec если там кода по сути нету?


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 27 марта 2008 13:43 New!
Цитата · Личное сообщение · #13

а где ты тут видишь pec ?

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 27 марта 2008 13:59 New!
Цитата · Личное сообщение · #14

Сигнатуру PEC2 я вижу в бинарнике, PEID мне то же самое говорит.
Собственно вот сама dll: dump.ru/files/o/o814538429/

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 27 марта 2008 14:02 New!
Цитата · Личное сообщение · #15

Вобще в PECompact Oep можно найти практический в статике табличка юзается оригинальная поэтому юзать лишние приблуды типа ипрека моветон ...


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 27 марта 2008 14:42 · Поправил: Rascal New!
Цитата · Личное сообщение · #16

control+g -> 1099429F -> ПКМ -> breakpoint -> hardware on execution. дальше рестарт. через сех меняется eip и вписывается jmp blablabla.

10539000 |> /33C0 XOR EAX, EAX ; packed.10539000

судя по всему оеп
зы: дампить мона без заморочек в олли. импорта в ресурс длл нету. проверил пеексплорером - ресурсы в норме. распакованная весит 9 с лишним метров =)

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 27 марта 2008 16:37 New!
Цитата · Личное сообщение · #17

Вроди получилось...

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 27 марта 2008 16:46 New!
Цитата · Личное сообщение · #18

Rascal
Оеп легко можешь проверить! В выделеной памяти под распаковщик
00350888 00400000 pec2gui.00400000 <--- Бинарный поиск им базы два подряд
0035088C 00400000 pec2gui.00400000
00350890 0001B033 <----------OEP RVA
00350894 000000C8
00350898 000388AA
0035089C 00000000
003508A0 00037C80
003508A4 00037C84
003508A8 00000000
003508AC 00000000
003508B0 00031BFA
003508B4 00000884
003508B8 0002E674 <---IAT RVA

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 28 марта 2008 04:35 New!
Цитата · Личное сообщение · #19

Bronco пишет:
А как правильно её прописать в директориях????
//Где считать за начало, ну и соответственно размер

pavka пишет:
00350890 0001B033 <----------OEP RVA
00350894 000000C8
00350898 000388AA
0035089C 00000000
003508A0 00037C80
003508A4 00037C84
003508A8 00000000
003508AC 00000000
003508B0 00031BFA
003508B4 00000884
003508B8 0002E674 <---IAT RVA

скрипт
var va
var iat_st
var oep
var counter
var ImageBase
var lbase
var simb

mov counter,0
gmi eip,MODULEBASE
mov ImageBase,$RESULT
mov simb,$RESULT
rev simb
mov simb,$RESULT
eval "#0000{simb}0000{simb}#"
mov simb,$RESULT

gpa "VirtualAlloc","kernel32.dll"
bp $RESULT
erun
rtu
mov lbase,eax
erun
bc eip
rtu
find lbase,simb
cmp $RESULT,0
je quit
mov oep,[$RESULT+8]
mov iat_st,[$RESULT+30]
add oep,ImageBase
/*
0035123C 8906 MOV DWORD PTR DS:[ESI],EAX
0035123E 8902 MOV DWORD PTR DS:[EDX],EAX ; kernel32.GetFileType
00351240 83C2 04 ADD EDX,4
*/
find eip,#8906890283C20483C604#
cmp $RESULT,0
je quit
mov [$RESULT],#8B028906#

find eip,#034E085156E8????????85C074#
cmp $RESULT,0
je quit
bp $RESULT+A
erun
bc eip
mov eip,oep
cmt eip,"This is the OEP"

sub oep,ImageBase
mov counter,ImageBase
add counter,3C
mov counter,[counter]
add counter,ImageBase
add counter,28
mov [counter],oep
add counter,58
mov [counter],iat_st
dpe "dump.exe", eip

msg ""The file is completely unpacked!"
ret

quit:
ret

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 28 марта 2008 12:48 New!
Цитата · Личное сообщение · #20

Bronco пишет:
Откуда начинаетЦо понятно, а вот с размером...

Размер можешь посчитать разница между окончанием назв. модулей/фунок... и началом Только зачем тебе это? Загрузчику этот параметр по барабану так же как если ты переделаешь тип таблицы из делфи в си и оставишь
004D2154 >7C91188A Љ‘| ntdll.RtlDeleteCriticalSection
004D2158 >7C9010ED нђ| ntdll.RtlLeaveCriticalSection
004D215C >7C901005 ђ| ntdll.RtlEnterCriticalSection
004D2160 >7C809FA1 ЎџЂ| kernel32.InitializeCriticalSection
004D2164 >7C809B14 ›Ђ| kernel32.VirtualFree
004D2168 >7C809A81 ЃљЂ| kernel32.VirtualAlloc
004D216C >7C80995D ]™Ђ| kernel32.LocalFree


Ранг: 102.8 (ветеран)
Статус: Участник

Создано: 28 марта 2008 13:58 New!
Цитата · Личное сообщение · #21

cppasm пишет:
И такой ещё вопрос - в природе существуют статические распаковщики для PECompact? Я не нашёл что-то...


VMUnpacker распаковал эту dll без проблем. Статичным назвать его конечно нельзя, но обошлось без отладчиков и дампов

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 28 марта 2008 14:33 New!
Цитата · Личное сообщение · #22

ManHunter пишет:
VMUnpacker распаковал эту dll без проблем. Статичным назвать его конечно нельзя, но обошлось без отладчиков и дампов

Спасибо, посмотрю.
Меня просто удивило очень что QUnpack не справился - просто падает.
А так и руками можно снять - с толку сбило что секции кода там нету.
А вообще конкретно тут всё просто оказалось.
Поскольку в dll одни ресурсы, то просто загрузил её в Olly, сдампил полностью и пересобрал секцию ресурсов.
На этом всё закончилось.


Ранг: 2008.6 (!!!!)
Статус: Модератор
retired

Создано: 28 марта 2008 21:53 New!
Цитата · Личное сообщение · #23

Последний QU нефига не падает, анпачит, вроде. Работоспособность не на чем проверить, правда. Скоро релизну версию 2.1

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 28 марта 2008 23:23 · Поправил: cppasm New!
Цитата · Личное сообщение · #24

Archer а где можно последний на текущий момент взять?
У меня не самый новый, 1.0.5. Через раз то DEP ругается, то Runtime cause program to quit in an unusual way.
// Добавлено
Нашёл сайт. Скачал, вроди работает.
Сейчас по-детальней dll-ку потестирую, но вроди рабочая получается.
Если будут косяки я напишу.
 eXeL@B —› Крэки, обсуждения —› Распаковка dll (PEC2)

Видеокурс ВЗЛОМ