Инженерный анализ военных [закрытых] историй

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

43
задан Sam 18 August 2014 в 07:30
поделиться

10 ответов

0
ответ дан 23 September 2019 в 02:04
поделиться

Путь назад в начале 90-х, я забыл свой пароль CompuServe. У меня была зашифрованная версия в CIS.INI, таким образом, я записал небольшую программу, чтобы сделать нападение простого текста и анализ в попытке перепроектировать алгоритм шифрования. 24 часа спустя я выяснил, как это работало и каков мой пароль был.

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

Это в конечном счете нашло свой путь на несколько досок объявлений (помните их?) и интернет-форумы, и был включен в немецкую книгу о CompuServe. Это все еще плавает вокруг туда куда-нибудь. На самом деле Google берет меня прямо к нему.

10
ответ дан RoadWarrior 26 November 2019 в 22:27
поделиться

Прочитайте историю FCopy для C-64 здесь:

Назад в 80-х, Commodore C-64 имел интеллектуальный дисковод для гибких дисков, 1541, т.е. внешняя единица, которая имела ее собственный ЦП и все.

C-64 отправил бы команды на диск, который в свою очередь затем выполнит их самостоятельно, читая файлы и такой, затем отправьте данные в C-64, на всем протяжении составляющего собственность последовательного кабеля.

руководство на упомянутый 1541, помимо команд для чтения и записи файлов, что можно было бы читать и записал бы в ее внутреннее пространство памяти. Еще более захватывающий был то, что можно было загрузить 6 502 кода в память диска и выполнять его там.

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

мой друг А записал дизассемблер в ОСНОВНОМ. и таким образом, я считал все его содержание ROM, который составлял 16 КБ из 6 502 кодов ЦП и пытался понять то, что они делают. ОС на диске была довольно удивительным и усовершенствованным IMO - это имело своего рода управление задачами, при этом команды были отправлены от блока связи до диска i/o обработчик задач.

я изучил достаточно, чтобы понять, как использовать диск i/o команды к секторам чтения-записи диска. На самом деле считав Apple] [книга DOS 3.3, которая объяснила все работы его формата диска и алгоритмов в большом количестве деталей, была большой справкой в понимании всего этого.

(я позже узнал, что, возможно, также нашел резервную-eng'd информацию о большем количестве 4032/4016 дисководов для "бизнес-" моделей Commodore, которые работавший довольно почти такой же как 1541, но это не было доступно мне как довольно разъединенный программист хобби в то время.)

Самое главное, я также изучил, как последовательный comms работал. Я понял, что последовательный comms, с помощью 4 строк, два для данных, два для квитирования, был запрограммирован очень неэффективно, все в программном обеспечении (хотя сделано правильно, с помощью классического последовательного квитирования).

Таким образом мне удалось записать намного более быструю comms стандартную программу, где я сделал зафиксированные предположения синхронизации, с помощью и данных и линии квитирования для передачи данных.

Теперь я смог считать и записать секторы и также передать данные быстрее чем когда-либо прежде.

, Конечно, было бы замечательно, если можно было бы просто загрузить некоторый код в диск, который ускоряет comms, и затем используйте нормальные команды для чтения файла, который в свою очередь использовал бы быстрее comms. Это было не возможно, тем не менее, поскольку ОС на диске не обеспечила рычагов для того (ум, что вся ОС была в ROM, немодифицируемом).

Следовательно я задавался вопросом, как я мог превратить свои увлекательные результаты в полезное приложение.

некоторое время уже являющийся программистом, имея дело с потерей данных все времена (музыкальные ленты и гибкие диски не были очень realiable тогда), я думал: Резервное копирование!

, Таким образом, я записал резервную программу, которая могла копировать гибкий диск в никогда - перед замеченной скоростью: первая версия действительно скопировала весь диск на 170 КБ только за 8 минут (да, минуты), вторая версия сделала это даже приблизительно за 4,5 минуты. Принимая во внимание, что приложения, прежде чем мой принял 25 минут. (Обратите внимание, Apple] [который имел ее диск ОС, работающая на Apple непосредственно с быстрым параллельным доступом к данным, сделала это все приблизительно за одну минуту).

И таким образом, FCopy для C-64 родился.

Это скоро стало чрезвычайно популярным. Не как резервная программа, поскольку я предназначил это, но как основной выбор для любого желающего скопировать игры и другое программное обеспечение для их друзей.

Оказался, что упрощение в моем коде, который просто пропустит нечитабельные секторы, пишущий сектор с плохим CRC к копии, действительно обходило большинство тогдашних используемых схем защиты от копирования, позволяя скопировать наиболее раньше uncopyable диски.

я попытался продать свое приложение и продал его на самом деле 70 раз. Когда это рекламировалось в журналах, утверждая, что это скопирует диск меньше чем через 5 минут, клиенты назвали бы и не верили бы этому, "зная лучше", что это не может быть сделано, все же дав ему попытку.

Не намного позже, другие начали перепроектировать мой приложение и оптимизировать его, делая comms еще быстрее, ведя к приложениям копии, которые сделали это даже за 1,5 минуты. Быстрее было едва возможно, потому что, из-за ограниченного объема памяти, доступного на 1541 и C-64, Вы несколько раз имели к дискам подкачки в диске отдельного диска скопировать всех 170 КБ его содержания.

В конце, FCopy и его оптимизированные преемники были, вероятно, большинством - популярное программное обеспечение когда-либо на C-64 в 80-х. И даже при том, что это не окупалось в финансовом отношении для меня, это все еще сделало меня гордым, и я узнал много об инженерном анализе, тщетности защиты от копирования и как слава чувствует. (На самом деле Jim Butterfield, редактор для журнала C-64 в Канаде, рассказал ее читателям мою историю, и скоро у него был чек приблизительно на 1 000 CA$ для меня - собранный журналом от многих благодарных пользователей, отправляющих $5 - чеки, который был большим набором денег тогда для меня.)

44
ответ дан 2 revs 26 November 2019 в 22:27
поделиться

Однажды, при игре Daggerfall II, я не мог предоставить Dai-катану Daedric так я отредактированный шестнадцатеричными числами savegame.

Являющийся серьезным, хотя, мне удалось удалить аппаратный ключ, проверяют мое использование установки AutoCAD пап SoftICE много лет назад. Это было, прежде чем Интернет был большим. Он работает инженером, таким образом, у него была законная копия. Он только что забыл аппаратный ключ в своем задании, и он должен был сделать некоторые вещи, и я думал, что это будет забавная проблема. Я был очень горд впоследствии.

9
ответ дан mannu 26 November 2019 в 22:27
поделиться

Самое болезненное для меня было для этого продукта, где мы хотели включать изображение в электронную таблицу Excel (несколько лет назад перед открытыми стандартами). Таким образом, я должен был добраться и "понимающий", существует ли такая вещь внутреннего формата для документов, также. Я закончил тем, что делал некоторое Шестнадцатеричное сравнение между файлами с и без изображения, чтобы выяснить, как поместить его там плюс работа над некоторой математикой с прямым порядком байтов....

7
ответ дан webclimber 26 November 2019 в 22:27
поделиться

Я когда-то работал над инструментом, который соберет информацию материально-технических ресурсов от ПК, поскольку она вошла в сеть. Идея состояла в том, чтобы отслеживать все ПК в Вашей компании.

у Нас было новое требование для поддержки сетевой системы Banyan VINES, теперь давно забытой, но довольно прохладной в то время, когда она вышла. Я не мог выяснить, как получить MAC-адрес Ethernet от адаптера Баньяна, поскольку не было никакого зарегистрированного API, чтобы сделать это.

Рытье вокруг онлайн, я нашел программу, которую некоторый другой компьютерный фанат Баньяна отправил, который выполнил это точное действие. (Я думаю, что это сохранило бы MAC-адрес в переменной среды, таким образом, Вы могли использовать его в сценарии). Я пытался писать в автора, чтобы узнать, как его программа работала, но он или не хотел говорить мне или хотел некоторую смешную сумму денег для получения информации (я не вспоминаю).

, Таким образом, я просто разжег дизассемблер и демонтировал его утилиту. Оказалось, что он делал один простой вызов к серверу, который был недокументированным функциональным кодом в API Баньяна. Я разработал детали вызова довольно легко, он в основном просил у сервера этот адрес рабочих станций через RPC, и MAC был частью адреса Баньяновой сети.

я тогда просто послал инженерам по электронной почте в Banyan и сказал им, что я должен был сделать. "Эй, кажется, что функция RPC номер 528 (или безотносительно) возвращает то, в чем я нуждаюсь. Это безопасно назвать?"

инженеры Баньяна были очень спокойны, они проверили, что функция, которую я нашел, была корректна и довольно вряд ли уйдет. Я записал свой собственный новый код для вызова его, и я был выключенным и рабочим.

несколько лет спустя я использовал в основном ту же технику для инженерного анализа недокументированной схемы сжатия на иначе зарегистрированном формате файла. Я нашел малоизвестный инструмент поддержки обеспеченным (ныне несуществующей) компанией, которая распакует эти файлы и перепроектировала его. Это оказалось очень простым вариантом Lempel-Ziv, примененным в блочной структуре их формата файла. Результаты той работы зарегистрированы для потомства в исходный код Wireshark, просто ищут мое имя.

7
ответ дан Tim Farley 26 November 2019 в 22:27
поделиться

Я записал драйвер для ST Atari, который поддерживал планшеты Wacom. Часть информации о Wacom могла быть найдена на их веб-сайтах, но я все еще должен был выяснить много самостоятельно.

Затем как только я записал библиотеку для доступа к wacom таблицам (и тестовое приложение для показа результатов) - это рассветало на мне, что не было никакого API для ОС (система управления окнами GEM) для фактической установки курсора мыши где-нибудь. Я закончил тем, что имел необходимость сцепить некоторые прерывания во что-то позвонившее VDI (как GDI в окнах) и бояться очень очень катастрофический отказ компьютер внутри там. У меня была некоторая справка (в форме предложений) от разработчиков ускоренной версии VDI (NVDI), и все было записано в PurePascal. У меня все еще иногда есть люди, спрашивающие меня, как переместить курсор мыши в GEM, и т.д.

4
ответ дан 26 November 2019 в 22:27
поделиться

Я должен был перепроектировать приложение обработки видеоданных, где у меня только была часть исходного кода. Мне потребовались недели и недели для ровной разработки потока управления, поскольку это продолжало использовать CORBA, чтобы назвать себя или быть названным от CORBA в некоторой части приложения, к которому я не мог получить доступ.

Чистая идиотия.

2
ответ дан Marcin 26 November 2019 в 22:27
поделиться

Я недавно записал приложение, которые загружают целое содержание с сервера Веб-почты Domino с помощью Завихрения. Это вызвано тем, что субподрядчик, выполняющий сервер, просит несколько сотен маркеров для каждого запроса на создание архива.

Они изменили свою версию веб-почты спустя приблизительно одну неделю после того, как я выпустил приложение для departement, но сумел сделать ее работающий снова использование Большого количества regex и XML

2
ответ дан Eric 26 November 2019 в 22:27
поделиться

У меня на самом деле есть другая история:

Несколько минувших лет моя история "успеха" FCopy, ко мне приблизился кто-то, кто спросил меня, если я мог бы взломать программное обеспечение автомата.

Это было в Германии, где почти каждый паб имел один или два из тех: Вы добавили бы немного денег, какие суммы приблизительно к американской четверти, затем они будут вращать три колеса и если бы Вы стали удачливыми с некоторым шаблоном, то у Вас затем был бы выбор "удвоиться или ничто" Ваша победа на следующей игре или получить текущую победу. Цель игры состояла в том, чтобы попытаться удвоить Вашу победу несколько раз, пока Вы не войдете в "серийный" режим, где любая последующая победа, неважно, как незначительный, получила бы Вас большая оплата (приблизительно 10 раз Ваших расходов на игру).

Трудность состояла в том, чтобы знать, когда удвоиться и если не. Для "постороннего" это было абсолютно случайно, конечно. Но оказалось, что те машины немецкого производства использовали простые псевдорандомизированные таблицы в своем ROMs. Теперь, если Вы следили за игрой машины за несколькими раундами, Вы были бы, мог бы выяснить, где этот "случайный указатель таблицы" был, и предскажите его следующее перемещение. Тем путем игрок знал бы, когда удвоиться и когда передать, ведя его в конечном счете к "большому ряду победы".

Теперь, это уже было общей вещью, когда этот человек приблизился ко мне. Была подземная сцена, которая имела доступ к ROMs в тех машинах, найдите таблицы и создайте программное обеспечение для компьютеров, таких как C-64 для использования для прогноза следующих перемещений машины.

Затем прибыл новый тип машины, тем не менее, которая использовала другой алгоритм: Вместо того, чтобы использовать pre-calc'd таблицы, это сделало что-то еще, и ни один из резидентных взломщиков не мог понять это. Таким образом, ко мне приблизились, будучи известен как своего рода гений начиная с моей известности FCopy.

Таким образом, я получил ROMs. 16 КБ, как обычно. Никакая информация о том, что это сделало и как это работало что. Я был самостоятельно. Даже код не выглядел знакомым (я знал 6502 и 8080 к тому времени только). После некоторого рытья и выяснения, я нашел, что это были 6809 (который я нашел, чтобы быть самым хорошим ЦП на 8 битов для существования, и который имел аналогии с 680x0 дизайн ЦП, который был намного более линейным, чем путаница инструкции x86 семейства).

К тому времени у меня уже было 68 000 компьютеров (я работал на компанию "Компьютер Gepard", который создал и продал такую машину, с ее собственным разработчиком ОС и, все), и был в программирование Modula-2. Таким образом, я записал дизассемблер для этих 6809, тот, который помог мне с инженерным анализом путем нахождения подпрограмм, переходы, и т.д. Замедлитесь, я получил идею управления потоком программы автомата. В конечном счете я нашел некоторый код, который был похож на mathmatical алгоритм, и он рассветал на мне, что это могло быть случайным генерирующимся кодом.

Поскольку у меня никогда не было систематического образования в информатике, до той поры я понятия не имел, как типичный randomgen, использующий mul, добавляют, и модификация работала. Но я не забываю видеть что-то упомянутое в книге Modula-2 и затем реализованный, каково это было.

Теперь я мог быстро найти код, который будет называть этот randomgen и учиться, какие "события" приводят к randomgen повторению, означая, что я знал, как предсказать следующие повторения и их значения во время игры.

То, что оставили, должно было выяснить текущую позицию randomgen. Я никогда не был хорош с абстрактными вещами, такими как алгебра. Я знал кого-то, кто изучил математику и был программистом также, все же. Когда я позвонил ему, он быстро знал, как решить проблему и quabbled много о том, как простой это должно будет определить значение семени randomgen. Я ничего не понял. Ну, я понял одну вещь: код для выполнения этого занял бы много времени, и что C-64 или любой другой компьютер на 8 битов займут часы если не дни для него.

Таким образом я решил предложить ему 1 000 DM (который был большим количеством денег для меня тогда), если он мог бы записать мне ассемблерную стандартную программу в 68 000. Не занимал у него много времени, и у меня был код, который я мог протестировать на своих 68 000 компьютеров. Это брало обычно между 5 и 8 минутами, который был приемлем. Таким образом, я был почти там.

Это все еще потребовало, чтобы портативные 68 000 компьютеров носились в паб, где автомат стоит. Мой компьютер Gepard ясно не имел портативного типа. Luckly, кто-то еще, которого я знал в Германии, произвел все 68 000 компьютеров на маленькой печатной плате. Для ввода-вывода это только имело последовательный comms (RS-232), и параллельный порт (Centronics была стандартом тех дней). Я мог поднять трубку приблизительно 9-вольтовый блок battieries к нему, чтобы заставить его работать. Затем я купил карманный компьютер Sharp, который имел резиновую клавиатуру и однострочный 32 дисплей символов. Работая от батарей, который был моим терминалом. Это имело коннектор RS-232, который я подключил к 68 000 плат. Sharp также имел некоторую энергонезависимую память, которая позволила мне хранить 68 000 случайно раскалывающегося программного обеспечения на Sharp, передавать его по требованию 68 000 компьютеров, которые затем вычислили значение семени. Наконец у меня был маленький принтер Centronics, который распечатал на узкой термо бумаге (который был размером какой использование кассовых аппаратов распечатать получения). Следовательно, после того как эти 68000 имели результаты, это отправит строку результатов для предстоящих игр на автомате в Sharp, который распечатал их на бумаге.

Так, к пустому из этих автоматов Вы работали бы с двумя людьми: Вы начинаете играть, записываете его результаты, один у Вас было минимальное количество игр, требуемых для вычисления семени, один из Вас перейдет к автомобилю, паркуемому снаружи, включит Sharp, ввести результаты, это имело бы 68 000 компьютерных скрежетов в течение 8 минут и прибыло печатный список предстоящих игровых выполнений. Затем все, в чем Вы нуждались, было этим крошечным листком бумаги, заберите его своему приятелю, который сохранил машину занятой, выровняйте прошлые результаты с распечаткой, и не больше, чем 2 минуты спустя Вы были "удивлены" выиграть небывалые 100 рядов с. Вы затем играли бы в эти 100 игр, практически освобождая машину (и если машина была пуста, прежде чем в эти 100 игр играли, Вы имели право ожидать ее, чтобы быть снова наполненным, возможно, даже возвратитесь на следующий день, тогда как машина была остановлена, пока Вы не возвратились).

Это не был Лас-Вегас, таким образом, Вы только получите приблизительно 400 DM из машины тот путь, но это были быстрые и верные деньги, и это было захватывающе. Некоторые владельцы пабов подозревали нас в обмане, но ничего не имели против нас из-за законов тогда, и даже когда некоторые вызвали полицию, полиция выступила за нас).

Конечно, компания по созданию слота скоро получила ветер этого и попыталась противодействовать, выключая те конкретные машины, пока новые ROMs не были установлены. Но первые несколько раз они только изменили числа randomgen. Мы только должны были овладеть новым ROMs, и мне потребовались несколько минут, чтобы найти новые числа и реализовать их в мое программное обеспечение.

Таким образом, это продолжалось некоторое время, во время которого меня и друзей просмотрел пабы нескольких городов в Германии, ища те машины, только мы могли расколоться.

В конечном счете, тем не менее, производитель машин изучил, как "зафиксировать" его: До тех пор randomgen был только усовершенствован в определенные предсказуемые времена, например, что-то как 4 раза во время игры, и еще раз на плеер, нажимающий из "двойной или ничто" кнопка.

Но затем они наконец изменили его так, чтобы randomgen постоянно опрашивался, означая, что мы больше не смогли предсказать следующее значение семени точно вовремя для нажатия кнопки.

Это было концом его. Однако, прилагая усилие записи дизассемблера только для этой единственной трещины, находя ключевые стандартные программы в 16 КБ кода ЦП на 8 битов, выясняя неизвестные алгоритмы, инвестируя довольно много денег, чтобы заплатить кому-то еще для разработки кода, который я не понял, найдя объекты для портативного высокоскоростного компьютера, вовлекающего "слепых", 68 000 ЦП с Sharp как терминал и принтер для удобного вывода, и затем на самом деле освобождающий машины сам, были одной из самых захватывающих вещей, которые я когда-либо делал со своими навыками программирования.

41
ответ дан 3 revs 26 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: