Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Apr 25, 2019 3:09 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 967 posts ]  Go to page Previous 161 62 63 64 65 Next
Author Message
PostPosted: Sat Dec 29, 2018 12:26 pm 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
fasm 1.73.04
к посту о фасм ранее
https://yadi.sk/d/e-ejtYnHTKLc_w (ссылка все та же, обновлена)
добавлено: копия SYSTEMCOLORS, и проверка при отрисовке окна (если SYSTEMCOLORS не обновились - они не применяются к контролам по новой) (не сказать, что код проверки короче, чем код применения SYSTEMCOLORS к контролам, но это логично, что должно быть так) - ну и соответственно функции для всего этого.
в остальном изменена структура исходников немного (папки structures и equates).


Top
   
PostPosted: Sat Dec 29, 2018 10:52 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Добрый вечер. Кто работал с программой Olly debug, подскажите что означает следующее сообщение?
Attachment:
Corupted.png
Corupted.png [ 14.04 KiB | Viewed 2033 times ]

Я примерно понимаю что в нем говорится о каких-то испорченных точках остановки, но неясно что это такое. Предполагаю что это окно наблюдается если я в код программы вношу какие-либо изменения, которые сдвигают расположение функций. Но как оно знает что функции сдвинулись :?:


Top
   
PostPosted: Sat Dec 29, 2018 11:52 pm 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
Ах олдскулеры(
точка останова падает на начало инструкции до патча, а после патча на середину инструкции.
мне ломанная ида про больше нравится как отлдадчик и дизассемблер, чем олька. Не призываю (но информирую).
Но после патча целевого файла (а не его образа в иде, образ то можно патчить и переотлаживать сколько угодно) ида сталкивается с теми же проблемами.


Top
   
PostPosted: Fri Jan 04, 2019 2:01 am 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
структура репозитария: в корне выделить папки
1.structures - для определения структур (kernel.inc для самых базовых, остальные по именам модулей к которым они относятся),
2.equates - для определения констант (опять же kernel.inc для самых базовых, остальные по именам модулей к которым они относятся),
3.macros - для определения макросов (те же принципы),
все вышеперечисленные файлы не должны содержать ни одного байта генерируемого кода, будучи лишь вспомогательными файлами для удобства синтаксиса программы
4.helperprocs - для определения вспомогательных функций которые могут быть многократно востребованы в большинстве компилируемых программ.
Сейчас в каждой программе (а вернее объектном модуле) - все это свалено в файлик *.mac интуитивно ожидается что там должно быть только определение макросов, но не тут то было - определение всего свалено в кучу, так еще могут присутствовать директивы определения данных.

tinypad & textedit присутствуют одновременно.
Что если как текстовый редактор оставить только textedit, а tinypad сцепить с фасмом в полноценное иде? Например для более настраиваемой подсветки синтаксиса tinypadу понадобятся таблицы используемые фасмом для парсинга - довольно большие - не дублировать же, а будучи одним файлом с фасмом он получит к ним доступ.
пример fasm с такой подсветкой, но для Windows: https://yadi.sk/d/ZctCe5onzFz6mQ


Last edited by ProMiNick on Wed Jan 09, 2019 11:52 am, edited 1 time in total.

Top
   
PostPosted: Sun Jan 06, 2019 12:08 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Внимание!
Снимается секретность с подопытной программы, о которой я писал ранее здесь. Моей подопытной программой был компилятор Borland C++ 5.02, в архиве результаты исследований:
Attachment:
Borland.7z [455.43 KiB]
Downloaded 38 times

Пока что до портирования под Колибри очень далеко, но с полученными файлами можно проводить эксперименты в Виндовсе. Может кому-то они пригодятся для извлечения отдельных функций.


Top
   
PostPosted: Sun Jan 06, 2019 3:17 am 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
IgorA, это не реверсинг((((( дизассемблинг не более((((

ты расписал хорошо и так документированные функции.
Куда интереснее если бы было описание неизвестных. Всем переменным присвоены адресные имена вместо смысловых (хотя бы части переменных можно было бы присвоить какие-то смысловые имена). В фасме есть такие штуки как структуры данных, неплохо было бы выделить в данных подобные структуры. Единственный плюс - Импорт и экспорт - хотя бы через макросы.

из retn ? и add esp,-? или sub esp,? можно было делать доп инфо о параметрах и локальных переменных, что-то вроде:
Code:
virtual at ebp-8
        .loc1 dd ?
        .loc2 dd ?
        .oldebp dd ?
        .retaddr dd ?
        .arg1 dd ?
        .arg2 dd ?
end virtual

и вместо ebp+/-что-то использовать эти символьные имена, а может даже подобрать смысловое имя одного из аргументов, или определить структуры в локальном фрейме.

Я думаю, если что-то портируется - нужно отделить полезную логику (попробовать ее понять - определить структуры данных над которыми она осуществляется) от ХЛЛ-льного мусора определить места соприкосновения этой логики с функциями специфичными для операционной системы. И портировать ТОЛЬКО полезную логику. Раз это компилятор - в данных должны присутствовать таблицы разбора - совокупности идентификаторов возможно вместе с сылками на их обработчики. С++ вроде однопроходный компилятор - значит все переменные в момент использования предопределены. И раз компилятор ХЛЛльный, значит в нем присутствует код добавления в выходной файл мета части - врятли в колибри она нужна.


Top
   
PostPosted: Sun Jan 06, 2019 11:35 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
ProMiNick wrote:
ты расписал хорошо и так документированные функции.
Куда интереснее если бы было описание неизвестных

В том то и проблема что у нас нет исходного кода. Потому о назначении неизвестных функций можно только догадываться смотря на сам код функций.
ProMiNick wrote:
Всем переменным присвоены адресные имена вместо смысловых (хотя бы части переменных можно было бы присвоить какие-то смысловые имена).

Там просто очень много переменных и всем им присваивать имена очень трудно. Все-таки больше 3 мб кода... Хотя многим строковым переменным дизассемблер присвоил имена исходя из того текста который в них есть.
ProMiNick wrote:
Я думаю, если что-то портируется - нужно отделить полезную логику (попробовать ее понять - определить структуры данных над которыми она осуществляется) от ХЛЛ-льного мусора определить места соприкосновения этой логики с функциями специфичными для операционной системы. И портировать ТОЛЬКО полезную логику.

Я тоже так думаю, но пока что не понятно как точно определить где именно эта полезная логика спрятана. Кроме метода комментирования участков кода и просмотра поведения программы ничего придумать не могу. Но и это не дает гарантии ведь можно убрать что-то нужное, которое в данном случае не используется, но может пригодится в последствии.
Задача портирования очень трудна, но теоретически возможна для выполнения. Даже получить компилируемый fasm-овский код, который при этом еще и работает тоже нелегко, ведь дизассеблер не выдает всегда правильный код. Бывало, что некоторые куски кода шли просто байтами и приходилось востанавливать их из нескольких программ.

Еще вопрос, что такое ХЛЛльный компилятор?


Top
   
PostPosted: Mon Jan 07, 2019 2:25 am 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
ХЛЛльный компилятор - компилятор языка высокого уровня (ХЛЛ -High Level Language)

про выделение структур...
например, по адресу метки L0049C96C начинается таблица, каждый элемент которой имеет вид:
Code:
struct someelement
        pString dd ?
        index    dd ?;с шагом 2? нет не индекс конечно, непонятная внутренняя ересь компилятора
        elementClass db ?;подозреваю что это внутренний класс элемента (лучше использовать единую нотацию или decimal или hexadec...)
        elementsubClass db ?;подозреваю что это внутренний подкласс элемента, используется не везде (значение по умолчанию (-1) или $FF)
        elementID db ?; подозреваю что это ID, по крайней мере для регистров
        db 0;не используется, выравнивает структуру на 4хбайтовую границу
end struct

Code:
L0049C96C:
   ._1 someelement SSZ0049CB58__EAX, 2*0,10,10,17,
   ._2 someelement SSZ0049CB5D__EDX, 2*1,10,13,19,
   ._3 someelement SSZ0049CB62__EBX, 2*2,10,11,20,
   ._4 someelement SSZ0049CB67__ECX, 2*3,10,12,18,
   ._5 someelement SSZ0049CB6C__ESI, 2*4,10,14,23,
   ._6 someelement SSZ0049CB71__EDI, 2*5-1,10,15,24,
   ._7 someelement SSZ0049CB76__EBP, 2*6-2,10,-1,22,
   ._8 someelement SSZ0049CB7B__ESP, 2*7-3,10,-1,21,
   и т.д.


почти вся секция данных, это либо текстовые строки, либо таблицы, конечно элементы других таблиц имеют struct отличный от описанного в примере выше.

еще можно прооверрайдить директиву dt в fasm`е одноименным макросом
Code:
struc dt [arg] {
  if arg eqtype 1.0
    dt arg
  else
    match sign value,arg {
      match =INF,value { dq $8000000000000000 \\}
      match =NaN,value { dq $C000000000000001 \\}
      dw $7FFF - (sign $4000 - $4000) \}
  end if }

macro dt по аналогии.
там есть таблица dtшек - чтоб она не разрывалась вкраплениями констант бесконечности и NaN как раз вышеописанный оверррайд.

Но можно и без макросов (идея пришла 25.01.2019, дописал сюда):
Code:
Inf equ -$4000+$4000+$7FFF:$8000000000000000
NaN equ Inf or

синтаксис использования:
Code:
dt Inf,+Inf,-Inf,+NaN(Index),-NaN(Index); где Index - любое число от 1 до $7FFFFFFFFFFFFFFF


Last edited by ProMiNick on Fri Jan 25, 2019 11:32 am, edited 1 time in total.

Top
   
PostPosted: Tue Jan 08, 2019 7:41 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Структуры нужно сокращать, потому что в коде они распознаны хаотично. Очень часто по байту на каждую строку выделило, там где можно например dd поставить и сэкономить место.


Top
   
PostPosted: Tue Jan 08, 2019 7:59 pm 
Offline

Joined: Mon Mar 27, 2006 6:33 am
Posts: 650
А, есть ли возможность для IDA указать Мар файл с адресами и названиями меток (не корректируя данные вручную при этом)

P.S. Для общего понимания кода IDA может выдавать листинг и в псевдо Си коде. Это используется?


Top
   
PostPosted: Tue Jan 08, 2019 11:53 pm 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
Про возможности ИДА представить код в псевдо Си не знаю. Возможно для анализа функций вещь полезная.
Но я вел речь о предшествующей анализу функции стадии - стадии анализа данных.
И речь не о хаотичном преобразовании любых 4х db подряд в 1 dd. А в поиске таблиц!!! Таблица - или иначе статический массив однородных элементов. Каждый такой однородный элемент логично представлять в 1 строчке кода ассемблера, предварительно создав определение для структуры этого однородного элемента. И повторюсь - анализируется компилятор, поэтому 90% всех данных занимают таблицы и текстовые строки, на которые ссылаются элементы этих таблиц.

П.С. некоторые 4 идущих подряд db и вовсе не нужно объединять в dd - если каждый из них в отдельности определяет независимый подкласс элемента, напротив если они образуют единое битовое поле, а темболее 4хразрядное число - то объединять нужно.

На примере предложенной мной структуры someelement, даже дизассемблер однозначно определил первое его поле как dword ссылку на текстовую строку.
Второй элемент я обозвал индекс - он все время возрастает (если мы делаем допущение что возрастает он не просто как однобайтовое число, а как 4хбайтовое - не находим никаких противоречий - верхние разряды обнулены) - он тоже dword.
Но следующие далее в структуре байты меняют свои значения хаотично - значит каждый из них характеризует что-то самостоятельное. а последний всегда 0 - он выравнивает структуру на границу 4х байт.

Если анализа данных не сделать, то IgorA, все кому понадобиться извлечь отдельные функции, повторят весь твой труд - т.к. для анализа функций не достает готового анализа данных, а чтоб его получить проще работать с образом в дизассемблере, чем с просто текстом кода.

мой опыт реверсинга - я шел от обратного - объяснить каждую процедуру шаг за шагом, оптимизировать функцию, и только когда у меня сформируется общее представление - скомпилировать готовую программу. До готовой еще не дошел.
вот ссылка "shellex x86 & x64: what HLL (VC++6,7) hides over the sources" https://board.flatassembler.net/topic.php?t=20785
Моя цель - в проекте по ссылке - дать возможность каждому fasm-еру писать расширения оболочки Windows под ассемблером.
Файлы для анализа выбрал самые маленькие 23кб для x86, 30кб для x64, 86кб для еще одной версии для сравнения.


Top
   
PostPosted: Thu Jan 10, 2019 12:02 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Kopa wrote:
Для общего понимания кода IDA может выдавать листинг и в псевдо Си коде. Это используется?

Пока что эта возможность не использовалась, я в основном использовал PE Explorer вместе с Olly Dbg и из этих программ составлял получившийся код. Когда ProMiNick написал о IDA pro, тогда работы по приведению кода в компилируемый вид уже были выполнены. От IDA я взял адреса и названия некоторых стандартных функций, но еще не все эти названия перенесены в основной файл.
ProMiNick wrote:
Если анализа данных не сделать, то IgorA, все кому понадобиться извлечь отдельные функции, повторят весь твой труд - т.к. для анализа функций не достает готового анализа данных, а чтоб его получить проще работать с образом в дизассемблере, чем с просто текстом кода.

В общем понятно что нужен анализ функций что-бы сделать из них что-то полезное. Но если предположим они определят что им нужны определенные функции с определенными адресами, то как тогда они без готового кода будут его компилировать? В таком случае им прийдется самим этот код редактировать вручную. А если файл с кодом уже есть тогда можно просто взять его и копировать функции куда нужно. Ведь дизассемблер не дает готового кода подходящего для компиляции.


Top
   
PostPosted: Thu Jan 10, 2019 1:29 am 
Offline

Joined: Thu Aug 04, 2016 10:43 am
Posts: 22
IgorA, когда есть связка нужных функций и структур данных - компилируемый код можно написать уже и от руки.
Рабочий дизассемблированный код нужен только для патчей. Весь анализ проводится только с образом исполняемого файла в дизассемблере(отладчике).
Ведь при портировании потребуется изменить определенный функционал: создавать выходные исполняемые файлы в формате колибри, убрать обработку исключений специфичную для винды автоматически встраиваемую компилятором в выходной файл. (Иначе зачем разрабатывать для винды из под колибри) - так что простое дизассемблирование тут бесполезно.


Top
   
PostPosted: Wed Jan 23, 2019 12:28 pm 
Offline

Joined: Sat Jan 19, 2019 5:17 pm
Posts: 63
Доброго дня всем,

полноэкранный режим для приложений не плохо было бы.

Извините, если это уже обсуждалось.

_________________
"Никогда такого не было. И вот опять..."


Top
   
PostPosted: Wed Jan 23, 2019 4:51 pm 
Offline
User avatar

Joined: Wed Mar 18, 2015 8:22 am
Posts: 145
Да, это обсуждалось, но никто ничего не сделал либо руки не дошли.
У некоторых приложений окно развернуть на весь экран можно два раза кликнув по заголовку окна.

_________________
Это очень плохо. Зачем ты это сделал?
Зачем кому-то подражать, если можно сделать что-то новое? Необычное. Захватывающее. Свое!
Развивай мышление, мысли не как все! Разве не этому нас учил Стив Джобс?
Попробуй сделать что-то такое, чего еще нету нигде!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 967 posts ]  Go to page Previous 161 62 63 64 65 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited