Чи можу я врятувати ці документи на вимираючій машині від забуття?


49

По-перше, зізнання: ні, я не робив резервні копії, які мав би бути.

По-друге, ситуація:

У мене Dell XPS 9550 з твердотільним диском під управлінням Fedora 25 .

Я працював над файлом і намагався зберегти його, коли мені сказали, що я намагаюся зберегти у файловій системі лише для читання . Виявляється, моя файлова система доступна лише для читання, і всюди є помилки вводу / виводу .

Мені вдалося зберегти деякі файли, надіславши їх електронною поштою через відкритий веб-браузер, але це вийшло з ладу, і я не можу його перезапустити. Але в мене все ще відкриті цікаві файли в редакторі. Я не можу зберігати файли ніде, але можу скопіювати їх вміст. Якби тільки я міг знайти спосіб ексфільтрувати вміст файлу, я міг би заощадити собі місяці роботи.

Але є деякі жахливі обмеження. Я намагався вставити USB-накопичувач, але не з'являється жоден пристрій, який би його представляв, і mountкоманда вмирає з segfault. Я можу спробувати перенести ssh на інший комп'ютер, але я отримую "помилку шини", і вона вмирає. ping, dmesg, ifconfigЖодна з цих робіт. Але у мене є vimі lessта lsі може породжувати нові bashекземпляри.

Ні lynx, ні firefox, ні google-chrome. Немає DVD-приводу.

В основному, здається, мій SSD помер. А може, вся материнська плата. У мене ще дуже важливі документи в пам’яті, у мене IP-адреса та підключення до мережі, я можу запустити кілька випадкових команд і мати ще 3500 на шляху, який я міг би спробувати.

catі, gccздається, працює. Я можу писати у файли в / tmp. У мене є запущений ipythonекземпляр, який, здається, працює.

Отже ... те, що я намагався до цього часу, не вдалося. Але я відчуваю, що є ще тисяча можливостей. Що я не розглядаю? Як я можу отримати ці файли зі свого вмираючого комп'ютера?

Має бути спосіб.

ОНОВЛЕННЯ : Нові речі:

  • Я втратила мережевий зв’язок через власну дурість.
  • Я написав сценарій Python для заміни cpтаcp -r
  • Якщо я не знайду способу створити /devзапис для SD-карти або для USB-накопичувачів, то моїми найкращими ставками для виведення даних здаються екран і, можливо, колонки / аудіокабель.
  • Я пишу сценарій, щоб спробувати прочитати файли та вивести, які з них можна прочитати.

Пропозиції все ще дуже вітаються!

ОНОВЛЕННЯ 2 : Новіші речі:

  • На комп’ютері, що вмирає, я написав сценарій Python, який буде читати файл побіжно і намагатися передати ці біти, прошиваючи екран того чи іншого кольору. Зараз він намагається зробити двобітний код, де червоний, зелений, синій та білий кольори - це двобітна пара. Однак це не так добре працює, тому я можу просто переключитися на два кольори і робити один раз за один раз.
  • На своєму іншому ноутбуці (старий надійний Thinkpad, який я відмовився від цього гарячого нового XPS) я написав сценарій, який читається з веб-камери за допомогою бібліотеки OpenCV Python. Ідея полягає в тому, щоб він розшифрував коди, надіслані іншим комп'ютером. Проблема полягає в тому, що частота кадрів з камери - це щось на зразок 15 кадрів в секунду, а це означає, що якби я мав ідеальну безвідмовну передачу, моя максимальна швидкість передачі даних склала б 30 біт на секунду, тобто 225 байт в секунду. Це 324k на день.
  • На вмираючому XPS я можу використовувати tarдля упаковки потрібні файли в єдиний архів, який становить 1,7 Мб. На жаль, gzip, bzip2, xz, lzopі все , що компресія утиліта недоступна. АЛЕ за допомогою zlibмодуля Python я можу стиснути цей файл до 820 КБ. Враховуючи цей розмір, я, певно, міг би надіслати цю річ через пару днів.
  • Оскільки цей метод передачі, ймовірно, дуже схильний до помилок, я збираюся реалізувати коди Хеммінга на XPS, щоб додати деяку корекцію помилок під час передачі даних.
  • Ймовірно, будуть ускладнення, тому що так і відбувається, але принаймні це здається якось здійсненним отримати ці дані!
  • Оскільки це все ще досить вдалий спосіб передачі даних, я більше розглядав послідовні драйвери USB. Модулі я намагався завантажити ( usb-serial-simple, usb-debug, safe-serial) дають I / O помилки. Я також не думаю, що він вбудований в ядро, тому що немає / dev / ttyUSB * пристроїв.

