Jaki jest najfajniejszy hack, jaki widziałeś lub zrobiłeś? [zamknięte]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięty 9 lat temu .

Jako programiści, wszyscy zebraliśmy naprawdę fajny program lub poskładaliśmy jakiś sprzęt w ciekawy sposób, aby rozwiązać problem. Dzisiaj myślałem o tych hacków i jak niektóre z nich są przestarzałe przez nowoczesną technologię (na przykład, nie trzeba już hakować TiVo, aby dodać port sieciowy). W oprogramowaniu świat, bierzemy rzeczy takie jak przeciąganie i upuszczanie na stronie internetowej za pewnik teraz, ale nie tak dawno temu był to dość ekscytujący hack, jak również.

Jeden z najładniejszych hacków sprzętowych, jaki widziałem, został zrobiony przez byłego współpracownika w firmie telekomunikacyjnej lata temu. Miał mały przenośny TELEWIZOR w swoim biurze i oglądał go przez cały dzień podczas pracy. Aby uciec, podłączył przełącznik do włącznika / wyłącznika, który został aktywowany za pomocą stopy pod biurkiem.

Jaki jest najfajniejszy sprzęt czy włamanie do oprogramowania, które widziałeś lub zrobiłeś? Nad czym teraz pracujesz?

 38
Author: Robert S., 2008-10-10

30 answers

Przypominam sobie, że ten hack został napisany przez Boba Smitha, który zrobił starego Menedżera pamięci z epoki DOS o nazwie 386MAX (lub "386 to the Max"). To nie była część produktu, to był mały program użytkowy, który gdzieś wrzucił. Jednak w Internecie jedynym odniesieniem do tej techniki mogę znaleźć DDJ Undocumented Corner column from November 1996 by Robert Collins.

Problem

Przed wprowadzeniem przez Intela instrukcjiCPUID , było trudno sprawdzić dokładny typ i poziomy wersji procesora w systemie. Okazuje się, że w większości wersji 386 i późniejszych faktycznie istniał identyfikator procesora, ale był on widoczny tylko w określonym czasie: zaraz po zresetowaniu procesora w rejestrze EDX. (Zakładano, że BIOS komputera będzie jedynym oprogramowaniem prawnie tym zainteresowanym).

Problem: jak normalny program może odzyskać tę wartość rejestru, jeśli nie jesteśmy BIOSem?

Tło Materiał

Ten hack opierał się na sześciu osobliwościach komputerów kompatybilnych z IBM PC. Wyglądały następująco:

    Po uruchomieniu systemu IBM AT I później, istnieje sposób, aby niezależnie wyłączyć linię adresową A20 w magistrali.
  1. większość komputerów nie ma pamięci RAM zainstalowanej w bardzo wysokich adresach pamięci tuż pod ROM BIOS-u.
  2. większość komputerów IBM PC bus zwraca 0xFF po odczytaniu lokalizacji pamięci, która nie ma zainstalowanej pamięci tam.
  3. 0xFF 0xFF 0xFF etc jest nielegalnym kodem na procesorach Intel.
  4. jeśli zainstalujesz obsługę wyjątków w pamięci, przetrwa ona łagodny restart większości procesorów tej epoki (od 386 do 486).
  5. po resecie miękkim lub twardym procesory Intela przeskakują na adres, który znajduje się na górze pamięci adresowalnej, minus 16 bajtów, dlatego umieszczony jest tam ROM BIOS-u.

Program połączył wiedzę o wszystkich tych ciekawostkach, aby osiągnąć cel.

The Hack

Rezultatem był program wiersza poleceń DOS, który wykonał następujące czynności:

  • zainstalowano nielegalną obsługę wyjątków opcode
  • wyłączono linię adresową A20 w magistrali
  • W 2007 roku firma została założona przez firmę Microsoft.]}

Gdy nastąpi soft restart, procesor będzie próbował przeskoczyć na górę pamięci minus 16 bajtów, czyli tam, gdzie znajduje się kod startowy ROM. Jednak skoro A20 był wyłączony, to faktycznie przeskoczy do Góra pamięci minus 16 bajtów minus jeden megabajt . Na większości komputerów nie ma tam pamięci RAM. Pobierze więc serię 0xFF bajtów z nieistniejącej pamięci RAM i spróbuje ją wykonać. Spowoduje to utworzenie nielegalnego wyjątku kodu opcode.

