• XSS.stack #1 – первый литературный журнал от юзеров форума

обфускация вызова функции

JamesHook

floppy-диск
Пользователь
Регистрация
25.01.2021
Сообщения
9
Реакции
0
Недавно читал статейку и наткнулся на обфускацию вызова функции. Подкиньте инфу, что это и возможные методы
Если будет линк на какую то статейку буду признателен
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Недавно читал статейку и наткнулся на обфускацию вызова функции. Подкиньте инфу, что это и возможные методы
Если будет линк на какую то статейку буду признателен
 
обфускация функции делается чтобы не было понятно какую функцию вызываешь
один из вариантов можно использовать GetProcAddress(), чтоб сразу вызывать функцию через память
 
спасибо за статейку
 
Подкиньте инфу, что это и возможные методы
Если будет линк на какую то статейку буду признателен
Пример обфускации апи колл из бекдора АРТ28
Apache-конфиг:
 090 0F 95 C0                                setnz   al
.text:0040B4F8 090 89 45 E4                                mov     [ebp+var_1C], eax
.text:0040B4FB
.text:0040B4FB                             loc_40B4FB:                             ; CODE XREF: start+3E↑j
.text:0040B4FB 090 89 7D FC                                mov     [ebp+ms_exc.registration.TryLevel], edi
.text:0040B4FE 090 6A 02                                   push    2
.text:0040B500 094 5B                                      pop     ebx
.text:0040B501 090 53                                      push    ebx
.text:0040B502 094 FF 15 1C C3 40 00                       call    ds:__set_app_type
.text:0040B508 094 59                                      pop     ecx
.text:0040B509 090 83 0D 68 07 41 00 FF                    or      dword_410768, 0FFFFFFFFh
.text:0040B510 090 83 0D 6C 07 41 00 FF                    or      dword_41076C, 0FFFFFFFFh
.text:0040B517 090 FF 15 EC C2 40 00                       call    ds:__p__fmode
.text:0040B51D 090 8B 0D 6C F3 40 00                       mov     ecx, dword_40F36C
.text:0040B523 090 89 08                                   mov     [eax], ecx
.text:0040B525 090 FF 15 C4 C2 40 00                       call    ds:__p__commode
.text:0040B52B 090 8B 0D 68 F3 40 00                       mov     ecx, dword_40F368
.text:0040B531 090 89 08                                   mov     [eax], ecx
.text:0040B533 090 A1 C8 C2 40 00                          mov     eax, ds:_adjust_fdiv
.text:0040B538 090 8B 00                                   mov     eax, [eax]
.text:0040B53A 090 A3 64 07 41 00                          mov     dword_410764, eax
.text:0040B53F 090 E8 27 64 FF FF                          call    sub_40196B
.text:0040B544 090 39 3D 00 F0 40 00                       cmp     dword_40F000, edi
.text:0040B54A 090 75 0C                                   jnz     short loc_40B558
.text:0040B54C 090 68 6B 19 40 00                          push    offset sub_40196B
.text:0040B551 094 FF 15 CC C2 40 00                       call    ds:__setusermatherr
.text:0040B557 094 59                                      pop     ecx
.text:0040B558
.text:0040B558                             loc_40B558:                             ; CODE XREF: start+B6↑j
.text:0040B558 090 E8 33 01 00 00                          call    sub_40B690
.text:0040B55D 090 68 A0 C3 40 00                          push    offset unk_40C3A0
.text:0040B562 094 68 9C C3 40 00                          push    offset unk_40C39C
.text:0040B567 098 E8 1E 01 00 00                          call    _initterm
.text:0040B56C 098 A1 64 F3 40 00                          mov     eax, dword_40F364
.text:0040B571 098 89 45 E0                                mov     [ebp+var_20], eax
.text:0040B574 098 8D 45 E0                                lea     eax, [ebp+var_20]
.text:0040B577 098 50                                      push    eax
.text:0040B578 09C FF 35 60 F3 40 00                       push    dword_40F360
.text:0040B57E 0A0 8D 45 DC                                lea     eax, [ebp+var_24]
.text:0040B581 0A0 50                                      push    eax
.text:0040B582 0A4 8D 45 D8                                lea     eax, [ebp+var_28]
.text:0040B585 0A4 50                                      push    eax
.text:0040B586 0A8 8D 45 D4                                lea     eax, [ebp+var_2C]
.text:0040B589 0A8 50                                      push    eax
.text:0040B58A 0AC FF 15 D4 C2 40 00                       call    ds:__wgetmainargs
.text:0040B590 0AC 89 45 D0                                mov     [ebp+var_30], eax
.text:0040B593 0AC 68 98 C3 40 00                          push    offset unk_40C398
.text:0040B598 0B0 68 78 C3 40 00                          push    offset unk_40C378
.text:0040B59D 0B4 E8 E8 00 00 00                          call    _initterm
.text:0040B5A2 0B4 83 C4 24                                add     esp, 24h
.text:0040B5A5 090 A1 D8 C2 40 00                          mov     eax, ds:_wcmdln
.text:0040B5AA 090 8B 30                                   mov     esi, [eax]
.text:0040B5AC 090 3B F7                                   cmp     esi, edi
.text:0040B5AE 090 75 0E                                   jnz     short loc_40B5BE
.text:0040B5B0 090 83 4D FC FF                             or      [ebp+ms_exc.registration.TryLevel], 0FFFFFFFFh
.text:0040B5B4 090 B8 FF 00 00 00                          mov     eax, 0FFh
.text:0040B5B9 090 E9 BA 00 00 00                          jmp     loc_40B678
 
Пожалуйста, обратите внимание, что пользователь заблокирован
спасибо за статейку
Тут смысл недостаточно бывает понятен зачем это делается.

Порядок действий обычно такой - по умолчанию в "памяти процесса нашей программы" хранится структура PEB в которой явно указаны два HMODULE библеотек kernel32 и ntdll, они по идее предоставляют все основные функции которые понадобяться тебе в дальнейшей работе.

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

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

Я лично применяю это всегда при создании шеллкодов, так как это помогает не хранить строки по типу char dll[] = { 'n', 't', '.', 'd', 'l', 'l' }; и всего в таком духе, что является одновременно хорошей штукой что бы скрыть строки в статике, и что бы не увеличивать вес программы

Хорошим способом обусфицировать код - это создавать свои переписанные функции - аналоги winapi, тот же кастомный Sleep или что то вроде этого.
 
названия функций хешируются, и уже сравниваются с хешем который ты подготовишь
что именно хешируешь, название функций которые вызываешь или название переменных?
 
что именно хешируешь, название функций которые вызываешь или название переменных?
название перименных никто не увидит, кроме тебя , если конечно ты пишешь не на пауэршелл.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
что именно хешируешь, название функций которые вызываешь или название переменных?
названия функций которые будут подгружены конечно же
 
Пожалуйста, обратите внимание, что пользователь заблокирован
есть туториал?
это помогает только статически избежать или динамически тоже?
нет нету но исходы xp слиты в сети - можешь воспользоваться ими.
и статически и динамически, в некоторых случаях
 
не на пауэршелл.
хочу написать на C
названия функций
не допер
переменная = название_функции_в_хеше
функция = getprocaddress("kernel32.dll", декрипт(переменная))
так?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
хочу написать на C

не допер

так?
нет, почитай статьи там исходников полно
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ТС, ты хочешь просто импорт скрыть или в коде или что? Опиши, что именно скрывать и зачем.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх