Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Złam Nasze Crackme!


Rekomendowane odpowiedzi

Opublikowano

To "nigdy się nie wykona" to było myślenie w stylu języków wysokopoziomowych :]

 

Patrzyłem jak na JUMP jak na funkcję IF, więc przez ''zawsze się wykona'' miałem na myśli fragment bezpośrednio pod nią :) I myśląc wysokopoziomowo, szukałem jakiejś specjalnej instrukcji ku temu...

Oczywiście wystarczy tam NOP.

 

Co do olly:

- Dlaczego niektóre adresy są na szaro?

- Wyszukuję sobie intersującego stringa. Jak prześledzić, gdzie jest on używany?

 

 

Co do pierwszego CrackMe wrzuconego przez Osamę, "crackme2nap.exe":

Scrackowałem go właśnie tym JE -> NOP, żeby przyjmował każde hasło... Ale w jaki sposób o.O wydobyliście informację o: samym poprawnym haśle, to jest procedurze odwracającej stringa i przyrównującego go do 'ToNieHasło!'?

 

@mirraseq:

Wielkie dzięki za odpowiedzi.

 

@adwi32:

Również wielkie dzięki, minus dany przez misslick (małe te ikonki jak nie wiem), dałem więc plusy w całym tym temacie.

A sygnaturę raportuj, pieniaczu :P jeśli myślisz, że wcześniej na ten temat z Makinem nie rozmawiałem...

Ta sygnatura jest pusta.

  • Odpowiedzi 241
  • Dodano
  • Ostatniej odpowiedzi
Opublikowano

Nie rozumiem...? To albo jest bardzo trudne, albo jest bardzo łatwe? oO

Niezabezpieczony = skrypt dodany na końcu pliku w postaci zwykłych stringów, można go odczytać nawet notatnikiem.

Zabezpieczony = skrypt jest dodawany na końcu pliku w postaci hashu md5. Na końcu pliku też jest hasło, też zahashowane md5. Można spróbować je zbruteforcować lub podmienić je na hash spacji i użyć Aut2Exe. Ten sposób działa jedynie w starej wersji autoita w najnowszej nie da się czegoś takiego zrobić.

RAsfepN.png
Opublikowano

jak to zahasowane ?? Hashu nie da się odszyfrować , żeby coś było wykonane musi być odszyfrowane czyli da się to zrobić choć będzie to trudne

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

<facepalm> co ja odpierdoliłem, wybaczcie mi ale dawno tego nie robiłem bo już to nie działa...

 

Krok po kroku:

1. Wkładasz Exe2Aut w olly.

2. Stawiasz breakpointa na 0x00402064

3. Debugujesz, klikasz convert w Exe2Aut.

4. Wpada na breakpointa

5. Powinniśmy znaleźć hash tekstu, który wprowadziliśmy przy dekompilacji. Jak dobrze pamiętam to będzie on w adresie EBX+ESI

6. Zamieniamy go na ten, który znaleźliśmy w pliku(w najnowszej wersji nie znajduje się już w tym miejscu więc nie będę nawet mówił gdzie był bo po co -.^).

7. Przechodzimy za breakpointa i już mamy zdekompilowany skrypt.

 

Nie wiem czy dobrze i czy czegoś nie ominąłem bo nie mam na czym sprawdzić.

RAsfepN.png
Opublikowano

Odnośnie crackme mirraseq'a, małe info:

 

 

 

Exit bypass:

 

- 0x44F516 ( E8 21 74 FB FF ) 5x NOP // MessageBoxA

- 0x450C28 ( 6A 01 ) 2x NOP // PUSH 1

- 0x450C2A ( E8 4D 56 FB FF ) 5x NOP // ExitProcess

 

Wskazówki odnośnie hasła:

 

- conajmniej 16 znakowe

0x450DE6 |. 83F8 10 CMP EAX,10h ( niżej linijki odpowiedzialne za 'sprawdzanie' hasła )

- program sam się modyfikuje

0x450E7E |. 8902 MOV DWORD PTR DS:[EDX],EAX ( eax = 1 OK )

 

Aa no i nie ma ustalonej liczby dobrych haseł - jest ich nieskończoność :)

 

Przykładowe działające hasełko: Ce682WzZTa5Xe9ib1ec8c33660cDa B)

 

Jutro większy fragment jak to rozgryźć xD

 

 

Opublikowano

Crackme3Dev-cpp.exe, by Osama:

 

 

00401505     74 33          JE SHORT Crackme3.0040153A               ;  JNZ na JE

 

 

Wiem, że było, wisi mnie to, pierwsze własnoręcznie złamane crackme, więc wiecie!

 

Ale jak zdobyć poprawne hasło...? :( Gdyby ktoś się pokusił na drobną solucję nt. tego lub crackme2nap.exe, może sam Osama...? :D

Ta sygnatura jest pusta.

Opublikowano

JE lub JZ , musisz znać assemblera

 

wiesz czemu jz i je są takimi samymi operacjami ?

 

Obejrzyj film do którego dałem ci link, i miej cały czas pprzy sobie jakas sciąge ( znaczenie rejestrów,działanie instrukcji)

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

JE - Jump Equal,

JZ - skok, gdy ZF = 1; (cokolwiek to znaczy)

 

Film od ciebie mi niestety nie śmiga, a net jest tymczasowo zbyt wybredny, żeby móc go pobrać :( podejdę do niego później

 

Na razie kolejne pytania (naprawdę, mam nadzieję,że ktoś się pokusi o odpowiedzi ;]):

- Czym się różnicy CMP od TEST ?

Jak mam rozumieć linijkę* " TEST ESI, ESI " ? Porównanie zmiennej samej do siebie?

 

* jak to się fachowo nazywa?

 

@edit:

 

JE == JZ, bo 'linijka' CMP/TEST działa na zasadzie odejmowania dwóch skladników, a ZF == Zero Flag, zawiera informację nt. 'zerowości' jakiegoś ważnego miejsca pooperacyjnego*..., zaś

x - y = 0 <=> x = y

 

* becomes 1 if an operation results in a 0 writeback, or 0 register -> i znów, cokolwiek to znaczy cry-7331.gif

Ta sygnatura jest pusta.

Opublikowano

Test robi to co AND tylko nie zapisuje wyniku, tak mi się przynajmniej wydaje lub gdzieś tak wyczytałem, chyba u rudego.

RAsfepN.png
Opublikowano

fachowo to instrukcja procesora lub mnemonik

 

W moim filmie masz opis tez funkcji test

 

"test eax,eax

 

służy to do sprawdzania czy w eax jest zero

 

coś ta instrukcja jest historycznie szybsza niż cmp bo coś tam"

 

cytuje gyna moge się pomylić

 

 

TEST x,x służy do sprawdzania czy wartość to zero

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

"test eax,eax , jezeli eax będzie zero to flaga zf będzie zapalona"

 

cokolwiek innego to flaga nie będzie zapolona

 

test ze względów historycznych jest szybsze niż cmp i tego głównie się używa

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

CrackMe mirraseq'a kompletne rozwiązanie:

 

 

 

Po wpisaniu złego hasła pokazuje nam MessageBox'a, więc wszystkie calle na msgboxy obstawiamy breakpointami, wpisujemy hasło. Przeniosło nas do 0x450C23

 

Nopujemy 2 poniższe linijki - push 1 i call exitprocess. Przechodzimy na początek tej funkcji ( 0x450BF8 ) i dajemy ctrl+r (olly).

 

Mamy 3 wywołania tej funkcji, obstawiamy wszystkie breakpointami, wpisujemy hasło jeszcze raz.

 

00450C54  /$  55            PUSH EBP                                 ; crackme2.00450C54(guessed Arg1)
00450C55  |.  8BEC          MOV EBP,ESP
00450C57  |.  6A 00         PUSH 0
00450C59  |.  6A 00         PUSH 0
00450C5B  |.  6A 00         PUSH 0
00450C5D  |.  33C0          XOR EAX,EAX
00450C5F  |.  55            PUSH EBP
00450C60  |.  68 E10C4500   PUSH crackme2.00450CE1
00450C65  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00450C68  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP               ; Installs SE handler 450CE1
00450C6B  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
00450C6E  |.  83E8 01       SUB EAX,1                                ; Switch (cases 0..2, 4 exits)
00450C71  |.  72 07         JB SHORT 00450C7A
00450C73  |.  74 1F         JE SHORT 00450C94
00450C75  |.  48            DEC EAX
00450C76  |.  74 36         JE SHORT 00450CAE
00450C78  |.  EB 4C         JMP SHORT 00450CC6
00450C7A  |>  A1 902D4500   MOV EAX,DWORD PTR DS:[452D90]            ; Case 0 of switch crackme2.450C6E
00450C7F  |.  50            PUSH EAX                                 ; /Arg2 => crackme2.450A80
00450C80  |.  8D45 FC       LEA EAX,[EBP-4]                          ; |
00450C83  |.  50            PUSH EAX                                 ; |Arg1
00450C84  |.  E8 D7FEFFFF   CALL 00450B60                            ; \crackme2.00450B60
00450C89  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00450C8C  |.  50            PUSH EAX                                 ; /Arg1 => 0
00450C8D  |.  E8 66FFFFFF   CALL 00450BF8                            ; \crackme2.00450BF8
00450C92  |.  EB 32         JMP SHORT 00450CC6

 

Wylądowałem na 0x450C8D, jak widać nie ma tu nic ciekawego oprócz switcha, który zależy od argumentu przesłanego do funkcji, jeśli będzie to 1 to OK, jeśli nie..

 

Ponownie szukamy wszystkich wywołań tej funkcji ( 0x450C54 - są dwa ) i obstawiamy breakpointami.

 

Oba wywołania są w tej funkcji:

00450D84  /$  B8 D1D8FCF9   MOV EAX,F9FCD8D1                         ; crackme2.00450D84(guessed Arg1,Arg2)
00450D89  |.  48            DEC EAX
00450D8A  |.  74 1A         JE SHORT 00450DA6
00450D8C  |.  75 07         JNE SHORT 00450D95
00450D8E  |.  31C0          XOR EAX,EAX
00450D90  |.  83F8 01       CMP EAX,1
00450D93  |.  7C 11         JL SHORT 00450DA6
00450D95  |>  31C0          XOR EAX,EAX
00450D97  |.  50            PUSH EAX                                 ; /Arg1 => 0
00450D98  |.  E8 B7FEFFFF   CALL 00450C54                            ; \crackme2.00450C54
00450D9D  |.  60            PUSHAD
00450D9E  |.  B8 04000000   MOV EAX,4
00450DA3  |.  FFD0          CALL EAX
00450DA5  |.  C3            RETN
00450DA6  |>  40            INC EAX
00450DA7  |.  50            PUSH EAX                                 ; /Arg1
00450DA8  |.  E8 A7FEFFFF   CALL 00450C54                            ; \crackme2.00450C54
00450DAD  \.  C2 0800       RETN 8

 

Funkcja wydaje się być prosta - do eax wrzucamy 0xF9FCD8D1 i odejmujemy 1, pierwszy skok w takim przypadku nigdy nie zostanie wykonany, za to drugi tak co nam da wywołanie funkcji 0x450C54 z argumentem 0 ( fail ). Funkcja ta jest modyfikowana ( jej początek ) w innym miejscu programu, żeby możliwe było wykonanie pierwszego skoku JE, czyli zostanie on wykonany tylko wtedy kiedy eax=0, potem inc eax ( eax + 1 ) i call - OK.

 

Znowu wyszkujemy wywołania tej funkcji, już zostało tylko 1 i przechodzimy do najważniejszego miejsca w zabezpieczeniu.

 

00450DB4  /.  55            PUSH EBP
00450DB5  |.  8BEC          MOV EBP,ESP
00450DB7  |.  33C9          XOR ECX,ECX
00450DB9  |.  51            PUSH ECX
00450DBA  |.  51            PUSH ECX
00450DBB  |.  51            PUSH ECX
00450DBC  |.  51            PUSH ECX
00450DBD  |.  51            PUSH ECX
00450DBE  |.  53            PUSH EBX
00450DBF  |.  56            PUSH ESI
00450DC0  |.  8BD8          MOV EBX,EAX
00450DC2  |.  33C0          XOR EAX,EAX
00450DC4  |.  55            PUSH EBP
00450DC5  |.  68 A00E4500   PUSH crackme2.00450EA0                   ; /Arg2 = crackme2.450EA0
00450DCA  |.  64:FF30       PUSH DWORD PTR FS:[EAX]                  ; |Arg1
00450DCD  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP               ; |Installs SE handler 450EA0
00450DD0  |.  8D55 FC       LEA EDX,[EBP-4]                          ; |
00450DD3  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]           ; |
00450DD9  |.  E8 FAECFDFF   CALL 0042FAD8                            ; |[crackme2.0042FAD8
00450DDE  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ; |
00450DE1  |.  E8 BA36FBFF   CALL 004044A0                            ; |
00450DE6  |.  83F8 10       CMP EAX,10                               // hasło ma 16 znaków ?
00450DE9  |.  7D 07         JGE SHORT 00450DF2                       ; | jeśli tak lub więcej - ok
00450DEB  |.  B8 AA8B21C4   MOV EAX,C4218BAA                         ; |
00450DF0  |.  EB 7C         JMP SHORT 00450E6E                       ; |
00450DF2  |>  8D55 F8       LEA EDX,[EBP-8]                          ; |
00450DF5  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]           ; |
00450DFB  |.  E8 D8ECFDFF   CALL 0042FAD8                            ; |[crackme2.0042FAD8
00450E00  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ; |
00450E03  |.  E8 9838FBFF   CALL 004046A0                            ; |
00450E08  |.  8B30          MOV ESI,DWORD PTR DS:[EAX]               ; |
00450E0A  |.  81E6 000000FF AND ESI,FF000000                         ; |
00450E10  |.  8D55 F4       LEA EDX,[EBP-0C]                         ; |
00450E13  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]           ; |
00450E19  |.  E8 BAECFDFF   CALL 0042FAD8                            ; |[crackme2.0042FAD8
00450E1E  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-0C]            ; |
00450E21  |.  83C0 02       ADD EAX,2                                ; |
00450E24  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]               ; |
00450E26  |.  25 0000FF00   AND EAX,00FF0000                         ; |
00450E2B  |.  0BF0          OR ESI,EAX                               ; |
00450E2D  |.  8D55 F0       LEA EDX,[EBP-10]                         ; |
00450E30  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]           ; |
00450E36  |.  E8 9DECFDFF   CALL 0042FAD8                            ; |[crackme2.0042FAD8
00450E3B  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ; |
00450E3E  |.  83C0 07       ADD EAX,7                                ; |
00450E41  |.  66:8B00       MOV AX,WORD PTR DS:[EAX]                 ; |
00450E44  |.  66:25 00FF    AND AX,FF00                              ; |
00450E48  |.  0FB7C0        MOVZX EAX,AX                             ; |
00450E4B  |.  0BF0          OR ESI,EAX                               ; |
00450E4D  |.  8D55 EC       LEA EDX,[EBP-14]                         ; |
00450E50  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]           ; |
00450E56  |.  E8 7DECFDFF   CALL 0042FAD8                            ; |[crackme2.0042FAD8
00450E5B  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]            ; |
00450E5E  |.  83C0 0F       ADD EAX,0F                               ; |
00450E61  |.  8A00          MOV AL,BYTE PTR DS:[EAX]                 ; |
00450E63  |.  24 FF         AND AL,FF                                ; |
00450E65  |.  25 FF000000   AND EAX,000000FF                         ; |ostatni znak w eax
00450E6A  |.  0BF0          OR ESI,EAX                               ; |
00450E6C  |.  8BC6          MOV EAX,ESI                              ; |
00450E6E  |>  35 AA8B21C4   XOR EAX,C4218BAA                         ; |
00450E73  |.  2D C7DF13FC   SUB EAX,FC13DFC7                         ; |
00450E78  |.  BA 840D4500   MOV EDX,crackme2.00450D84                ; |Entry point
00450E7D  |.  42            INC EDX                                  ; |
00450E7E  |.  8902          MOV DWORD PTR DS:[EDX],EAX               ; |
00450E80  |.  E8 FFFEFFFF   CALL 00450D84                            ; \crackme2.00450D84

 

Wygląda trochę groźnie.. jednak 70% tej funkcji to fejkowe operacje bez znaczenia, najważniejsza jest końcówka przed wywołaniem 0x450D84. Dla uproszczenia ważny kawałek tej funkcji, (w eax jest 16 znak hasła):

00450E6A  |.  0BF0          OR ESI,EAX                               ; |
00450E6C  |.  8BC6          MOV EAX,ESI                              ; |
00450E6E  |>  35 AA8B21C4   XOR EAX,C4218BAA                         ; |
00450E73  |.  2D C7DF13FC   SUB EAX,FC13DFC7                         ; |
00450E78  |.  BA 840D4500   MOV EDX,crackme2.00450D84                ; |Funkcja która zostanie zmodyfikowana
00450E7D  |.  42            INC EDX                                  ; |
00450E7E  |.  8902          MOV DWORD PTR DS:[EDX],EAX               ; | EAX musi być 1, w przeciwnym wypadku zgon.
00450E80  |.  E8 FFFEFFFF   CALL 00450D84                            ; \crackme2.00450D84

 

Chcemy otrzymać 1 więc patrzymy od dołu:

sub eax, 0xFC13DFC7, ( żeby po tej operacji w eax było 1 to eax musi być 0xFC13DFC8 - logiczne :P )

xor eax, 0xC4218BAA, ( żeby po tej operacji w eax było 0xFC13DFC8 to eax musi być 0x38325462 - operacja printf("%X", 0xFC13DFC8 ^ 0xC4218BAA) )

0x38325462 można odczytać www.asciitable.com jako string 38 - 8, 32 - 2, 54 - T, 62 - b, co daje 82Tb :)

mov eax, esi ( w esi dobry wynik )

or esi, eax - w eax jest 16 znak hasła, w esi są inne 3 znaki z całego hasła np.

 

EAX=00000034 // 16 znak - '4'

ESI =31323300 // 3 znaki i ostatnie 00, po OR w esi zostaje 31323334

 

My chcemy mieć w esi 38325462, więc 16 znak hasła to musi być 'b' inne 3 muszą to być '8','2','T'

 

Metodą prób i błędów można wpaść na to które znaki z hasła są ważne, a które nie.

Brany jest pod uwagę znak czwarty,piąty,dziewiąty i szesnasty B)

 

Wzór jest taki, za 0 i ... można wstawić co się chce:

00082000T000000b(...)

 

Mam nadzięję, że nie zagmatwałem za bardzo..

 

Bardzo fajne crackme xD

 

 

 

Opublikowano

Moje pierwsze CrackMe!

Poziom: Średnie

 

Download: Klik

 

Skan: Klik

Wywala chyba 4 syfy, bo zapakowany by me :)

 

Podpowiedź:

 

Hasło jest zaszyfrowane, a plik zapakowany

 

 

Liczy się wydobycie hasła, crackowanie jest łatwe!

Opublikowano

Moje pierwsze CrackMe!

Poziom: Średnie

 

Download: Klik

 

Skan: Klik

Wywala chyba 4 syfy, bo zapakowany by me :)

 

Podpowiedź:

 

Hasło jest zaszyfrowane, a plik zapakowany

 

 

Liczy się wydobycie hasła, crackowanie jest łatwe!

 

4. Nie możesz użyć cudzych packerów i anitdebuggerów.
Opublikowano

Moje pierwsze CrackMe!

Poziom: Średnie

 

Download: Klik

 

Skan: Klik

Wywala chyba 4 syfy, bo zapakowany by me :)

 

Podpowiedź:

 

Hasło jest zaszyfrowane, a plik zapakowany

 

 

Liczy się wydobycie hasła, crackowanie jest łatwe!

 

Hasło:

 

NmCgpSe

 

 

Modyfikacja:

 

0040148B     EB 3C          JMP SHORT Avenger'.004014C9 ;JZ na JMP

Cracked (wszelkie hasła): download

 

YOU MUST DIE

- Ganon, Koridai

Opublikowano

mirraseq wyprzedził : (

 

 

 

 

Wpisane hasło zostaje szyfrowane i chodzi o to, żeby zaszyfrowane dało "PoEirUg"

 

szyfr według schematu:

 

A --> C

a --> c

B --> D

b --> d

...

N -->P

m --> o

 

czyli literka 2 miejsca dalej :)

 

 

Opublikowano

Dobrze ;)

Chciałem bardziej zakodować, ale uznałem, że będzie za trudne, więc usunąłem trochę...

Ale elita, t3ix + mirraseq wkroczyli do akcji jako pierwsi :)

Ja w re najbardziej nie lubię odpackowywania :/

A hasło umiem wydobyć tylko jak jest pod jakimś stringiem, jest szyfrowane (średnio), byle co pod jakimś warunkiem (średnio)

  • 2 miesiące temu...
Opublikowano

Pisane w c#

Podpowiedź zawarta w pliku txt

Nie chcesz, nie czytaj!

 

Poziom :VERY HARD bez podpowiedzi

z średni.

Wykryte rzeczy są nie groźne, można wygooglować.

Program wymaga dllek, zamieszczone są w rarze

 

scan: Scan

plik: Tutaj

 

Aby wygrać łamigłówkę trzeba zamieścić crackera, lub ominąć sprawdzanie klucza (zamieścić scrackowany program)

Opublikowano

Pisane w c#

Podpowiedź zawarta w pliku txt

Nie chcesz, nie czytaj!

 

Poziom :VERY HARD bez podpowiedzi

z średni.

Wykryte rzeczy są nie groźne, można wygooglować.

Program wymaga dllek, zamieszczone są w rarze

 

scan: Scan

plik: Tutaj

 

Aby wygrać łamigłówkę trzeba zamieścić crackera, lub ominąć sprawdzanie klucza (zamieścić scrackowany program)

Serwer tibi? Jeśli chciałeś by ktoś sprawdził Twoje zabezpieczenia to wygląda to tak:

 

00518140     /75 30         JE SHORT 00518172 ; JNE na JE

 

btw. C# jest pod .NET a to jest zwykły 32 bitowy program.

YOU MUST DIE

- Ganon, Koridai

Opublikowano

Serwer tibi? Jeśli chciałeś by ktoś sprawdził Twoje zabezpieczenia to wygląda to tak:

 

00518140     /75 30         JE SHORT 00518172 ; JNE na JE

 

btw. C# jest pod .NET a to jest zwykły 32 bitowy program.

 

Twój sposób jest zły, zabezpieczenie jest w pętli, program się raz uruchomi po czym przerwie połączenie ;).

 

Miałem mnapisać c++, akurat na visualu robiłem coś i tak mi się napisało :)

i tak sprawdzałem zabezpieczenia :P

a program byś dał radę napisać: )?

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...