Дякую за всі пропозиції сьогодні --- Я знаю, це навіть не чітко визначене питання, оскільки ви, хлопці, не знаєте заздалегідь, які програми / файли можна читати чи ні. Досі відкриті для кращих пропозицій, ніж цей відео підхід!

ОНОВЛЕННЯ 3 : Найновіші речі

  • Я отримав веб-камеру PS3 Eye і, відключивши її автоматичне посилення та експозицію, успішно читаю дані з XPS, хоча з помилковим 1 байтом в секунду. Це чудовий успіх --- перші дані розкриті! Але швидкість занадто повільна, щоб вивести мої 820 КБ за будь-який розумний час, а помилка занадто висока.

Однобітна передача з годинником

  • Проблема полягає в тому, що запис до терміналу надто повільний. Оновлення екрану - це не таке, як миттєве, завдяки (я думаю) повільності urxvtемулятора терміналу, до якого я маю доступ.
  • Я виявив, що у мене є доступ до компілятора Rust на XPS. Я переписав сценарій передачі за допомогою Руста, щоб побачити, чи поліпшить це швидкість оновлення терміналу, але це не допомогло.
  • Оскільки я навряд чи зможу збільшити частоту кадрів, мені доведеться спробувати збільшити кількість даних, отриманих за кадр. Мій сучасний підхід виглядає приблизно так:

сітка передачі

У правій половині все ще є тактовий сигнал, який блимає та вимикається, щоб позначити прихід нових кадрів. Але ліворуч - це сітка, де кожна клітинка позначена червоним квадратом у куті, а потім зеленою коміркою праворуч і вниз від червоного квадрата миготить і вимикається, щоб трохи вказати. Червоні квадрати повинні дозволяти комп’ютеру, що приймає, калібрувати, де розташовані комірки. У мене ще немає даних, але я над цим працюю.

  • Хтось запропонував мені розглянути можливість написання QR-кодів замість цих спеціальних кольорових моделей. Я також розберуся на це, і, можливо, це здійсню замість цього сіткового підходу. Виправлення помилок було б приємним виграшем, а також можливістю використовувати стандартні бібліотеки для декодування.
  • Я дізнався, що у мене є доступ до libasound (звукової бібліотеки ALSA), але не до файлів заголовків, пов'язаних з ним ( alsa/asoundlib.hабо будь-якого іншого). Якщо хтось знає, як використовувати спільну бібліотеку без заголовків, або може допомогти мені написати лише правильний заголовок, щоб я міг виробляти аудіо вихід, тоді я міг би мати аудіо-спосіб виведення файлів.
  • Крім того, якщо хтось міг би допомогти мені маніпулювати USB-пристроями без доступу до libusb, то, можливо, я міг би щось із цим зробити?

Рухатися вперед!

ОНОВЛЕННЯ 4 : аудіо вихід!

Користувач Франческо Нофері зробив велику роботу, допомагаючи мені використовувати бібліотеку ALSA, згадану в попередньому оновлення. У компілятора C була проблема, але за допомогою компілятора Rust я міг використовувати FFI для прямого виклику libasound. Зараз я зіграв купу моїх даних через аудіо, і це звучить як музика на мої вуха! Ще потрібно встановити справжній канал зв'язку, але я дуже сподіваюся. На даний момент моя робота полягає в тому, щоб впровадити модем, тож якщо хтось має вказівки щодо хороших способів зробити це, я все чую. В ідеалі модуляцію, яку легко здійснити вручну та демодуляцію, для якої я можу використовувати наявну бібліотеку. Оскільки це може теоретично переходити безпосередньо через аудіокабель, а не через телефонну мережу ми можемо зробити набагато краще, ніж 56 кбіт / с або будь-який стандарт, який повернувся в той день, але на практиці хто знає, що ми отримаємо.

