Skip to content

Commit b80d910

Browse files
committed
make it work for the tundra
1 parent 9b456fa commit b80d910

File tree

3 files changed

+7
-8
lines changed

3 files changed

+7
-8
lines changed

extract_keys.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
b'\x018965B4209000\x00\x00\x00\x00': b'\x01!!!!!!!!!!!!!!!!', # 2021 RAV4 Prime
2929
b'\x018965B4233100\x00\x00\x00\x00': b'\x01!!!!!!!!!!!!!!!!', # 2023 RAV4 Prime
3030
b'\x018965B4509100\x00\x00\x00\x00': b'\x01!!!!!!!!!!!!!!!!', # 2021 Sienna
31+
b'\x048965F3401200\x00\x00\x00\x008A3113402000\x00\x00\x00\x008965F3402200\x00\x00\x00\x008A3213402000\x00\x00\x00\x00': b'\x04!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!',
3132
}
3233

3334
KEY_STRUCT_SIZE = 0x20
@@ -61,7 +62,7 @@ def get_secoc_key(key_struct):
6162
panda = Panda()
6263
panda.set_safety_mode(CarParams.SafetyModel.elm327)
6364

64-
uds_client = UdsClient(panda, ADDR, ADDR + 8, BUS, timeout=0.1, response_pending_timeout=0.1)
65+
uds_client = UdsClient(panda, ADDR, ADDR + 8, BUS, timeout=0.1, response_pending_timeout=1.0)
6566

6667
print("Getting application versions...")
6768

@@ -82,8 +83,6 @@ def get_secoc_key(key_struct):
8283
uds_client.diagnostic_session_control(SESSION_TYPE.PROGRAMMING)
8384

8485
# Get bootloader version
85-
uds_client.diagnostic_session_control(SESSION_TYPE.DEFAULT)
86-
uds_client.diagnostic_session_control(SESSION_TYPE.EXTENDED_DIAGNOSTIC)
8786
bl_version = uds_client.read_data_by_identifier(DATA_IDENTIFIER_TYPE.APPLICATION_SOFTWARE_IDENTIFICATION)
8887
print(" - APPLICATION_SOFTWARE_IDENTIFICATION (bootloader) ", bl_version)
8988

@@ -113,7 +112,7 @@ def get_secoc_key(key_struct):
113112
print("\nPreparing to upload payload...")
114113

115114
# Write something to DID 203, not sure why but needed for state machine
116-
uds_client.write_data_by_identifier(0x203, b"\x00" * 5)
115+
uds_client.write_data_by_identifier(0x203, b"\x01\x00\x00\x00\x00")
117116

118117
# Write KEY and IV to DID 201/202, prerequisite for request download
119118
print(" - Write data by identifier 0x201", DID_201_KEY.hex())
@@ -126,7 +125,7 @@ def get_secoc_key(key_struct):
126125
data = b"\x01" # [1] Format
127126
data += b"\x46" # [2] 4 size bytes, 6 address bytes
128127
data += b"\x01" # [3] memoryIdentifier
129-
data += b"\x00" # [4]
128+
data += b"\x01" # [4]
130129
data += struct.pack('!I', 0xfebf0000) # [5] Address
131130
data += struct.pack('!I', 0x1000) # [9] Size
132131

@@ -155,7 +154,7 @@ def get_secoc_key(key_struct):
155154
# [5] 0x0
156155
# [6] mem addr
157156
# [10] mem addr
158-
data = b"\x45\x00"
157+
data = b"\x45\x01"
159158
data += struct.pack('!I', 0xfebf0000)
160159
data += struct.pack('!I', 0x1000)
161160

@@ -172,7 +171,7 @@ def get_secoc_key(key_struct):
172171
# [5] 0x0
173172
# [6] mem addr
174173
# [10] mem addr
175-
data = b"\x45\x00"
174+
data = b"\x45\x01"
176175
data += struct.pack('!I', 0xe0000)
177176
data += struct.pack('!I', 0x8000)
178177

payload.bin

0 Bytes
Binary file not shown.

shellcode/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ void exploit() {
1212

1313
int *addr = 0xff200000;
1414
while (addr < 0xff208000) {
15-
int i = 0x10;
15+
int i = 0x0A;
1616

1717
if ((*(RSCFDnCFDTMSTSp + i) & 0b110) != 0) {
1818
continue;

0 commit comments

Comments
 (0)