Сейчас на форуме: laslo, UniSoft, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› SEH DEP.
Посл.ответ Сообщение

Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 26 ноября 2011 23:13
· Личное сообщение · #1

Здрасти.

Давайте это обсудим, обо тема актуальна и не решена.

При загрузке модуля из памяти SEH работать в нём не будет. Как это обойти ?



Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 27 ноября 2011 02:59 · Поправил: Модератор
· Личное сообщение · #2

Clerk
юзай GPE ...!

От модератора: на сутки за слова нехорошие



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 ноября 2011 07:19
· Личное сообщение · #3

zeppe1in

Хотелось бы без графов.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 27 ноября 2011 11:12
· Личное сообщение · #4

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

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 ноября 2011 11:31 · Поправил: Clerk
· Личное сообщение · #5

PE_Kill

Это не имеет отношению к запуску. Исключение это ситуация не частая и исключительная.

Тут есть немного матчасти http://uninformed.org/?v=2&a=4



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

Создано: 27 ноября 2011 11:45
· Личное сообщение · #6

Clerk пишет:
Как это обойти ?

1 - убрать в екзешке IMAGE_DLLCHARACTERISTICS_NX_COMPAT, не катит для dll
2 - использовать валидные модули, пусть прот распаковывает на место оригинального имейджа (знаю что баян, но так делают все нормальные проты).
3 - ставить VEH и эмулировать обработку исключений. Это единственный вариант для x64 если нужно морфить/виртуалить код использующий исключения.
4 - использовать жесткие хаки с патчем кода ntdll в памяти. Это как раз ваш подход.

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 ноября 2011 11:51 · Поправил: Clerk
· Личное сообщение · #7

ntldr
1, 2 не подходит.
3 - не реально всё проэмулить, слишком толстый код.
4 - хз.

Использовать модуль значит затирать проекцию кодом. Тут возникают проблемы:
1. Size >= Size'. Память для файловых проекций резервируется блоками, вроде по 16К, тоесть её нельзя расширить. Это значит что в модуле должно быть пустое место, но тогда а) нельзя использовать сжатие данных и б) нельзя создать универсальный двигатель, будет нужен модуль.
2. Проекция связана с файлом. Это значит что исходный модуль испорчен(если новая проекция не в пределах RW секций). Тоесть будет детект при анализе всякими детекторами. Это не подходит.



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 27 ноября 2011 12:49 · Поправил: Alchemistry
· Личное сообщение · #8

Мда, очередное обсуждение сферического коня в вакууме.

Clerk пишет:
Тоесть будет детект при анализе всякими детекторами. Это не подходит.


Какими такими детекторами? Ты о чем? Да кому нужно гавнокод твой детектить епта) Пойти ты уже наконец - твой лабораторные эксперименты интересны только тебе и больше никому. Ты не имеешь никакого отношения ни к производству малвари, ни к ее поддержке. Уймись и прими пилюлю.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 27 ноября 2011 13:08
· Личное сообщение · #9

Clerk пишет:
Это не имеет отношению к запуску. Исключение это ситуация не частая и исключительная.

Как раз там происходят исключения и они в памяти. Сейчас вот набросал тестовый пример с сехом и исключением в памяти, деп включен и всё работает.

7797_27.11.2011_EXELAB.rU.tgz - MysticalSEH.rar

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 ноября 2011 13:32
· Личное сообщение · #10

PE_Kill
Я на хостовой системе не запускаю приложения с тлс директорией. У меня в олли стоит брейк на LdrpCallTlsInitializers()

Да и вообще у меня тут нету W7, на XP оно будет работать наверно(ну сам механизм).




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 27 ноября 2011 13:57
· Личное сообщение · #11

Clerk пишет:
У меня в олли стоит брейк на LdrpCallTlsInitializers()

Там нет инициализаторов, таблица пустая.

Clerk пишет:
Да и вообще у меня тут нету W7

Я на Win7 x64 проверял, всё работает.

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 ноября 2011 14:01
· Личное сообщение · #12

PE_Kill

Это зависит от опций в бут.ини и типа памяти.



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

Создано: 27 ноября 2011 14:26
· Личное сообщение · #13

PE_Kill
Не работает при принудительно включенном DEP.
Сделай на семерке bcdedit.exe /set {current} nx AlwaysOn и перезагрузись.
Вывод: нужны либо валидные модули либо эмуляция.

-----
PGP key <0x1B6A24550F33E44A>





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 27 ноября 2011 16:40
· Личное сообщение · #14

И кто из среднестатистических пользователей будет так делать? Половина софта сразу отвалится. Если только ресечить это дело для интереса.

-----
Yann Tiersen best and do not fuck





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 ноября 2011 16:58
· Личное сообщение · #15

PE_Kill пишет:
И кто из среднестатистических пользователей будет так делать? Половина софта сразу отвалится.

Во-во! Товарищи, не занимайтесь ерундой.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 27 ноября 2011 18:24 · Поправил: Clerk
· Личное сообщение · #16

PE_Kill
Дык не половина, он весь не рабочий. Я же не спрашивал кто что может, а задал вопрос про решение проблемы.

Сам то я есчо со древних времён юзаю сех через стаб(единственный недостаток - нужно немного править хидер, тоесть в директорию конфигурации свою запись запилить). Также и апишки дёргаю. Это ведь до тупого просто - находим стаб в системном модуле и через него юзаем нужный код. А сех просто - регаем VEH/UEF и обрабатываем сех-цепь, сохраняем ссылки в массиве и загружаем на их место стабы. Так делаю я в обеих модах. Но это не кошерно, я хотел другое решение, собственно для этого и создал тему. В простейшем случае никакие морфы не нужны. Вот я хочу услышать идеи решения сей задачи.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 28 ноября 2011 00:14
· Личное сообщение · #17

Собрал кодес, чтоб хоть на что то опираться. Вех юзается.

88a8_27.11.2011_EXELAB.rU.tgz - vnx.bin




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 28 ноября 2011 00:28
· Личное сообщение · #18

Clerk пишет:
Собрал кодес, чтоб хоть на что то опираться.

Хоть не напечатал последовательность из 00101110100010011101011001... и на том спасибо.

Clerk пишет:
Вех юзается.

ХЗ что там юзается, 5 минут потрассировал манипуляции с KiUserExceptionDispatcher -> задолбало, закрыл. Такие семплы сам смотри и отталкивайся от них.

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 28 ноября 2011 20:20 · Поправил: Clerk
· Личное сообщение · #19

PE_Kill

Сурс стоит денег. А ресерч это же профиль сего форума, решайте

> манипуляции с KiUserExceptionDispatcher
Ну конечно, я же сказал что вех юзается. Особо хитрым образом, S-маршрутизация если быть точным. Детекторы ничего не видят, никаких патчей.



Ранг: 13.0 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 28 ноября 2011 21:28
· Личное сообщение · #20

Clerk

Разбирайтесь сами с кодом, очень маловероятно что ктото захочет в этом дерьме копаться. Если не хотите сами - это не проблема, платите деньги и ребята решат вашу проблему оперативно.

Ветка называется --> Программирование <-- пункт 1 и 4



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 29 ноября 2011 02:15
· Личное сообщение · #21

matrix

Зачем меня цитировать..




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 29 ноября 2011 06:16
· Личное сообщение · #22

Clerk пишет:
Сурс стоит денег. А ресерч это же профиль сего форума, решайте

Стою на дороге в лыжи обутый, то ли лыжи не едут, то ли я ебанутый...

Сурс чего стоит денег? Его кто то тут просил что ли? Чего ресечить, твой бинарь что ле? Кому он нужен то, ты же его выложил как семпл, чтобы от чего то отталкиваться:
Clerk пишет:
Собрал кодес, чтоб хоть на что то опираться.


А теперь предлагаешь его ресечить? Проспись что ле, я уж не знаю.

-----
Yann Tiersen best and do not fuck




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 29 ноября 2011 07:37
· Личное сообщение · #23

Clerk пишет:
Собрал кодес, чтоб хоть на что то опираться. Вех юзается.


Собственно, а что это такое?

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



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 29 ноября 2011 18:46 · Поправил: Clerk
· Личное сообщение · #24

PE_Kill

Вы ребята ошибаетесь. Я ведь с вами пытаюсь говорить по нормальному, я забыл всё что вы писали, вме эти гадости. Но вы должны понимать, особенно меня зная, что мимо сказанное не всегда валидно. Да, я вчера написл в 2-х темах про деньги. Первая тема - я и сейчас думаю что сказал корректно, чувак заюзал эльфака тулзу и даже не поправил листинг, это не куда не годится. Если бы я хоте задать такой вопрос(маловероятно конечно, я бы уделил этому времени столько, сколько требуется), то задал бы его конкретно с понятным кодом. Вы же меня начинаете обвинять не понятно в чём. В своё оправдание я могу сказать что за всё время, а это не один год, я не заработал ни цента в сети. Меня невчем обвинять. Я не имею к блеку никакого отношения.

Далее, на счёт кода. Семпл выше запилен на морф. Алгоритм прост:
o Изолируем(проще говоря морфим) KiU* в буфер.
o Трассируем граф и заменяем ссылку на две процедуры на свой стаб.
o Этот стаб возвращает нужное нам значение.
o Получаем управление в вех и выполняем с-маршрутизацию - переключение на отморфленный код. Есть 2 графа. Первый описывает оригинальный код. Второй описывает код отморфленный. Между ними есть связь - ссылки, имея одну можно получить ссылку на соответствующий код. Просто, вот сути в сурсе:
Code:
  1. ; +
  2. ; Стаб для обработки ZwQueryInformationProcess().
  3. ;
  4. ; o Инфокласс задаём статически, можно определить анализом ветви.
  5. ;
  6. xPS_Stub:
  7.          %GET_CURRENT_GRAPH_ENTRY
  8. PS_Stub proc C
  9.          cmp PSSTUB.ProcessHandle[esp + 4],NT_CURRENT_PROCESS
  10.          mov ecx,PSSTUB.Information[esp + 4]
  11.          jne @f
  12.          cmp PSSTUB.InfoClass[esp + 4],ProcessExecuteFlags
  13.          jne @f
  14.          cmp PSSTUB.InfoLength[esp + 4],4
  15.          jne @f
  16.          test ecx,ecx
  17.          mov edx,PSSTUB.ReturnLength[esp + 4]
  18.          jz @f
  19.          mov dword ptr [ecx],40H or MEM_EXECUTE_OPTION_PERMANENT \
  20.                  or MEM_EXECUTE_OPTION_ENABLE \
  21.                  or MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE \
  22.                  or MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE
  23.          .if Edx
  24.                  mov dword ptr [edx],4
  25.          .endif
  26.          xor eax,eax
  27.          retn sizeof(PSSTUB)
  28. @@:
  29.          push dword ptr 0
  30. PS_Stub_Ptr::
  31.          retn
  32. PS_Stub endp
  33.  
  34. ; +
  35. ;
  36. ; Трассировочный колбек. Выполняет корректировку описателей в графе, загружая ссылки в ветвлениях на стабы.
  37. ;
  38. xGpLoadStubsCallback:
  39.          %GET_CURRENT_GRAPH_ENTRY
  40. GpLoadStubsCallback proc GpEntry:PVOID, Apis:PAPI_LIST
  41.          mov ecx,GpEntry
  42.          mov edx,Apis
  43.          mov eax,dword ptr [ecx + EhEntryType]
  44.          and al,TYPE_MASK
  45.          cmp al,HEADER_TYPE_CALL
  46.          jne Exit
  47.          test dword ptr [ecx + EhBranchType],BRANCH_DEFINED_FLAG
  48.          mov eax,dword ptr [ecx + EhBranchAddress]
  49.          jz Exit
  50.          assume edx:PAPI_LIST
  51. ; cmp [edx].pZwQueryVirtualMemory,eax
  52. ; je VM
  53.          cmp [edx].pZwQueryInformationProcess,eax
  54.          je PS
  55. Exit:
  56.          xor eax,eax
  57.          ret
  58. PS:
  59.          mov eax,[edx].PsStub.GpBase
  60. Load:
  61. ; * Билдер формирует смещение в ветвлении на основе адреса(DISCLOSURE_CALL_FLAG), а не ссылки.
  62.          xchg dword ptr [ecx + EhBranchAddress],eax
  63.          and dword ptr [ecx + EhDisclosureFlag],NOT(DISCLOSURE_CALL_FLAG)
  64.          mov [edx].Eol,TRUE
  65.          mov ecx,[edx].PsStub.GpBase
  66.          mov dword ptr [ecx + PSSTUBPTR],eax
  67.          jmp Exit
  68. GpLoadStubsCallback endp
  69.  
  70. ; +
  71. ;
  72. ; VEH, выполняет S-маршрутизацию(стековое переключение на отморфленный код).
  73. ;
  74. VEH proc uses ebx ExceptionPointers:PEXCEPTION_POINTERS
  75. Local GpEntry:PVOID
  76.          mov ebx,ebp
  77.          assume ebx:PSTACK_FRAME
  78.          jmp @f
  79. Next:
  80.          mov ebx,[ebx].Next
  81. @@:
  82.          cmp fs:[PcStackBase],ebx
  83.          jna Exit
  84.          cmp fs:[PcStackLimit],ebx
  85.          lea eax,GpEntry
  86.          ja Exit
  87.          Call Delta
  88. Delta:
  89. VEH_Ptr::
  90.          mov edx,dword ptr 0       ; PGCBE
  91.          pop ecx
  92.          push eax
  93.          lea ecx,SNAPS.RwSnap[ecx + (offset VEH_Snp - offset Delta)]
  94.          push [ebx].Ip
  95.          push GCBE_PARSE_NL_UNLIMITED
  96.          push ecx
  97.          mov eax,GP_RW_CHECK_IP_BELONG_TO_SNAPSHOT
  98.          Call Edx
  99.          test eax,eax
  100.          mov ecx,GpEntry
  101.          jnz Next
  102.          mov ecx,dword ptr [ecx + EhCrossLink]
  103.          and ecx,NOT(TYPE_MASK)    
  104.          mov eax,dword ptr [ecx + EhAddress]
  105.          mov [ebx].Ip,eax
  106.          jmp Next
  107. Exit:
  108.          xor eax,eax
  109.          ret
  110. VEH_Snp SNAPS <>
  111. VEH endp

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

Вот я выложил бинарь. Я думал что комуто это интересно, ктото готов уделить своё время пониманию алгоритма(не ресерч). Это я и хотел сказать, возможно я криво написал, но я считаю что я прав и меня невчем обвенить. Если вам не интересно, то мне сказать нечего.

Текущую задачу можно решить проще, на аверлабе есть решение http://wasm.ru/forum/viewtopic.php?id=43203

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



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 29 ноября 2011 18:48
· Личное сообщение · #25

Alchemistry

Напиши ты уже чтонибудь техническое, твой высер у меня тока смех вызывает. Я вообще не уверен что ты чтото можешь. Обычный школьник. Хотя это только моё мнение и я могу ошибаться, но следует сказать если это толстый троллинг, то на меня оно не действует.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 30 ноября 2011 19:26
· Личное сообщение · #26

В общем вопрос снимаю. Все лохи, какой вам ёпта коденг.)


 eXeL@B —› Программирование —› SEH DEP.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати