Посл.ответ |
Сообщение |
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 17 апреля 2008 14:27 New! Цитата · Личное сообщение · #1
Functions Searcher + SRC (VB Decompiler plugin)
Вот решил выложить на шару сорцы поисковика функций для VB Decompiler'а
Изначально идея плагина состоит в поиске функций внутри любых EXE/DLL файлов
и передача их адресов в декомпилятор. Это дает возможность декомпилировать любые Native PE32 файлы
а не только Visual Basic'овские.
Но как-то идея нам с Женьком (ShackS) быстро надоела. И плагин оказался хоть и работоспособным но
до IDA ему еще далеко.
Потому выкладываю тут сорцы на Delphi. Может кому пригодится, может кто возьмется улучшать, а может кто на основе этих сорцов напишет чтото свое. { Атач доступен только для участников форума } - FunctionSearcher.zip
|
|
Ранг: 50.2 (постоянный) Статус: Участник
|
Создано: 17 апреля 2008 18:01 New! Цитата · Личное сообщение · #2
if Copy(Code,1,3)='ret' then Ext:=true;
if Code='add [eax], al' then Ext:=true;
if Code='invalid' then Ext:=true;
10 лет треш-угара?
|
 Ранг: 260.3 (наставник) Статус: Участник PPC-PROTECT author
|
Создано: 17 апреля 2008 18:10 New! Цитата · Личное сообщение · #3
о боже ты мой)) какой ужас))
|
 Ранг: 533.6 (!) Статус: Uploader retired
|
Создано: 17 апреля 2008 18:45 New! Цитата · Личное сообщение · #4
А под De Decompiler оно должно работать(у меня не работает)
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 17 апреля 2008 18:48 New! Цитата · Личное сообщение · #5
censor пишет:
10 лет треш-угара?
Ты бы эти строки написал иначе? Это планировалось как времянка до портирования с VB определения конца процедур. Потом я на это просто забил так как и так работает.
-= ALEX =- пишет:
о боже ты мой)) какой ужас))
Очень информативный пост.
borov пишет:
А под De Decompiler оно должно работать(у меня не работает)
Под 2.0 - да. Где скачать 2.0 не знаю - ищи в сети.
|
 Ранг: 273.5 (наставник) Статус: Участник Advisor
|
Создано: 17 апреля 2008 20:48 New! Цитата · Личное сообщение · #6
GPcH пишет:
Где скачать 2.0 не знаю
Ну с этим..... понятно...
А вот где лайт версию 2.0 взять, не в курсе ????
|
Ранг: 49.4 (посетитель) Статус: Участник
|
Создано: 17 апреля 2008 22:06 New! Цитата · Личное сообщение · #7
Bronco пишет:
А вот где лайт версию 2.0 взять, не в курсе ????
да хоть здесь: хттп://dump.ru/files/p/p00440637/
|
 Ранг: 533.6 (!) Статус: Uploader retired
|
Создано: 18 апреля 2008 00:10 · Поправил: borov New! Цитата · Личное сообщение · #8
GPcH пишет:
Под 2.0 - да
У меня 2.0 lite, при выборе плагина выкидует
GPcH пишет:
Где скачать 2.0 не знаю - ищи в сети
А 2.0 Full в сети реально найти?
|
 Ранг: 793.4 (! !) Статус: Участник Шаман
|
Создано: 18 апреля 2008 06:31 New! Цитата · Личное сообщение · #9
borov если задаешь вопрос, то ставь в конце соответствующий знак ? Иначе тема перерастет во флуд и все будут спрашивать: "borov а где ты нашел? Дай ссылку!"
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 18 апреля 2008 08:29 New! Цитата · Личное сообщение · #10
Чтобы плагин работал нужно сначала в декомпиляторе открыть файл, а уже потом запускать плагин.
Само собой надо его сначала скомпилять.
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 18 апреля 2008 08:29 · Поправил: Модератор New! Цитата · Личное сообщение · #11
[double]
|
Ранг: 1045.7 (!!!!) Статус: Участник
|
Создано: 18 апреля 2008 14:21 New! Цитата · Личное сообщение · #12
GPcH пишет:
Под 2.0 - да. Где скачать 2.0 не знаю - ищи в сети.
Чет болтают что проэкт загнулся?
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 18 апреля 2008 15:08 New! Цитата · Личное сообщение · #13
pavka пишет:
Чет болтают что проэкт загнулся?
Может не будем в теме про плагин обсуждать декомпилятор. Я про него уже все сказал на exetools. Повторяться не хочу.
|
Ранг: 1045.7 (!!!!) Статус: Участник
|
Создано: 18 апреля 2008 17:55 · Поправил: Модератор New! Цитата · Личное сообщение · #14
GPcH пишет:
Я про него уже все сказал на exetools.
Там практический не бываю ;) так как уровень на сегодняшний день пожалуй из всех форумов данной тематики один из самых низких
Archer: там написано, что проект остановлен, о причинах распространяться желания нет, даже не спрашивайте.
|
 Ранг: 533.6 (!) Статус: Uploader retired
|
Создано: 19 апреля 2008 00:14 New! Цитата · Личное сообщение · #15
PE_Kill пишет:
если задаешь вопрос, то ставь в конце соответствующий знак ?
исправлюсь
GPcH пишет:
Само собой надо его сначала скомпилять.
а как подругому?! конечно скомпилил
GPcH пишет:
Чтобы плагин работал нужно сначала в декомпиляторе открыть файл, а уже потом запускать плагин.
все так и делал
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 19 апреля 2008 10:59 New! Цитата · Личное сообщение · #16
borov пишет:
все так и делал
Проверь на тестовом проекте (в аттаче) { Атач доступен только для участников форума } - my.exe
|
 Ранг: 116.6 (ветеран) Статус: Участник
|
Создано: 19 апреля 2008 18:18 New! Цитата · Личное сообщение · #17
GPcH пишет:
Но как-то идея нам с Женьком (ShackS) быстро надоела. И плагин оказался хоть и работоспособным но
до IDA ему еще далеко.
Мдяяя .... Стиль программирования со времен создания GHF Protector так и не изменился  )
Взяли несколько публичный паскалевских исходника, добавили мегаанализатор
if Copy(Code,1,3)='ret' then Ext:=true;
if Code='add [eax], al' then Ext:=true;
if Code='invalid' then Ext:=true;
Вот и готов бюльбюльгюрюк...
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 19 апреля 2008 19:05 New! Цитата · Личное сообщение · #18
dermatolog пишет:
Мдяяя .... Стиль программирования со времен создания GHF Protector так и не изменился )
Взяли несколько публичный паскалевских исходника, добавили мегаанализатор
Опенсорс всегда судить просто. Чтото мне подсказывает что в VMProtect полно заимствований. Просто о них не узнать так как нет публичных исходников.
Теперь что касается плагина. Какой смысл изобретать дизассемблер с нуля если уже есть отлаженный и стабильный? Тоже касается и структур PE формата. Если бы я переписал с нуля эти структуры врядли бы плагин стал лучше.
dermatolog пишет:
добавили мегаанализатор
Да, кроме как к этим трем If'ам и прицепиться не к чему, верно? А еще кто-то в асе говорил что ему плевать до моих проектов - нет же, в каждом топике про мои проекты вставляешь кусок грязи.
dermatolog пишет:
Вот и готов бюльбюльгюрюк...
Показал бы ты исходники "своего" пакера который ты "создал с нуля" в новых версиях VMP... вот уж где наверное сборище публичных исходников. Причем глючит со слов одного из твоих клиентов ужасно - ни один нестандартный EXE (без секции ресурсов например) упаковать не может.
|
 Ранг: 1995.9 (!!!!) Статус: Модератор retired
|
Создано: 19 апреля 2008 19:31 New! Цитата · Личное сообщение · #19
Не нравится мне что-то этот топик. Ну выложил человек и чо вы до него докопались? Не нравится-можно не юзать, тем более, что ничего конструктивного не предложили. Будет хотя бы ещё 1 попытка глумиться после этого поста-будет бан.
|
 Ранг: 116.6 (ветеран) Статус: Участник
|
Создано: 20 апреля 2008 05:20 · Поправил: Модератор New! Цитата · Личное сообщение · #20
Было же ясно предупреждение написано. В баню поехал.
|
 Ранг: 793.4 (! !) Статус: Участник Шаман
|
Создано: 20 апреля 2008 10:36 New! Цитата · Личное сообщение · #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. А еще лучше вообще не читать, а сразу работать с указателем.
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 20 апреля 2008 14:57 New! Цитата · Личное сообщение · #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: не появилось желающих продолжать проект?
|
Ранг: 352.4 (мудрец) Статус: Участник retired
|
Создано: 20 апреля 2008 15:29 New! Цитата · Личное сообщение · #23
насколько я понял он рекурсивно ищет функции на которые есть call начиная с entry point? т.е. всякие callback etc идут лесом?
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 20 апреля 2008 15:53 New! Цитата · Личное сообщение · #24
ssx пишет:
насколько я понял он рекурсивно ищет функции на которые есть call начиная с entry point? т.е. всякие callback etc идут лесом?
Да. Планировалось большее, но времени как всегда не хватает. Потому и ищется человек кто бы взялся доводить до ума.
|
 Ранг: 793.4 (! !) Статус: Участник Шаман
|
Создано: 21 апреля 2008 14:00 New! Цитата · Личное сообщение · #25
GPcH пишет:
Не знаю почему, но когда я объявляю как функцию vlPluginEngine и вызываю то после ее нормального вызова идет Access Violation.
Потому что функция должна быть объявлена как stdcall Delphi по дефолту делает паскалевский вызов через регистры.
GPcH пишет:
Там насколько помню идет проверка конца блока памяти. Если делать через ReadProcessMemory то ошибка чтения вылезала, если через CopyMem - нет.
Тогда нужно использовать функции проверки указателя, или как советуют на васме
try
/*обращаемся к памяти*/
except
/*Ошибка при обращении, выходим из функции*/
end;
Это максимально быстрый способ.
По поводу методы. Мне понравился метод как автор OllyDbg ищет функции, он расписывал это где то в хэлпах или на сайте уже не помню.
|
 Ранг: 120.9 (ветеран) Статус: Участник Programmer and reverser
|
Создано: 22 апреля 2008 12:08 New! Цитата · Личное сообщение · #26
Он эвристически там ищет. Да-да, я тоже где-то читал.
|
 Ранг: 630.8 (!) Статус: Участник Автор VB Decompiler
|
Создано: 22 апреля 2008 12:15 New! Цитата · Личное сообщение · #27
PE_Kill пишет:
По поводу методы. Мне понравился метод как автор OllyDbg ищет функции, он расписывал это где то в хэлпах или на сайте уже не помню.
К сожалению у меня щас нет времени на этот проект. Потому и ищу того кто бы за него взялся.
|