![]() |
eXeL@B —› Софт, инструменты —› Распаковка AsProtect на примерах |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 12 . 13 . >> |
Посл.ответ | Сообщение |
|
Создано: 17 января 2007 12:10 · Поправил: Модератор · Личное сообщение · #1 Здравствуйте! Очень прошу, помогите найти или выдайте пжалста из запасов прогу Advanced Archive Password Recovery v.3.00 кто может, очень хочется научиться распаковке, а проги нормальной нет. Далее повтор моего вчерашнего письма(лежит в чужой теме, найти можно в поиске введите: Распаковка ASProtecta - моё сообщение самое свежее) ---------------------------------------------------------------------- ------------------------------------------------------------------ Здравствуйте. Понимаю, что лезу немного не туда, но обсуждения статьи "Распаковка нового ASProtect на примере Advanced Archive Password Recovery v.3.00" автора SergSh на форуме и в поисковике вроде бы не видно(может статья просто древняя), а тут вроде бы тоже у ASR-ра 2-я версия. Суть проблемы: 1 Сам по вашим статьям научился распаковывать ASProtect 1.22-1.23 ,1.23 RC4, 1.24(проги типа Electra, Куриная месть.Первая разборка, скринсейвер и т.д. с затиранием репой краденого начала проги и без). 2 Нужно двигаться дальше и тут с удивлением обнаруживаю, что статей по распаковке версий 1.3-2.0 нет вааще(может я в шары долблюсь, незнаю). Плиз, если можно, то ссылку на подобную статью, а то руководство как починить велосипед есть(1.21-1.22), как починить мопед-есть(1.23 RC4), как починить боинг747 и космический челнок-есть(2.0x-2.12xx и выше). А вот как отремонтировать просто машину нет. 3 Из всех имеющихся статей более всего понятно было у SergSh в "Распаковка нового ASProtect на примере Advanced Archive Password Recovery v.3.00", но тут такой казус. Проискав в инете подопытную прогу версии 3.0 нашел две ссылки, скачал, инсталятор обещал версия 3.0 (как в статье),- в итоге версия 3.01, чем забиты все ссылки на эту прогу в инете и PEID говорит не ASProtect 1.2-1.3 registered(2.0x по словам SergSh),а ASProtect 2.1x SKE. Ну ладно: а)34раз Shift+F9 ставим бряк на ближайший переход внизу, ещё раз Shift+F9, снимаем бряк,ставим на Alt+M на секцию кода(401000), но не снова Shift+F9, как в статье, а trace into(а то EOP будет на две команды ниже и затруться два Push-а). Останавливаемся на EOP 42A910. Ctrl+A и всё видится чинно и благородно. б)Читаем статейку дальше и пробуем запустить его скрипт(в папку его,в Script , в Олю, в виде txt предварительно). И оля повисает пробовал подождать 1,5 часа думал это скрипт так долго на более свежей версии ASp-ра трудится(хрен то там:s14. Запущено как положено без бряков и с OEP после trace into и я в plugin->IsDebuggerPresent ->Hide, с полным игнором исключений. в) Руками по его совету IAT пока не пробовал, всё так пока трудно для понимания и непривычно и завтра на работу а уже 2ночи. Граждане, слезно молю дайте ссылку на настоящий Advanced Archive Password Recovery v.3.00, а то шатл починить не могу пока, дайте хоть чертежи к боингу. А если почти серьезно, то научиться распаковывать ASPr до второй версии включительно руками хочется так, что аж эти руки зудят. P.S. Не пинайте сильно за дурацкие просьбы самого маленького. Это первый выход в свет. Начал реверсить 18.12.06 с нуля. Реверсил даже в новогоднюю ночь. Для меня это очень важно(научиться распаковывать)! ![]() |
|
Создано: 07 июня 2007 22:37 · Поправил: Hellspawn · Личное сообщение · #2 может? BOOL IsBadCodePtr( FARPROC lpfn // address of function ) Return Values If the calling process has read access to the specified memory, the return value is zero. If the calling process does not have read access to the specified memory, the return value is nonzero. и ещё завязывай ты с этими скриптами... кодь тулзу ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 07 июня 2007 23:00 · Личное сообщение · #3 Hellspawn, приветствую. Это ты на сях, я так понимаю функцию IsBadCodePtr вызываешь. Счас переведу, что написал. Огромное фенкс. Вот странное дело. То меня все скрипты писать сватали(вся 1и 2 стр этого топика такими указаниями пестрит). Токо я во вкус вошёл. Это что мода чтоли? ![]() А если серьёзно, то мне тогда надо выключится на несколько недель и с нуля си учить. Я немного знаю асм, немного паскаль и делфи, но си пока что как макаке граната. ![]() |
|
Создано: 07 июня 2007 23:04 · Личное сообщение · #4 хехе, это просто выдержка из хелпа... если знаешь паскаль, могу тебе свой отладочный двиг подбросить ![]() или вообще помочь, чтобы ты просто алго реализовывал своё дальше... з.ы. скрипты это как небольшая помощь, когда лень писать тулзу, но когда скрипт становиться большим, то это же изврат ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 07 июня 2007 23:11 · Личное сообщение · #5 |
|
Создано: 07 июня 2007 23:34 · Личное сообщение · #6 |
|
Создано: 08 июня 2007 13:42 · Личное сообщение · #7 Small_S пишет: Вот странное дело. То меня все скрипты писать сватали(вся 1и 2 стр этого топика такими указаниями пестрит). Токо я во вкус вошёл. Это что мода чтоли? Э-э! это кто тебе советовал скрипты… Лично я тебе советовал учить PE формат и учиться кодить даже ссылку по теме постил на прогу Там выложили два отличных варианта, и вообще возьми, перечитай еще раз весь топик! Прежде чем писать такое… Ты увидел китайский скрипт и стал очередным наркоманом, лучше прислушайся, что тебе советуют PE_Kill и Hellspawn, и не спорь! Лучше всего начни изучать Delphi, его тебе хватит на все случаи в жизни, написаны миллионы компонентов, сырков, асм вставки, книг(e-book) и т. д., вообщем всех плюсов не перечислить, асм нужен только для индивидуального подхода к некоторым вещам такого как, например хак… возьми сорсы Rebaser by Dr. Golova и CADT by Ms-Rem их стиль написания прог ничем не отличается от чистоты асм тулуз, а кое-где даже лучше!!! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 08 июня 2007 23:08 · Личное сообщение · #8 Привет всем День и вечер к сожалению пропал для кодинга на работе была буханка) еле перебираю по клаве. Demon666 вбщето фраза была в шутку, видишь смайлик? хлтя в каждой шутке, доля истены(ну советовало несколько человек, частью в личке частью в топике). Я не любитель выяснять отношения и поэтому не буду постить имена и фразы. А отвечу в том же духе, что и когда(когда принимал советы по скриптотописательству). Всему, своё время.Так и вертится на языке время, бросать камни и время собирать, время любить и время ненавидеть, и заходит солнцеи восходит всё возвращается на круги своя брр чо то меня по эклизиасту понесло, пеорепил Я же не говорю, что никогда нее буду писать буду но попозже завтра отраббот и я этот скрипт искусаю просто отже через 3часа на работу и так весь одел как будем работаь ![]() |
|
Создано: 09 июня 2007 00:44 · Личное сообщение · #9 Small_S Да причем тут это, просто где-то есть топик здесь на форуме, так вот там кто-то написал скрипт по обработке call`ов (я уже сейчас точно не помню), я его помню посмотрел так там внутри какой-то целый дизасм-движок был (жесть конечно!), но вот там его спросили что и как делать – он написал ложишься спать и за ночь он там че-то находит… так вот ты сейчас понял, что такое скрипты и они тебя не устраивают… ты начал задавать вопросы при этом выделяя их жирным шрифтом… ИМХО – от ответов был бы полный ноль пользы такой же, как и сами вопросы, поэтому тебе и начали советовать именно так – учись кодить!, тогда уже и спрашивай про АПИ-функи… А да насчет анализа, у Оли есть в SDK функи которые могут помочь осуществить то что тебе надо, короче ты начал спрашивать про то что никакого отношения к скриптам не имеет, но ты пытаешься это как-то через жо(Пии…) совместить… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 10 июня 2007 23:02 · Личное сообщение · #10 Привет всем. Хотя уже притомился,изложу вкратце последние новости с фронта ![]() Добил я чистильщика и определителя начала-конца. Работает(причём ещё как). М-да асм это сила. Врятли кто нибудь на этом форуме успеет моргнуть быстрее чем асм вставка прочёсывает секцию в 3000h байт и одновременно находит корректно начало-конец таблицы IAT. Я в первый раз сдуру думал по секундомеру засечь, так чуть со стула не упал(какой там, десятые или сотые доли секунды, у меня прескотт разогнанный до 3,5 Мгц, гиг памяти) Отдельный респект Hellspawn за достоверную и скорую информацию! Правда я использовал не kernel32.IsBadCodePtr, а kernel32.IsBadReadPtr(эта процедура вложена в приведённую Hellspawn). Она определяет возможность чтения по адресу на определённое пользователем количество байт. Исходные данные суются в стек(сначала число байт, затем адрес) и погнали, ноль если прочитали, не ноль если не можем или можем, но не по всем байтам. Завтра запощу скрипт со всеми последними изменениями. На моё счастье PE_kill разрешил размещение модернизированных скриптов в этом топике. Сейчас приведу лишь саму вставку: 00400E00-----------PUSH 0 00400E02-----------PUSH 0 00400E04-----------CMP DWORD PTR DS:[EBX],ECX 00400E06-----------JB SHORT ARCHPR.00400E4C 00400E08-----------CMP DWORD PTR DS:[EBX],7FFE1000 00400E0E-----------JA SHORT ARCHPR.00400E4C 00400E10-----------CMP DWORD PTR DS:[EBX],EDX 00400E12-----------JB SHORT ARCHPR.00400E52 00400E14-----------CMP DWORD PTR DS:[EBX],5B260000 00400E1A-----------JB SHORT ARCHPR.00400E52 //ЗДЕСЬ МЕНЯЕМ НА 52(БЫЛО 4С)НЕ ТРЁТ НИЖЕ ГРАНИЦЫ 00400E1C-----------PUSH EBX //БИБЛИОТЕК 00400E1D-----------MOV EBX,DWORD PTR DS:[EBX] 00400E1F-----------SUB EBX,4 00400E22-----------PUSHAD 00400E23-----------PUSH 4 00400E25-----------PUSH EBX 00400E26-----------CALL kernel32.IsBadReadPtr 00400E2B-----------CMP EAX,0 00400E2E-----------JE SHORT ARCHPR.00400E32 00400E30-----------JMP SHORT ARCHPR.00400E4A 00400E32-----------POPAD 00400E33-----------CMP DWORD PTR DS:[EBX],90909090 00400E39-----------JE SHORT ARCHPR.00400E5B 00400E3B-----------CMP DWORD PTR DS:[EBX],CCCCCCCC 00400E41-----------JE SHORT ARCHPR.00400E5B 00400E43-----------CMP DWORD PTR DS:[EBX],-1<--------- //Это прийдётся убирать(бывает, что похоже на 00400E46-----------JE SHORT ARCHPR.00400E5B //использование АПИ но не сначала, но видно ощибся) 00400E48-----------JMP SHORT ARCHPR.00400E4B 00400E4A-----------POPAD 00400E4B-----------POP EBX 00400E4C-----------MOV DWORD PTR DS:[EBX],0 00400E52-----------CMP EBX,EAX 00400E54-----------JE SHORT ARCHPR.00400E70 00400E56-----------ADD EBX,4 00400E59-----------JMP SHORT ARCHPR.00400E04 00400E5B-----------POP EBX 00400E5C-----------CMP DWORD PTR DS:[ESP],0 00400E61-----------JNZ SHORT ARCHPR.00400E69 00400E63-----------MOV DWORD PTR DS:[ESP],EBX 00400E67-----------JMP SHORT ARCHPR.00400E52 00400E69-----------MOV DWORD PTR DS:[ESP+4],EBX 00400E6E-----------JMP SHORT ARCHPR.00400E52 00400E70-----------POP EAX 00400E71-----------POP EDX 00400E72-----------ADD BYTE PTR DS:[EAX],AL И ещё один момент при использовании модернизированного скрипта прийдётся всключать обработку исключительных ситуаций в кернеле(одна галка). ![]() |
|
Создано: 11 июня 2007 23:38 · Личное сообщение · #11 Привет всем. Как и обещал в аттаче первая модефикация скрипта PE_kill-а. Конечно она ещё очень не совершенна, но на тех файлах, на основе которых она создавалась работает. Я испытал её на иконловере следующим образом. Взял свой же распакованный файл в одной оле, взял не распакованный файл и прогнал его через скрипт в другой оле. Затем сделал бинарную копию всей секции где находится таблица импорта и перешёл в распакованую версию проги. Там забил нулями всю секцию с импортом и затем сделал бинарную вставку из буфера обмена, после чего сохранил файл. После удачного запуска получившегося файла я понял что данный эксперимент показал мне: а) что скрипт справился с основной защитой импорта на которую и был расчитан, б) можно смело оставить вариант с полной зачисткой секции(чистятся адреса ниже 00400000, выше системных библиотек, не существующие адреса в диапазоне системных бибилиотек, а также адреса между концом проги и нижними краем системных библиотек). Дело в том, что вчера мне показалось, что я всё таки что то убираю лишнее и я отрубал стирание диапазона между концом файла и нижней границей системных библиотек. Проверил работу и на Адвенседе, но там какая то мистика: раньше я распаковывал его на ура ошибочной версией этого же скрипта(см. выше там где я ещё не учитывал разные сигнатуры вызовов), теперь всё время ошибается в одном месте и тот на котором раньше на ура и новый(ну это всего одна функа). Проверял ещё на крякмисах 2.11, но распакованных версий нет, а возится неохота. Одно можно сказать точно во всех случаях безошибочно определяет границы IAT перед запуском основной части скрипта и вроде нет ошибок с определением фунок и типа перехода. Только сегодня днём мне попалась программа- клавиатурный шпион под аспром 1.36 6.26 билда правда(не 2.1х с которыми я возился) где я обнаружил то, о чём говорил tar4, а именно после основной защиты импорта о которой было в статьях SergSh и PE_kill-а идёт как раз такая. Функи, по одной забираются каждая в свою область выделенной памяти и чаще всего через одну область(где начало кода функи)во вторую такую же выделенную где либо конец функи(то есть она забрана полностью) или вызов последней части в виде какой то точки в этой апи в кернеле. Кроме того есть варианты когда во второй области нашпигован самомодефицирующийся код. Однако и на этой проге без ошибок определяются границы IAT и основная защита импорта обезвреживается также без ощибок(говорю так поскольку дораспаковал то о чём писано в этом абзаце вручную это порядка 10-ти таких вот замороченных вызовов). Дальнейшую работу буду делить на три части. 1) разработка асм вставки, которая будет разгребать украденные индивидуально функции. Благо места гарантированного теперь у нас хоть отбавляй, из всех прог ни у одной не попалось таблицы импорта больше 1000байт в окончательном варианте, а секции отводимые под IAT по 3000-4000 байт, откуда имеем без всякого страха минимум 1500-2000байт на асм кодинг. 2) при получении плохих известий про работу с основной частью защиты импорта буду добавлять сигнатуры, учитывающие новшества. 3) начну потихоньку вникать, как делаются те операции(в виде делфи или асм кода), которые обычно любезно берет на себя плагин ODBgScript. Тут море неизвестного. В перспективе не плохо попытаться создать удобный инструмент, имеющий промежуточное назначение между стрипером и скриптом, тоесть при уверенности распаковка на автомате, при проблеммах начинаем вникать и делать коррективы и чтоб всё видно. P.S. Был бы крайне признателен, если бы любой помог в виде сообщения: у меня такая то прога под Аспром 2.хх и распакованный(ничем не пожатый файл), при желании могу залить. Ну или сами берёте скрипт и повторяете манипуляции как я описал с иконловером. Ну конечно эксперимент будет чистым если как у адвенседа или иконловера импорт будет защищён только основной защитой, иначе прийдётся смотреть где падаем(тоесть портачится скрипт или просто индивидуальная защита фунок есть- я это так обзываю). ![]() ![]() |
|
Создано: 13 июня 2007 04:28 · Личное сообщение · #12 |
|
Создано: 13 июня 2007 06:19 · Поправил: PE_Kill · Личное сообщение · #13 Small_S пишет: ндивидуальная защита фунок есть- я это так обзываю Ыыы, это как раз первая старая защита импорта. Standard Import Protection называется, а то с чем ты воюешь называется Advanced Import Protection, Делал бы хук на заполнение IAT. У меня скрипт, который восстанавливал Advanced Import Protection+Standard Import Protection+Virtual Machine after Calling API+Borland Init Table Protection занимал всего 1700 строк. При этом почти не юзал асм и делал всё сам, просто запускаешь и через 5 минут прога стоит на ОЕП и весь импорт пофиксен, а в логе начало и конец IAT. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 13 июня 2007 10:11 · Поправил: Small_S · Личное сообщение · #14 |
|
Создано: 13 июня 2007 10:56 · Личное сообщение · #15 |
|
Создано: 13 июня 2007 14:38 · Личное сообщение · #16 tar4 кстати о птицах. Не помню откуда, но заливал Аспр 2.2 (помоему приду с работы скажу точнее) с кейгеном. Так вот что то как я этим кейгеном ни генерировал ключи, аспру, что слону дробина он даже не открывается(пишет пароль неправильный). В общем я напишу тебе в личку. Ну а не легче ли, думаю нет, потому, что асм-прога, ну или там делфи-прога будут иметь одни варианты, да ещё для 2.3 версии, а есть ещё С/C++, какой то C watcom(с которым я столкнулся в адвенседе)и хрен его знает сколько ещё того, что я не видел в плане разных компиляторов и версий аспра над ними. Я же пробую сделать скрипт для восстановления импорта автоматическим, если не для всех, то хотя бы для большого числа прог. ![]() |
|
Создано: 14 июня 2007 10:24 · Поправил: Small_S · Личное сообщение · #17 Пока времени последить за заполнением секции импорта не было, но я зато нашёл среди кучи скриптов нормальный OEP-фаиндер для проги под 1.35 билд 4.25 or 6.26. А то руками вроде доходил до OEP но там нет исключений и этот фаиндер помог сделать некоторые выводы. Тех мест где были украдены по старому с Standard Import Protection уже не было(тоесть движок PE_kill-а с нормально восстановил) просто видимо я был на OEP не совсем в тот момент когда нужно. Но главное я обнаружил место где не определилась GetProcAddress и сделал важный вывод, что нельзя всё таки тереть слепо между нижним краем системных библ и верхним краем проги. И ещё очень интересное для меня место обнаружил,- похоже я нашёл в командном аспровом файле место где идёт защита фунок. По крайней мере в старых версиях это видимо самое оно. Там типа своя таблица импорта, и ещё строковые структуры(тоесть названия библ и фунок в строковом формате). Всё это попробую отыскать в других версиях аспра повыше и подумаю как это можно использовать. См. аттач <img src="img/attach.gif"> <SCRIPT type=text/javascript>dfl("files/","79ee_14.06.2007_CRACKLAB.rU.tgz");< /SCRIPT> - изу чение старой защиты.txt ![]() |
|
Создано: 14 июня 2007 15:31 · Личное сообщение · #18 И снова прошу информационной помощи. Нужно имя функи аналога LoadLibraryA, только для выделенных участков памяти. Поясняю. LoadLibraryA как пишет в своей статье PE_kill, подгружает, а если она подгружена определяет базу(регистр EAX) системной библиотеки и строковое имя функи (в EDX). Мне же хотелось бы знать имя функи которая по заданному адресу определяет базу выделенного участка памяти(не dll прошу заметить). Просто родилась одна идея на работе прям, но LoadLibraryA наверное не подходит для такой цели. Что она будет в EDI выводить если там в выделенке вообще пусто или какой то бред(думаю матюгнёт и сделает исключение). Наверное есть какая нибудь специализированная функа? Hellspawn может знаешь такую??? ![]() ![]() |
|
Создано: 14 июня 2007 15:40 · Личное сообщение · #19 |
|
Создано: 14 июня 2007 15:45 · Личное сообщение · #20 |
|
Создано: 15 июня 2007 05:25 · Личное сообщение · #21 |
|
Создано: 15 июня 2007 06:49 · Личное сообщение · #22 tar4 во во меня эти величины интересуют, так как в асме(вставке) нужно будет быстро и без гимора взять начала и концы всех выделенных участков загнать эти значения либо в стек, либо в место где они гарантированно не мешают и уже оттуда брать и сверять каждый адрес из мусора с ними принадлежит ли он какому либо участку выделенной АСпром памяти или нет. Этот реверанс в скрипте будет посвящен специально версиям 1.35 и до 2.х так как у тех что выше я не замечал в IAT среди мусора обращений к участкам выделенным Аспром, а вот в проге под 1.35 нашел позавчера. Причём важное GetProc Address два раза вызывается через переходник и скрипт пока в том виде как он был исходный или как сейчас это не восстанавливает. Я знаю как это реализовать на kernel32.IsBadReadPtr , но это будет гиморно и не очень красиво, думал есть спец функа системная. ![]() |
|
Создано: 15 июня 2007 08:01 · Личное сообщение · #23 Small_S пишет: взять начала и концы всех выделенных участков А почему бы тебе не использовать стандартные функции плугина (OllyScript). Там, есть несколько подходящих функций (gmi, gmemi...) и насколько я помню в подобной ситуации, я использовал одну из них. Small_S пишет: специально версиям 1.35 и до 2.х вообще-то, это две разные "ветки" одного дерева. v.135 - сложнее. ![]() |
|
Создано: 15 июня 2007 08:08 · Личное сообщение · #24 |
|
Создано: 15 июня 2007 09:45 · Личное сообщение · #25 tar4на (gmi, gmemi...)и насколько я помню в подобной ситуации, я использовал одну из них. и я использовал в OEP фаиндере, только медленно это и неорганично будет посреди действий асм кода. Archer они уже к тому времени выделены, а если на стадии выделения, то вообще проще как говорит PE_kill сразу хукать IAT. Правда этим я ещё не занимался. ![]() |
|
Создано: 15 июня 2007 10:08 · Поправил: tar4 · Личное сообщение · #26 |
|
Создано: 15 июня 2007 11:27 · Поправил: Small_S · Личное сообщение · #27 tar4 конечно можно, но хотелось всё сделать вместе. Сейчас привёз книгу по асму под вин, как отработаю буду читать про что где в PE-заголовке. Вот черт, как бы всё таки открыть из Асм-кода возможность записи прям в секции заголовка? Так мне никто и не ответил на этот вопрос. Исправил. tar4 видел говоришь, тогда вечером попробую найти. А ещё бы ссылку может кто видел? ![]() |
|
Создано: 15 июня 2007 12:19 · Личное сообщение · #28 |
|
Создано: 15 июня 2007 21:58 · Личное сообщение · #29 Ну нашёл кое что по изменению PE- заголовка и секций статья на зывается: Путеводитель по написанию вирусов под Win32 В третьей главе описывается сам PE-заголовок, а в четвёртой 4. Ring-3, программирование на уровне пользователя описывается пример вируса который находит пять файлов в системной директории и заражает их. Написано то подробно и если почитать пару дней или позакидывать народ на краклабе вопросами, то всё станет ясно, но уже предварительно вижу пару неприятных моментов 1) Ему то хорошо, он открывает файл с нуля функцией CreateFileA, получает хенд файла потом куча всяких действий и используя этот хенл маппирует его(тоже ещё читать про это надо я самоучка и в такие дебри ещё не лез). Так у меня файл уже открыт(не буду же я открывать открытый файл) и как получить хендл без CreateFileA? Ну вроде вижу такое место в его статье Infection: lea esi,[ebp+WFD_szFileName]------; Получаем имя заpажаемого файла push 80h push esi call [ebp+_SetFileAttributesA]--------; Стиpаем его аттpибуты call OpenFile -----------------------------; Откpываем его inc eax -----------------------------------; Если EAX = -1, пpоизошла jz CantOpen----------------------------; ошибка dec eax mov dword ptr [ebp+FileHandle],eax ;-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·- ·-·-·; ; Пеpове, что мы делаем, это стиpаем аттpибуты файла и устанавливаем их ; ; pавными стандаpтным. Это осуществляется с помощью функции ; ; SetFileAttributes. Вот кpаткое объяснение данной функции: ; ; ; ; Функция SetFileAttributes устанавливает аттpибуты файла. ; ; ; ; BOOL SetFileAttributes( ; ; LPCTSTR lpFileName, // адpес имени файла ; ; DWORD dwFileAttributes // адpес устанавливаемых аттpибутов ; ; ); ; ; ; ; Паpаметpы ; ; --------- ; ; ; ; ¦ lpFileName: указывает на стpоку, задающую имя файла, чьи аттpибуты ; ; устанавливаются. ; ; ; ; ¦ dwFileAttributes: задает аттpибуты файла, котоpые должны быть ; ; установлены. Этот паpаметp долже быть комбинацией значений, котоpые ; ; можно найти в соответствующем заголовочном файле. Как бы то ни было, ; ; стандаpтным значением является FILE_ATTRIBUTE_NORMAL. ; ; ; ; Возвpащаемые значения ; ; --------------------- ; ; ; ; ¦ Если вызов функции пpошел успешно, возвpащаемое значение не pавно ; ; нулю. ; ; ; ; ¦ Если вызов функции не удался, возвpащаемое значение pавно нулю. Чтобы ; ; получить дополнительную инфоpмацию об ошибке, вызовите GetLastError. ; ; ; ; После установки новых аттpибутов мы откpываем файл и, если не пpоизошло ; ; ошибки, хэндл файла сохpаняется в соотвествующей пеpеменной. ; ;-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·- ·-·-·; Ну в последних строках снова открываем(так он и не закрывался) и сохраняется хендл, потом следующее действие как раз меппирование где этот хендл нужен. 2) Момент где то по тексту было сейчас быстро не найду, что если там какие то защитные атрибуты были установлены при открытии, то пока не закроешь хрен изменишь. Ещё завтра почитаю, но пока такие вот навороты. Пока предварительный вопрос чем хендл получают ничего не открывая и не закрывая? ![]() |
|
Создано: 16 июня 2007 21:48 · Личное сообщение · #30 Привет всем, полдня рылся в своих книгах про асм, немного читал статьи с WASM-а, но так ничего более приближенного к тому чего мне нужно не нашёл. В общем предстоят продолжительные эксперименты с попытками изменить атрибуты "налету" ещё надо знать как ищется нужный процесс(и соответственно его хендл без закрытий открытий), ведь как то импрект скажем, выводит список процессов к которым надо аттачиться для правки импорта, значит можно как то узнать хотя бы все процессы. Поняв что резина эта очень долгая, решил всё таки заделать поиск областей выделенной памяти и хранение их адресов и размеров(для каждой найденной) используя стек. А потом оттудаже и будем сверять с мусорными адресами. Гиморно, но приходится. В заголовке писать из асма пока не умею, в секции таблицы IAT на момент когда будет работать эта часть кода, ещё не будет нулей и кроме мусора могут быть ценные адреса, можно было конечно организовать поиск 100-150dword нулей по секции кода или данных, но не охота. В общем делаю через стек, пусть даже Аспр развернёт 50 выделеных участков всё равно не беда(по два даблворда на каждую =100). Кстати стек наверное быстрее проводит операции чем скажем записать-считать из такой то секции(хотя и там и там память) или я ошибаюсь? ![]() |
|
Создано: 18 июня 2007 04:35 · Личное сообщение · #31 Small_S пишет: рылся в своих книгах про асм, немного читал статьи с WASM Наверное, я не точно выразился. Зная, что опыта в асме у тебя мало, я имел ввиду найти на форуме топик про работу с РЕ-заголовком, а не читать все статься подряд, тем более по вирусологии. Попробуй напиши в поисковике васма слово "заголовок". Правда, вылезет куча лишнего, но все же... там можно что-то найти. Small_S пишет: быстрее проводит операции чем скажем записать-считать из такой то секции Мне кажется, не следует себе пока голову еще и этим, вопросы оптимизации оставь на потом. ![]() |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 12 . 13 . >> |
![]() |
eXeL@B —› Софт, инструменты —› Распаковка AsProtect на примерах |