![]() |
eXeL@B —› Вопросы новичков —› dll unpack? ok. |
Посл.ответ | Сообщение |
|
Создано: 07 ноября 2008 16:10 · Личное сообщение · #1 Дело было так... Анпакал какую-то непонятно чем запакованую dll(вроди orion), вроди нормально распаковал,из под оли она стартовала нормально, сую в exe... облом. Непорядок, забил на ту длл нашёл dll под upx'ом, думаю сначало снею разберусь и поставлю все точки над i. Вобщем распаковываю её, всё вроди нормально и под олей она запускается, с еxe не хочет, так думаю... значит не всё я знаю и побежал искать какие же тонкости тут есть... НАшёл, нужны релоки и есть тулза ReloX, которая поможет их востановить, ни чего практичексого или немного более о релоках нет. Ясно, придётся разбиратсо самому... ну ок. Кхм, ну вот... Начал я с того, что сморел что и какие секции есть у dll и прибывают/остаются после дампа и т.д. В запакованой dll всё выглядет очень хорошо, всё присутствует, ну это же всё упаковщика, поэтому нафиг они нам нужны? Нам поидей нужно привести дамп в рабочее состояние. Ну сморим, после дампа мы имеем 2 ненужные секции upx(если он) и .rsrc , в rsrc собствено исполняемы код, ресурсы и ещё были пустые релоки(видимо попытка на их создание), ну вобщем то хорошо, для dll нам нужно ещё добавить импорт и релоки(кажется для релоков можно отдельной секции не делать), ну вобщем ок, востанавливаем импорт , чтож изменилось? А вот Импрек добавил новую секцию называет он её всё время .mackt. это канешно же всё хорошо и dll нормалбно распакована, но нам нужно чтоб она ещё не просто под олей запускалась, а ещё и под exe , чтобы управление передовалось нормально. ок, для этого нужны релоки, они корректируют запуск и тогда dll нормально запустится из под своего exe. ок, посмотрим чтож не так если релоков нет,(Загружаем в олюку еxe c недоделаной dll, выходим на эту dll) а не так там в заголовке и ещё кажется с импортом(может ещё где), адреса должен изменится в коде на выделеные ей(т.к. выделяются разные), а не те что записаны изначально, т.е. imagebase изменился, а в коде команды использую старый imagebase тут то и ошибка. Чтож, а если мы сдампим dll не из под лодера оли, а из под нашего exe c уже получается нормально исправлеными адресами в коде? Ок, сдампили, востановили импорт , запускаем exe из под оли и... Работает! Хех, значит доводы были верны, запускаем , без оли и... НЕ Работает, х блин понятно, значит страдали мы хернёй и выделяемые адреса без оли, а просто запуска exe будут другими. НУ ладно, выход один, не страдать хернёй и прикрутить релоки, особо не разбираясь, что и зачем сделал 2 дампа с разными ImagEBase, пихаю в ReloX а он говорит, мол ты тупой? че за херню ты в меня засунул!О_о,поэтому попытавшись сделать релоки он ни чё не делает просто пишет нули. Ок, значит я тупой. Ладно, посмотрим чтож анпакеры делают и последуем их примеру, Суём в QU он всё отлично распаковывает и dll нормально с exe работает. Так, ну хорошо посмотрим, как этого она добилась? Смотрим... и ах№;4@ем. А что не так? Да не, всё так, тока нет релоков и вместо нашей секци импорта .mackt мы видим .idata, видимо у Ку и импрека разные взгляды, то как нужно называть секции с импортом. Ну блин ладно, сравним секции с импортом , несколько строчек одинаковы(тока разный порядок), а дальше у ку какието ещё не понять нафиг нужные функи, ну да фиг с ними нас это не интерисует, а интересует каким образом там переправляются нужные адреса при старте если нет релоков, а если и есть тог где они? Над этими и другими вопросами досих пор работают наши учёные, и может быть в не далёком будующем мы получим ответы на эти и многи вопросы... Собствено хотелось бы во всём этом нормально разобраться и переправить всётаки эту dll для нормальног запуска. В аттче предмет пыток, и 2 распакованые dll(одна после ку, другая после меня) соответсвено можно пронаблюдать вышеописаные чудеса. ![]() ![]() |
|
Создано: 07 ноября 2008 17:49 · Личное сообщение · #2 |
|
Создано: 07 ноября 2008 18:18 · Личное сообщение · #3 встаем в длл на 10035DC8 и жмем f8 снимаем дамп... запускаем импрек вводим оеп 1000 гетимпорт фих дамп и прикручиваем... все! она и отдельно в ольке будет стартовать и с ехе норм.. по поводу секций: если место есть то можно прикрутить импорт на месте старого в данном случае смещение 10002000 указывай и снимай галочку что создавать новую секцию ![]() |
|
Создано: 07 ноября 2008 19:17 · Поправил: Oott · Личное сообщение · #4 PE_Kill, значит не всё я знаю и побежал искать какие же тонкости тут есть... НАшёл, Вот тут статью я и прочитал, ну тока первую часть, вторую как-то пропустил. Ну хз, написал бы что интересного заметил в тексте, щас пойду вторую часть разюзаю. Veliant, ты читал то что я писал выше или тока название темы читаешь? Вот то что ты написал я и делал, тока после этого оно не работло, яж приаттачилсо. Единственое что у меня в ольке IMageBase с этой dll не 10000000 , а 390000, ну это как повезёт. Вот собствено корректный дамп с корректным импортом, которые не работают, а по словам Veliant должны. webfile.ru/2370893 ![]() |
|
Создано: 07 ноября 2008 21:10 · Личное сообщение · #5 не знаю че ты там мутишь но вот по второму разу руками распаковал и все прекрасно грузится и подгружается прогой ![]() ![]() |
|
Создано: 07 ноября 2008 22:02 · Поправил: Oott · Личное сообщение · #6 А то что ты выложил у меня не работает, я такие же как ты по 10 штук за раз воял ![]() щас пекил и тебя куданить отправит))))) 00391000 > 55 PUSH EBP 00391001 8BEC MOV EBP,ESP 00391003 837D 0C 01 CMP DWORD PTR SS:[EBP+C],1 00391007 75 0E JNZ SHORT cm8.00391017 00391009 FF75 08 PUSH DWORD PTR SS:[EBP+8] 0039100C 8F05 20300010 POP DWORD PTR DS:[10003020] Видешь ? если у тебя ImageBase всё время 10000000, то у меня он разный, при загрузке под олей, при загрке с еxe под олей, при загрузке exe и т.д.(есесно тока с dll) Это я об этом выше писал. Поэтому если ты так будешь анпакать длл, то они не у всех будут работать. Что у тебя за винда? А ты мои тестил они у тебя работают? ![]() |
|
Создано: 07 ноября 2008 23:02 · Личное сообщение · #7 |
|
Создано: 07 ноября 2008 23:05 · Личное сообщение · #8 ADD Мне когда то надо было UPX с длл снять, я тогда чтобы с релоками не заморачиваться сделал так. Сдампил файл и в качестве EP указал адрес где идет код настройки релоков загрузчика UPX, а после него сделал jmp на OEP. Т.е. небольшой кусок упекса настраивал релоки каждый раз при загрузке. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 07 ноября 2008 23:09 · Личное сообщение · #9 |
|
Создано: 08 ноября 2008 00:01 · Поправил: Oott · Личное сообщение · #10 Veliant, это у тебя так, у меня нет. PE_Kill, Вот это хорошая идея ща попробую... добавлено Нашёл релоки, я думал там просто чтото вроди вызова нужного куска когда будет, а там хз постоянные обращения.... 003C2FFB BF CB4924A9 MOV EDI,A92449CB 003C3000 46 INC ESI 003C3001 183F SBB BYTE PTR DS:[EDI],BH 003C3003 7F 0A JG SHORT CM8.003C300F 003C3005 2326 AND ESP,DWORD PTR DS:[ESI] 003C3007 93 XCHG EAX,EBX 003C3008 BF A04804B0 MOV EDI,B00448A0 вот небольшой кусочек, хз оно это или нет, кароче блин походу я устал, пойду спать.. тупить что-то сильно начал. p.s. вот тока небольшой кусочек этого упкса найти надо, искать после того как dll уже распаковалась, поидей. ![]() |
|
Создано: 08 ноября 2008 06:08 · Личное сообщение · #11 |
|
Создано: 08 ноября 2008 08:12 · Поправил: ClockMan · Личное сообщение · #12 Oott Вот попробуй ![]() ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 08 ноября 2008 12:40 · Поправил: Oott · Личное сообщение · #13 Ладно,просто нужно нормально востановить релоки с помощь ReloX'a и всё... ClockMan, Вот то что нужно, релоксом у теа нормально получилось востановить релоки. В отличае от меня, хз может я что-то не допонял или пропустил что-то винструкции... Делаю два дампа с разным ImageBas'ом, натравливаю релокс жму "Compare" и... Кукишь, ни каких релоков он не находит. Я уже отчаявшись открыл упакованую dll в PE Explorer'e и списал оттуда релоки в релокс и даже тут я что-то скосячил, релоки добавились перед запуском они правят нужные адреса, но правят херню, на какие-то небесные адреса... вот ![]() ![]() |
|
Создано: 08 ноября 2008 13:00 · Поправил: ClockMan · Личное сообщение · #14 Oott Опишу кака я делал может и другим будет иннтересно ![]() 1.Берём нерасспакованную dll и переменноваим их в original.dll и copy_of_original.dll запускаем sample.exe(эти dll должны быть в одной папке!!) 2.Снимая дамп запоминаем Image base (по которым они грузились в пямять) снятых dll!!!! 3.Запускаем Relox подгружаем дампы original.dll и вписываем Image base, подгружаем copy_of_original.dll и вписываем Image base 4.Нажимаем Compare и о чудо!!! он находит релоки ![]() 5.Можем сохранить релоки(Save Relocs) или сразу исправить анпакнутую dll ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 08 ноября 2008 14:32 · Личное сообщение · #15 Вот как я подправир прожку теперь при вводе имени можно получить серийный номер ![]() ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 08 ноября 2008 14:40 · Поправил: Oott · Личное сообщение · #16 ClockMan, А блин спасибо, я оригинальный ImageBase не вписывал, наивно пологая, что тулза сама его должна определить.Всё разобрался со всем, спасибо всем отписавшимся в этой теме. ![]() появляется возможность калечить директорию перемещаемых элементов (relocations, fixups). Например, такой фокус производит UPX(с) Вот тебе и упкс ![]() ClockMan, не издевайся на бедным фантомом ![]() ![]() |
|
Создано: 08 ноября 2008 14:50 · Личное сообщение · #17 |
|
Создано: 08 ноября 2008 15:03 · Личное сообщение · #18 |
|
Создано: 08 ноября 2008 15:06 · Личное сообщение · #19 |
|
Создано: 08 ноября 2008 15:11 · Личное сообщение · #20 |
![]() |
eXeL@B —› Вопросы новичков —› dll unpack? ok. |
Эта тема закрыта. Ответы больше не принимаются. |