Odkodowywanie Aztec Code 2D - Dowody Rejestracyjne, algorytm nrv2e, darmowy kod

Odpowiedz Nowy wątek
2018-07-08 14:52
Rev
22

Jeżeli zastanawialiście się kiedyś co zawiera kod graficzny na dowodach rejestracyjnych waszych pojazdów to jest to Aztec Code. Zdekodowanie go da dane (jeszcze po base64), które są dodatkowo skompresowane, ale można je przekształcić do postaci tekstowej za pomocą poniższego kodu.

import base64
from ctypes import *

code = 'BgQAANtYAAJDAPkxAHwAQXIw7zcGNN4ANiox+w81HrUGOP8eUABSAEUA+1oAWQBEDv9OAFQAIABN3wAuClMAvlQPV/eKUhq9Wg5X7k58Utc' \
       'WSVq9TF5J79pBZ+5PAEsG12bTSm5GVQBM/ntSAEH7L1dj+0MAS1vvMvovewo3Ut4wDi39HjEAN6Pbl0FNe3YgPt5Q3kv3IlSevVnX1z9FMm' \
       'uCShL2WgBaG9umKADvSAApJnx75k+itwZMAEx9X0rvbkSOTXtOOF/DRy0WOW53fPYLFoMzLr0xAi3DGnevLQOCfJ/vQZ5TcBZrN0oa9k4Af' \
       'A82Q4QaDzj3q8deN6sN7zIE/1x8lbMnQdwBQi5ZT86jL2tqNAr2MwAw34xSH+uPSVPYFxZThBMzON8AMJM5wQA3MwRcMX7bNcET2jInwyed' \
       'E01HZ4dlM94qKy0DL38fNgAqeBszSxOvNIeKfHM7fCLxNQAwVkMtdzl7Xiw/YMyrFzxQACBWw+Hza7c3C93/NWuHg1OWRquPQ5KP02K9IBZ' \
       'T4QZC9oNZU7aXFiOX83U4ADJFC7ADhrNVCyOW8w9qMbEnZhdHbHxjdjIT7E4DW0M3OQuGaxYmCSSSSSr/'

ucl = cdll.LoadLibrary('libucl.so')
ucl.ucl_nrv2e_decompress_safe_8.argtypes = (c_char_p, c_int32, POINTER(c_char), POINTER(c_int32), c_void_p)
ucl.ucl_nrv2e_decompress_safe_8.restype = c_int32

data = base64.b64decode(code)

size = int.from_bytes(data[:4], byteorder='little')

buffer = (c_char * size)()
buffer_length = c_int32(size)

ucl.ucl_nrv2e_decompress_safe_8(data[4:], len(data), buffer, buffer_length, None)

result = bytes(buffer).decode('utf-16')

print(result)

Co dla przykładowego kodu daje wynik XXC1|AAA0007046|1465058|PREZYDENT M. ST. WARSZAWY|DZIELNICA MOKOTÓW|UL. RAKOWIECKA 25/27|02-517 WARSZAWA|DMI 1PNK|TOYOTA|E12J|ZZE120(H)||COROLLA|JTDKM28E100089120|2013-11-06|---|KOWALSKI JAN|JAN|KOWALSKI||82091711022|02-517|WARSZAWA||WAŁBRZYSKA|24|30|KOWALSKA MARIA|MARIA|KOWALSKA||88030971022|02-517|WARSZAWA||WAŁBRZYSKA|24|30|1655|1655|2655|1205|M1|e11*2001/116*0180*04|2|1000|450|---|1398,00|71,00|P |2005-07-01|5|---|SAMOCHÓD OSOBOWY|---|2005|---|8,82|AAA0000000|02650008000158|03|02|000|2000NNNNNNNN|009002001|.

Kod w Pythonie wykorzystuje bibliotekę libucl. Na Ubuntu i Debianie wystarczy zrobić sudo apt-get install libucl-dev.

Kod wypuszczam na licencji GPL 2.


