Сейчас на форуме: subword, rtsgreg1989, zds (+10 невидимых) |
eXeL@B —› Основной форум —› Functions Searcher + SRC (VB Decompiler plugin) |
Посл.ответ | Сообщение |
|
Создано: 17 апреля 2008 14:27 · Личное сообщение · #1 Functions Searcher + SRC (VB Decompiler plugin) Вот решил выложить на шару сорцы поисковика функций для VB Decompiler'а Изначально идея плагина состоит в поиске функций внутри любых EXE/DLL файлов и передача их адресов в декомпилятор. Это дает возможность декомпилировать любые Native PE32 файлы а не только Visual Basic'овские. Но как-то идея нам с Женьком (ShackS) быстро надоела. И плагин оказался хоть и работоспособным но до IDA ему еще далеко. Потому выкладываю тут сорцы на Delphi. Может кому пригодится, может кто возьмется улучшать, а может кто на основе этих сорцов напишет чтото свое. 653a_17.04.2008_CRACKLAB.rU.tgz - FunctionSearcher.zip ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 17 апреля 2008 18:01 · Личное сообщение · #2 |
|
Создано: 17 апреля 2008 18:10 · Личное сообщение · #3 |
|
Создано: 17 апреля 2008 18:45 · Личное сообщение · #4 |
|
Создано: 17 апреля 2008 18:48 · Личное сообщение · #5 censor пишет: 10 лет треш-угара? Ты бы эти строки написал иначе? Это планировалось как времянка до портирования с VB определения конца процедур. Потом я на это просто забил так как и так работает. -= ALEX =- пишет: о боже ты мой)) какой ужас)) Очень информативный пост. borov пишет: А под De Decompiler оно должно работать(у меня не работает) Под 2.0 - да. Где скачать 2.0 не знаю - ищи в сети. ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 17 апреля 2008 20:48 · Личное сообщение · #6 |
|
Создано: 17 апреля 2008 22:06 · Личное сообщение · #7 |
|
Создано: 18 апреля 2008 00:10 · Поправил: borov · Личное сообщение · #8 |
|
Создано: 18 апреля 2008 06:31 · Личное сообщение · #9 |
|
Создано: 18 апреля 2008 08:29 · Личное сообщение · #10 |
|
Создано: 18 апреля 2008 08:29 · Поправил: Модератор · Личное сообщение · #11 |
|
Создано: 18 апреля 2008 14:21 · Личное сообщение · #12 |
|
Создано: 18 апреля 2008 15:08 · Личное сообщение · #13 |
|
Создано: 18 апреля 2008 17:55 · Поправил: Модератор · Личное сообщение · #14 |
|
Создано: 19 апреля 2008 00:14 · Личное сообщение · #15 PE_Kill пишет: если задаешь вопрос, то ставь в конце соответствующий знак ? исправлюсь GPcH пишет: Само собой надо его сначала скомпилять. а как подругому?! конечно скомпилил GPcH пишет: Чтобы плагин работал нужно сначала в декомпиляторе открыть файл, а уже потом запускать плагин. все так и делал ----- Лучше быть одиноким, но свободным © $me |
|
Создано: 19 апреля 2008 10:59 · Личное сообщение · #16 borov пишет: все так и делал Проверь на тестовом проекте (в аттаче) 57c1_19.04.2008_CRACKLAB.rU.tgz - my.exe ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 19 апреля 2008 18:18 · Личное сообщение · #17 GPcH пишет: Но как-то идея нам с Женьком (ShackS) быстро надоела. И плагин оказался хоть и работоспособным но до IDA ему еще далеко. Мдяяя .... Стиль программирования со времен создания GHF Protector так и не изменился ) Взяли несколько публичный паскалевских исходника, добавили мегаанализатор if Copy(Code,1,3)='ret' then Ext:=true;
Вот и готов бюльбюльгюрюк... |
|
Создано: 19 апреля 2008 19:05 · Личное сообщение · #18 dermatolog пишет: Мдяяя .... Стиль программирования со времен создания GHF Protector так и не изменился ) Взяли несколько публичный паскалевских исходника, добавили мегаанализатор Опенсорс всегда судить просто. Чтото мне подсказывает что в VMProtect полно заимствований. Просто о них не узнать так как нет публичных исходников. Теперь что касается плагина. Какой смысл изобретать дизассемблер с нуля если уже есть отлаженный и стабильный? Тоже касается и структур PE формата. Если бы я переписал с нуля эти структуры врядли бы плагин стал лучше. dermatolog пишет: добавили мегаанализатор Да, кроме как к этим трем If'ам и прицепиться не к чему, верно? А еще кто-то в асе говорил что ему плевать до моих проектов - нет же, в каждом топике про мои проекты вставляешь кусок грязи. dermatolog пишет: Вот и готов бюльбюльгюрюк... Показал бы ты исходники "своего" пакера который ты "создал с нуля" в новых версиях VMP... вот уж где наверное сборище публичных исходников. Причем глючит со слов одного из твоих клиентов ужасно - ни один нестандартный EXE (без секции ресурсов например) упаковать не может. ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 19 апреля 2008 19:31 · Личное сообщение · #19 |
|
Создано: 20 апреля 2008 05:20 · Поправил: Модератор · Личное сообщение · #20 |
|
Создано: 20 апреля 2008 10:36 · Личное сообщение · #21 GPcH пишет: Какой смысл изобретать дизассемблер с нуля если уже есть отлаженный и стабильный? Он весьма неотлаженый и нестабильный. Посмотри на васме про это много было. Я и сам потратил больше недели компилируя Олькин дизасм, когда ремовский у меня переглючил. Был бы он щас, то конечно довел бы до ума. GPcH пишет: Тоже касается и структур PE формата. Структуры - да, голова хорошо их описал. А вот функции оптимизации, чистки и перестроения не всегда работают правильно, хоть и редко но неприятно. По коду мне непонятна вот такая конструкция asm push pStr push vlFnNumber push vlNumber push vlType call vlPluginEngine; mov ptrString,eax end; Не понимаю зачем тут асемблерная вставка это и Pascal'ем сделать можно. Тот кусок, что тут всем так понравился if Copy(Code,1,3)='ret' then Ext:=true; if Code='add [eax], al' then Ext:=true; if Code='invalid' then Ext:=true; Написан в обход какой либо оптимизации. Т.к. это работа со строками, то тут должно быть минимум операций. А так программа проверит все 3 условия, даже если выполнится первое. Должно бы быть так: if (Copy(Code,1,3)='ret') or (Code='add [eax], al') or (Code='invalid') then Ext:=true; А т.к. флаг Ext нужен для прерывания цикла то можно сделать еще проще if (Copy(Code,1,3)='ret') or (Code='add [eax], al') or (Code='invalid') then Break; Ну а работа с буфером и битовыми масками конечно же еще лучше отразится на скорости выполнения. Еще непонятна такая конструкция. if not ReadProcessMemory(dword(-1), cPtr, @CmdBuff, 16, Readed) then Exit; Если мы читаем память из собственного процесса, то можно заюзать функции CopyMem и CopyMemory. А еще лучше вообще не читать, а сразу работать с указателем. ----- Yann Tiersen best and do not fuck |
|
Создано: 20 апреля 2008 14:57 · Личное сообщение · #22 PE_Kill Наконецто пошла конструктивная критика Спасибо. PE_Kill пишет: Он весьма неотлаженый и нестабильный. За несколько лет использования единственный баг который я нашел (и то сам, сообщать мне никто ни об одном баге не сообщал - следовательно у клиентов он не встречался) - это некорректная обработка флага 16 битного режима 66h (некорректное определение длины инструкции). Остальное все работает стабильно. В проекте он взят для простоты - так там и дизассемблера длин хватило бы. PE_Kill пишет: Структуры - да, голова хорошо их описал. А вот функции оптимизации, чистки и перестроения не всегда работают правильно, хоть и редко но неприятно. В плагине только структуры и нужны Остальное просто удалять не стал. PE_Kill пишет: По коду мне непонятна вот такая конструкция asm Не знаю почему, но когда я объявляю как функцию vlPluginEngine и вызываю то после ее нормального вызова идет Access Violation. Возможно стек надо чистить как-то по особому, может объявлял не так. В общем пришел к тому что проще написать на асме. PE_Kill пишет: Тот кусок, что тут всем так понравился Написан в обход какой либо оптимизации. Согласен. Писалось оно вообще чисто проверить работоспособность а дальше было в планах написать как в декомпиляторе детект конца функций по оценке джампов и сехов. Но что-то заломало, а исправить что есть - забыл. PE_Kill пишет: А т.к. флаг Ext нужен для прерывания цикла то можно сделать еще проще Согласен PE_Kill пишет: Еще непонятна такая конструкция. if not ReadProcessMemory(dword(-1), cPtr, @CmdBuff, 16, Readed) then Exit; Если мы читаем память из собственного процесса, то можно заюзать функции CopyMem и CopyMemory. Там насколько помню идет проверка конца блока памяти. Если делать через ReadProcessMemory то ошибка чтения вылезала, если через CopyMem - нет. А вообще конечно все можно было бы оптимизировать. А за критику - спасибо! PS: не появилось желающих продолжать проект? ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 20 апреля 2008 15:29 · Личное сообщение · #23 |
|
Создано: 20 апреля 2008 15:53 · Личное сообщение · #24 ssx пишет: насколько я понял он рекурсивно ищет функции на которые есть call начиная с entry point? т.е. всякие callback etc идут лесом? Да. Планировалось большее, но времени как всегда не хватает. Потому и ищется человек кто бы взялся доводить до ума. ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 21 апреля 2008 14:00 · Личное сообщение · #25 GPcH пишет: Не знаю почему, но когда я объявляю как функцию vlPluginEngine и вызываю то после ее нормального вызова идет Access Violation. Потому что функция должна быть объявлена как stdcall Delphi по дефолту делает паскалевский вызов через регистры. GPcH пишет: Там насколько помню идет проверка конца блока памяти. Если делать через ReadProcessMemory то ошибка чтения вылезала, если через CopyMem - нет. Тогда нужно использовать функции проверки указателя, или как советуют на васме try /*обращаемся к памяти*/ except /*Ошибка при обращении, выходим из функции*/ end; Это максимально быстрый способ. По поводу методы. Мне понравился метод как автор OllyDbg ищет функции, он расписывал это где то в хэлпах или на сайте уже не помню. ----- Yann Tiersen best and do not fuck |
|
Создано: 22 апреля 2008 12:08 · Личное сообщение · #26 |
|
Создано: 22 апреля 2008 12:15 · Личное сообщение · #27 PE_Kill пишет: По поводу методы. Мне понравился метод как автор OllyDbg ищет функции, он расписывал это где то в хэлпах или на сайте уже не помню. К сожалению у меня щас нет времени на этот проект. Потому и ищу того кто бы за него взялся. ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
eXeL@B —› Основной форум —› Functions Searcher + SRC (VB Decompiler plugin) |