Jego obsługa wyjątków wyrwała wartość EDX (CPUID) i ukryła ją gdzieś, gdzie mógłby ją znaleźć. To wtedy posprzątać bałagan (włączyć A20 z powrotem, odwrócić z trybu chronionego do trybu rzeczywistego Dla DOS) i powrót kontroli do oryginalny kod.

Kiedy to działało, to było genialne patrzeć. Voila, tutaj był prosty program DOS linii poleceń, który dałby ci wartość CPUID.

Oczywiście, nieuchronnie istniały komputery, które były "nie do końca kompatybilne", które strasznie się rozbijały, gdy to uruchomiłeś. No cóż.

 49
Author: Tim Farley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 19:47:01
 54
Author: Tom Ritter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 00:02:15

Cóż, nie jest najfajniejszy, ale zdecydowanie zabawny (dla programistów).

Zbudowaliśmy kreator zapytań ad-hoc dla projektu bazy danych CV. Było kilka ajaxy Części do niego i podstawową ideą było to, że jeśli zmienisz cokolwiek na stronie, wyszukiwanie automatycznie ponownie uruchomić się. (Zostało wywołane przez zdarzenie onBlur wszystkich widżetów interfejsu użytkownika)

Więc nie mieliśmy rzeczywistego użytku dla przycisku" Szukaj "lub" uruchom zapytanie". To zdezorientowało użytkowników bez końca. Więc dodaliśmy wyszukiwanie guzik, który nic nie zrobił. Po prostu tam siedział.

Zadziałało, ponieważ za każdym razem, gdy kliknąłeś przycisk wyszukiwania, Zdarzenie onBlur z pola, na którym właśnie byłeś, wybuchało.

To sprawiło, że nasza baza użytkowników była bardzo szczęśliwa. Proste rzeczy.
 41
Author: Zachary Yates,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:47:29

To nie był hack, który zrobiłem, ale raczej ktoś, dla którego pracowałem dawno temu, powiedział mi o tym(on rzeczywiście zrobił hack).

Wygląda na to, że pracował dla kogoś, kto był ślepy i potrzebował sposobu na czytanie plików tekstowych. Więc wymyślił, jak przetłumaczyć pliki tekstowe na alfabet braille ' a i wydrukować je za pomocą różnych znaków, takich jak . oraz:

Drukarki w tym czasie były drukarkami uderzeniowymi, więc kiedy drukowano znak, mechanizm drukujący uderzył w papier na tyle mocno, że zostawił wrażenie, które można było odczuć. Ponieważ wrażenie powstało na odwrocie papieru, musiał wydrukować odwrócony do tyłu brajl, aby po obróceniu papieru był poprawny.

Oczywiście akt czytania wyeliminował depresje, więc był to mechanizm read-once, ale zawsze uważałem, że to całkiem fajny hack.

 32
Author: Ferruccio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 21:36:16

Podczas pracy nad odwróconą inżynierią iPhone ' a znalazłem lukę w paśmie podstawowym (chip obsługujący telefonię i blokadę nośnika), która pozwoliłaby dowolnie zapisywać zera. Chociaż początkowo wydawało się to bezużyteczne, szybko okazało się, że może to zrobić znacznie więcej, niż początkowo myślałem. Przy sposobie działania ARM, pewne skoki mogą zostać anulowane przez zapisanie pojedynczego zera w celu, co spowoduje, że ścieżka wykonania będzie zawsze kontynuowana do przodu. Umożliwiło to odblokowanie oprogramowania, ale szybko zostało zastąpione przez bardziej solidny hack, który pozwolił całkowicie odtworzyć baseband.

Nadal cholernie dumny z tego hacka, niezależnie od jego bezużyteczności teraz.

 24
Author: Serafina Brocious,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:55:31

Zrobiłem licznik dzielenia przez osiem z zaworów pneumatycznych w college ' u, aby uzyskać zwolnienie z pozostałej części kursu pneumatyki.

 16
Author: Diodeus - James MacFarlane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:09:25

To taka trywialna rzecz, ale kiedy po raz pierwszy zobaczyłem ten kod (przez mojego kolegę dewelopera) byłem w szoku, ponieważ jest to coś, o czym nigdy bym nie pomyślał (komentarze dodane przeze mnie):

cglobal x264_sub8x8_dct_sse2, 3,3  ;3,3 means 3 arguments and 3 registers used
.skip_prologue:
    call .8x4
    add  r0, 64                    ;increment pointers
    add  r1, 4*FENC_STRIDE
    add  r2, 4*FDEC_STRIDE
.8x4:
    SUB_DCT4 2x4x4W                ;this macro does the actual transform
    movhps [r0+32], m0             ;store second half of output data
    movhps [r0+40], m1             ;the rest is done in the macro
    movhps [r0+48], m2
    movhps [r0+56], m3
    ret

Wykonuje 8x8 bloku 4 transformuje wykonując zestawy 8x4 na raz. Ale nie wkleja kodu dwa razy (co marnuje rozmiar kodu), nie ma też funkcji 8x4 i wywołuje go dwa razy. Nie ma też pętli. Zamiast tego wywołuje "funkcję", a następnie zwiększa pointers, a następnie "spada" prosto do niego i robi to ponownie.

Otrzymuje to, co najlepsze z obu światów: żadna funkcja wywołująca overhead poza oryginałem (ponieważ wskaźniki r0, r1 i r2 nie są inkrementowane w SUB_DCT4) i Brak duplikacji kodu, i Brak overhead pętli.

 15
Author: Dark Shikari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 00:26:49

Tego lata napisałem grę, którą nazywam SatelliteRush. Jest to gra Breakout dla telefonów komórkowych z Java i GPS. Można grać w dwóch trybach: "nudny tryb" i "tryb satelitarny". W trybie nudnym używasz przycisków do poruszania wiosłem, jak zwykle, ale w trybie satelitarnym wykorzystuje Odbiornik GPS telefonu. Biegasz tam i z powrotem, a wiosło porusza się razem z Tobą.

Testowałem go tylko na Sony-Ericssonie W760i i działa dość dobrze, biorąc pod uwagę, że aktualizacje pozycji GPS są raczej powolne i niewytłumaczalne.

Do tej pory zrobiłem "techniczną wersję testową" tej gry, więc nie jest zbyt ładna i łatwa w użyciu. Ale jeśli masz telefon GPS z Javą możesz go pobrać tutaj: http://www.lysator.liu.se / ~ padrone / temporary / SatelliteRushTest /

EDIT:

Teraz dostępna dla Androida jako darmowa aplikacja na Android Market: https://market.android.com/details?id=se.nekotronic.satelliterush

 15
Author: Thomas Padron-McCarthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-13 17:56:58

Urządzenie Duffa . Czy to się liczy? :)

 11
Author: Gabriel Isenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 21:27:39

Urządzenie Duffs , na powyższe pytanie.

Historia Mel . Hardcore hack.

 10
Author: Paul Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 19:04:54

OtrzymaĹ 'em wczesny komputer Commodore 64 i potrzebowaĺ' em napisaÄ ‡ do niego kod montaĺźowy.

Problem polegał na tym, że nie było żadnego programu asemblera dla C64 (albo To, albo nie było mnie na niego stać).

Więc napisałem asembler, szukając w książce kodów 6502 i tworząc program z nieprzetworzonych bajtów.

W pewnym momencie był w stanie wziąć kod asemblera jako swój wkład i zmontować go do programu.

Mój przyjaciel napisał disassembler dla swojego zwierzaka w BASIC. Użyłem tego programu do demontażu mojego asemblera, a następnie byłem w stanie użyć mojego asemblera do zmontowania nowszych wersji siebie.

Oh, the hoops we had to jump through in the old days:)

 10
Author: Alan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 00:25:18