edytowany 9x, ostatnio: Rev, 2018-07-13 01:08
Specjalnie po roku się zalogowałem żeby dać Ci plusa, jak zobaczyłem aferę o tym kodzie na wypoku. :-D - Endrju 2018-07-08 22:04
Tu macie wersję dla Pythona z rozpoznawaniem obrazu https://pypi.org/project/aztecdecoder/ :) - Bartosz Wójcik 2018-07-13 16:42
Ten kod to prosty pythonowy wrapper na bazie ctypes na oryginalną bibliotekę ucl wydaną na licencji GPL2. Nie możesz nawet gdybyś chciał wypuścić tego kodu z inną licencją bo GPL 2 to licencja wirusowa. -.- - siloam 2019-01-12 19:15
iii uwaga... dlatego tego nie zrobiłem! - Rev 2019-01-13 14:23

Pozostało 580 znaków

2018-07-10 13:42
0

1 Nie wiem co tam kolega nawywijał. Z tego co znalazłem to tylko to https://www.wykop.pl/link/339[...]w-zrodlowych-skryptow-autoit/. Niemniej to też nieporozumienie, bo PELock oczekiwał odwrotnego działania co do jego programu, a gość nieco obszedł system. Jeszcze w temacie Azteca też się wypowiadał. Wiem, że ten "wygrany" chciał pokazać, że jak robi się RE to nie odczytuje się całego kodu etc. ale zasady konkursu były jasne. Inna sprawa, że trzeba było napisać swój skrypt który nie był w sieci to by afery nie było. Co do innych rzeczy to serio nic nie słyszałem o tym Panu (PELock).
2 Rozumiem. Myślałem, że on dostarczył w porozumieniu z PWPW oprogramowanie, a dodatkowo sprzedaje usługi. Mówisz, że zrobił RE biblioteki z PWPW? No to pachnie, że złodziej okradł złodzieja, ale cii.. bo znów ktoś oskarży mnie o oskarżanie innych ;)
3 Ah rozumiem. Nie wiedziałem, że tak łatwo usunąć konto z takich serwisów. Ale serio fałszywe oskarżenie i to nie przed sądem, a prywatną firma jaką jest GH grozi takimi konsekwencjami? A jeżeli ktoś prostu zgłosił, że podejrzewa, że dane repo jest w części zapełnione kodem od niego ukradzionym?

Pozostało 580 znaków

2018-07-10 13:54
0

Ale serio fałszywe oskarżenie i to nie przed sądem, a prywatną firma jaką jest GH grozi takimi konsekwencjami?

To nie jest jakieś tam raportowanie do githuba. To jest skarga w oparciu o https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act a to jest poważna sprawa i za fałszywe oskarżenia z tego tytułu grożą grzywny rzędu 150k USD albo więzienie.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Tylko czy Bart zgłosił to gdziekolwiek poza githubem? Czy policja USA rozpocznie postępowaie przeciw v3l0c1r4pt0r? - aurel 2018-07-10 13:58
To działa odwrotnie. Policja może wszcząć postępowanie względem Barta jeśli ktoś zgłosi że bezpodstawnie powołał się na DMCA. - Shalom 2018-07-10 14:03

Pozostało 580 znaków

2018-07-10 13:55
1

Ale serio fałszywe oskarżenie i to nie przed sądem, a prywatną firma jaką jest GH grozi takimi konsekwencjami?

Jakimiż to strasznymi konsekwencjami? Jedyna konsekwencja jest taka, że usunięto mu repo z ich prywatnej strony. Każda prywatna firma może robić na swojej prywatnej stronie co jej się żywnie podoba, a jak komuś nie podoba się polityka firmy, to może skorzystać z innej firmy. Tak też tu się stało - kod został przeniesiony na gitlab i parę innych.

Bardziej mi chodziło, o to, że PELockowi za fałszywe oskarżenie grozi poważna kara to co shalom przytacza wyżej. - somedev 2018-07-10 13:59
Tak jak w komentarzu wyżej - to się zobaczy, bo nie wiadomo, czy w ogóle zostanie wszczęte jakieś postępowanie karne, czy zakończy się na takedownie na githubie... Jeśli zostanie wszczęte, to już nie będzie bez sądu. - aurel 2018-07-10 14:01

Pozostało 580 znaków

2018-07-12 09:37
1

Jest już alternatywna implementacja https://github.com/dex4er/drpdecompress. Dane były skompresowane algorytmem NRV2E.

Juz zdjęte :P - iksde 2018-07-12 17:05
Można wziąć po prostu https://github.com/korczis/ucl/blob/master/src/n2e_d.c albo ściągnąć całe libucl.so i odpalić funkcje z tej libki. Tego już @Bartosz Wójcik nie zdejmie. Ale zachęcam go do próbowania i zgloszenie tego z DMCA. Potem nam wyśle kartkę z Guantanamo :) - Shalom 2018-07-13 00:06
Swoją drogą z tego co widzę tutaj: https://web.archive.org/web/2[...]s/blob/master/drpdecompress.c to @Bartosz Wójcik zgłosił na podstawie DMCA fałszywe oświadczenie że jest autorem tego kodu. No to chyba jednak będą te kartki z Guantanamo, bo za takie zgłoszenie grozi odpowiedzialność karna. Bardzo mnie ciekawi Bart jak udowodnisz przed sądem że kod składający się z samego wywołania bibliotecznej funkcji, który też jest w samplach biblioteki GPL, jest twój. - Shalom 2018-07-13 00:19

Pozostało 580 znaków

2018-07-12 14:56
0

Czy potrafi ktoś to przerobić na biblioteke C# pod WPF ?

Da się spiąć C# z natywną dllką - Shalom 2018-07-12 15:23

Pozostało 580 znaków

2018-07-12 23:56
Rev
2

Ponieważ pojawiły się wątpliwości pewnych wrednych ludzi zastąpiłem w pierwszym poście kod tym, który napisałem w całości sam.


Jak chcesz to potrafisz :) - Bartosz Wójcik 2018-07-13 16:39

Pozostało 580 znaków

2018-07-13 01:16
6

Na githubie udostępniam swoją implementację dekodera, która używa biblioteki libucl1-dev. Kod znajdujący się w tym repozytorium w całości pochodzi z przykładów w/w biblioteki opracowanej w latach '90 i wydanej na licencji GPL.

https://github.com/icedevml/decode-polish-aztec

Wysyłanie nieprawidłowych DMCA względem tego repozytorium spowoduje podjęcie działań w kierunku ukarania za składanie fałszywych zeznań.

Załączam kod poniżej:

decompress_polish_aztec.c

/* decompress_polish_aztec.c -- decompress data from polish vehicle AZTEC code

   this file is an explicit modification of the following file from libucl1-dev:

   simple.c -- the annotated simple example program for the UCL library

   This file is part of the UCL data compression library.

   Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
   All Rights Reserved.

   The UCL library is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of
   the License, or (at your option) any later version.

   The UCL library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with the UCL library; see the file COPYING.
   If not, write to the Free Software Foundation, Inc.,
   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

   Markus F.X.J. Oberhumer
   <[email protected]>
   http://www.oberhumer.com/opensource/ucl/
 */

#include <ucl/ucl.h>
#if defined(UCL_USE_ASM)
#  include <ucl/ucl_asm.h>
#endif

/* portability layer */
#define WANT_UCL_MALLOC 1
#include "portab.h"

#include <unistd.h>

int __acc_cdecl_main main(int argc, char *argv[])
{
    int r;
    ucl_bytep in;
    ucl_bytep out;
    ucl_uint in_len;
    ucl_uint out_len;
    ucl_uint new_len;
    int level = 5;                  /* compression level (1-10) */

    if (argc < 0 && argv == NULL)   /* avoid warning about unused args */
        return 0;

    fprintf(stderr, "\nUCL data compression library (v%s, %s).\n",
            ucl_version_string(), ucl_version_date());
    fprintf(stderr, "Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer\n");
    fprintf(stderr, "http://www.oberhumer.com/opensource/ucl/\n\n");

/*
 * Step 1: initialize the UCL library
 */
    if (ucl_init() != UCL_E_OK)
    {
        fprintf(stderr, "internal error - ucl_init() failed !!!\n");
        fprintf(stderr, "(this usually indicates a compiler bug - try recompiling\nwithout optimizations, and enable `-DUCL_DEBUG' for diagnostics)\n");
        return 1;
    }

/*
 * Step 2: setup memory
 *
 * We want to compress the data block at `in' with length `in_len' to
 * the block at `out'. Because the input block may be incompressible,
 * we must provide a little more output space in case that compression
 * is not possible.
 */
    in_len = 256 * 1024L;
    out_len = 256 * 1024L;

    in = (ucl_bytep) ucl_malloc(in_len);
    out = (ucl_bytep) ucl_malloc(out_len);
    if (in == NULL || out == NULL)
    {
        fprintf(stderr, "out of memory\n");
        return 2;
    }

    ucl_uint rout_len = 0;
    rout_len = read(STDIN_FILENO, out, out_len);

/*
 * Step 5: decompress again, now going back from `out' to `in'
 */
    new_len = out_len;
    r = ucl_nrv2e_decompress_8(out+4,rout_len-4,in,&new_len,NULL);

    if (r == UCL_E_OK)
        for (int i = 0; i < new_len; i++) {
            printf("%c", in[i]);
        }
    else
    {
        /* this should NEVER happen */
        fprintf(stderr, "internal error - decompression failed: %d\n", r);
        return 5;
    }

    ucl_free(out);
    ucl_free(in);
    return 0;
}

/*
vi:ts=4:et
*/

portab.h

/* portab.h -- portability layer

   This file is part of the UCL data compression library.

   Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
   All Rights Reserved.

   The UCL library is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of
   the License, or (at your option) any later version.

   The UCL library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with the UCL library; see the file COPYING.
   If not, write to the Free Software Foundation, Inc.,
   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

   Markus F.X.J. Oberhumer
   <[email protected]>
   http://www.oberhumer.com/opensource/ucl/
 */

#include <ucl/uclconf.h>

#if 0

#include "examples/portab_a.h"

#else

/* INFO:
 *   The "portab_a.h" version above uses the ACC library to add
 *   support for ancient systems (like 16-bit DOS) and to provide
 *   some gimmicks like win32 high-resolution timers.
 *   Still, on any halfway modern machine you can also use the
 *   following pure ANSI-C code instead.
 */

#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#undef NDEBUG
#include <assert.h>

#define __acc_cdecl_main
#define ACC_UNUSED(var)         ((void) &var)

#if defined(WANT_UCL_MALLOC)
#  define ucl_malloc(a)         (malloc(a))
#  define ucl_free(a)           (free(a))
#endif
#if defined(WANT_UCL_FREAD)
#  define ucl_fread(f,b,s)      (fread(b,1,s,f))
#  define ucl_fwrite(f,b,s)     (fwrite(b,1,s,f))
#endif
#if defined(WANT_UCL_UCLOCK)
#  define ucl_uclock_handle_t   int
#  define ucl_uclock_t          double
#  define ucl_uclock_open(a)    ((void)(a))
#  define ucl_uclock_close(a)   ((void)(a))
#  define ucl_uclock_read(a,b)  *(b) = (clock() / (double)(CLOCKS_PER_SEC))
#  define ucl_uclock_get_elapsed(a,b,c) (*(c) - *(b))
#endif
#if defined(WANT_UCL_WILDARGV)
#  define ucl_wildargv(a,b)     ((void)0)
#endif

#endif

/*
vi:ts=4:et
*/

Użycie:

$ sudo apt install libucl1-dev
$ g++ -o decompress decompress_polish_aztec.c -lucl
$ cat vehicle.bin
BgQAANtYAAJDAPkxAHwAQXIw7zcGNN4ANiox+w81HrUGOP8eUABSAEUA+1oAWQBEDv9OAFQAIABN3wAuClMAvlQPV/eKUhq9Wg5X7k58UtcWSVq9TF5J79pBZ+5PAEsG12bTSm5GVQBM/ntSAEH7L1dj+0MAS1vvMvovewo3Ut4wDi39HjEAN6Pbl0FNe3YgPt5Q3kv3IlSevVnX1z9FMmuCShL2WgBaG9umKADvSAApJnx75k+itwZMAEx9X0rvbkSOTXtOOF/DRy0WOW53fPYLFoMzLr0xAi3DGnevLQOCfJ/vQZ5TcBZrN0oa9k4AfA82Q4QaDzj3q8deN6sN7zIE/1x8lbMnQdwBQi5ZT86jL2tqNAr2MwAw34xSH+uPSVPYFxZThBMzON8AMJM5wQA3MwRcMX7bNcET2jInwyedE01HZ4dlM94qKy0DL38fNgAqeBszSxOvNIeKfHM7fCLxNQAwVkMtdzl7Xiw/YMyrFzxQACBWw+Hza7c3C93/NWuHg1OWRquPQ5KP02K9IBZT4QZC9oNZU7aXFiOX83U4ADJFC7ADhrNVCyOW8w9qMbEnZhdHbHxjdjIT7E4DW0M3OQuGaxYmCSSSSSr/
$ base64 -d vehicle.bin | ./decompress | iconv -f UCS-2LE -t UTF-8//TRANSLIT

UCL data compression library (v1.03, Jul 20 2004).
Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
http://www.oberhumer.com/opensource/ucl/

XXC1|AAA0007046|1465058|PREZYDENT M. ST. WARSZAWY|DZIELNICA MOKOTÓW|UL. RAKOWIECKA 25/27|02-517 WARSZAWA|DMI 1PNK|TOYOTA|E12J|ZZE120(H)||COROLLA|JTDKM28E100089120|2013-11-06|---|KOWALSKI JAN|JAN|KOWALSKI||82091711022|02-517|WARSZAWA||WAŁBRZYSKA|24|30|KOWALSKA MARIA|MARIA|KOWALSKA||88030971022|02-517|WARSZAWA||WAŁBRZYSKA|24|30|1655|1655|2655|1205|M1|e11*2001/116*0180*04|2|1000|450|---|1398,00|71,00|P |2005-07-01|5|---|SAMOCHÓD OSOBOWY|---|2005|---|8,82|AAA0000000|02650008000158|03|02|000|2000NNNNNNNN|009002001|

Women were the reason I became a monk - and, ah, the reason I switched back...
Pokaż pozostałe 2 komentarze
Wyślij pocztówkę do Deusa, którego kryjesz do dzisiaj, że wisi mi 3000 PLN, a mieszkanie, z którego miał spłacić dług zostało zlicytowane w 2016 roku za ponad 100k ;), jak kilka razy Cię o niego pytałem to zawsze mnie zbywałeś, sprytne z was gnojki, jeden kryje drugiego. - Bartosz Wójcik 2018-07-14 13:18
Widzisz, dlatego właśnie zawsze Cię trakowałem z buta, bo wiem, że go kryjesz, oszukał mnie i wielu ludzi nawet tutaj na 4p na kasę (ile dla niego uzbieraliście?), a ty zamiast spróbować wyjaśnić ten kwas, bo masz do niego kontakt - udajesz, że nic nie wiesz i wklejasz durne uśmieszki... - Bartosz Wójcik 2018-07-14 13:36
:-D :-D :-D :-D :-D - Endrju 2018-08-01 19:03
Udało się w końcu odzyskać od Deusa tę kasę? Mi też nie zwrócił, no ale tak się kończy przyjacielska pomoc ;-) - Marooned 2019-07-02 16:55

Pozostało 580 znaków

2018-07-13 01:51
1
grzegorzzaw napisał(a):

Czy potrafi ktoś to przerobić na biblioteke C# pod WPF ?

Implementacja algorytmu NRV2E w języku C#:
https://bitbucket.org/bsoja/nrv2e-csharp

Oraz dekoder, który jej używa:
https://bitbucket.org/bsoja/p[...]stration-certificate-decoder/

Gotowe paczki są dostępne przez NuGeta: NRV2E oraz PolishVehicleRegistrationCertificateDecoder

Pozostało 580 znaków

2018-07-13 09:44
0

Tutaj też była wersja oparta o otwartą bibliotekę niemająca nic wspólnego z kodem PELocka, ale ktoś ją wziął i zrobił DMCA: https://github.com/dex4er/drpdecompress
Nieładnie. Takie działanie jest niezgodne z prawem, przejawia też rażący brak szacunku dla własności intelektualnej.

Tylko nie wiem czy właściciel tamtego repo będzie ciągnąć sprawę dalej, ale monk i rev będą jeśli bart spróbuje zaraportować ich kody ;) - Shalom 2018-07-13 12:11
Właściciel tamtego repo zgłosił już counter notice: "No ja już zgłosiłem oczywiście DMCA counter notice, ale te 14 dni trzeba poczekać, aż odblokują." - pegiejot2 2018-07-13 16:46

Pozostało 580 znaków

2018-07-13 10:02
1

Ten ktoś to cały czas ta sama osoba, ten sam troll pelock

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0