Скенираш сметка, УЈП после Х време ти враќа дел од данокот. Како функционира? Пробав да откријам.
Првата претпоставка ми беше дека во самиот QR код се содржат информации за сметката, колку пари е, можеби кои производи ги содржи и тн.
Пробав да изгуглам QR код кој има ваков облик, квадрат со 4 региони, ама не најдов. Испадна дека не е QR код, туку DataMatrix тип на 2д баркод. https://en.wikipedia.org/wiki/Data_Matrix
На интернет секако има декодери, па успеав да декодирам една сметка.
AC415100756AC415100756AC00172008[...остатокот е нечитлив]
Тука следеше разочарувањето. :) Првиот дел од пораката, односно првите 32 бајти се ASCII код, неенкриптиран, кој содржи три броја во форматот ACxxxxxxxx -- првите два ги има на самата сметка, третиот го нема испринтан и не знам што е.
Разочарувањето е дека остатокот од податоците се или gibberish или енкриптирани.
Прашањето беше, дали УЈП апликацијата ја декодира локално пораката? Пробав без интернет и не сакаше да скенира сметки, што ми укажува дека payload-от се праќа на сервер и од таму се добива одговор за успешно/неуспешно внесена сметка. Има логика, поради опасност од double entry ова е правилниот дизајн.
Сакав да го објавам ова, за ако некој налета случајно а го интересира, да продолжи со истражување.
UPDATE: линк од gdamjan со спецификација од УЈП, "УПАТСТВО за протокол за комуникација и размена на податоци помеѓу фискален апарат и крипто модул": http://www.ujp.gov.mk/files/attachment/0000/0576/UJP-IT-U.2-02-1.pdf
еве .apk ако има јунак што сака да декомпајлира: https://public.lh.mk/random/mk.accent.vatret_30_apps.evozi.com.apk
Ова https://github.com/JesusFreke/smali треба да помогне.