Сейчас на форуме: Kybyx (+2 невидимых)

 eXeL@B —› Оффтоп —› syser - а он еще нужен?
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
Посл.ответ Сообщение


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 декабря 2016 00:08
· Личное сообщение · #1

есть мысль себе в портфолио добавить хоть что то, что можно показать на паблик
из всего что сделано или делается или будет делаться, почти ничего на паблик показывать нельзя
вспомнил про Syser,его можно, могу восстановить соурсы ядра дебагера, которое общее для Ring3 и Ring0
(кто помнит у Syser два дебагера, ring3 и ring0, знают все только ring0, про ring3 мало наверное кто помнит, он был бесплатен)
ну и сам Ring3 часть как рабочий дебагер, можно и всю Ring0, но мне это не интересно
ну и все конечно на гитхаб

собственно вопрос, а дальше это кому то интересно? подхватить,развивать итд, гуи дебагер для ядра еще живы ?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 апреля 2017 15:41 · Поправил: reversecode
· Личное сообщение · #2

добил закладки(табы)
удалил из тестов одну клаву
https://www.sendspace.com/file/f8kv57

попутно пришлось зарефакторить списки, стандартный std::list не умеет обратный итератор(по моему только констовый?),
да и что бы использовать извращения с CONTAINIG_RECORD для списков(в стандартном не добраться, поля протектед итд),
все равно надо было это рано или поздно реализовывать
в итоге теперь можно использовать извращения вида
Code:
  1. void CWispTabWnd::RemoveTab(WISP_TAB_WND_ITEM *pTabItem, bool bDestroy)
  2. {
  3. //       std::list<WISP_TAB_WND_ITEM>::iterator it = pTabItem; //???WTF can't compile
  4.  
  5.          TList<WISP_TAB_WND_ITEM>::iterator it = CONTAINING_RECORD(pTabItem, TList<WISP_TAB_WND_ITEM>::_List_val, _M_val);
  6.  

такое же извращение с рефакторингом надо и для map контейнера сделать, но пока связываться с ним не хочу
он вроде для такого UB удаления только в функции отладчика используется, по гуи вроде не видно таких извратов

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

Добавлено спустя 3 минуты
я хз, может тему в основной топик двинуть ?)) будет ли это кому интересно в таком виде

| Сообщение посчитали полезным: HandMill

Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 15 апреля 2017 17:30
· Личное сообщение · #3

reversecode пишет:
стандартный std::list не умеет обратный итератор(по моему только констовый?)

должен уметь:
Code:
  1. std::list<int>::iterator i = n.end();
  2. --i;

и std::list::rbegin тоже должен уметь работать как с const так и без
reversecode пишет:
я хз, может тему в основной топик двинуть ?)) будет ли это кому интересно в таком виде

по содержанию больше на блог похоже)

-----
все багрепорты - в личные сообщения





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 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 битные в тексте, итд
странно что забросили ...




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 17 апреля 2017 22:16 · Поправил: reversecode
· Личное сообщение · #5

добавил меню
и исправил уже свой баг, хинты иногда валили приложение
https://www.sendspace.com/file/8pmx08

ошибка хинтов, неправильно понятый цикл по std::map контейнеру,
оказывается перебирая от начала до конца, и отправляя елемент контейнера на обработку,
другая функа могла удалить этот же елемент с контейнера, в итоге дальнейший инкремент в переборе валил приложение по ассерту стд мапа

присмотревшись еще раз в псевдокод рейса, понял что сначала нужно сохранить итератор а потом уже инкремент(postfix increment)

фигня конечно, но с кучей других условий этот момент мозг пропустил

вообще в реверсе стараешься держать общую картину, а не мелкие детали, иначе начинаешь тонуть в деталях и руки быстро опускаются
а вот уже добив все, можно и поразмыслить над деталями, оптимизациями, упрощениями


уже объем сорсов 782 кила, из которых только сама гуи 463 кила

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

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 апреля 2017 19:53 · Поправил: reversecode
· Личное сообщение · #6

добавил сплит окна, теперь появились табы цпу, регистров, стека, вотча итд
https://www.sendspace.com/file/cnoarz

Добавлено спустя 42 минуты
прикреплю картинку то что уже получается, а то запускать мало кому интересно



| Сообщение посчитали полезным: HandMill, void, shellstorm


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 19 апреля 2017 20:49
· Личное сообщение · #7

