Как быть если к вам уже пришли?! ¶
By: SleepWalker on 2016-08-16 13 ч.
Как быть если к вам уже пришли?!
Как быть если к вам уже пришли?!
Представим ситуацию, когда вас вычислили. Из-за дел неправедных. Да вы хороший параноик, шифруете диски и прочее. Но к сожалению вы были слишком наивным и поверили не тем людям. И вы не успели заблокировать или выключить ваш пк. И вот вас уже ведут, а вы с отчаянием смотрите на то, как специалисты начинают работу с все еще открытыми данными на вашем пк. Вот если бы вы умели усилием мысли, взаимодействовать с ним и заставить мгновенно выключиться и тем самым спастить от жадных лап органов. Постойте - это возможно!
Мною была написана программа, которую я рекомендую включать каждый раз когда вы занимаетесь опасными делами. Что же это за решение?
Позвольте представить - Time
-------
Краткое описание:
Будучи запущенной на выбранный вами промежуток времени с определенным хешем(для безопасности) она произведет необходимую вам команду в случае если вы не введет пароль(который будет преобразован в хеш и сравнен с изначальным) в определенный файл. Это же то, что нужно.
Работает только на ОС Linux, может быть MacOS.
Примеры использования:
chmod a+x time ;Делаем программу исполняемой
./time hash 12345 ;Создаете хеш пароля для использования в дальнейшем в программе и да если вы не хотите, чтобы команда эта сохранилась в истории bash просто добавьте в начало ее пробел. Думаю все это знают, но все же.
Выдается подобный хеш - 8CB2237D0679CA88DB6464EAC60DA96345513964
./time --help ;Помощь
sudo ./time make 30 "shutdown -h now" 8CB2237D0679CA88DB6464EAC60DA96345513964 &
Желательно запускать через sudo, так как тогда процесс будет скрыт от обычного пользователя. Также необходимо запускать, как демон с помощью & для того, чтобы его нельзя была закрыть ctrl+c в том же терминале.
Команда запускает цикл в процессе которого по истечении 30 минут выведет сообщение и даст вам минуту на заполнение пароля в файл time.txt.
echo "12345" > time.txt ;Вводим пасс в файл. Запускаем с пробелом в начале.
Затем файл будет удален и программа снова вернется к циклу на следующие 30 минут. Можно использовать любую команду вместо shutdown, например затереть весь жесткий диск или специально выбранные ключи от контейнеров.
Также если вы используете ноутбук, то при закрытии крышки он может автоматически войти в спящий режим, и цикл будет остановлен. Поэтому вы можете использовать такую команду.
sudo systemd-inhibit --what=handle-lid-switch sleep 1d &
Теперь при закрытии ноута временно ничего не будет происходить.
Прикладываю исходный код на языке Nim и саму программу, скомпилированную для x86 Linux.
import docopt, strutils, os, securehash
let
doc = """
TIME
Do something every time if you don't type your password
Run as root and with & in the end of command
and your security will be great!!
Usage:
time make <time> <command> <hash>
time hash <string>
time --help
time --version
"""
type CtrlCException = object of Exception
proc handler() {.noconv.} =
raise new CtrlCException
setControlCHook(handler)
proc test(str,str2: SecureHash) : bool =
if str == str2:
return true
else:
return false
proc wait_for_input(time: int, hash,cmd : string) =
var
t = time
good = false
while t != 1000:
var l = execShellCmd("touch time.txt")
sleep(1000)
write(stdout, ".")
flushFile(stdout)
var str = readFile("time.txt")
var strs = splitLines(str)
if test(secureHash(strs[0]),parseSecureHash(hash)):
good = true
t = t - 1000
if good:
echo("<<*****>>")
var l = execShellCmd("rm time.txt")
else:
var l = execShellCmd(cmd)
if l == 0:
echo("___")
else:
echo("Not valid command")
proc timedo(num: int, cmd, hash : string) =
while true:
sleep(num*10000*6)
echo("<< It's time to stop this << ")
wait_for_input(60000, hash, cmd)
let args = docopt(doc, version = "time 1.0")
if args["hash"]:
let
str = $args["<string>"]
echo(secureHash(str))
if args["make"]:
let
num = $args["<time>"]
num2 = parse_int(num)
cmd = $args["<command>"]
hash = $args["<hash>"]
echo("{{hide process}}")
var l = execShellCmd("mount -o remount,rw,hidepid=2 /proc/")
echo("{{make time undeletable}}")
var l3 = execShellCmd("chattr +i time")
try:
timedo(num2,cmd,hash)
except CtrlCException:
echo("{{restore process}}")
var l2 = execShellCmd("mount -o remount,rw,hidepid=0 /proc/")
Редактировался SleepWalker (2016-08-16 13 ч.)