Сейчас на форуме: jinoweb (+5 невидимых) |
eXeL@B —› Программирование —› Поможет ли реверсинг? |
Посл.ответ | Сообщение |
|
Создано: 22 ноября 2015 03:58 · Поправил: armaNd0 · Личное сообщение · #1 Уважаемые старожилы, мудрецы, гуру и "!!!!!!" форума! Прошу Вас поделиться своими комментариями - каким путём и почему Вы пошли бы, решая следующую задачу: • как включить в процесс импорта данных из бинарного файла процедуру "разбора" этих данных, а точнее - их структурирование (восстановление признаков разделения полей и концов строк). режим read-only. Мои комментарии: • есть стандартные (win/x86x/64) реализации импорта (oledb/odbc), работающие со структурированными источниками, и есть юзеры, импортирующие этими механизмами (прямыми запросами) сотни тысяч записей из баз SQL-server в сводные таблицы Excel для дальнейшей аналитики и прочих нужд с завидной скоростью и периодичностью • поставщик некоторых данных переводит часть данных в формат бинарного файла, в котором по несложному алгоритму закодирована таблица. условный пример - представим файл *.csv, из которого удалены символы структуры (\t\r), а в начало файла записаны числа - количество полей и длины каждого. Почти та же таблица, только одной строкой. • требуется внедрить в процесс импорта данных из бинарного файла процедуру их разбора (восстановления удалённых символов структуры), не потеряв юзабилити. то есть чтобы скорость такого импорта была сопоставима с oledb/odbc и чтобы юзер не заметил особой разницы между тем, с каким форматом данных приходится работать. • какие могут быть варианты решения: → промежуточный файл-конвертер: нежелательно, предполагается 2 действия (импорт + импорт) → прописать на VBA: насколько я знаю, самое медленное, кустарное решение → надстройка Excel: менее желательный вариант → пропатчить одну из dll (если не ошибаюсь, kernel32 или ole32) - добавив в ReadFile условие если <формат бинарный> то <разбор бинарника> иначе <работа dll в обычном режиме> Я не силён в реверсинге, поэтому и прошу совета. Работаю c IDA Pro 6.0, Procmon, apimonitor x64, Visual Studio. Буду признателен любым комментариям. Также рассматриваются любые возмездные предложения о помощи - от платных консультаций (Вы говорите что делать - я делаю, показываю итоги, Вы корректируете и направляете, и т.д.) до помощи в работе по программированию. Или также буду благодарен, если Вы кого-то сможете порекомендовать. Спасибо! |
|
Создано: 22 ноября 2015 04:13 · Личное сообщение · #2 че надо сделать так и не понял, что куда заче импортировать ? начните сначала winhex умеет разбирать любой бинарный формат на основе не сложного скрипт языка, надо лишь описывать форматы разбора каждого отдельного разного бинарного формата файла | Сообщение посчитали полезным: armaNd0 |
|
Создано: 22 ноября 2015 04:22 · Личное сообщение · #3 |
|
Создано: 22 ноября 2015 04:24 · Поправил: armaNd0 · Личное сообщение · #4 нууу, если сам reversecode подключился к теме, дело уже не кажется таким безнадёжным! было (упрощенно): открывает юзер Excel-->Данные-->Из текста-->Импорт текстового файла (*.csv)-->Открыть.... Готово! На лист Excel импортирована таблица. Все записи - с нужных столбцах и строках. по-новому: открывает юзер Excel-->Данные-->Из текста-->Все файлы (*.*) [выбирает бинарный файл]-->Открыть.... Готово! На лист Excel импортирована таблица. Все записи - с нужных столбцах и строках. Но импорт был произведён из бинарного файла. |
|
Создано: 22 ноября 2015 04:27 · Личное сообщение · #5 |
|
Создано: 22 ноября 2015 04:29 · Личное сообщение · #6 hors пишет: Надо ODBC драйвер писать. да, верное предложение, такое решение тоже имеет право быть, но на мой взгляд весь огромный функционал odbc окажется просто не используемым. ведь требуется только чтение, create/delete/update не будет... хотя если можно написать light-версию odbc, то супер, слышал, что исходники 2010-го года имеются кажется у народа |
|
Создано: 22 ноября 2015 04:47 · Личное сообщение · #7 Если необходимо только открывать файлы определенного типа в excel, то можно просто написать плагин, в Visual Studio кажется есть шаблоны. ----- http://ntinfo.biz | Сообщение посчитали полезным: armaNd0 |
|
Создано: 22 ноября 2015 07:57 · Личное сообщение · #8 hors пишет: в Visual Studio кажется есть шаблоны. Точно, есть такие, кажется начиная с VS 2008. Сам использовал когда-то для подобных целей, правда давно это было. ----- Give me a HANDLE and I will move the Earth. | Сообщение посчитали полезным: armaNd0 |
|
Создано: 22 ноября 2015 10:28 · Поправил: DrVB_5_6 · Личное сообщение · #9 armaNd0 пишет: → прописать на VBA: насколько я знаю, самое медленное, кустарное решение Ну да, для того, чтобы импортировать несколько килобайт данных, нужно изобрести такой велосипед, у которого будет привод 4х4, турбина от самолёта и ещё чуть-чуть прибамбасов! Это самая примитивная задачка для VBA. А чтобы заметить, что решение "медленное" Вам нужно подсунуть импорт близкий к Гб, только вот Excel его вряд ли прожуёт. А десяток или пару десятков операторов на VBA сработают быстрее, чем Вы передвинете мышку на другое место, впрочем, можно и на asm нарисовать так, что часами будет работать даже на новых процессорах. Вряд ли даже плагины нужны, хотя никто не запрещает. Можно при этом Haskell попробовать использовать - ещё интереснее будет! А если ответить на вопрос, который звучит в названии темы, то реверсинг здесь нахрен не нужен. Тема вообще к нему никакого отношения не имеет! | Сообщение посчитали полезным: armaNd0 |
|
Создано: 22 ноября 2015 14:03 · Личное сообщение · #10 |
|
Создано: 23 ноября 2015 00:45 · Поправил: armaNd0 · Личное сообщение · #11 hors, plutos, reversecode - спасибо! прислушаюсь к Вашим советам, схожу к шаблонам add-ins хотя я был более чем уверен, что перехватить в памяти переменную (в процессе kernel32.ReadFile) и заменить её на себя же преобразованную - самое доступное и правильное решение, чем создание *.xla И мой вопрос как раз был именно в этом - оптимален ли реверсинг kernel32 как решение или нет? неожиданно, что большинство отмечает колоссальную сложность такого решения DrVB_5_6, спасибо за отклик, добавлю немного ясности: реальные условия задачи таковы - из бинарного файла размером более 1Гб в pivot table (excel) требуется импортировать порядка 100Мб данных для аналитиков + есть вероятность того, что будет востребована масштабируемость решения поэтому я предположил, что vba проиграет по скорости решению с пропатченной dll версия про плагины принята; обязательно ознакомлюсь с тем, что есть haskell и, с Вашего позволения, задам вопросы и по этому варианту |
|
Создано: 23 ноября 2015 01:33 · Поправил: dosprog · Личное сообщение · #12 |
|
Создано: 23 ноября 2015 17:17 · Личное сообщение · #13 armaNd0 пишет: оптимален ли реверсинг kernel32 как решение или нет? Для перехвата реверсинг и не нужен armaNd0 пишет: неожиданно, что большинство отмечает колоссальную сложность такого решения Для неподготовленного человека, без специфических навыков, это будет проблемно, потому следом можно было бы скорей всего ждать топика "что я делаю не так с инжектом?" Да, Вам верно посоветовали. Этот не тот случай для инжектов/перехватов/подмен. hors пишет: Надо ODBC драйвер писать. да, верное предложение, такое решение тоже имеет право быть, но на мой взгляд весь огромный функционал odbc окажется просто не используемым. ведь требуется только чтение, create/delete/update не будет... Да ну а Вам-то что, что не будет востребован? Весь функционал в dll лежит. В %SystemRoot/System32/% много разных dll и exe, функционал которых никогда не востребуется. Достаточно просто использовать, что надо hors пишет: Если необходимо только открывать файлы определенного типа в excel, то можно просто написать плагин, в Visual Studio кажется есть шаблоны. Да, верно, в MSVS есть возможность создавать excel-приложения на C#, на vb#, чтобы сворганить свою обработку данных и распределить по листам, по ячейкам. Но, ИМХО, мне для себя было бы проще подключить dll, с 3-4мя хуками, ибо уже набил руку тут. Просто на системах с включённым HIPS может не работать. И если это для кого-то, а не для себя, то всё зависит от уровня этого кого-то, а то и объяснять придётся, как правильно воспользоваться поделкой ) ----- IZ.RU | Сообщение посчитали полезным: armaNd0 |
|
Создано: 23 ноября 2015 17:54 · Поправил: VodoleY · Личное сообщение · #14 DenCoder пишет: то всё зависит от уровня этого кого-то, а то и объяснять придётся, как правильно воспользоваться поделкой ) вот тут.. наверно самое важное. Надо использовать решение, которое ближе к телу.. Реализовывать его на том, в чем больше познаний. А идеал можно писать вечно. З.Ы. ИМХО.. не выдержит екцел такого обьема данных.. ИМХО задача изначально не правильно поставлена. Конвертер можно делать на чем угодно и потом всовывать в ексцел.. перед тем как это все делать.. я б рекомендовал автору топика, сделать мусорный файл сходного обьема, для теста и попробовать подсунуть эксцелу.. ну не для этого он писался.. (споминаю студенческие годы, когда ВОРД документ с 30 страницами таблиц и формул умирал.) ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... | Сообщение посчитали полезным: armaNd0 |
|
Создано: 23 ноября 2015 18:09 · Поправил: DenCoder · Личное сообщение · #15 VodoleY пишет: споминаю студенческие годы, когда ВОРД документ с 30 страницами таблиц и формул умирал. Да да. В Excel было раньше(12 лет назад) ограничение - не больше 32768 строк. Как сейчас - не знаю, пока не могу посмотреть, но скорей всего так и осталось. Если элемент данных из 4х байт, объём файла данных 4 гб и по 2 элемента на строчку, то 16 листов понадобится. ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 25 ноября 2015 00:59 · Поправил: armaNd0 · Личное сообщение · #16 DenCoder пишет: "что я делаю не так с инжектом?" Вы правы, я практически уже написал это DenCoder пишет: Этот не тот случай для инжектов/перехватов/подмен И тем не менее Вы пишете Но, ИМХО, мне для себя было бы проще подключить dll, с 3-4мя хуками DenCoder пишет: Да ну а Вам-то что, что не будет востребован? Если мы обсуждаем вариант написания odbc-драйвера, то заплатить попросят за весь функционал, в том числе за невостребованный. А если не писать драйвер с нуля и поправить существующий функционал - это уже другое дело) p.s. VodoleY пишет: не выдержит екцел такого обьема данных.. DenCoder пишет: В Excel было раньше(12 лет назад) ограничение - не больше 32768 строк. Как сейчас - не знаю, пока не могу посмотреть, но скорей всего так и осталось. Всё кардинально изменилось. Новые xml-форматы файлов office (*.xlsx,*.docx и т.п.) существенно облегчили размеры файлов и скорость работы с ними и в них. В Excel (до 2007) действительно было зашито ограничение на выделенную память под хранение адресов - 2^16 или 65'536 строк. В новом Excel 2^20 или 1'048'576 строк. Могу сказать, что сейчас прямым запросом с SQL-servera в Excel закачивается порядка 100 Мб данных примерно за 5 минут (~600.000 записей). Стабильно работает (тьфу-тьфу) более 5 лет (финансовая аналитика). Пользователи в восторге - ведь они получают не просто таблицу данных, а pivot table со всем его функционалом, шикарно реализованным в Excel. А исходная проблема топика собственно и возникла в связи с тем, что нужно подключиться к новой БД, представляющей собой бинарный файл с разструктурированными данными. |
|
Создано: 25 ноября 2015 02:09 · Поправил: DenCoder · Личное сообщение · #17 armaNd0 пишет: И тем не менее Вы пишете Пишу, ведь у меня нет проблем с этим. А Вы ещё только рассматриваете это как возможный вариант. Не всё так просто! Я когда начинал внедрять код в другие процессы, у меня вообще-то ещё была Win98(это был 2005 год), под которой не работает функа CreateRemoteThread(). И приходилось писать код под XP, носить на дискете скомпиленую прогу до места назначения, пробовать там, возвращаться, исправлять ошибки... полдня так побегал, надоело... Второй раз был уже в 2008 на XP и удачный. Но привыкнуть к указателям, к указателям на указатели, к приведению типов DWORD к указателям на BYTE и обратно, написанию кода на асме, который должен работать базонезависимо в адресном пространстве другого процесса, и т.п., пользуясь только информацией о потенциальных возможностях, взятых из MSDN... доставляло немало геморроя... Сейчас интернет стал более доступен, масса примеров в сети, но для некоторых это мало меняет дело... armaNd0 пишет: Если мы обсуждаем вариант написания odbc-драйвера, то заплатить попросят за весь функционал, в том числе за невостребованный. То есть Вы определяетесь с вариантом тз исполнителю. Совсем не факт, что вариант через odbc будет стоить дороже инжекта с подменой данных. 1. Читаем бинарный файл 2. Обрабатываем как надо 3. Через odbc-драйвер вставляем в xls-файл. Не по одной записи, а заполняем ими буфер на 32 -64 мб и пачками инсертим, если екселевская бд позволяет так. Это повысило бы скорость по сравнению с построчной вставкой. План Б. Если не поддерживается xls-провайдером многострочная вставка или вставка из потока ввода, лучше разобрать формат для непосредственной вставки в xls, чем писать костыль для экселя. Ниже пример, который 6.5 лет назад писал для преобразования текстового файла в файл Excel. Часть где-то взял, переправил и откомментировал подробно для студента. Конечно, его нужно переправить в соответствии с пп.1-3 Code:
----- IZ.RU | Сообщение посчитали полезным: armaNd0 |
|
Создано: 25 ноября 2015 14:59 · Личное сообщение · #18 Так вот кто пишет на MFC. Наконец-то я увидел этих динозавров "в живую" | Сообщение посчитали полезным: MasterSoft, DenCoder |
|
Создано: 25 ноября 2015 16:18 · Поправил: DenCoder · Личное сообщение · #19 |
|
Создано: 27 ноября 2015 10:38 · Личное сообщение · #20 Резюме темы. Я понял и авторов первых откликов, и DenCoder, VodoleY - решение кардинально зависит от параметров пользователей. 'Под себя', на 1 машину - оптимален инжект. Для 5-10 пользователей - создание Addin. Масштабируемое коммерческое решение - odbc-драйвер. Спасибо ВСЕМ, кто нашёл время поделиться своими комментариями - благодаря Вам я нашёл ответ на свой вопрос. Проект будет опубликован на фрилансе. |
eXeL@B —› Программирование —› Поможет ли реверсинг? |