Najfajniejszy hack (i nie jest to tak naprawdę hack w prawdziwym tego słowa znaczeniu, ale przechodzi tak samo jak niektóre z powyższych odpowiedzi), jakie kiedykolwiek stworzyłem był na moim Apple / / e.

W podręczniku referencyjnym była jedna linijka, która mówi, że $C010 jest flagą 'any key down'.

Co okazało się prawdą. Wysoki bit miękkiego przełącznika $C010 powie Ci, czy klucz jest wyłączony, czy nie, pomimo wbudowanego sprzętu do powtarzania kluczy.

Czego Ci nie powiedzieli i wszyscy dowiedzieli się, że trudnym sposobem było to, że nie było wiarygodnego sposobu, aby dowiedzieć się, jaki klucz został wciśnięty.

Jeśli napisałeś mały program do montażu... (pardon my mistakes, my 6502 assembly is a lot rusty)

  :1
  lda $C010
  cmp #$80
  bcc :1  ; branch if less than? I forget how to do that.
  lda $C000
  jsr $FDF0   ;output the accumulator value to the screen

Więc to będzie pętla, dopóki nie naciśniesz klawisza i będzie wyjście klawisza przez wczytywanie z $C000 klawiatura read switch.

Ale gdybyś uruchomił ten program, nie działałby dobrze.

To na pewno wydrukować coś, gdy Trzymając klucz w dół i nic, gdy nie było, ale było małe opóźnienie w autobusie gdzieś (myślę, że nie jestem facetem od sprzętu), więc jeśli naciśniesz 'f', dostaniesz dużo F. ale jeśli zatrzymasz się, a następnie naciśniesz 'g', dostaniesz kilka 'f', zanim przełączy się na 'g'.

[[2]} można było zobaczyć dowody tego problemu w apple] [Wersja Gauntlet, poruszałeś się w jednym kierunku, a jeśli próbowałeś poruszać się w drugim kierunku, poruszałeś się trochę w oryginalnym kierunku, aż minąłeś opóźnienie.

To nie miało sensu naprawdę, bo odczyt $C000 zawsze był w 100% dokładny, chyba że najpierw podałeś $C010.

Uważam ten problem za fascynujący i po tygodniach grania w końcu wpadłem na to, co nadal uważam za najfajniejszy program, jaki kiedykolwiek napisałem.

Sam program nie miał sensu, zrobił kilka bezużytecznych ORA, ale z jakiegoś powodu zadziałał i uzyskał poprawne wartości z $C000 po zapytaniu $C010.

Super było, napisałem artykuł dla magazynu nibble, który zaakceptowali ale nigdy nie opublikowane (albo dlatego, że wyszedł z biznesu lub ponieważ artykuł czytany tak, jakby został napisany przez 15-latka, co było) , gdzie napisałem program wprowadzania klawiatury zastępczej i podłączył go do zerowej lokalizacji strony, że każdy dzwoni, aby uzyskać wejście klawiatury i byłem w stanie programowo zmienić opóźnienie powtarzania klawiatury i częstotliwość powtarzania, coś, co w przeciwnym razie było niemożliwe, ponieważ było podłączone do sprzętu. Oczywiście Jabłko / / e było w tym momencie w drodze, ale do dziś mój najfajniejszy hack.

Update 3/2/2010: przeglądając stare papiery, znalazłem Wydruk mojej małej procedury montażu. Zamieszczam go tutaj, aby zobaczyć, czy ktoś może dowiedzieć się, dlaczego to działa, i tak będzie na zawsze zapisany w formie cyfrowej gdzieś...

$0300  AD 10 C0  LDA $C010  ; load accumulator with any-key-down flag
$0303  29 80     AND #$80   ; keep only high bit flag
$0305  0D 00 C0  ORA $C000  ; OR accumulate with keyboard soft switch
$0308  10 F9     BPL $0303  ; erm, I forget exactly which branch this is
$030A  09 80     ORA #$80   ; turn the high bit on 
$030C  20 ED FD  JSR $FDED  ; print char in accumulator
$030F  4C 00 30  JMP $0300  ; start again.

Nie ma sensu, dlaczego to powinno działać, ale tak jest. Albo tak. 25 lat temu.

 9
Author: stu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-03 02:24:35

Szybki Odwrotny pierwiastek kwadratowy -- dziwna mała rutyna, która jakoś udaje się obliczyć odwrotny pierwiastek kwadratowy czegoś, ale nigdy nie zgadniesz, że patrząc na to.

Http://betterexplained.com/articles/understanding-quakes-fast-inverse-square-root/

 8
Author: Asmor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 00:33:44

[4]}Mój przyjaciel wymieniał płytę główną w swoim Dell na nowszą, szybszą płytę główną OEM. Nie mógł jednak uruchomić przycisku zasilania i innych rzeczy na panelu przednim-złącza były różne rozmiary, z różnymi układami pinów. Wziąłem kilka zapasowych zworek i zapasowe przewody, i podłączyłem odpowiednie Szpilki jeden po drugim. Nie wymaga lutowania:)

/ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / Zawsze myślałem, że nie ma eleganckiego sposobu na określenie, czy fork ed dziecko pomyślnie exec ed, ale tam rzeczywiście jest .

Dziecko:

execvp(argv[0], argv);
errval = errno;
write(data->fd, &errval, sizeof(errval));

Rodzic:

socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
flag = fcntl(fds[1], F_GETFD) | FD_CLOEXEC;
fcntl(fds[1], F_SETFD, flag);
pid = clone(child, NULL, SIGCHLD, NULL);
if(pid < 0){
        ...
}
close(fds[1]);
/* Read the errno value from the child, if the exec failed, or get 0 if
 * the exec succeeded because the pipe fd was set as close-on-exec.
 */
n = read(fds[0], &ret, sizeof(ret));
if (n < 0) {
        ...
} else if(n != 0){
        /* exec failed */
} else {
        /* exec succeeded */
}
 8
Author: ephemient,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:37:06

Kontroler dysku Steve ' a Woźniaka .

 8
Author: Martin Cote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:51:31

Zostaliśmy skompromitowani w małej firmie, w której pracowałem przez jakichś rzekomo rosyjskich hakerów. Ja i kilku innych programistów chciałem zobaczyć jak, więc ściągnąłem najbardziej elegancki skrypt PHP, jaki kiedykolwiek widziałem z naszego serwera i natychmiast usunąłem go z naszej maszyny NA ŻYWO.

To był koń trojański o nazwie c99shell który zrobił tak wiele z tak mało, że był jednocześnie okropny i piękny. Rzecz miała wbudowany GUI z obrazami używającymi base64 do wyprowadź je z PHP, aby wszystko było samodzielne. Lista funkcji była chora! To coś może uruchomić powłoki, przeskanować łańcuchy połączeń, zablokować się i wiele innych przydatnych rzeczy dla atakującego.

To było piękne.

Wszyscy w biurze myśleli, że zwariowałem, ale naprawdę, naprawdę ten kod miał sporo myśli włożonej w to. Zachowywali Mały Rozmiar pliku, aby wymknąć się poza te brzydkie limity wysyłania, a nawet mieli zakodowaną wiadomość e-mail base64 powiadomienie, które zebrało wszystkie informacje dla atakującego.

 8
Author: willasaywhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 19:30:31

Urządzenie Tesli ustanowiło rekord piorunów stworzonych przez człowieka (42 metry lub 130 stóp) i wszystkie światła w Colorado Springs zgasły.

 8
Author: Serhat Ozgel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 08:23:41
 8
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 19:12:08

Powiedziałbym ci, ale mogą chcieć z powrotem mój dyplom z liceum, jeśli się do niego przyznam;)

 7
Author: tloach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:55:29

W czasach DOS-u napisałem program skryptowy, aby zademonstrować oprogramowanie mojej firmy. Ten program skryptowy uruchamiałby aplikację, a następnie wyskakiwał okna na górze aplikacji, opisywał niektóre z jej funkcji za pomocą animowanego typu, następnie zamykał okno, podawał naciśnięcia klawiszy do aplikacji, czekał, aż aplikacja wyświetli właściwy ekran, a następnie wyskakiwał więcej okien. Miał swój własny język skryptowy, a nawet Edytor skryptów, więc mogłem przerwać skrypt, edytować go, a potem wznowić prowadzenie. Najlepsze jest to, że działał on na niezmodyfikowanej wersji naszej aplikacji.

Cała aplikacja demo została napisana w języku C i assembly. Podłączył timer i przerwy klawiatury w celu interakcji z aplikacją. Napisałem wszystko, łącznie z biblioteką okien.

 6
Author: Kluge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 20:50:22

Kiedyś zhakowałem prosty wiersz poleceń w stylu dos Dla psion 3a podczas wykładu uniwersyteckiego. To może zrobić tylko podstawowe listy katalogów, przeglądanie, kopiowanie i przenoszenie , ale wyglądał na Część-Pełny ekran mała czcionka.

Oh, I zaprogramowałem ponga na 68008 z garnkami na wejście i oscyloskopem na wyjście. Nie tak trudno używać dev board, ale było coś fajnego w odtwarzaniu go na osc.

 5
Author: Draemon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 18:09:59

Nie zrobiony przeze mnie, oczywiście, ale natknąłem się na niego niedawno i wyglądał fajnie:

Autodruk Gra życia w C#

"Gra życia Conwaya fascynuje informatyków od dziesięcioleci. Mimo że jego zasady są śmiesznie proste, wszechświat Conwaya daje początek różnym szybowcom, statkom kosmicznym, oscylatorom, działom szybowcowym i innym formom "życia". Programy do samodzielnego drukowania są równie ciekawe i-dość zaskakujące - zajmują ważne miejsce w teorii obliczeń.

Co się stanie, gdy połączysz te dwa? Zaraz się przekonasz, ale jedno jest pewne: współczynnik geekiness powinien być dość wysoki.

Napisałem mały program C#, który zawiera siatkę Game-of-Life. Program rozszerza siatkę gry do następnej generacji i drukuje kopię siebie, wraz z aktualizacją siatki. Możesz pobrać wynik, skompilować go za pomocą kompilatora C#, uruchomić go, a otrzymasz następną generację gry. Można iterację procesu, lub ręcznie Zmień początkowy stan siatki. "

Skorzystaj z powyższego linku, aby uzyskać kod źródłowy.

 5
Author: Evgeny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 05:38:43

Napisałem prosty plik wsadowy systemu Windows, aby umożliwić mi szybkie odtwarzanie utworów pasujących do jakiegoś wzorca z mojej biblioteki muzycznej (na dysku f:) na boleśnie wolnym komputerze (otwieranie iTunes trwa około 3 minut na tym komputerze!). Obsługuje wyrażenia regularne za pomocą polecenia findstr i używa MPlayera do odtwarzania ścieżek. Wszystko co muszę zrobić to nacisnąć Windows + R i wpisać:

play u2

Lub:

play "neighbo.+rhood"

Lub:

play "blink[0-9][0-9][0-9]"

Plik wsadowy jest taki, w play.bat.

cd /d f:
findstr /I /R %1 dirlist.txt > playlist.txt
mplayer -playlist playlist.txt

Zarówno mplayer, jak i play.bat powinny być dodane do twojej ścieżki.

 5
Author: Liam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 21:13:00

Napisałem asembler dla małej maszyny Wirtualnej (UDVM) z Excelem i Visual Basic. Piszesz kod złożenia w komórkach Excela i układzie pamięci w innym arkuszu, a następnie na dole zostaną obliczone ciągi binarne kodu maszynowego. Wyobraź sobie strach przed ręcznym składaniem za każdym razem, gdy zmieniasz kod złożenia.

 4
Author: yogman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 19:59:29

Po kilku dniach debugowania serwera dial-up, który doświadczał niedopuszczalnej liczby przerwanych połączeń, wyśledziłem problem do domowego mechanizmu uwierzytelniania, który zależał od tekstowej reprezentacji działającego PID getty. getty generuje błąd i przerywa, jeśli jego PID zawiera parzystą liczbę, po której następuje 9, powodując opuszczenie wywołania, a getty odradzanie się z nowym PID.

Po zidentyfikowaniu problemu, zostałem usunięty z projektu, a później okazało się, że "poprawka" polegała na zmianie konwersji numerycznej na tekst z

sprintf(strval, "%d", pid);

Do

sprintf(strval, "%o", pid);

Zamiast rozwiązywać problemy z uwierzytelnianiem, ktoś zdecydował się przekonwertować PID na ósemkowy , uniemożliwiając umieszczenie 9!

 4
Author: Adam Liss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-02 10:38:19

I program do samodzielnego drukowania ('quine') w C#, 149 znaków:

C # Quine

class P{static void Main(){var S=“class P{{static void Main(){{var S={1}{0}{1};System.Console.Write(S,S,’{1}’);}}}}”;System.Console.Write(S,S,‘”‘);}}
 4
Author: Evgeny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 05:47:44

Kilka lat temu rozwijałem interfejs WWW i używałem całkiem nowych bibliotek JS dla funkcjonalności AJAX. Lib tylko eval ' d JS, który był w nagłówku HTML doc, ale było zbyt dużo danych zwracanych, aby zmieścić się w nagłówku. Co robić?

Niektóre szperacze ujawniły, że JS w nagłówku miał dostęp do treści dokumentu html, więc napisałem ogólną funkcję "eval The body", która została zwrócona w nagłówku. Bardzo przydatne w tym czasie, zwłaszcza B / c inny js lib we ocenialiśmy tylko eval ' d JS z ciała, więc było to zgodne dla obu bibliotek JS i unikało ograniczeń rozmiaru z nagłówka!

Tak, proste, ale czułem się świetnie przez cały miesiąc po tym, jak to rozgryzłem:)

 4
Author: Jason Peacock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 10:32:51

Widząc mojego byłego kolegę z pracy przepisującego silnik playstation one 3D w ciągu trzech tygodni od zera w asemblerze. Stary był powolny i nie mieliśmy czasu na zmianę zasobów graficznych. Zaczął to przepisywać dwa miesiące przed terminem.

To był ten sam facet (i kilku innych kolesi, jak również-to był akt pracy zespołowej), który wykonał niesamowitą pracę włożenie 10 minut grafiki i dźwięku do pliku wykonywalnego 64kb.

Http://pouet.net/prod.php?which=1221

 3
Author: Nils Pipenbrinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 00:15:38

Kiedy patrzyłem jak używać TCP W 4D, natknąłem się na tę odmianę urządzenia Duff w dokumentacji:

$SentOK:=False  //A flag to indicate if we made it through all of the calls
Case of 
   : (SMTP_New ($smtp_id)!=0)
   : (SMTP_Host ($smtp_id;<>pref_Server)!=0)
   : (SMTP_From ($smtp_id;vFrom)!=0)
   : (SMTP_To ($smtp_id;vTo)!=0)
   : (SMTP_Subject ($smtp_id;vSubject)!=0)
   : (SMTP_Body ($smtp_id;vMessage)!=0)
   : (SMTP_Send ($smtp_id)!=0)
Else 
   $SentOK:=True  //message was composed and mailed successfully
End case 
If ($smtp_id!=0)  //If a Message Envelope was created we should clear it now
   $OK:=SMTP_Clear ($smtp_id)
End if 

Spojrzałem na to i pomyślałem, że to naprawdę sprytne (nadal to robię). Niestety nie tego potrzebowałem i nigdy nie miałem okazji go użyć.

 3
Author: 3Doubloons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-28 05:46:12

Nie przeze mnie:

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
  int i;

  printf("((((");
  for(i=1;i!=argc;i++){
    if(     strcmp(argv[i], "^")==0) printf(")^(");
    else if(strcmp(argv[i], "*")==0) printf("))*((");
    else if(strcmp(argv[i], "/")==0) printf("))/((");
    else if(strcmp(argv[i], "+")==0) printf(")))+(((");
    else if(strcmp(argv[i], "-")==0) printf(")))-(((");
    else                             printf("%s", argv[i]);
  }
  printf("))))\n");
  return 0;
}
 3
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 21:35:30