Сейчас на форуме: Kybyx (+2 невидимых) |
![]() |
eXeL@B —› Оффтоп —› syser - а он еще нужен? |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
Посл.ответ | Сообщение |
|
Создано: 26 декабря 2016 00:08 · Личное сообщение · #1 есть мысль себе в портфолио добавить хоть что то, что можно показать на паблик из всего что сделано или делается или будет делаться, почти ничего на паблик показывать нельзя вспомнил про Syser,его можно, могу восстановить соурсы ядра дебагера, которое общее для Ring3 и Ring0 (кто помнит у Syser два дебагера, ring3 и ring0, знают все только ring0, про ring3 мало наверное кто помнит, он был бесплатен) ну и сам Ring3 часть как рабочий дебагер, можно и всю Ring0, но мне это не интересно ну и все конечно на гитхаб собственно вопрос, а дальше это кому то интересно? подхватить,развивать итд, гуи дебагер для ядра еще живы ? ![]() |
|
Создано: 15 апреля 2017 15:41 · Поправил: reversecode · Личное сообщение · #2 добил закладки(табы) удалил из тестов одну клаву https://www.sendspace.com/file/f8kv57 попутно пришлось зарефакторить списки, стандартный std::list не умеет обратный итератор(по моему только констовый?), да и что бы использовать извращения с CONTAINIG_RECORD для списков(в стандартном не добраться, поля протектед итд), все равно надо было это рано или поздно реализовывать в итоге теперь можно использовать извращения вида Code:
такое же извращение с рефакторингом надо и для map контейнера сделать, но пока связываться с ним не хочу он вроде для такого UB удаления только в функции отладчика используется, по гуи вроде не видно таких извратов с этими оконными табами потерял почти два дня основная ошибка все та же, переосмысливание закрученых условий, с первого раза не всегда правильно перевариваются в бошке Добавлено спустя 3 минуты я хз, может тему в основной топик двинуть ?)) будет ли это кому интересно в таком виде ![]() |
|
Создано: 15 апреля 2017 17:30 · Личное сообщение · #3 reversecode пишет: стандартный std::list не умеет обратный итератор(по моему только констовый?) должен уметь: Code:
и std::list::rbegin тоже должен уметь работать как с const так и без reversecode пишет: я хз, может тему в основной топик двинуть ?)) будет ли это кому интересно в таком виде по содержанию больше на блог похоже) ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 15 апреля 2017 17:49 · Поправил: reversecode · Личное сообщение · #4 вот как раз проблема в том что список стл вроде как кольцевой, а итератор стл умеет только от конца или от начала а в сисере он используетсяк к примеру от начала, а потом по условию или инкрементится либо декриментится на Н позиций перепридумывать условие когда Н больше или Н меньше итд прыгать по разным типам итеров было лень и вот с начала декремент - и сразу ассерт рипнул стл и упростил до десятка строк ну да ну да, согласен, на блог по одной теме похоже, когда реверс надоест или закончится, можно будет закрыть ее Добавлено спустя 12 часов 16 минут столько уже сделано..743 кила сорсов и должно казаться что реверса только уменьшается... аннифига окно edit и list кажется неподъемным, а hexview тем более добил тулбары на них так же работают хинты https://www.sendspace.com/file/4i71gx всегда считал что операции сдвига имеют высший приоритет чем операции +- оказывается нифига (long long)a<<32+b сначала 32+b, потом сдвиг wtf ?? кстати китаезы видимо уже начинали сисер в 64 битку девелопить, зачатки встречаются, регистры 64 битные в тексте, итд странно что забросили ... ![]() |
|
Создано: 17 апреля 2017 22:16 · Поправил: reversecode · Личное сообщение · #5 добавил меню и исправил уже свой баг, хинты иногда валили приложение https://www.sendspace.com/file/8pmx08 ошибка хинтов, неправильно понятый цикл по std::map контейнеру, оказывается перебирая от начала до конца, и отправляя елемент контейнера на обработку, другая функа могла удалить этот же елемент с контейнера, в итоге дальнейший инкремент в переборе валил приложение по ассерту стд мапа присмотревшись еще раз в псевдокод рейса, понял что сначала нужно сохранить итератор а потом уже инкремент(postfix increment) фигня конечно, но с кучей других условий этот момент мозг пропустил вообще в реверсе стараешься держать общую картину, а не мелкие детали, иначе начинаешь тонуть в деталях и руки быстро опускаются а вот уже добив все, можно и поразмыслить над деталями, оптимизациями, упрощениями уже объем сорсов 782 кила, из которых только сама гуи 463 кила основная ошибка в реверсе все та же.... сложно скрученые циклы и условия в рейсе причем если смотреть в асм код, то все намного логичнее и понятнее, поэтому приходится иногда переключаться в асм код и выстраивать для начала правильные циклы и условия а потом уже копипастить и чистить код это был бы самый нужный функционал в рейсе, если бы он умел выстраивать правильные логические условия и циклы.... но увы, точно знаю ильфак это оптимизировать не будет... ![]() |
|
Создано: 18 апреля 2017 19:53 · Поправил: reversecode · Личное сообщение · #6 добавил сплит окна, теперь появились табы цпу, регистров, стека, вотча итд https://www.sendspace.com/file/cnoarz Добавлено спустя 42 минуты прикреплю картинку то что уже получается, а то запускать мало кому интересно ![]() ![]() |
|
Создано: 19 апреля 2017 20:49 · Личное сообщение · #7 |
|
Создано: 20 апреля 2017 01:37 · Личное сообщение · #8 reversecode пишет: а кто нибудь знает где взять спецификацию по команде vpcext 1, 12h ? Нигде не взять. Так как на реальных процессорах такой команды нет и никогда не было(и никогда не будет). Последовательности вида 0х0F/0х3F/??/??, которые по неведомым причинам дизассемблер IDA обзывает vpcext, используются для внутренних нужд в VirtualPC( в частности в BIOS). reversecode пишет: причем не просто для детекта виртуалки, но и для вывода на екран итд FACEPALM.JPG ----- http://ntinfo.biz ![]() |
|
Создано: 20 апреля 2017 02:18 · Личное сообщение · #9 конь ты меня просто удивляешь думаешь я не знаю что это за инструкции ? очевидно что знаю что это для емуляторов это ихние инструкции так вот эти инструкции явно используются в сисере для коммуникации с вируталкой, и не просто детекта окружения а еще и для обновления екрана вмваре еще понятна, там стандартные in/out port которые она перехватывает(хотя тоже сложновато найти спецификацию) нашел только такое, и то считаю лажей https://github.com/sysprogs/VirtualKD/blob/master/kdvm/vmwrpc64.asm а вот вирутал пс изобрел свои инструкции вот и интересно стало, китаезы сисера разреверсили виртуал пц что бы использовать его возможности на все 100 или есть спецификация ? очевидно что третье, им кто то дал эту спецификацию ![]() |
|
Создано: 20 апреля 2017 16:22 · Личное сообщение · #10 |
|
Создано: 20 апреля 2017 16:40 · Поправил: reversecode · Личное сообщение · #11 используется в сисере для обновления экрана в виртуал пц Code:
для детекта Code:
Добавлено спустя 4 часа 12 минут раз уж зашла речь про прорисовку, расскажу подробнее про сисер для этого используется отдельный драйвер, 26кил в бинаре(десяток простых функций) итак начало манипуляции с cr0, помоему пейджинг отключается и 1) хучится ZwSetSystemInformation 2) хучится ZwLoadDriver включается обратно пейджинг 3) ставится PsSetLoadImageNotifyRoutine done -------- в новой ZwSetSystemInformattion ловится SystemLoadGdiDriverInformation получают имя дисплей драйвера через (L"\Device\Video0", L"InstalledDisplayDrivers";) и дальше хучится функция на +10 смещние (EntryPoint) в найденом дисплей драйвере *(a2 + 0x10) = New_EntryPoint; done ---- в этой новой хук функции EntryPoint, хучатся DrvDisablePDEV DrvEnableSurface DrvGetDirectDrawInfo DrvEnableDirectDraw DrvEnablePDEV done ---------- в новой DrvEnableDirectDraw хучится какая то Flip функа done --------- в новой ZwLoadDriver ловится \Device\DXGKrnl и хучится IRP_MJ_INTERNAL_DEVICE_CONTROL done ------- в новой IRP_MJ_INTERNAL_DEVICE_CONTROL, хучится DXGKrnl->DxgkInitialize по if ( v5 == 0x23003F && v3 == 4 ) done -------- в новой DxgkInitialize хучатся DxgkDdiSetVidPnSourceAddress DxgkDdiCreateAllocation DxgkDdiDestroyAllocation DxgkDdiSetVidPnSourceVisibility done ----- все сделано, в хуках уже получаем доступ к видео ресурсам ака линейной памяти Добавлено спустя 4 часа 51 минуту лень уже гуглить, кто нибудь может знает юзаю в мейкфайле очистку объектов Code:
так вот если все файлы есть, то все удаляетя без предупреждений Code:
если же еще раз запустить очистку то ловим ошибки, причем ошибки не на все файлы, а выборочно на несколько Code:
вот и вопрос, а чего ругается выборочно ? файлов то уже никаких нет, и del мог бы ругнуться абсолютно на все файлы вообщем мелкософт меня удивляет ![]() |
|
Создано: 21 апреля 2017 06:26 · Поправил: spinz · Личное сообщение · #12 |
|
Создано: 21 апреля 2017 06:40 · Личное сообщение · #13 да пардон, не пейджинг, а манипуляция с битом WP cr0 Добавлено спустя 15 часов 25 минут добил консольку ![]() ![]() |
|
Создано: 29 апреля 2017 23:14 · Личное сообщение · #14 |
|
Создано: 30 апреля 2017 21:25 · Личное сообщение · #15 reversecode не стесняйтесь писать подробности, сколько сделано, сколько осталось, какие возникали трудности и на какие натыкались ошибки. думаю не один я читаю с интересом ваши комментарии по поводу разбора sysera. ![]() ![]() |
|
Создано: 30 апреля 2017 22:09 · Личное сообщение · #16 |
|
Создано: 30 апреля 2017 22:17 · Личное сообщение · #17 reversecode пишет: какие подробности интересую Что разобрано полностью, что осталось, какие сложности в разборе какого то класса\структуры, ляпы и тому подобное, в общем новости с фронта. Ps. Здесь идиотское ограничение на оффтом, в основном форуме можно сколько угодно гадить, а в оффтопе ни-ни, нужно еще заслужить, а многие просто молча листают, по принципу нечего сказать - незачем дергать человека, ждем когда автор сам соизволит. ![]() ![]() |
|
Создано: 01 мая 2017 00:26 · Поправил: reversecode · Личное сообщение · #18 странно я думал в офтопе ранг не засчитывается, а флудить можно сколько угодно... в любом случае, кому что то нужно, лс не ограничена многие по началу в лс интересовались, а будет ли 64 версия... некоторые посоветовали забросить нахрен)) есть дела и поважнее... что рассказывать, сложности всегда одни и те же сложное раскуривание лапши циклов и гоуту которые выдает рейс, если бы не они, реверс был бы сказкой вот один из примеров по окну хексвью что добивал на днях к примеру вот из рейса а это уже причесал и работает и такого же качества и весь остальной код много функционала восстанавливается для полноценности, но не тестируется на правильность, поскольку не используется вообще ну вот есть к примеру базовый класс ядра гуи, в версии утилит для ядреного дебагера, в нем есть три функци для регистрации/удаления в таскбаре,(кто юзал сисер rin0 должен знать как его утилита ring3 висит в таскбаре) хотя в ring3 дебагера и тем более ring0 версии этого класса ясное дело таких функций нет, их вырезал компилер как неиспользуемые или например в версии ring0, этот базовый класс гуи имеет функции копирования буфера на экран и с экрана, а так же сохранения всего экрана в bmp вот на такие моменты как восстановление полностю всех функций класса иногда тратиться больше времени, поскольку нужно иногда открыть до 6 IDA разных версий, и реверсить или просматривать есть ли по данному классу что то еще зачем это делать ? причин разные 1) что бы иметь функционально законченную единицу, к которой уже не нужно возвращается для реверса итд, вникать в нее 2) бывает много полей класса с неизвестным значением и пониманием как его обозвать, когда функциональная единица(какой то класс) восстановлена по максимуму, функции некоторых полей приобретают понятное смысловое значение 3) если вдруг забрасываешь реверс, то всегда остается что то законченное, которое можно заюзать под свои нужны в чем то другом и вот по мере добавление другого функционала начинает работать функционал который ранее не был задействован и огребаешь новую порцию уже собственных багов к примеру в сисере есть собственный шаблонный класс строки, для unicode и ansi Code:
с оператором доступа к буферу (до фикса) Code:
казалось бы фигня, что тут может не работать ? компилиться нормально, строки всегда выдаются пока не словил баг на нулевом буфере)), строка не заполнялась, была пустой, а оператор выдавал ноль, а не указатель на нулевой буфер как пофиксить функу, додумайте сами)) но рейс выдал верный вариант, я его на скорую руку набивал и не обратил внимание 21 апреля - 29 апреля, парился с самыми для меня казалось бы сложными классами элемента окна как окно редактирования и список, они используется почти везде, регистры, стек вотчи, асм листинг, с++ соурс листинг, плюсик нажал а под пункт и раскрылся к тому же при реверсе оказалось что этот класс окна может намного больше(заложен функционал) но в сисере в целом он нигде не используется, ни в одной из версий, и даже нет в утилитах окно редактирования осилил за два дня, а вот с окном списка вывода... было сложно, думал уже забросить все, и заняться другими делами.. в нем было пару просто больших по объему функций который рейс выдавал безумно большую портянку и сам функционал этого класса окна работал на итераторах, и их прокручивания вперед назад, и кастами в -8 отрицательными значениями восстановил и его, правда еще не все, но основной функционал уже работает осталось добить ресайз столбцов, хотя как по мне не самая нужная штука именно сейчас так же переписал списки, TList оказывается в сисере они дореализовали свои операторы, это прыжок на N елементов вперед или назад и оператор доступа к списку как к массиву operator[](int) на основе этих прыжкой вся реализация мне показалась подозрительной, и хоть все и работало я решил набросать стресс тесты и они показали какую то странность, прыжка на -1 элемент список от нуля до размера по убыванию Code:
а это цикл от минус размера умноженного на два, до плюс размера умноженного на два это все по оператору доступа Code:
Code:
реверс проверял десятки раз, все верно в оригинале в декомпилере оператор доступа так что думаю ошибка в оригинальной версии списка... ну пока в гуи это никак не проявляется, пусть будет как есть сегодня добил окно хекс вьюва.. потом сидел пытался раскурить баг с прокруткой, если от 0 адреса крутонуть обратно, то сдвигается весь вьюв на один байт потом глянул в оригинальный последний сисер, а этот баг и там присуствует, ок, оставил как есть сразу фиксить ошибки которые присутствуют и в оригинальной версии, не буду, может как нибудь потом ![]() в целом универсальное ядро гуи для рисования можно сказать на 99% готово можно его еще конечно добивать, по мелочам.. как например есть в утилитах класс Options готовое окно которое по шаблону показывает опции, в нем можно указывать значения, (текстовые,числовые,выбрать цвет(доп окно появляется) итд) вообщем хороший готовый элемент для конфигов пока в код не перекладывал, только в рейсе зареверсил, разобрал что куда и как называется что нужно для уже готового дебагера 1) вытянуть окно дизасм листинга 2) разреверсить дизасм сисера 3) добить по мелочи управления между ядро дебага и гуи периодически смотрю в версию ring0 не только самого гуи и его функционала, но и ядреной части, не очень нравится, поскольку это не универсально, много асм хаков, которые на x64 неудобно будет портировать, либо вообще не портируются, надо будет с нуля придумывать так же много всяких виндовых хаков к примеру ищется шаблону (штук 15 вариаций функций) MiCopyOnWrite для хука вообщем к чему я... про сисер в ring0 я пока точно не мечтаю хочется добить ring3 уже до минимально рабочего функционала, и отдохнуть или заняться другими проектами так же интерес по открытию соусов постепенно пропадает, умные люди отговорили смысла нет, 1) мало кто поверит что это возможно зареверсить в таком качестве 2) толку от соурсов никакого, вон есть много примеров на гитхабе, и результат ноль, ну реально, кто сам начал компилять и дорабатывать тот же IDR ? 3) за то почти убедили что лучше пытаться добить сисер до ring3 64 версии так что я еще в раздумиях... мне больше нравится вариант продажи сорсов)) за сумму равносильную разработке с нуля, хотя кому он надо ? вон говна на гитхабе и так хватает так что помечтаю о легком пиаре если удастся добить до версии ring3-x64 итого общий объем соурсов уже, по папкам Code 158.702 (работа с ФС, списки,строки, работа с памятью) EXEAnalyzer 137.146 (дебаггер, работа с ПЕ файлом, сюда же надо будет реверсить дизасм) Ring3 20.182 (виндовая часть гуи) Wisp 656.463 (собственно сама универсальная гуи) WispSyser 89.746 (сам гуи дебаггер, гуи елементы типа окна, вотч, регистров, итд) общий 1.062.239 байт не самый большой из моих реверсов, к тому же еще не законченный сравнил с несколькими done моими за последние два года один 1671 K другой 1979 К так что сисеру надо догонять))) вообще я выражаю уважения авторам сисера, под никами finaldoom и rocketwu , кажется так я первый раз сисер нагуглил еще в 2004 году, когда лазил по форуму www.driverdevelop.com ( отличный был китай форум по системным вещам, правда часть на китайском но через гугл транслейт можно было читать а все системные вещи были на понятном языке С/C++ ))) так вот все чаще сталкиваюсь, что очень интересных, удобных, компактных, решений было в те времена, сейчас в эпоху опен сорса, больше говна чем таких классных разработок ![]() |
|
Создано: 01 мая 2017 20:32 · Личное сообщение · #19 reversecode пишет: странно я думал в офтопе ранг не засчитывается, а флудить можно сколько угодно... Но сначала нужно нафлудить +20 к рангу, что является маразмом, а в ЛС лезть без каких то конструктивных предложений - зря отвлекать человека. reversecode пишет: так же интерес по открытию соусов постепенно пропадает, умные люди отговорили смысла нет, В целом так и есть, большого смысла нет открывать, можно попробовать довести r3 до рабочего состояния и допилить поддержку x64, тогда вполне возможно что то заработать на поддержке или продать исходники. reversecode пишет: толку от соурсов никакого, вон есть много примеров на гитхабе, и результат ноль, ну реально, кто сам начал компилять и дорабатывать тот же IDR ? C IDR немного сложнее, автор жив и адекватен, исправляет ошибки, прислушивается к реквестам, и не в обиду автору, у IDR ужасный код, по нему видно, что автор делал длительные перерывы, все это требует глубокого рефакторинга. Форк есть, но там всего лишь переложение c++ на delphi https://github.com/delphifocus/IDR-by-tmcdos У меня в планах на базе IDR написать плагин к IDA, препроцессор к рельсам, поскольку автор прямо сказал, что этим заниматься не будет. reversecode пишет: сейчас в эпоху опен сорса, больше говна чем таких классных разработок Сейчас просто кода стало больше и больше любителей, поэтому качественный код банально тонет в куче говна. reversecode пишет: так что помечтаю о легком пиаре если удастся добить до версии ring3-x64 Сам отладчиком очень редко пользуюсь, но искренне надеюсь, что все у вас получится и труд принесет свои плоды. ![]() |
|
Создано: 01 мая 2017 20:56 · Поправил: reversecode · Личное сообщение · #20 отвлекание это когда над головой стоят))) если человек отзывается, значит есть время если молчит, значит занят да мне дебагер тоже не нужен, сам им только вот начал пользоваться и то на ИДА интересовала графическая мини гуи, для набивания себе всяких утилит, но это была мечта далеких 2008 годов... спустя почти десять лет... но уже мечты другие ![]() пока суть да дела, добил класс expression calc, для вычисления строковых выражений ну как добил, ядро работает осталось функции пустышки наполнить, типа простых операций, плюс, минус, умножить, итд логически но это может потом, мне главное что бы можно было уже его подцеплять к ядру пусть сложные выражения он еще не считает, но можно будет уже подцеплять другой код который через него обращается класс развернулся в сказочную лапшу,я на него часто смотрел и грустил но потому в одной из версий сисера нашел его в меньшей оптимизации, вообщем помогло понять что да как зачем это нужно в сисере ? нет, это не тот графический калькулятор это калькулятор всего что можно ввести input строкой в дебагере, к примеру в goto нужно перейти на какой то адрес, где адрес это значение в ECX регистре значит просто вводим в окне goto слово eax , и вуаля, переходим на значение или к примеру нужно ввести сложное выражение, eax+5 тоже самое, итд такие же самые выражения можно вводить и для изменения регистров CPU( насколько я помню) вообщем очень удобно этого так не хватает в ИДА дебагере, часто приходится либо запоминать, либо лишний раз мышкой шевелить для копирования а гоуту на сложное выражение так капец как часто нужно... но нету его в ИДА PS кстати еще за ночь добил ресайз столбцов в списке... Добавлено спустя 6 минут shellstorm пишет: Сейчас просто кода стало больше и больше любителей, поэтому качественный код банально тонет в куче говна. думаю нет, проблема в бизнесе который диктует условия а условия простые, НУЖНО ЕЩЕ ВЧЕРА, ПОЭТОМУ СДЕЛАЙТЕ УЖЕ ХОТЬ КАК НИБУДЬ ![]() |
|
Создано: 01 мая 2017 22:27 · Личное сообщение · #21 reversecode пишет: этого так не хватает в ИДА дебагере В ida отладочный gui совсем примитивный, есть лишь базовые вещи, а все остальное делает черезжопными способами, в общем то и не удивительно, учитывая, что это вторичная часть, хорошо, что хоть какая то отладка есть. reversecode пишет: а условия простые, НУЖНО ЕЩЕ ВЧЕРА, ПОЭТОМУ СДЕЛАЙТЕ УЖЕ ХОТЬ КАК НИБУДЬ Это всегда так было, просто сейчас порог вхождения стал ниже. Не очень давно один разработчик проводил исследование, распарсил SO и наглядно показал, что писать софт можно вообще практически не разбираясь в программировании, а тупо собирать куски кода по SO и с минимальным допилом можно собрать вполне рабочие приложение. ![]() |
|
Создано: 03 мая 2017 00:21 · Поправил: reversecode · Личное сообщение · #22 по слухам грядет ида64 нейтив, где будет много плюшек... реверсю в иде исключительно отладочное ядро ring0, не гуи,что бы понять всю архитектуру, и выбрать путь для более быстрой реализации минимального рабочего прототипа отладчика.. а то уже начинает утомлять до этого было полностью разобрано ядро отладки ring3, но остались в пробелах много неиспользуемых полей, и соотвественно не мог придумать им названия разобрав ring0 отладочное ядро, все пробелы заполнились, многие поля задействованы исключительно в ring0 хз почему, некоторые моменты можно было реализовать и в ring3, видимо китаезы ring3 скомпилили исключительно как демку для демонстрации возможностей, основной продукт был именно ring0 я уже так проникся дебаггерами(раньше они мне были побоку) что удивляюсь почему их так мало в гугле там всего то красивая мордочка, остальное обвязка вокруг нескольких winapi, пиши нехочу,... а все сидят и на ольку молятся ))) так же почти заочно(оно то еще не работает) полюбил ядро отладки сисера))) оно то уже на 90% вытянуто, если не считать дизасма итд по мелочам управления, если дотяну окончательно, будет некоторый аля титан енжин, только в более приятном и компактном С++ варианте для своих нужд, правда нужд таких вряд ли будет)) отладкой то я не занимаюсь в целом идой как дебагером начал пользоваться только в во вот для отладки сисера, когда понял что компилять есть чем в консоли, а отлаживать фигвам в линуксе как то почти 10 лет консольного гдб мне хватало что бы отлаживать проект любой сложности и объема... смотрел на досуге титан и его презенташку на каком то реконе кажется, в бородатом году.. ну да, С шный говнокод в квадрате, не..., как енжин он наверняка обалденный, много функциональный итд, и я в него еще позаглядываю что бы понять всякие скользкие моменты в реализации отдадчиков(может в сисере потом что то улучшу) но я это сравниваю как некоторую либу boost, большая толстая для всех, так и титан... по факту почти весь сисер построен вокруг этого своего енжина, который управляется через текстовые команды, т.е. если бы нужен был дебагер а не гуи можно было бы зареверсить енжин, и был бы типа текстовый дебагер уже давно готов еще изучал зачем сисер патчит MiCopyOnWrite.. оказывается он ее не патчит он ставит своим же енжином бряки на выполения на входе и выходе из этой функции в ядре и на бряки выполняет свои хуки.. что то там с брекпоинтами... дальше уже не смотрел так же увидел код где сисер вылавливает свой же имидж,и не дает ставить на себя собой же бряки ![]() лицуху видел, но не вникал, понял что там под ксором какие то строки сидят некоторые моменты заставили задуматься(большинство реверса на автомате, руки делают, голова не вникает) например кроме хуков int1 и int3 итд сисер ставит свой хук в idt на 14 вектор типа ошибка страницы после чего в обработчике сисер прокручивает по своему списку брек поинтов и ищет отключеные брек поинты в этом списке и на них ставить какой то евент для своего отладочного ядра, что бы потом на этот евент что то ловить и делать ... ЧТО делать ? механизм вроде еще не задействован(я пока не нашел где юзается этот евент), это только в последнем сисере начали разрабатывать, смотрел в версии раннее, такого механизма вообще еще нет вот стало интересно, для каких целей это могло было понадобится... ? само собой,это только в ring0 ![]() |
|
Создано: 03 мая 2017 13:32 · Личное сообщение · #23 reversecode пишет: смотрел на досуге титан и его презенташку на каком то реконе кажется, в бородатом году.. так из титана изначально никто не планировал делать отладчик, а делался он для написания распаковщиков, трейсеров, в общем мелкой дребедени, учитывая, что писался для конференции то качество соответствующие, сейчас хоть синячить перестал. reversecode пишет: но я это сравниваю как некоторую либу boost, большая толстая для всех, так и титан.. boost классная библиотека, не вся конечно, но половина точно нормальная, недавно с тоской думал о booste, std-11+, переписывая кучу сишного легаси, добрался до IDR. Вот с использованием современного стандарта код уменьшится где то на половину если не больше, один match-ер уберет портянки if-ов. Да и по качеству boost хорош, да и большая часть все равно войдет в стандарт, останутся лишь тяжеловесные либы за бортом. reversecode пишет: вот стало интересно, для каких целей это могло было понадобится... ? Это нужно смотреть wrk trap.asm. Хотя можно пойти простым потем и глянуть в доке. http://esec-lab.sogeti.com/static/publications/11-recon-virtdbg_slides.pdf https://dev64.wordpress.com/2012/05/14/interrupts-exceptions-reference/#interrupt-14 INT14 (page fault) is used for catching memory breakpoints ![]() |
|
Создано: 03 мая 2017 14:30 · Поправил: reversecode · Личное сообщение · #24 хех что такое int14 я то знаю...)) и что титан енжин а не отладчик, это его уже недавно в x64dbg задействовали... в лс подсказали, для расширения количества брекоинтов https://www.codeproject.com/Articles/186230/Extending-windbg-with-Page-Fault-Breakpoints странно только что сисер просматривает в обработчике, отключеные бп в своем списке т.е. у него есть другие статусы бп, но смотрит он только на отключенные... ну ладно, код то только девелопился, может не правильно выставили условие == на != поздно я до сисера добрался, поздно автор разраб в далеком 2006 блог вел, и публиковал даже некоторые вырезки сорсов http://web.archive.org/web/20070630094022/http://wuyanfeng.blog.zndev.com/blog.php?uid=9 что то еще гуглится как копии http://www.voidcn.com/blog/iiprogram/article/p-4693568.html http://www.xuebuyuan.com/1349012.html некоторые функи как я понял по гуглу, стали легендарными http://debugman.com/archiver/tid/2614 // http://wuyanfeng.blog.zndev.com/blog.php?do=showone&uid=9&type=blog&itemid=432 // code by wuyanfeng BOOL GetPEBOffset(ULONG* PEBOffset) итд они все еще есть в сисере, я на них так и вышел но в сам блог уже не заглянуть, архива нет ![]() |
|
Создано: 03 мая 2017 20:44 · Личное сообщение · #25 |
|
Создано: 04 мая 2017 18:18 · Личное сообщение · #26 это еще что, я пока пред последнюю реверсил(она у меня просто давно начата, и много по ней было сделано) то такие чудеса встречались... типа функция сравнения байтов в памяти memcmp(dst,src,len) дальше по коду dst и len используются, а src забыли... )) вообщем в последней уже смотрел многое поправили,.. хотя пробовал по началу ею с сорсами отлаживать.. падает сколько это я сутки или двое уже... дочищал ядро отладчика... избавился наконец то полностью от std::list, теперь все не сисеровской имплементации вот бы еще до std::map добраться.... начал уже набивать функционал загрузки длл плагина отладчика и загрузки файла для отладки... как и тут меня черт дернул взяться опять за expcalc класс для вычисления выражений и засел почти на сутки)) думаю фигня, добью хендлеры для операций калькулятор простой, никаких аст и прочих поебений банальный список, который набивается пробегая по тектосовй строке матвыражения если встречается оператор то в список добавляется хендлер для вычисления операции для каждого выражения выставлен приоритет и дальше проходы по дереву пока все выражения не будут вычеслены для нулевого приоритета потом для первого итд для 6 уровней казалось бы все просто, но компилер заоптимайзил бегание по списку а китаезы еще и реализовали свою функу в списке аля move чем то похожынй на std шный, только логика другая не к себе втягивать в данные а наоборот експортировать их в другой контейнер от себя вообщем вроде считает выражения... уможения сдвиги сложения итд дай думаю побалуюсь с окном хексвью начал вводить сложные выражения а окно ввода туои сюдои прыгает ![]() етить его за ногу где то бага в в гуи окна редактирования... прийдется перепроверять реверс... а думал уже вот вот финал... начал подчищать дизасм... обдумываю может попробовать его как то рипнуть не реверся... как то помню скайп лоадер рипал а потом отдельно запускал от скайпа для распаковки скайпа... ех... давно было.. 2006 год кажеться... ах да, хотелось уже ядро дебагера добить и увидеть всю его логику, может на начальном этапе для тестов другой какой дизасм цепонуть.. но кажеться там оно так глубоко зацеплено... этот дизасм енжин и длины инструкций вперед назад считает, и стек куда то что то отслеживает и все это еще цветными строками прибито, т.е. енжин там как то вытягивает данные что бы цветами баловаться... ладно поживем увидем Добавлено спустя 13 часов 45 минут добил окно редактирования ошибки всего три, из которых две мои одна неправильно почистил код ( я сначала разбираю его в иде, потом копипащу в сорс, а потом чищу, и только потом компилю) точнее не чистил, а скопипастил когда чистил не то, на глаз прикинул что процедуры перемещения каретки вправо влево. вроде одинаковые...одну почистил, а вторую скопипастил от предыдущей, и чуть чуть подправил а на деле оказывается две одинаковые функции в них по разному вызывались... сразу и не заметил, функци длинные, окончание пряталось в другом экране вторая моя, это вставка в строку, хз зачем то китаезы вместо обычной memmove/memcpy сделали свою reversecpy я на глаз прикинул что вроде побайтовое копирование, ну и поставил свои memcpy потом набросал стресс тесты, а оказывается нифига а третий баг и не баг, но баг вообщем удаление бекспейсом удаляет правый символ от каретки, но каретку сдвигает на один влево после этого упарился искать, запустил сисер, а баг у китаез и там, тьфу ты только время потратил на перепроверку и поиски у себя Добавлено спустя 15 часов 26 минут есть у сисера странная болезнь, периодически не работает клавиатура на его окно методом проб и ошибок когда то я дошел что нужно нажать альт, тогда разглючивает сечас решил немного подебажить уже при наличии сорсов оказывается обработчику сисера не приходит сообщения от окна о WM_LBUTTONUP приходит только WM_LBUTTONDOWN поэтому сисер считает что у него постоянно нажата левая кнопка мыши сидел гуглил... толку нет всякие spyxx позапускать перепроверить какие события пропускаются в дефолтовую обработку а какие выбрасываются.. но весь сыр бор думаю именно в дефолтовом обработчике какое то сообщения надо зарубить или наоборот из уже обрабатываемых пропустить дальше... хз как дебажить не приоритетно, но интересно ![]() |
|
Создано: 05 мая 2017 18:41 · Личное сообщение · #27 разобрался с глюками клавиатуры оказывается проблема то совсем не в WM_LBUTTONUP/DOWN проблема в том что после переключения окна по ALT+TAB в клиента посылается WM_SYSKEYDOWN VK_MENU (он же ALT) а WM_SYSKEYUP нету, его нету даже в spyxx гугл че то не помог, я не нашел что нужно сделать, если кто найдет решение проблемы кидайте ссылки, есть мысли что это надо какие то спец флаги при создании окна выставлять ... но я пофиксил этот баг по другом ловим WM_ACTIVATE, который приходит когда диспетчер задач делает активным окно и по этому события флушим свой буффер клавиатуры в котором засел нажатый АЛЬТ все чудесным образом стало работать без глюков клавиатуры жаль оригинальным сисере никак не исправить... Добавлено спустя 4 минуты думаю можно было бы и по другому решить баг не принимать в свой буффер клавишь ничего пока окно не активное или спрятанное.. но это все вариации.. хотелось бы получить от винды отжатый АЛЬТ после ALT+TAB .. ![]() |
|
Создано: 06 мая 2017 11:15 · Личное сообщение · #28 |
|
Создано: 06 мая 2017 14:07 · Поправил: reversecode · Личное сообщение · #29 не, хочется что бы она нормально через WindowProc пришла а так в целом я гуглил. через хук клавиатуры возможно там все приходит.... Добавлено спустя 47 минут перенес отладчик в отдельный модуль и добавил возможности для написания своих плагинов, взял тестовый плагин для сисер драйвера и переделал для ring3 апи для плагинов та же что и в сисере https://pastebin.com/3cnTASFy https://pastebin.com/b2GeZfa8 ![]() по моему обнаружил еще один баг в сисере, если открывать несколько раз окно плагинов, инфа не чистится а добавляется один и тот же плагин начинает множится с каждым открытием окна, я в своей версии исправил это Добавлено спустя 1 час 3 минуты пытался решить С++ дилему... и что то застрял есть два класса, в одинаковой по имени и параметрами вирт функцией нужно унаследовать от этих двух классов третий класс и в нем переопределить обе одинаковые функции.... не выходит каменный цветок... только если через интерфейсы делать... плюнул, переименовал одну функу хотя элегантное решение хотелось бы найти ![]() |
|
Создано: 07 мая 2017 14:16 · Личное сообщение · #30 reversecode пишет: хотя элегантное решение хотелось бы найти namespace? элегантней как бы нет и чтобы оно не ломало стандарт. компилятор во время сборки ориентируется на сигнатуры и без дополнительных телодвижений никак, будет конфликт имен. или делать дополнительный интерфейс, через бридж получать доступ к функциям. ![]() |
|
Создано: 07 мая 2017 15:11 · Личное сообщение · #31 в сисере без неймспесов обошлись.... может конечно имена функций у них разные но по функционалу они одинаковые хочется что то типа такого, но не компилится Code:
![]() |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
![]() |
eXeL@B —› Оффтоп —› syser - а он еще нужен? |