а кто нибудь знает где взять спецификацию по команде vpcext 1, 12h ?
сисер ее активно юзает в ядре, но на паблике че то не нахожу
причем не просто для детекта виртуалки, но и для вывода на екран итд




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 20 апреля 2017 01:37
· Личное сообщение · #8

reversecode пишет:
а кто нибудь знает где взять спецификацию по команде vpcext 1, 12h ?


Нигде не взять. Так как на реальных процессорах такой команды нет и никогда не было(и никогда не будет).

Последовательности вида 0х0F/0х3F/??/??, которые по неведомым причинам дизассемблер IDA обзывает vpcext, используются для внутренних нужд в VirtualPC( в частности в BIOS).

reversecode пишет:
причем не просто для детекта виртуалки, но и для вывода на екран итд


FACEPALM.JPG

-----
http://ntinfo.biz





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 20 апреля 2017 02:18
· Личное сообщение · #9

конь ты меня просто удивляешь
думаешь я не знаю что это за инструкции ? очевидно что знаю что это для емуляторов
это ихние инструкции

так вот эти инструкции явно используются в сисере для коммуникации с вируталкой, и не просто детекта окружения
а еще и для обновления екрана


вмваре еще понятна, там стандартные in/out port которые она перехватывает(хотя тоже сложновато найти спецификацию)
нашел только такое, и то считаю лажей
https://github.com/sysprogs/VirtualKD/blob/master/kdvm/vmwrpc64.asm

а вот вирутал пс изобрел свои инструкции

вот и интересно стало, китаезы сисера разреверсили виртуал пц что бы использовать его возможности на все 100
или есть спецификация ?

очевидно что третье, им кто то дал эту спецификацию

| Сообщение посчитали полезным: ntldr

Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 20 апреля 2017 16:22
· Личное сообщение · #10

Поздравляю, это серьезное достижение.

-----
PGP key <0x1B6A24550F33E44A>





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 20 апреля 2017 16:40 · Поправил: reversecode
· Личное сообщение · #11

используется в сисере для обновления экрана в виртуал пц
Code:
  1. .text:000677DE 8B 44 24 30                             mov     eax, [esp+2Ch+x]
  2. .text:000677E2 8B 5C 24 34                             mov     ebx, [esp+2Ch+y]
  3. .text:000677E6 8B 4C 24 38                             mov     ecx, [esp+2Ch+_cx]
  4. .text:000677EA 8B 54 24 3C                             mov     edx, [esp+2Ch+_cy]
  5. .text:000677EE 0F 3F 01 12                             vpcext  1, 12h


для детекта

Code:
  1. .text:00067830 BB 00 00 00 00                          mov     ebx, 0
  2. .text:00067835 B8 01 00 00 00                          mov     eax, 1
  3. .text:0006783A 0F 3F 07 0B                             vpcext  7, 0Bh
  4. .text:0006783E 85 DB                                   test    ebx, ebx
  5. .text:00067840 75 07                                   jnz     short loc_67849
  6. .text:00067842 C6 05 84 5A 16 00 01                    mov     _VMPC_byte_165A84, 1


Добавлено спустя 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:
  1. clean:
  2.         del //$(OBJS) syser.exe syser.pdb

