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

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

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

Создано: 31 декабря 2010 18:27 · Поправил: Clerk
· Личное сообщение · #1

Здрасте.
Допустим получаем мы управление при вызове какого либо кода. При этом получаем адрес возврата или выполняем бактрейс и находим наш скрытый от всех код. Чтоб не позволить это делаем инвалидным адрес возврата и в Ebp загружаем маркер конца цепочки. Тогда детектор не получит так просто адрес на который произойдёт возврат, например:
Code:
  1. TLS struct
  2. rEbx         DWORD ?
  3. rEdi         DWORD ?
  4. rEbp         DWORD ?
  5. Caller   PVOID ?
  6. TLS ends
  7. PTLS typedef ptr TLS
  8.  
  9. .data
  10. Tls               TLS <>
  11. ApiPreStub        PVOID ?
  12.  
  13. .code
  14. PbPostProcessInitRoutine   equ 14CH
  15.  
  16. EXCEPTION_CHAIN_END        equ -1
  17.  
  18. ; Eax: @Api
  19.          assume fs:nothing
  20. ApiCallStub::
  21.          pop Tls.Caller
  22.          mov Tls.rEbx,ebx
  23.          mov Tls.rEdi,edi
  24.          mov Tls.rEbp,ebp
  25.          mov ebx,dword ptr fs:[TEB.Peb]
  26.          mov ecx,ApiPreStub
  27.          xor edi,edi
  28.          mov ebp,EXCEPTION_CHAIN_END
  29.          mov dword ptr [ebx + PbPostProcessInitRoutine],offset ApiPostStub
  30.          push ApiPreStub
  31.          jmp eax
  32.  
  33. ApiPostStub::
  34.          add esp,4
  35.          mov ebx,Tls.rEbx
  36.          mov edi,Tls.rEdi
  37.          mov ebp,Tls.rEbp
  38.          jmp Tls.Caller
  39.  
  40. %APICALL macro pApi
  41.          mov eax,pApi
  42.          Call ApiCallStub
  43. endm
  44.  
  45. $Msg     CHAR "Test",0
  46. $Dll     CHAR "psapi.dll",0
  47.  
  48. _imp__DbgPrint proto C :DWORD, :VARARG
  49. _imp__LdrSetDllManifestProber proto :PVOID
  50. _imp__LoadLibraryA proto :PSTR
  51.  
  52. LdrpManifestProberRoutine proc DllBase:PVOID, FullDllPath:PCWSTR, ActivationContext:PVOID
  53.          Int 3
  54.          xor eax,eax
  55.          ret
  56. LdrpManifestProberRoutine endp
  57.  
  58. Entry proc
  59.          mov eax,fs:[TEB.Peb]
  60.          mov eax,PEB.Ldr[eax]
  61.          mov eax,PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
  62.          mov eax,LDR_DATA_TABLE_ENTRY.InLoadOrderModuleList.Flink[eax]
  63.          mov ebx,LDR_DATA_TABLE_ENTRY.DllBase[eax]   ; ntdll.dll
  64.          mov eax,IMAGE_DOS_HEADER.e_lfanew[ebx]
  65.          mov ecx,IMAGE_NT_HEADERS.OptionalHeader.SizeOfCode[ebx + eax]
  66.          add ebx,IMAGE_NT_HEADERS.OptionalHeader.BaseOfCode[ebx + eax]
  67.          sub ecx,6
  68. Scan:
  69.          cmp word ptr [ebx],9B8BH
  70.          je @f
  71.          inc ebx
  72.          loop Scan
  73.          Int 3
  74. @@:
  75.          cmp dword ptr [ebx + 2],PbPostProcessInitRoutine
  76.          jne Scan
  77.          mov ApiPreStub,ebx
  78.  
  79.          push offset LdrpManifestProberRoutine
  80.          %APICALL dword ptr [_imp__LdrSetDllManifestProber]
  81.          
  82.          push offset $Dll
  83.          %APICALL dword ptr [_imp__LoadLibraryA]
  84.          
  85.          ret
  86. Entry endp


Вопрос: каким образом можно обнаружить вызывающий код.

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

Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 01 января 2011 02:18
· Личное сообщение · #2

Clerk
СНГ!
Кстати, я тут ковыряю последнюю (по версии) Звездную Силу, есть идеи, реализованные в виде утилиты, но есть и вопросы, которые мешают продвижению. Можешь на них ответить?



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

Создано: 01 января 2011 02:31
· Личное сообщение · #3

crypto
Постараюсь ответить, если вы ответите на мой ^



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 01 января 2011 02:39
· Личное сообщение · #4

Ну если по стеку никак, то может хучить и анализить возможные функи?

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 01 января 2011 02:47
· Личное сообщение · #5

Clerk
У тебя вопрос слишком сложный




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

Создано: 01 января 2011 09:42
· Личное сообщение · #6

Цель непонятна. Если мы можем увидеть инициализацию, то легко найдем вызывающий код. Считаем ApiPostStub из PbPostProcessInitRoutine, ну а там найдем Tls.Caller. Если мы не можем видеть инициализацию, то и такие извращения не нужны, можно тем же SEH'ом спрятать.

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




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

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

PE_Kill
Например перехватили вы функу LoadLibrary() и отслеживаете вызовы из не системных модулей с целью обнаружения постороннего кода в системе, так все детекторы руткитов поступают. Тока мониторят более глубокие ядерные апи. Вот нужно не дать возможность обнаружить вызов. Стаб не известен, он любым может быть. Или более простой пример - ковыряете вы какую либо софтину и сморите колстек когда сработает брейк, это присекается таким образом, дабы сделать видимость системного вызова.



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

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

Clerk
Ты не поверишь, но ты сам ответил на свой вопрос в первом же предложении последнего поста. Причем решение будет рабочим. Продолжай изобретать велосипеды и с новым годом



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

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

Alchemistry
Что же я ответил ?

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



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

Создано: 01 января 2011 18:54
· Личное сообщение · #10

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




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

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

потому что твой вопрос в большей степени к
1) аверам, и их детекторам
2) пакерам
3) вирусописателям
ты надеешься что они выйдут на паблик и начнут с тобой дискутировать?))

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



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

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

reversecode
А раз вы не авер и вирмейкер, то не способны к логическому анализу ?
Всё ясно.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

У тебя ЧСВ зашкаливает, если считаешь местных дураками, зачем сюда ходишь? К слову сказать, если не отвечают, это не значит, что сказать нечего. К примеру, ГС серии вполне себе нормально трассируются самописными движками без дебаг апи. Что касается бактрейса, в общем случае бактрейс нельзя сделать корректно, и с этим ничего не сделать.



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

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

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

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

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



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 01 января 2011 20:18
· Личное сообщение · #15

Clerk
Помоему ты слишком бурно отметил Новый Год
В обыденной жизни нечто подобное встречается когда идет передача на OEP из пакера/протектора, однако там все стандартно: JMP EAX, PUSH EAX-RET, JMP DWORD PTR DS:[EAX].
Применительно к твоему случаю... можно попробовать EBP восстановить, зная ESP и перебрав стек.



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

Создано: 01 января 2011 20:19
· Личное сообщение · #16

Clerk
Гм, ну раз не понял - твои проблемы. Смысл какой в создании всех этих топиков для тешанья своего чсв? Тебе что за это деньги платят что-ле?

ps
на дворе 1 января. А ты сидишь дома и маешься какой-то хуйней.
Забухай ёпт!



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

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

ELF_7719116
Да. Стек восстанавливает олли. Для обхода этого используем шифрование ссылок и стаб для сех, тоесть их три - стаб для возврата(SFC) и два для сех, это непосредственно сех и стаб для безопасного места. Все свободны.

Alchemistry
Учить матчасть овощ!


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