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

Challenge CTF - Oszukane płatności kartą, algorytm Luhna

Object Storage Arubacloud
+5 głosów
829 wizyt
pytanie zadane 1 marca 2022 w Nasze projekty przez Mirosław Zelent Nałogowiec (34,750 p.)

To jest wątek ogłoszony w tym odcinku CTF(7):

https://www.youtube.com/watch?v=1Arn3mWsmlQ

Można tutaj postować swoje rozwiązania (write-upy) challenge'u:

https://ctflearn.com/challenge/970

wykonane w przeróżnych językach programowania.

Zachęcam do zabawy - dajcie znać jakiego języka użyliście i/lub jakich zabiegów aby uprościć kod źródłowy.

komentarz 3 marca 2022 przez Kajman6679 Nowicjusz (180 p.)

Napisałem kod w VBA (bo czemu nie :)

Sub The_Credit_Card_Fraudster()

Dim i As Long
Dim text As String

For i = 0 To 999999


    text = "543210" & LeftPad(CStr(i)) & "1234"

    If Modulus(CDbl(text), 123457) = 0 Then
        If Modulus(luhna(text), 10) = 0 Then
            Debug.Print text
        End If
    End If
Next

End Sub

Function luhna(liczba As String)
Dim waga As Integer
Dim suma As Integer
Dim i As Integer

suma = 0
waga = 1

For i = Len(liczba) To 1 Step -1
    
    If waga = 1 Then
        suma = suma + waga * CInt(Mid(liczba, i, 1))
        waga = 2
    Else
        If Mid(liczba, i, 1) * waga > 9 Then
            suma = suma + (waga * CInt(Mid(liczba, i, 1)) - 9)
        Else
            suma = suma + waga * CInt(Mid(liczba, i, 1))
        End If
        waga = 1
    End If
Next

luhna = CDbl(suma)

End Function

Function Modulus(a As Double, b As Double)
   Modulus = a - (b * VBA.Int(a / b))
End Function

Function LeftPad(str As String)
  Do While Len(str) < 6
    str = "0" & str
  Loop
  LeftPad = str
End Function

 

komentarz 4 marca 2022 przez Mirosław Zelent Nałogowiec (34,750 p.)
Super, fajna realizacja, nie spodziewałem się VBA :) Pozdrawiam serdecznie
1
komentarz 6 marca 2022 przez bl4ckhatkitty Nowicjusz (100 p.)

skorzystałem z pythona

beginning = str(543210)
end = str(1234)

checksum = 0

for i in range(999999):
    mid = (str(i).zfill(6))
    card_number = beginning + mid + end
    for p in range(len(card_number)):
        if p % 2 == 0:
            supp = int(card_number[p]) * 2
            if supp == 10:
                checksum += 1
            elif supp == 12:
                checksum += 3
            elif supp == 14:
                checksum += 5
            elif supp == 16:
                checksum += 7
            elif supp == 18:
                checksum += 9
            else:
                checksum += supp

        else:
            checksum += int(card_number[p])
        
    if int(card_number) % 123457 == 0:
        print(card_number, " checksum : ", checksum)
    
    checksum = 0

 

komentarz 6 marca 2022 przez Emil22019 Nowicjusz (100 p.)

Tylko że wychodzi

komentarz 6 marca 2022 przez bl4ckhatkitty Nowicjusz (100 p.)
no i jest jedna suma kontrolna podzielna przez 10
komentarz 8 marca 2022 przez Emil22019 Nowicjusz (100 p.)

 @Emil22019 , No i jest kilka wyników

 

3 odpowiedzi

+2 głosów
odpowiedź 6 marca 2022 przez Dominik Piotrowicz Użytkownik (740 p.)

Napisałem w C#. Zdaję sobie sprawę, że przy tak dużych łańcuchach powinno się użyć StringBuildera, ale na tym etapie nauki jeszcze nie potrafię konwersji. :)

        static int LuhnCheck(string nr)
        {
            int weight = 1;
            string score = "";
            int ratio;

            for (int i = nr.Length - 1; i >= 0; i--)
            {
                if (weight == 1)
                {
                    score += int.Parse(nr[i].ToString());
                    weight = 2;
                }
                else
                {
                    ratio = int.Parse((nr[i]).ToString()) * 2;

                    if (ratio > 9)
                    {
                        ratio = (ratio / 10) + ratio % 10;
                    }

                    score += ratio;
                    weight = 1;
                }
            }

            int checksum = 0;

            for (int i = 0; i < score.Length; i++)
            {
                checksum += int.Parse(score[i].ToString());
            }

            return checksum;
        }

        static string Search_six(string nr)
        {
            int guess = 0;
            string check = "";
            string result = "";

            for (int i = 0; i <= 999999; i++)
            {
                string guesser = guess.ToString();

                guesser = i.ToString().PadLeft(6, Char.Parse("0"));

                check = nr.Substring(0, 6) + guesser + nr[12..];

                long checkLong = (long)Int64.Parse(check);

                if (checkLong % 123457 == 0 && LuhnCheck(check) % 10 == 0)
                {
                    result += checkLong + "\n";
                }
            }
            return result;
        }

        static void Main()
        {
            string card= "543210******1234";
            string card_test = "7155032979402154";

            Console.WriteLine(LuhnCheck(card_test));
            Console.WriteLine(Search_six(card));
            Console.ReadKey();
        }

 

+1 głos
odpowiedź 1 maja 2022 przez MemeRistor Nowicjusz (160 p.)

Poleciałem pythonem bo staram się wszystko w nim obecnie pisać

looked_card = "543210******1234"

for guess in range(int(str(9)*6)): #leń ze mnie wyszedł w tym range()
  proposed_card = int(  looked_card[:6] + str(guess).zfill(6) + looked_card[-4:]  )
  if(luhn_alg(proposed_card) and proposed_card%123457 == 0):
    print(proposed_card) 

def luhn_alg(card_number):
  waga = 2 if len(str(card_number))%2==0 else 1
  suma = 0
  for digit in str(card_number):
    suma += int(digit)*waga if int(digit)*waga < 10 else -9
    waga = 1 if waga == 2 else 2
  return True if suma%10 == 0 else False

 

komentarz 2 maja 2022 przez Mirosław Zelent Nałogowiec (34,750 p.)

Super, gratuluję smiley

+1 głos
odpowiedź 5 października 2022 przez jezierski Nowicjusz (160 p.)

Moje wypociny w C++

#include <iostream>

using namespace std;

bool luhn(long long karta)
{
    string s=to_string(karta);
    int suma=0, pom;
    for(int j=0; j<s.length(); j++)
    {
        if(j%2==0)
        {
            pom=2*(s[j]-48);
            if(pom>9)
            {
                pom-=9;
            }
        }
        else
        {
            pom=s[j]-48;
        }
        suma+=pom;
    }
    if(suma%10==0)
        return 1;
    else
        return 0;
}

int main()
{
    long long numer;

    for(long long i=0; i<1000000; i++)
    {
        numer=i*10000+5432100000001234;
        if(numer%123457==0 && luhn(numer))
            cout<<numer<<endl;
    }
}

 

Podobne pytania

+2 głosów
2 odpowiedzi 596 wizyt
pytanie zadane 25 września 2022 w Nasze projekty przez Mirosław Zelent Nałogowiec (34,750 p.)
+7 głosów
5 odpowiedzi 2,180 wizyt
pytanie zadane 15 maja 2020 w Bezpieczeństwo, hacking przez Mirosław Zelent Nałogowiec (34,750 p.)
+2 głosów
1 odpowiedź 363 wizyt
pytanie zadane 11 stycznia 2022 w Algorytmy przez samek Nowicjusz (180 p.)

92,540 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...