• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Challenge - Forensics Flag Finder

+7 głosów
1,455 wizyt
pytanie zadane 15 maja 2020 w Bezpieczeństwo, hacking przez Mirosław Zelent Nałogowiec (34,360 p.)
przywrócone 17 maja 2021 przez Mirosław Zelent

To jest challenge programistyczny dołączony do drugiego tutoriala z serii CTF:

https://www.youtube.com/watch?v=YEMTR8zAZTI

Napisz własny program, który zachowuje się jak linuxowe polecenie strings - potrafi otworzyć i przebadać na obecność łańcuchów n-znakowych plik o dowolnym rozszerzeniu (albo w bardziej wymagającej wersji wskazany programowi folder z plikami). Przykładowe funkcje / parametry aplikacji (skryptu):

  • język programowania dowolny, 
  • interfejs terminalowy lub okienkowy,
  • możliwość określenia minimalnej długości szukanych łańcuchów,
  • możliwość szukania konkretnej frazy (wzorca),
  • opcja rozpoznawana typu pliku (po nagłówku),
  • wybór stosowanego zestawu znaków, 
  • pokazywanie offsetu (położenia) znalezionego łańcucha w pliku

Challenge jest realizowany dla zajawki, jako zadanie do zrealizowania podczas nauki / ćwiczenia danego (wybranego przez siebie) języka. Zachęcam do postowania / linkowania swoich rozwiązań oraz komentowania i podpowiadania kodów innych biorących udział w zabawie. 

5 odpowiedzi

+3 głosów
odpowiedź 15 maja 2020 przez Peter Ja Początkujący (290 p.)
przywrócone 15 maja 2020 przez Peter Ja

Siemka,

ogarnąłem taką apkę (okienkowa, C# WPF).

Wydaje się działać poprawnie, pokazuje numer znaku i oczywiście wynik. Da się w niej wyszukiwać oraz zmieniać minimalną liczbę znaków, które będą szukane (domyślnie oczywiście 4) smiley

https://github.com/PiotrekPKP/ForensicsFlagFinder

Linkacz do apki na gicie, jeśli komuś nie chce się wchodzić tu wrzucam kod samej apki:

using System.Collections.Generic;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace ForensicsFlagFinder
{
    public partial class MainWindow
    {
        private string _filename = "blank";
        private int _charNr;
        private int _combo;
        private readonly List<char> _chars = new List<char>();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonChoose_OnClick(object sender, RoutedEventArgs e)
        {
            Initialize();
            var dialog = new OpenFileDialog();
            dialog.ShowDialog();
            _filename = dialog.FileName;
        }

        private void Initialize()
        {
            _charNr = 0;
            _combo = 0;
            _chars.Clear();
            ListView.Items.Clear();
        }
        
        private void Search(object sender, RoutedEventArgs e)
        {
            if (_filename == "blank")
            {
                Error.Content = "Nie wybrano pliku :)";
                return;
            }
            if (int.TryParse(Num.Text, out _))
            {
                if (int.Parse(Num.Text) < 1)
                {
                    Error.Content = "Wpisz poprawną wartość :)";
                    return;
                }
            }
            else
            {
                Error.Content = "Wpisz numer :)";
                return;
            }
            Initialize();
            Error.Content = "";
            foreach (var character in File.ReadAllText(_filename))
            {
                if (character < 127 && character > 32)
                {
                    _chars.Add(character);
                    _combo++;
                }
                else
                {
                    if (_combo >= int.Parse(Num.Text))
                    {
                        var content = new string(_chars.ToArray());
                        if (SearchField.Text != "")
                        {
                            if (content.Contains(SearchField.Text))
                            {
                                content = _charNr - _combo + ": " + content;
                                var listViewItem = new ListViewItem {Content = content};
                                ListView.Items.Add(listViewItem);
                            }
                        }
                        else
                        {
                            content = _charNr - _combo + ": " + content;
                            var listViewItem = new ListViewItem {Content = content};
                            ListView.Items.Add(listViewItem);
                        }
                        _chars.Clear();
                        _combo = 0;
                    }
                    else
                    {
                        _chars.Clear();
                        _combo = 0;
                    }
                }
                _charNr++;
            }
            if (_combo < int.Parse(Num.Text)) return;
            {
                var content = new string(_chars.ToArray());
                content = _charNr - _combo + ": " + content;
                var listViewItem = new ListViewItem {Content = content};
                ListView.Items.Add(listViewItem);
            }
        }
    }
}

Piotrek smiley

2
komentarz 15 maja 2020 przez Mirosław Zelent Nałogowiec (34,360 p.)
Dobra robota, pozdrawiam serdecznie!
1
komentarz 16 maja 2020 przez Peter Ja Początkujący (290 p.)
Dzięki ;)
+2 głosów
odpowiedź 17 maja 2020 przez deb Nowicjusz (180 p.)

Z mojej strony narzędzie nie stricte do wyszukiwania w pliku, ale do wypisywania wartości bajtów (oraz ich odpowiednika Unicode) z pliku w terminalu.

Można oczywiście zastosować dodatkowo polecenie grep.

https://github.com/damianzim/hexss

Mam nadzieję, że się komuś przyda! smiley

komentarz 24 maja 2020 przez Mirosław Zelent Nałogowiec (34,360 p.)
Dzięki za włączenie się do challenge'u! Pozdrawiam serdecznie
+2 głosów
odpowiedź 17 maja 2020 przez Macek Kolo Mądrala (5,480 p.)
No to ja też coś wrzucę. Proszę o recenzję: https://github.com/Dregorio1/Challenge-FFF
komentarz 24 maja 2020 przez Mirosław Zelent Nałogowiec (34,360 p.)
Dzięki za udział! Pozdrawiam! :)
+1 głos
odpowiedź 7 lutego przez Kameleon-07 Nowicjusz (160 p.)

Hej, ja także zrobiłem taką aplikacje. Testowana pod linuxem, działa w terminalu. Robiona w języku Rust.

Link do github: https://github.com/Kameleon-07/rstrings

komentarz 7 lutego przez Mirosław Zelent Nałogowiec (34,360 p.)

Awesome, mam nadzieję, że to był dobry trening Rusta, no i program przyda się przy kolejnych zadaniach! Dobra robota, pozdrawiam jako rownież posiadacz lenówkismiley

+1 głos
odpowiedź 11 czerwca przez peleni Nowicjusz (210 p.)

Może trochę czasu minęło, jednak tak czy siak zrobiłem aplikację konsolową w .NET w odpowiedzi na challenge.

link do projektu na githubie: https://github.com/MichalNiekrasz/TextFinderInBin.git

komentarz 11 czerwca przez Wiciorny Ekspert (222,010 p.)
Nie odświeżaj starych tematów.

Podobne pytania

+4 głosów
2 odpowiedzi 414 wizyt
0 głosów
3 odpowiedzi 948 wizyt
pytanie zadane 3 sierpnia 2017 w Rozwój zawodowy, nauka, szkoła, praca przez secretname0x525 Początkujący (290 p.)
0 głosów
1 odpowiedź 239 wizyt

88,381 zapytań

136,985 odpowiedzi

305,728 komentarzy

58,644 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...