так вот если все файлы есть, то все удаляетя без предупреждений
Code:
  1.         del //q  Code\strmem.obj  Code\sysdep.obj  Code\cmdparser.obj  Code\handle.obj  Code\fileio.obj
  2.  Code\fileiont.obj  Code\imagefile.obj  Code\compress.obj  Code\pagemem.obj  Code\polyfs.obj  EXEAnalyzer\
  3. pefile.obj  EXEAnalyzer\symbol.obj  EXEAnalyzer\debugger.obj  EXEAnalyzer\x86debugger.obj  EXEAnalyzer\sdw
  4. in32.obj  Wisp\utility.obj  Wisp\wispdraw.obj  Wisp\wispfont.obj  Wisp\wispdib.obj  Wisp\wispdc.obj  Wisp\
  5. wispdrawobj.obj  Wisp\wispbase.obj  Wisp\wispbasewnd.obj  Wisp\wispwnd.obj  Wisp\wisptipwnd.obj  Wisp\wisp
  6. button.obj  Wisp\wispstatic.obj  Wisp\wispprogress.obj  Wisp\wispsoftkeyboard.obj  Wisp\wisptoolbar.obj  W
  7. isp\wisptabwnd.obj  Wisp\wispmultitabview.obj  Wisp\wispform.obj  Wisp\wispcolorstrwnd.obj  Wisp\wisptestw
  8. nd.obj  Wisp\wispradiobox.obj  Wisp\wispcheckbox.obj  Wisp\wispsplitwnd.obj  Wisp\wispmenu.obj  Wisp\wispm
  9. sgbox.obj  Wisp\wisplist.obj  Wisp\wispedit.obj  Wisp\wispconsolewnd.obj  WispSyser\mainframe.obj  WispSys
  10. er\multicodeview.obj  WispSyser\multidataview.obj  WispSyser\watchlist.obj  WispSyser\stackwatchlist.obj
  11. WispSyser\consolewnd.obj  WispSyser\terminalwnd.obj  WispSyser\syserui.obj  WispSyser\systemexplorer.obj
  12. WispSyser\fpuregisterlist.obj  WispSyser\sseregisterlist.obj  WispSyser\genereglist.obj  Ring3\wispapp.obj
  13.   Ring3\winwisp.obj  Ring3\syser.obj syser.exe syser.pdb


если же еще раз запустить очистку
то ловим ошибки, причем ошибки не на все файлы, а выборочно на несколько

Code:
  1.         del //q  Code\strmem.obj  Code\sysdep.obj  Code\cmdparser.obj  Code\handle.obj  Code\fileio.obj
  2.  Code\fileiont.obj  Code\imagefile.obj  Code\compress.obj  Code\pagemem.obj  Code\polyfs.obj  EXEAnalyzer\
  3. pefile.obj  EXEAnalyzer\symbol.obj  EXEAnalyzer\debugger.obj  EXEAnalyzer\x86debugger.obj  EXEAnalyzer\sdw
  4. in32.obj  Wisp\utility.obj  Wisp\wispdraw.obj  Wisp\wispfont.obj  Wisp\wispdib.obj  Wisp\wispdc.obj  Wisp\
  5. wispdrawobj.obj  Wisp\wispbase.obj  Wisp\wispbasewnd.obj  Wisp\wispwnd.obj  Wisp\wisptipwnd.obj  Wisp\wisp
  6. button.obj  Wisp\wispstatic.obj  Wisp\wispprogress.obj  Wisp\wispsoftkeyboard.obj  Wisp\wisptoolbar.obj  W
  7. isp\wisptabwnd.obj  Wisp\wispmultitabview.obj  Wisp\wispform.obj  Wisp\wispcolorstrwnd.obj  Wisp\wisptestw
  8. nd.obj  Wisp\wispradiobox.obj  Wisp\wispcheckbox.obj  Wisp\wispsplitwnd.obj  Wisp\wispmenu.obj  Wisp\wispm
  9. sgbox.obj  Wisp\wisplist.obj  Wisp\wispedit.obj  Wisp\wispconsolewnd.obj  WispSyser\mainframe.obj  WispSys
  10. er\multicodeview.obj  WispSyser\multidataview.obj  WispSyser\watchlist.obj  WispSyser\stackwatchlist.obj
  11. WispSyser\consolewnd.obj  WispSyser\terminalwnd.obj  WispSyser\syserui.obj  WispSyser\systemexplorer.obj
  12. WispSyser\fpuregisterlist.obj  WispSyser\sseregisterlist.obj  WispSyser\genereglist.obj  Ring3\wispapp.obj
  13.   Ring3\winwisp.obj  Ring3\syser.obj syser.exe syser.pdb
  14. Не удается найти L:\syser\Syser_src\source\Code\strmem.obj
  15. Не удается найти L:\syser\Syser_src\source\EXEAnalyzer\pefile.obj
  16. Не удается найти L:\syser\Syser_src\source\Wisp\utility.obj
  17. Не удается найти L:\syser\Syser_src\source\WispSyser\mainframe.obj
  18. Не удается найти L:\syser\Syser_src\source\Ring3\wispapp.obj
  19. Не удается найти L:\syser\Syser_src\source\syser.exe


вот и вопрос, а чего ругается выборочно ? файлов то уже никаких нет, и del мог бы ругнуться абсолютно на все файлы
вообщем мелкософт меня удивляет

| Сообщение посчитали полезным: ntldr

Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 21 апреля 2017 06:26 · Поправил: spinz
· Личное сообщение · #12

reversecode пишет:
манипуляции с cr0, помоему пейджинг отключается и
1) хучится ZwSetSystemInformation
2) хучится ZwLoadDriver
включается обратно пейджинг


зачем пейджинг то отключать!?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 21 апреля 2017 06:40
· Личное сообщение · #13

да пардон, не пейджинг, а манипуляция с битом WP cr0

Добавлено спустя 15 часов 25 минут
добил консольку


| Сообщение посчитали полезным: difexacaw, shellstorm, daFix


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 апреля 2017 23:14
· Личное сообщение · #14



| Сообщение посчитали полезным: HandMill, difexacaw, shellstorm, DimitarSerg

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 30 апреля 2017 21:25
· Личное сообщение · #15

reversecode не стесняйтесь писать подробности, сколько сделано, сколько осталось, какие возникали трудности и на какие натыкались ошибки. думаю не один я читаю с интересом ваши комментарии по поводу разбора sysera.

| Сообщение посчитали полезным: DimitarSerg


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 апреля 2017 22:09
· Личное сообщение · #16

так я раньше спрашивал, какие подробности интересуют итд, все промолчали, никому ничего не интересно



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 30 апреля 2017 22:17
· Личное сообщение · #17

reversecode пишет: какие подробности интересую

Что разобрано полностью, что осталось, какие сложности в разборе какого то класса\структуры, ляпы и тому подобное, в общем новости с фронта.
Ps. Здесь идиотское ограничение на оффтом, в основном форуме можно сколько угодно гадить, а в оффтопе ни-ни, нужно еще заслужить, а многие просто молча листают, по принципу нечего сказать - незачем дергать человека, ждем когда автор сам соизволит.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 мая 2017 00:26 · Поправил: reversecode
· Личное сообщение · #18

странно я думал в офтопе ранг не засчитывается, а флудить можно сколько угодно...
в любом случае, кому что то нужно, лс не ограничена
многие по началу в лс интересовались, а будет ли 64 версия...

некоторые посоветовали забросить нахрен)) есть дела и поважнее...

что рассказывать, сложности всегда одни и те же
сложное раскуривание лапши циклов и гоуту которые выдает рейс, если бы не они, реверс был бы сказкой
вот один из примеров по окну хексвью что добивал на днях
к примеру
вот из рейса --> Link <--
а это уже причесал и работает --> Link <--
и такого же качества и весь остальной код

много функционала восстанавливается для полноценности, но не тестируется на правильность, поскольку не используется вообще

ну вот есть к примеру базовый класс ядра гуи, в версии утилит для ядреного дебагера, в нем есть три функци для регистрации/удаления в таскбаре,(кто юзал сисер rin0 должен знать как его утилита ring3 висит в таскбаре)
хотя в ring3 дебагера и тем более ring0 версии этого класса ясное дело таких функций нет, их вырезал компилер как неиспользуемые

или например в версии ring0, этот базовый класс гуи имеет функции копирования буфера на экран и с экрана,
а так же сохранения всего экрана в bmp

вот на такие моменты как восстановление полностю всех функций класса иногда тратиться больше времени,
поскольку нужно иногда открыть до 6 IDA разных версий, и реверсить или просматривать есть ли по данному классу что то еще

зачем это делать ? причин разные
1) что бы иметь функционально законченную единицу, к которой уже не нужно возвращается для реверса итд, вникать в нее
2) бывает много полей класса с неизвестным значением и пониманием как его обозвать, когда функциональная единица(какой то класс) восстановлена по максимуму, функции некоторых полей приобретают понятное смысловое значение
3) если вдруг забрасываешь реверс, то всегда остается что то законченное, которое можно заюзать под свои нужны в чем то другом

и вот по мере добавление другого функционала начинает работать функционал который ранее не был задействован и огребаешь новую порцию уже собственных багов


к примеру в сисере есть собственный шаблонный класс строки, для unicode и ansi
Code:
  1. template<class T>
  2. struct TString

с оператором доступа к буферу (до фикса)

Code:
  1.   operator T *() const
  2.   {
  3.           static T NullChar = 0;
  4.           if (m_pData) return m_pData;
  5.           return NullChar;
  6.   }