Дякуємо всім, хто дотримується тут та за адресою / r / techsupportmacgyver та at / r / rstst, сприяючи безлічі чудових пропозицій. Я скоро буду реалізовувати цей "модем", і тоді я закінчу це епілогом. Я думаю, що я можу поставити свій код десь для інших відчайдушних людей, щоб скористатися в майбутньому --- можливо, навіть сховище дивних інструментів ексфільтрації, які легко ввести в машину, що вмирає, вручну? Ми побачимо, що станеться.

ОНОВЛЕННЯ 5 : Мені знадобилося багато часу боротьби з ALSA та моїм дешевим пристроєм захоплення аудіо USB StarTech (на вбудованому ноутбуці немає вбудованої лінії), і багато хто помилково починає пробувати власний протокол передачі, але нарешті під пораду деяких Мої друзі-ентузіасти із радіоелектронних радіостанцій я реалізував протокол лінії RTTY, що працює зі швидкістю 150 бод, що на практиці дає мені приблизно 10 байт в секунду. Це не надто швидко, але досить надійно. І я майже завершив передачу файлу 820 КБ, перевіреного за допомогою контрольних сум CRC32 (використовуючи функцію crc32 з Python'szlibмодуль, до якого я маю доступ). Тож я оголошую перемогу і хочу ще раз подякувати! Я витрачу трохи більше часу на пошук подальших файлів, які можна прочитати і які я можу перенести, але фундамент на місці. З усіма вами було весело працювати!

FINAL UPDATE :

На машині, що вмирає:

$ tar cf ./files
$ ./checksum.py ./files.tar 9999999
Part 1 checksum: -1459633665
$ ./zlib_compress.py ./files.tar
$ ./checksum.py ./files.tar.z 9999999
Part 1 checksum: -378365928
$ ./transmit_rust/target/debug/transmit ./files.tar.z
Transmitting files.tar.gz over audio using RTTY
Period size: 2048
Sample rate: 44100
Samples per bit: 294
Sending start signal.
Transmitting data.
nread: 2048
nread: 2048
...
nread: 2048
nread: 208
Transmission complete. Sending hold signal.

На рятувальній машині:

$ minimodem --rx -8 --rx-one -R 44100 -S 915 -M 1085 --startbits 3
            --stopbits 2 --alsa=1 150 -q > ./files.tar.z
$ ./checksum.py ./files.tar.z
Part 1 checksum: -378365928
$ ./zlib_decompress.py ./files.tar.z
$ ./checksum.py ./files.tar
Part 1 checksum: -1459633665

:-)



2
Перейдіть до каталогу, де у вас є файли, і видайте команду python -m SimpleHTTPServer. Тепер ви обмінюєтесь файлами через http-сервер у порту 8000 . Відкрийте браузер на іншому пристрої в тій самій мережі та введіть наступне: http://<IP address>:8000і почніть завантажувати все, що можна.
jcbermu

2
Чудовий шматок витворів, які ви тут отримали. Я хотів би, щоб я міг підняти два рази.
Каміль Маціоровський

1
Як щодо охолодження лайно з оперативної пам’яті для зменшення нестабільності та переміщення його на альтернативний XPS? en.wikipedia.org/wiki/Cold_boot_attack
корінь

1
Дещо поза темою, але було б чудово, якби ви могли зв'язати пов'язані теми reddit, щоб ми могли побачити, що там запропоновано.
Боб

Відповіді:


15

ось приклад libasound програми з достатньою кількістю визначень, щоб отримати базовий 2-канальний 44.1k хвильовий вихід без заголовків.

EDIT: Насправді я не впевнений, якби виправити дані прямо у форматі wav, оскільки шум під час запису може легко пошкодити його, але ви, ймовірно, можете зробити щось на зразок синусоїди біт на високій частоті, яка є більш надійною

EDIT2: якщо aplay присутній і працює, ви також можете скористатися цим і просто написати програму, яка виводить неочищене аудіо та передає його в aplay або все, що може відтворювати аудіо

EDIT3: змінив його так, щоб він взагалі не використовував заголовків

якщо -lasound не компілюється, додайте -L / path / where / libasound / is / located

/*
    gcc alsa_noheader.c -lasound
    cat stuff.wav | ./a.out
*/

typedef unsigned int uint;
typedef unsigned long ulon;

int printf(char*, ...);
void* malloc(long);
long read(int fd, void* buf, ulon count);

int snd_pcm_open(void**, char*, int, int);
ulon snd_pcm_hw_params_sizeof();
int snd_pcm_hw_params_any(void*, void*);
int snd_pcm_hw_params_set_access(void*, void*, int);
int snd_pcm_hw_params_set_format(void*, void*, int);
int snd_pcm_hw_params_set_channels(void*, void*, uint);
int snd_pcm_hw_params_set_rate_near(void*, void*, uint*, int*);
int snd_pcm_hw_params(void*, void*);
int snd_pcm_hw_params_get_period_size(void*, ulon*, int*);
long snd_pcm_writei(void*, void*, uint);
int snd_pcm_prepare(void*);
int snd_pcm_drain(void*);
int snd_pcm_close(void*);

int main(int argc, char* argv[])
{
    void* pcm;
    void* params;

    int rate;
    int nchannels;
    ulon frames;
    void* buf;
    int bufsize;
    long nread;

    snd_pcm_open(&pcm, "default", 0, 0);
    params = malloc(snd_pcm_hw_params_sizeof());
    snd_pcm_hw_params_any(pcm, params);

    /* 3 = rw_interleaved */
    snd_pcm_hw_params_set_access(pcm, params, 3);

    /* 2 = 16-bit signed little endian */
    snd_pcm_hw_params_set_format(pcm, params, 2);

    /* 2 channels */
    nchannels = 2;
    snd_pcm_hw_params_set_channels(pcm, params, nchannels);

    /* sample rate */
    rate = 44100;
    snd_pcm_hw_params_set_rate_near(pcm, params, &rate, 0);

    snd_pcm_hw_params(pcm, params);
    snd_pcm_hw_params_get_period_size(params, &frames, 0);

    bufsize = frames * nchannels * 2;
    buf = malloc(bufsize);

    /* read file from stdin */
    while (nread = read(0, buf, bufsize) > 0)
    {
        if (snd_pcm_writei(pcm, buf, frames) == -29)
        {
            printf("W: underrun\n");
            snd_pcm_prepare(pcm);
        }
    }

    snd_pcm_drain(pcm);
    snd_pcm_close(pcm);

    return 0;
}

Я підтримав вас і думаю, що ви заслуговуєте тонни кредиту на цей дивовижний підхід! Ось проблема: я отримую помилки вводу-виводу на всіх чотирьох файлах включення, які ви хочете використовувати. Тому мені потрібен спосіб обійти це. Я можу зробити попередню обробку на іншому ноутбуці, але це призведе до 63K-файлу, 11K gzipped. Якщо я можу знайти засоби для введення даних у XPS, то це можливо, але я не радий вводити їх вручну. Скомпільований файл становить 10,4 Кб, або 2,4 КЗ gzipped. Це дістатися до місця, де я міг би його ввести вручну, але помилки важко було б виявити.
Джош Хансен

1
Я відредагував програму, щоб взагалі не використовувати жодних заголовків, спробуйте це
Francesco Noferi

gccдав мені "Помилка шини" (яку я отримую з деякими програмами, але насправді не розумію.) На щастя, у мене є компілятор Rust, який працює, тому, використовуючи функцію FFI Руста, я реалізував ваш код вище за допомогою Rust. Це компілювання та запуск, але я все ще нічого не чую. Але я не дуже впевнений, якщо гучність збільшена --- це може бути відключено. Але я не можу запустити alsamixer / xfce4-mixer, щоб перевірити. Я шукаю безпосередньо використовувати alsalib, щоб переконатися в збільшенні обсягу. Дуже дякую за ваші зусилля щодо цього!
Джош Хансен

1
приємно чути, що ти запустив це! для обсягу, ось програма, яка перераховує елементи змішувача пристрою за замовчуванням і максимує їх усі: gist.github.com/008f0c3acdbcae886a19868a0554987b . якщо у вас все ще виникають проблеми, вам може знадобитися написати щось для перерахування аудіовиходів та записів їх змішувача, щоб переконатися, що він справді зламаний, а не просто виводиться на неправильний / приглушений пристрій. можна також спробувати додати перевірку помилок у програму виводу аудіо, щоб побачити, чи помиляється вона. Помилка шини означає "намагався отримати доступ до пам'яті, яка не могла бути там", тому, можливо, пошкоджена пам'ять, нанесена на карту
Francesco Noferi

Виявляється, гучність збільшилася, але я насправді не надсилав жодних байт на динаміки --- якось я не розумію, як читати в буфер в Rust, він завжди читає 0 байт. Але, використовуючи кілька байтів, які я сконструював, я зміг створити аудіо вихід! Це чудово, здається, це хороший шлях до отримання даних за гарний чистий спосіб. Тепер настав час дізнатися про стратегії модуляції / демодуляції, щоб я міг зробити це розумно. Велике спасибі за вашу роботу над цим --- дуже вдячний!
Джош Хансен

3

Ваш порт HDMI чи будь-який інший вихідний порт працює? Якщо так, ви можете використовувати пристрій захоплення екрана, щоб записати його як відео та обробити пізніше. Таким чином, не обмежуючись рамкою веб-камери.


2

Як щодо вас шестинадцять кодують свої дані та виводять її по одній сторінці до терміналу?

Ви можете додати префікс із зміщенням у двійковій частині, щоб ви могли легко регенерувати сторінку (для ручного виправлення?)

Потім на іншому комп’ютері скористайтеся деяким програмним забезпеченням OCR для сканування сторінок.

Термінал 80x25 дасть 1000 байт на сторінку (мінус деякий простір для префікса). Таким чином, приблизно на 1000 сторінках ви могли отримати свої дані. Навіть на одній сторінці в секунду це менше 20 хвилин.

Шестнадцяткове кодування легко записати, а також забезпечує необроблену форму виправлення помилок (є лише 16 дійсних символів).


1

чи можна встановити мережеве з'єднання? ssh може бути трохи занадто багато, але якщо ви можете використовувати Netcat на двох машинах, ви можете передати дані. один у режимі надсилання, один у режимі прослуховування. Якщо все, що вам потрібно зробити, це передати текст, то це "може" бути рішенням.

редагувати: ніколи не пам’ятайте, просто прочитайте, що ви також втратили мережеве з'єднання ..


1
Я думаю, що ваша відповідь заслуговує на те, щоб бути там. ncне має залежностей, окрім функціонуючого мережевого стеку, який мав ОП, поки він не підірвав його. Це різко знижує шанси на те, що виконуваний файл не запуститься. Якщо хтось інший зіткнеться з подібною проблемою, це, безумовно, корисне рішення.
zneak

0

Ви можете бути в змозі відправити себе з командного рядка, в тому числі відправлення файлів.

Щось на зразок:

$ mail -s "Hello World" user@yourmaildomain.com < /tmp/urgentFileToSave.txt

повинні працювати.

Ще кілька прикладів: http://www.binarytides.com/linux-mail-command-examples/


На жаль, mailнемає серед (по суті випадкових) колекцій програм, які я можу запускати. Плюс я втратив мережеве з'єднання :-(
Джош Хансен

Ой. Гаразд, у мене залишилось catлише файли та фотографувати за допомогою мобільного телефону.
mcalex

Це може дійти до цього!
Джош Хансен

0

Чи може Python отримати доступ до вашого аудіовиходу? Ви можете спробувати передати дані за допомогою цього - дивіться те чи інше .


Я не думаю, що у мене встановлені аудіобібліотеки Python, так що, мабуть, ні. Але є пристрої ALSA в / dev / snd. alsa-lib встановлений, але я не думаю, що я можу його прочитати. Чи є спосіб записати безпосередньо на аудіопристрої?
Джош Хансен

@ user17219 Ви впевнені, що ossaudiodevу вашій установці Python немає бібліотеки? Це повинен бути стандартний модуль в Linux і FreeBSD, якщо я правильно прочитав документацію. import ossaudiodevпрацював у моєму Ubuntu поза коробкою.
lukeg

насправді ви праві, що він присутній, але, на жаль, це не було в пам'яті, тому я не можу його прочитати --- він намагається прочитати модуль з диска, що призводить до помилки вводу / виводу :-( Це було чудово пропозиція, однак
Джош Хансен

@ user17219 шкода. tldp.org/HOWTO/Alsa-sound-6.html - це посилання показує, що ви можете спробувати просто catвстановити файл на /dev/snd/pcm...пристрій.
lukeg

Я спробував це, але отримав деякі дивні помилки. Я думаю, що пристрої pcm змінилися з моменту написання цього документа, оскільки є варіанти * p та * c. Я спробував catзайнятися /dev/randomусіма ними, але безрезультатно.
Джош Хансен

0

Ви можете вийняти SSD зі своєї машини та dd/ photorec/ тощо на іншій робочій машині.

Ось посібник з обслуговування Dell для 9550 - див. Розділ "Видалення твердотільного накопичувача". Після вилучення накопичувача ви можете отримати зовнішній корпус USB M.2 та приєднати диск до іншої машини для відновлення даних.


3
-1. У такому випадку ваша порада може значно погіршити ситуацію. Перш за все, ми не можемо бути впевнені, які файли були зроблені на SSD, вони можуть існувати в кеші. Деякі файли взагалі не були збережені: "Але в мене все ще відкриті цікаві файли в редакторі. Я, здається, не можу зберегти файли ніде, але можу скопіювати їх вміст." Далі є ризик, що SSD більше не ініціалізується; він працює зараз, тому що він ініціалізувався до несправності. Ваше рішення означає втрату вмісту оперативної пам’яті напевно, а також вміст SSD. Боюся, що це буде державний переворот .
Каміль Маціоровський

0

Довгий постріл, але в деяких дистрибутивах є вбудовані протоколи радіостанцій. Одним із поширених є Fldigi. Спробуйте, який Fldigi.

Якщо у вас є те чи інше, вони перетворюють текст в аудіо, як правило, використовуючи певну зміну фазового зсуву. Вихід надходить на ваші динаміки / навушники і отримує стабільний комп’ютер у тій же кімнаті, що відображається на його мікрофоні. (Це виключає радіостанції шини, які передають і приймають звук по ефіру).


0

Підхід QR-кодів може бути хорошим. Ви можете розмістити на екрані стільки, скільки зможете, і оновити їх, як тільки дозволяє ваш термінал. Потім запишіть екран XPS камерою (на відміну від використання веб-камери) і просто працюйте над розшифровкою збереженого відео. Можливо, буде корисним навіть використання повільного зйомки.


0

Чудове шоу :) У мене є 1 пропозиція: ви також можете читати дані з екрану, використовуючи фотодіод, підключений до звукової карти іншого комп’ютера


Або підключіть аудіо вихід до входу якоїсь зовнішньої звукової карти (для усунення шуму). Надихайтесь тут: chdk.wikia.com/wiki/Obtening_a_firmware_dump
Milo O'h

Саме запитання та кілька попередніх відповідей обговорюють захоплення екранного зображення камерою. Чи буде ваш підхід кращим? Або навіть десь поруч як добре? Якщо так, поясніть, будь ласка. Не відповідайте в коментарях; відредагуйте свою відповідь, щоб зробити її більш зрозумілою та повною.
G-Man каже: "Відновіть Моніку"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.