Skip to content

Commit

Permalink
saving temp changes. ntag and mfc are under work. parser for pm3 need…
Browse files Browse the repository at this point in the history
…s full rewrite
  • Loading branch information
doomwastaken committed Oct 12, 2023
1 parent f63ffd7 commit 2a26c1d
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 42 deletions.
4 changes: 0 additions & 4 deletions .github/workflows/smoke_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@ name: 'Smoke tests'
on:
push:
branches:
- dev
- "release*"
tags:
- '*'
pull_request:

env:
TARGETS: f7
Expand Down
4 changes: 3 additions & 1 deletion scripts/flippigator/flippigator/extensions/command_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ def Result(self):
def __init__(self, input):
print("input: ", input)
s = str(input).split("\n")
# remove empty lines
s = list(filter(None, s))
self.__Command = s[0]
self.__Result = s[1].removeprefix("[+] ").removesuffix(" ")
self.__Result = s[1:]


class proxmark_command:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def execute(self, cmd) -> List[command_result]:

result = self.__get_result(data_out)
print("result: ", result[0])
return result
return result[0]

def shutdown(self):
pass
Expand All @@ -57,8 +57,8 @@ def __parse_data(self, output_data):
raw_result = str(output_data).split("[usb|script] pm3 --> ")

print("raw_result: ", raw_result)
print("-------------------------------------")
result = []
for raw in raw_result[1:]:
print("raw: ", raw)
result.append(command_result(raw).Result)
return result
7 changes: 5 additions & 2 deletions scripts/flippigator/flippigator/flippigator.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,12 +298,15 @@ def get_first_item(self, browser: Optional[bool] = False):

return menus

def go_to(self, target, area=(0, 64, 0, 128)):
def go_to(self, target, area=(0, 64, 0, 128), direction: Optional[str] = "down"):
state = self.get_current_state(area=area)
self.logger.info("Going to " + target)

while not (target in state):
self.press_down()
if direction == "down":
self.press_down()
elif direction == "up":
self.press_up()
state = self.get_current_state(area=area)

def go_to_main_screen(self):
Expand Down
Binary file not shown.
117 changes: 117 additions & 0 deletions scripts/flippigator/nfc/test_emulate_mifare_classic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
import pytest
from flippigator.extensions.proxmark_wrapper import proxmark_wrapper
from flippigator.flippigator import FlipperHEXKeyboard, FlipperTextKeyboard
import time


class TestEmulateClassic:

@pytest.fixture(scope="function", autouse=True)
def add_4k7_manually(self, nav):
# Code below will run before each "function" (test)
nav.go_to_main_screen()

# Delete file if exists, needs to be added as picture sadly
nav.delete_file("NFC", "T_mfc_4k7")
nav.nfc.go_into()
nav.go_to("Add Manually")
nav.press_ok()
# direction for faster testing, since its last element
nav.go_to("Mifare Classic 4k 7byte UID", direction="up")
nav.press_ok()
nav.press_right()
nav.press_ok()
key = FlipperTextKeyboard(nav)
# if you need, you can make another fixture and use any "existing" file name in /img/ref
key.send("T_mfc_4k7\n")
nav.go_to_main_screen()

# here will be a test call
yield

# This code will run after each "function" (test)
nav.go_to_main_screen()
nav.delete_file("NFC", "T_mfc_4k7")

@pytest.fixture(scope="function")
def emulate_classic(self, nav):
nav.go_to_main_screen()
if nav.open_file("NFC", "T_mfc_4k7") == -1:
assert 0, "File not found"

# Need for emulation to start, otherwise error on proxmark side
time.sleep(2)

def test_mfc_4k7_basic(self, px, emulate_classic):
"""
px: proxmark_wrapper fixture
command: command to be executed
expected_result: expected result of the command
error: if the command should return an error
"""

# read 1 block
read1 = px.execute("hf mf rdbl --blk 1 -k ffffffffffff")
expected = "[=] 1 | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................ "
print("///////////////////////////////////")
print(expected in read1)
print("///////////////////////////////////")
assert expected in read1, "Incorrect block read"

# write 1 block
write1 = px.execute("hf mf wrbl --blk 1 -k ffffffffffff -d 11223344556677889910111213141516")
expected = "[+] Write ( ok )"
assert expected in write1, "Incorrect block write"

# read 1 block
read1_wrong = px.execute("hf mf rdbl --blk 1 -k ffffffffffff")
expected = "[=] 1 | 11 22 33 44 55 66 77 88 99 10 11 12 13 14 15 16 | .\"3DUfw......... "
assert expected in read1_wrong, "Incorrect block read"

# set value block
set_value = px.execute("hf mf value --blk 1 -k ffffffffffff --set 1000")
expected = "[+] Update ... : success"
assert expected in set_value, "Incorrect set value"

# increment value block
inc_value = px.execute("hf mf value --blk 1 -k ffffffffffff --inc 200")
expected = "[+] Update ... : success"

# tests work up to this point
assert expected in inc_value, "Incorrect increment value"

# decrement value block
dec_value = px.execute("hf mf value --blk 1 -k ffffffffffff --dec 10000")
assert dec_value[0] == "Decrement success, new value is -8800", "Incorrect decrement value"

# change key A in 0 sector
change_key = px.execute("hf mf wrbl --blk 3 -k ffffffffffff -d a0a1a2a3a4a5ff078069ffffffffffff")
assert change_key[0] == "Block write OK", "Incorrect change key"

# read 1 block with old key
read1 = px.execute("hf mf rdbl --blk 1 -k ffffffffffff")
assert read1[0] == "Auth error", "Incorrect block read"

# read 1 block with new key
read1 = px.execute("hf mf rdbl --blk 1 -k a0a1a2a3a4a5")
assert read1[0] == "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "Incorrect block read"

# change key B in 0 sector
change_key = px.execute("hf mf wrbl --blk 3 -k ffffffffffff -d b0b1b2b3b4b5ff078069ffffffffffff")
assert change_key[0] == "Block write OK", "Incorrect change key"

# read sector trailer with key A
trailer_a_key = px.execute("hf mf rdbl --blk 3 -k a0a1a2a3a4a5")
assert trailer_a_key[0] == "Key A not present, Access Bits present, Key B present in the output", "Incorrect trailer read"

# read sector trailer with key B
trailer_b_key = px.execute("hf mf rdbl --blk 3 -b -k b0b1b2b3b4b5")
assert trailer_b_key[0] == "Key A not present, Access Bits not present, Key B not present in the output", "Incorrect trailer read"



px_result = px.execute(command)
#
# result = px_result[0]

assert 1
36 changes: 3 additions & 33 deletions scripts/flippigator/nfc/test_emulate_ntag213.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,9 @@ def emulate_ntag213(self, nav):

@pytest.mark.skip(reason="not implemented")
def test_ntag213_basic(self, px):
# nav.go_to_main_screen()
#
# if nav.open_file("NFC", "Ntag213") == -1:
# assert 0, "File not found"
# nav.get_current_state()

# data = px.execute_single("hf 14a raw -sc 3000")
# repeat previous line with enter button in the end
# data = px.execute(["hf 14a raw -sc 3000\n"])
#
# print(data)
# result = px.execute_single("hf 14a raw -sc 3000")
"""
Todo: Rewrite proper example (not up to date)
"""
pm = proxmark_wrapper("/home/vk/work/proxmark3/pm3")
# pm.execute_single("hf 14a raw -sc 3000")

Expand All @@ -34,30 +25,9 @@ def test_ntag213_basic(self, px):
print(result)
print("-------------------------------------")

# result = px.execute(["hf 14a raw -sc 3000\n","hf 14a raw -sc 3000\n","hf 14a raw -sc 3001\n"])
# print(result)

assert (
result == "04 63 5D B2 9A 5A 12 90 42 48 00 00 E1 10 6D 00 [ 65 9C ]"
), "Incorrect data on NFC card"
# reader_nfc.go_to_place()
# reader_nfc.clear()
#
# if nav.open_file("NFC", "BN2") == -1:
# assert 0, "File not found"
# nav.get_current_state()
#
# start_time = time.time()
# while start_time + 5 > time.time():
# if reader_nfc.update():
# string = reader_nfc.get()
# assert string == "W58W60950399D1334", "Emulated NFC card reading failed"
# break
#
# if start_time + 5 < time.time():
# assert 0, "Timeout of emulation"

# nav.go_to_main_screen()

Test_Data = [
("hf 14a raw -sc A229440024FF", "0A", "Error: NFC card not found"),
Expand Down

0 comments on commit 2a26c1d

Please sign in to comment.