казалось бы фигня, что тут может не работать ? компилиться нормально, строки всегда выдаются

пока не словил баг на нулевом буфере)), строка не заполнялась, была пустой, а оператор выдавал ноль, а не указатель на нулевой буфер

как пофиксить функу, додумайте сами)) но рейс выдал верный вариант, я его на скорую руку набивал и не обратил внимание

21 апреля - 29 апреля, парился с самыми для меня казалось бы сложными классами элемента окна как окно редактирования и список,
они используется почти везде, регистры, стек вотчи, асм листинг, с++ соурс листинг, плюсик нажал а под пункт и раскрылся

к тому же при реверсе оказалось что этот класс окна может намного больше(заложен функционал) но в сисере в целом он нигде не используется, ни в одной из версий, и даже нет в утилитах

окно редактирования осилил за два дня, а вот с окном списка вывода...
было сложно, думал уже забросить все, и заняться другими делами..

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

так же переписал списки, TList
оказывается в сисере они дореализовали свои операторы,
это прыжок на N елементов вперед или назад
и оператор доступа к списку как к массиву operator[](int) на основе этих прыжкой

вся реализация мне показалась подозрительной, и хоть все и работало
я решил набросать стресс тесты
и они показали какую то странность, прыжка на -1 элемент
список от нуля до размера по убыванию
Code:
  1. 9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1 ,0 ,

а это цикл от минус размера умноженного на два, до плюс размера умноженного на два
это все по оператору доступа
Code:
  1.          for (int i = -(List.Size()+1)*2; i < List.Size()*2; ++i)
  2.                  printf("%d ,", *List[i]);

Code:
  1. 9 ,8 ,7  ,6 ,5 ,4 ,3 ,2 ,1 ,0 ,1638028 ,9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1 ,0 ,1638028 ,9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1 ,0 ,1638028 ,1638028 ,1638028 ,1638028 ,1638028 ,1638028 ,1638028,1638028,1638028,1638028 ,1638028 ,

реверс проверял десятки раз, все верно
в оригинале в декомпилере оператор доступа --> Link <--
так что думаю ошибка в оригинальной версии списка... ну пока в гуи это никак не проявляется, пусть будет как есть

сегодня добил окно хекс вьюва..
потом сидел пытался раскурить баг с прокруткой, если от 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++ )))

так вот все чаще сталкиваюсь, что очень интересных, удобных, компактных, решений было в те времена,
сейчас в эпоху опен сорса, больше говна чем таких классных разработок

| Сообщение посчитали полезным: DenCoder, shellstorm

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 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

Сам отладчиком очень редко пользуюсь, но искренне надеюсь, что все у вас получится и труд принесет свои плоды.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 мая 2017 20:56 · Поправил: reversecode
· Личное сообщение · #20

отвлекание это когда над головой стоят)))

если человек отзывается, значит есть время
если молчит, значит занят

да мне дебагер тоже не нужен, сам им только вот начал пользоваться и то на ИДА
интересовала графическая мини гуи, для набивания себе всяких утилит,
но это была мечта далеких 2008 годов... спустя почти десять лет... но уже мечты другие

пока суть да дела, добил класс expression calc, для вычисления строковых выражений
ну как добил, ядро работает
осталось функции пустышки наполнить, типа простых операций, плюс, минус, умножить, итд логически
но это может потом, мне главное что бы можно было уже его подцеплять к ядру
пусть сложные выражения он еще не считает, но можно будет уже подцеплять другой код который через него обращается

класс развернулся в сказочную лапшу,я на него часто смотрел и грустил
но потому в одной из версий сисера нашел его в меньшей оптимизации, вообщем помогло понять что да как

зачем это нужно в сисере ?
нет, это не тот графический калькулятор
это калькулятор всего что можно ввести input строкой в дебагере,
к примеру в goto нужно перейти на какой то адрес, где адрес это значение в ECX регистре
значит просто вводим в окне goto слово eax , и вуаля, переходим на значение
или к примеру нужно ввести сложное выражение, eax+5
тоже самое, итд
такие же самые выражения можно вводить и для изменения регистров CPU( насколько я помню)
вообщем очень удобно


этого так не хватает в ИДА дебагере, часто приходится либо запоминать, либо лишний раз мышкой шевелить для копирования
а гоуту на сложное выражение так капец как часто нужно... но нету его в ИДА

PS
кстати еще за ночь добил ресайз столбцов в списке...

Добавлено спустя 6 минут
shellstorm пишет:
Сейчас просто кода стало больше и больше любителей, поэтому качественный код банально тонет в куче говна.


думаю нет, проблема в бизнесе который диктует условия
а условия простые, НУЖНО ЕЩЕ ВЧЕРА, ПОЭТОМУ СДЕЛАЙТЕ УЖЕ ХОТЬ КАК НИБУДЬ



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 01 мая 2017 22:27
· Личное сообщение · #21

reversecode пишет: этого так не хватает в ИДА дебагере

В ida отладочный gui совсем примитивный, есть лишь базовые вещи, а все остальное делает черезжопными способами, в общем то и не удивительно, учитывая, что это вторичная часть, хорошо, что хоть какая то отладка есть.

reversecode пишет: а условия простые, НУЖНО ЕЩЕ ВЧЕРА, ПОЭТОМУ СДЕЛАЙТЕ УЖЕ ХОТЬ КАК НИБУДЬ

Это всегда так было, просто сейчас порог вхождения стал ниже. Не очень давно один разработчик проводил исследование, распарсил SO и наглядно показал, что писать софт можно вообще практически не разбираясь в программировании, а тупо собирать куски кода по SO и с минимальным допилом можно собрать вполне рабочие приложение.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 мая 2017 00:21 · Поправил: reversecode
· Личное сообщение · #22

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


реверсю в иде исключительно отладочное ядро ring0, не гуи,что бы понять всю архитектуру, и выбрать путь для более быстрой реализации минимального рабочего прототипа отладчика.. а то уже начинает утомлять

до этого было полностью разобрано ядро отладки ring3, но остались в пробелах много неиспользуемых полей, и соотвественно не мог придумать им названия

разобрав ring0 отладочное ядро, все пробелы заполнились, многие поля задействованы исключительно в ring0

хз почему, некоторые моменты можно было реализовать и в ring3, видимо китаезы ring3 скомпилили исключительно как демку для демонстрации возможностей, основной продукт был именно ring0


я уже так проникся дебаггерами(раньше они мне были побоку)
что удивляюсь почему их так мало в гугле
там всего то красивая мордочка, остальное обвязка вокруг нескольких winapi, пиши нехочу,... а все сидят и на ольку молятся )))

так же почти заочно(оно то еще не работает) полюбил ядро отладки сисера)))
оно то уже на 90% вытянуто, если не считать дизасма итд по мелочам управления,
если дотяну окончательно, будет некоторый аля титан енжин, только в более приятном и компактном С++ варианте для своих нужд, правда нужд таких вряд ли будет)) отладкой то я не занимаюсь в целом

идой как дебагером начал пользоваться только в во вот для отладки сисера, когда понял что компилять есть чем в консоли, а отлаживать фигвам
в линуксе как то почти 10 лет консольного гдб мне хватало что бы отлаживать проект любой сложности и объема...

смотрел на досуге титан и его презенташку на каком то реконе кажется, в бородатом году..
ну да, С шный говнокод в квадрате,
не..., как енжин он наверняка обалденный, много функциональный итд, и я в него еще позаглядываю что бы понять всякие скользкие моменты в реализации отдадчиков(может в сисере потом что то улучшу)
но я это сравниваю как некоторую либу boost, большая толстая для всех, так и титан...


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

еще изучал зачем сисер патчит MiCopyOnWrite..
оказывается он ее не патчит
он ставит своим же енжином бряки на выполения на входе и выходе из этой функции в ядре
и на бряки выполняет свои хуки.. что то там с брекпоинтами... дальше уже не смотрел

так же увидел код где сисер вылавливает свой же имидж,и не дает ставить на себя собой же бряки типа защита от отладки чтобы не ломали...

лицуху видел, но не вникал, понял что там под ксором какие то строки сидят

некоторые моменты заставили задуматься(большинство реверса на автомате, руки делают, голова не вникает)
например кроме хуков int1 и int3 итд
сисер ставит свой хук в idt на 14 вектор
типа ошибка страницы
после чего в обработчике сисер прокручивает по своему списку брек поинтов
и ищет отключеные брек поинты в этом списке и на них ставить какой то евент для своего отладочного ядра,
что бы потом на этот евент что то ловить и делать ... ЧТО делать ?

механизм вроде еще не задействован(я пока не нашел где юзается этот евент), это только в последнем сисере начали разрабатывать, смотрел в версии раннее, такого механизма вообще еще нет

вот стало интересно, для каких целей это могло было понадобится... ?
само собой,это только в ring0



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 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)
итд
они все еще есть в сисере, я на них так и вышел

но в сам блог уже не заглянуть, архива нет

| Сообщение посчитали полезным: shellstorm

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 мая 2017 20:44
· Личное сообщение · #25

reversecode пишет: может не правильно выставили условие == на !=

учитывая как часто он падал в синьку то там и не такое может быть.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 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 позапускать
перепроверить какие события пропускаются в дефолтовую обработку а какие выбрасываются..

но весь сыр бор думаю именно в дефолтовом обработчике
какое то сообщения надо зарубить или наоборот из уже обрабатываемых пропустить дальше... хз как дебажить
не приоритетно, но интересно

| Сообщение посчитали полезным: shellstorm


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 мая 2017 18:41
· Личное сообщение · #27

разобрался с глюками клавиатуры
оказывается проблема то совсем не в WM_LBUTTONUP/DOWN

проблема в том что после переключения окна по ALT+TAB
в клиента посылается WM_SYSKEYDOWN VK_MENU (он же ALT)
а WM_SYSKEYUP нету, его нету даже в spyxx

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

но я пофиксил этот баг по другом
ловим WM_ACTIVATE, который приходит когда диспетчер задач делает активным окно
и по этому события флушим свой буффер клавиатуры в котором засел нажатый АЛЬТ

все чудесным образом стало работать без глюков клавиатуры
жаль оригинальным сисере никак не исправить...

Добавлено спустя 4 минуты
думаю можно было бы и по другому решить баг
не принимать в свой буффер клавишь ничего пока окно не активное или спрятанное..
но это все вариации..
хотелось бы получить от винды отжатый АЛЬТ после ALT+TAB ..



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 06 мая 2017 11:15
· Личное сообщение · #28

Не оно?
http://stackoverflow.com/questions/42756580/how-to-handle-the-alt-keystroke-with-windows-api-c




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 мая 2017 14:07 · Поправил: reversecode
· Личное сообщение · #29

не, хочется что бы она нормально через WindowProc пришла
а так в целом я гуглил. через хук клавиатуры возможно там все приходит....

Добавлено спустя 47 минут
перенес отладчик в отдельный модуль и добавил возможности для написания своих плагинов,
взял тестовый плагин для сисер драйвера и переделал для ring3
апи для плагинов та же что и в сисере
https://pastebin.com/3cnTASFy
https://pastebin.com/b2GeZfa8



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

Добавлено спустя 1 час 3 минуты
пытался решить С++ дилему... и что то застрял
есть два класса, в одинаковой по имени и параметрами вирт функцией
нужно унаследовать от этих двух классов третий класс
и в нем переопределить обе одинаковые функции....
не выходит каменный цветок... только если через интерфейсы делать...
плюнул, переименовал одну функу
хотя элегантное решение хотелось бы найти



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 07 мая 2017 14:16
· Личное сообщение · #30

reversecode пишет: хотя элегантное решение хотелось бы найти

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 07 мая 2017 15:11
· Личное сообщение · #31

в сисере без неймспесов обошлись.... может конечно имена функций у них разные
но по функционалу они одинаковые

хочется что то типа такого, но не компилится
Code:
  1. struct SYM
  2. {
  3.          virtual int CALL(int,int)
  4.          {
  5.                  return 3;
  6.          }
  7. };
  8.  
  9. struct DIS
  10. {
  11.          virtual int CALL(int,int)
  12.          {
  13.                  return 3;
  14.          }
  15. };
  16.  
  17. struct DOC : public DIS, SYM
  18. {
  19.          //using DIS::CALL;
  20.          virtual int CALL(int,int)
  21.          {
  22.                  return 10;
  23.          }
  24.  
  25.          //using SYM::CALL;
  26.          virtual int SYM::CALL(int,int)
  27.          {
  28.                  return 20;
  29.          }
  30.  
  31. };
  32.  



<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
 eXeL@B —› Оффтоп —› syser - а он еще нужен?

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати