Vida CEM swapping
- gnalan
- Posts: 968
- Joined: 21 July 2020
- Year and Model: 2001 S60
- Location: Ohio
- Has thanked: 557 times
- Been thanked: 135 times
Re: Vida CEM swapping
Algo can be shortened for finding the new mucked_value (as I usually see it called). I looked at your code and see that you've shortened it as well but using a different value.
Last edited by gnalan on 26 Apr 2022, 13:49, edited 1 time in total.
2001 S60, B5244S, AW55-50SN, FWD (Sold)
Cancer/Illness/Caregiver Support Thread
Cancer/Illness/Caregiver Support Thread
- RickHaleParker
- Posts: 7129
- Joined: 25 May 2015
- Year and Model: See Signature below.
- Location: Kansas
- Has thanked: 8 times
- Been thanked: 958 times
I found a flaw in what I was thinking. VTL's step hash will not help with beating the SPA timeout.
1. We are going be working with one set of ( BO, B1 ) to get the number of PIN candidates down to 256^3.
2. Each perpetuation of the 256^3 will produce a unique key for a given seed. That is why only one PIN for each ( B0, B1 ) set.
3. VTL's Step hash would find the PIN for a failed UDS but there will be only one in the ( B0. B1 ) set. The one that was used to produce the failed pair. That is already known so nothing is gained.
At this time our best hope for beating the SPA UDS timeout is a soft reset. Which we have not investigated yet.
⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙
1998 C70, B5234T3, 16T, AW50-42, Bosch Motronic 4.4, Special Edition package.
2003 S40, B4204T3, 14T twin scroll AW55-50/51SN, Siemens EMS 2000.
2004 S60R, B8444S TF80 AWD. Yamaha V8 conversion
2005 XC90 T6 Executive, B6294T, 4T65 AWD, Bosch Motronic 7.0.
1998 C70, B5234T3, 16T, AW50-42, Bosch Motronic 4.4, Special Edition package.
2003 S40, B4204T3, 14T twin scroll AW55-50/51SN, Siemens EMS 2000.
2004 S60R, B8444S TF80 AWD. Yamaha V8 conversion
2005 XC90 T6 Executive, B6294T, 4T65 AWD, Bosch Motronic 7.0.
- RickHaleParker
- Posts: 7129
- Joined: 25 May 2015
- Year and Model: See Signature below.
- Location: Kansas
- Has thanked: 8 times
- Been thanked: 958 times
P3 owners: Would you prefer a lower maximum crack time (10.5 hours ) or a chance of finding the PIN real fast?
With the chance finding the PIN real fast comes the risk that it will take real long time ( 63 hours ).
With the chance finding the PIN real fast comes the risk that it will take real long time ( 63 hours ).
Last edited by RickHaleParker on 25 Apr 2022, 00:35, edited 2 times in total.
⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙
1998 C70, B5234T3, 16T, AW50-42, Bosch Motronic 4.4, Special Edition package.
2003 S40, B4204T3, 14T twin scroll AW55-50/51SN, Siemens EMS 2000.
2004 S60R, B8444S TF80 AWD. Yamaha V8 conversion
2005 XC90 T6 Executive, B6294T, 4T65 AWD, Bosch Motronic 7.0.
1998 C70, B5234T3, 16T, AW50-42, Bosch Motronic 4.4, Special Edition package.
2003 S40, B4204T3, 14T twin scroll AW55-50/51SN, Siemens EMS 2000.
2004 S60R, B8444S TF80 AWD. Yamaha V8 conversion
2005 XC90 T6 Executive, B6294T, 4T65 AWD, Bosch Motronic 7.0.
- RickHaleParker
- Posts: 7129
- Joined: 25 May 2015
- Year and Model: See Signature below.
- Location: Kansas
- Has thanked: 8 times
- Been thanked: 958 times
I think we should split the CEMs into two groups. ( P1, P2 ) & ( P3, P5, P6 ) P3 belongs with the CMA and the SPA. The tools being developed for the SPA will work for the P3 and vice versa.
⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙⸙
1998 C70, B5234T3, 16T, AW50-42, Bosch Motronic 4.4, Special Edition package.
2003 S40, B4204T3, 14T twin scroll AW55-50/51SN, Siemens EMS 2000.
2004 S60R, B8444S TF80 AWD. Yamaha V8 conversion
2005 XC90 T6 Executive, B6294T, 4T65 AWD, Bosch Motronic 7.0.
1998 C70, B5234T3, 16T, AW50-42, Bosch Motronic 4.4, Special Edition package.
2003 S40, B4204T3, 14T twin scroll AW55-50/51SN, Siemens EMS 2000.
2004 S60R, B8444S TF80 AWD. Yamaha V8 conversion
2005 XC90 T6 Executive, B6294T, 4T65 AWD, Bosch Motronic 7.0.
- gnalan
- Posts: 968
- Joined: 21 July 2020
- Year and Model: 2001 S60
- Location: Ohio
- Has thanked: 557 times
- Been thanked: 135 times
Looking at your code... I know what 'n' is but where did 'm' come from? Also what is 'k'?
n = 0xc541a9, m = 0x1212050
2001 S60, B5244S, AW55-50SN, FWD (Sold)
Cancer/Illness/Caregiver Support Thread
Cancer/Illness/Caregiver Support Thread
-
vtl
- Posts: 4724
- Joined: 16 August 2012
- Year and Model: 2005 XC70
- Location: Boston
- Has thanked: 114 times
- Been thanked: 603 times
I took my time, disassembled one of P3 dumps, found the routine and actually understood what the hash is doing. And rewrote it in a clean, understandable C. The source code that is floating on the net, is clearly a compiler-optimized machine code decompiled back into C. My variation of the algo does the same bit manipulation (ends up with the same result), but looks nicer for humans.
'k' is input vector to hash function represented as a 64 bit integer.
- gnalan
- Posts: 968
- Joined: 21 July 2020
- Year and Model: 2001 S60
- Location: Ohio
- Has thanked: 557 times
- Been thanked: 135 times
This was what I came up with so far trying to optimize the Algo. v2 starts with 0xC541A9, and v1 is the 64 bit pin/seed combo. (Just showing my loop here.)vtl wrote: ↑25 Apr 2022, 08:31 I took my time, disassembled one of P3 dumps, found the routine and actually understood what the hash is doing. And rewrote it in a clean, understandable C. The source code that is floating on the net, is clearly a compiler-optimized machine code decompiled back into C. My variation of the algo does the same bit manipulation (ends up with the same result), but looks nicer for humans.
'k' is input vector to hash function represented as a 64 bit integer.
Code: Select all
for x in range(0,64):
v3 = ((v2 & 1) ^ ((v1 >> x) & 1));
v4 = (v2 >> 1);
if v3==1:
v2 = (v4 ^ 0x909028);
else:
v2 = v4;
Last edited by gnalan on 26 Apr 2022, 13:52, edited 1 time in total.
2001 S60, B5244S, AW55-50SN, FWD (Sold)
Cancer/Illness/Caregiver Support Thread
Cancer/Illness/Caregiver Support Thread
- gnalan
- Posts: 968
- Joined: 21 July 2020
- Year and Model: 2001 S60
- Location: Ohio
- Has thanked: 557 times
- Been thanked: 135 times
Code: Select all
void p3_hash(unsigned char *pin, unsigned char *seed, unsigned char *hash)
{
unsigned int n = 0xc541a9, m = 0x1212050;
unsigned long long k;
unsigned char *in = (unsigned char *)&k;
struct foo {
unsigned int n0: 4, n1: 4, n2: 4, n3: 4, n4: 4, n5: 4, n6: 4, n7: 4;
} *out = (struct foo *)&n;
int i;
in[0] = seed[0];
in[1] = seed[1];
in[2] = seed[2];
in[3] = pin[0];
in[4] = pin[1];
in[5] = pin[2];
in[6] = pin[3];
in[7] = pin[4];
for (i = 0; i < 64; i++, n >>= 1, k >>= 1) {
if ((n ^ k) & 0x1)
n ^= m;
}
The 'struct foo' and your 'if' statement have me a little stumped. Does 'n ^=m' take place for all 64 bits or only if the 'if' statement is 1? I'm still trying to figure out where 'm' came from also. In the 'struct foo' I'm not sure what all the '4' are doing.
2001 S60, B5244S, AW55-50SN, FWD (Sold)
Cancer/Illness/Caregiver Support Thread
Cancer/Illness/Caregiver Support Thread
-
vtl
- Posts: 4724
- Joined: 16 August 2012
- Year and Model: 2005 XC70
- Location: Boston
- Has thanked: 114 times
- Been thanked: 603 times
'n' xor 'm' for all bits of 'n' if conditional statement is 1.
This is 0x109028 from your (internet) decompiled code. It is just shifted left and prepended with '1' to actually emit new data (otherwise the cycle will degrade into producing zeroes only - apparently).
':4' are bitfields: https://www.tutorialspoint.com/cprogram ... fields.htm 'struct foo' with 8 4-bit variables replaces a horde of hard to follow shifts and masks in the internet code. It is machine-specific, of course, as it depends on endianness, but I aimed it to run on commodity x86.
-
- Similar Topics
- Replies
- Views
- Last post
-
- 1 Replies
- 6396 Views
-
Last post by RickHaleParker
-
- 5 Replies
- 8644 Views
-
Last post by forumoto






