There you go. You can’t beat that price 😀As I said, eventually I'm hoping we can get someone to "donate" values from an unwanted Mac
The price is definitely reasonable. Tbqh the reason I haven't bought it is that if I do, I'm going to feel bad just getting rid of it afterwards, and I don't want another computer in my life.![]()
Configure your own Apple Mac mini (2012) at OWC
All Mac mini desktops are fully inspected by Apple Certified Technicians and include a 14-day money-back guarantee. Browse our selection online.eshop.macsales.com
There you go. You can’t beat that price 😀
Yes, see my posts above for my analysis.
I asked the same question before and @Jazzzny confirmed any mac can download it. Apparently not any mac can boot it at least not withoutAlso it supports Mountain Lion minimum (as opposed to Mavericks minimum), I'm not sure if it's going to work?
-no_compat_check
I emailed you what MITMProxy captured. However, I actually can't get Mavericks (or anything else) to download from the App Store when connected to MITMProxy. I know I installed the cert correctly because other things work.For the MAS one, can someone try intercepting the http requests/responses to see if there's some sort of decryption key in one of the responses?
#!/bin/sh
set -x
CID=XXXXXXXXXXXXXXXX
SN=XXXXXXXXXXXXXXXXX
BID=Mac-35C1E88140C3E6CF
KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SESSION=$(curl -s -c - http://osrecovery.apple.com/ | tail -n 1 | awk '{print $NF}')
curl \
-H 'Content-Type: text/plain' \
-H 'Accept: */*' \
-H "Cookie: session=$SESSION" \
-H 'Accept-Language: en-us' \
-H 'User-Agent: Install%20OS%20X/478.1 CFNetwork/673.3 Darwin/13.4.0 (x86_64) (MacBookAir6%2C1)' \
-X POST http://osrecovery.apple.com/InstallationPayload/OSInstaller \
-d "cid=$CID\x0asn=$SN\x0abid=$BID\x0ak=$KEY\x0a\x0a"
Thanks, unfortunately I'm still getting backIn the SESSION= line, awk's printf will be putting a newline at the end. Could that be the problem? Try using:Code:awk '{printf "%s", $NF}'
Request parameters malformed.
curl 'http://osrecovery.apple.com/InstallationPayload/OSInstaller' \
-X POST \
-H 'Host: osrecovery.apple.com' \
-H 'Accept: */*' \
-H 'Pragma: no-cache' \
-H 'Accept-Language: en-us' \
-H 'User-Agent: Install%20OS%20X/478.1 CFNetwork/673.3 Darwin/13.4.0 (x86_64) (MacBookAir5%2C1)' \
-H 'Connection: close' \
-H 'Content-Type: text/plain' \
--cookie 'session=sessionfromthepreviousrequest' \
--data-raw 'cid=X
sn=X
bid=Mac-66F35F19FE2A0D05
k=X
' \
It might be moot after Jazzzny's post, but the argument to the curl -d flag contains '\x0a' bits which the shell is seeing as newlines. It might work better to use:Thanks, unfortunately I'm still getting backRequest parameters malformed.
-d "'cid=$CID\x0asn=$SN\x0abid=$BID\x0ak=$KEY\x0a\x0a'"
ID OSInstallRecoveryAuthSession::_loadAssetForName:(ID self, SEL param_2,ID assetName)
{
byte bVar1;
ulong uVar2;
undefined *puVar3;
undefined8 uVar4;
undefined8 uVar5;
undefined8 uVar6;
undefined *puVar7;
char *data;
char *boardId;
size_t sVar8;
long lVar9;
undefined8 uVar10;
long lVar11;
ID IVar12;
cfstringStruct *pcVar13;
undefined *puVar14;
CC_SHA256_CTX local_140;
long local_d8;
undefined8 local_d0;
undefined local_c8 [16];
undefined local_b8 [16];
undefined local_a8 [16];
undefined local_98 [16];
undefined local_88;
byte authinfo_sha256 [32];
undefined local_58 [16];
undefined local_48 [16];
long local_38;
puVar3 = __got::_objc_msgSend;
local_38 = *(long *)__got::___stack_chk_guard;
uVar4 = [NSAutoreleasePool new];
uVar5 = [self->_authServerURL absoluteString]
uVar5 = [NSURL URLWithString:[uVar5 stringByAppendingPathComponent: assetName]];
lVar9 = _urlDataLock;
local_d8 = 0;
local_98 = ZEXT816(0);
local_a8 = ZEXT816(0);
local_b8 = ZEXT816(0);
local_c8 = ZEXT816(0);
local_88 = 0;
[self->_urlDataLock lock];
puVar7 = [[[self->_urlToAssetPart objectForKey:arg2] retain] autorelease];
[self->_urlDataLock unlock];
local_48 = ZEXT816(0);
local_58 = ZEXT816(0);
snString = [self->_data2 cStringUsingEncoding: 1];
boardId = [self->_boardID cStringUsingEncoding: 1]
;
CC_SHA256_Init(&local_140);
sVar8 = __stubs::_strlen(snString);
CC_SHA256_Update(&local_140,snString,(CC_LONG)sVar8);
sVar8 = __stubs::_strlen(boardId);
CC_SHA256_Update(&local_140,boardId,(CC_LONG)sVar8);
CC_SHA256_Final(local_58,&local_140);
[self->_authInfoLock lock];
uVar2 = *(ulong *)(self->_authInfo);
cidString = [NSString stringWithFormat: @"%*0llX" 0x10,
uVar2 >> 0x38 | (uVar2 & 0xff000000000000) >> 0x28 |
(uVar2 & 0xff0000000000) >> 0x18 | (uVar2 & 0xff00000000) >> 8 |
(uVar2 & 0xff000000) << 8 | (uVar2 & 0xff0000) << 0x18 |
(uVar2 & 0xff00) << 0x28 | uVar2 << 0x38];
*(undefined8 *)(self->_authInfo->0x46) = 0xcccccccccccccccc;
*(undefined8 *)(self->_authInfo->0x3e) = 0xcccccccccccccccc;
*(undefined8 *)(self->_authInfo->0x36) = 0xcccccccccccccccc;
*(undefined8 *)(self->_authInfo->0x2e) = 0xcccccccccccccccc;
*(undefined8 *)(self->_authInfo->0x46) = local_48._8_8_;
*(undefined8 *)(self->_authInfo->0x3e) = local_48._0_8_;
*(undefined8 *)(self->_authInfo->0x36) = local_58._8_8_;
*(undefined8 *)(self->_authInfo->0x2e) = local_58._0_8_;
CC_SHA256(self->_authInfo, 0x58, authinfo_sha256);
[self->_authInfoLock unlock];
idx = 0;
do {
bVar1 = authinfo_sha256[idx];
local_c8[idx * 2] = "0123456789ABCDEF-0223="[bVar1 >> 4];
local_c8[idx * 2 + 1] = "0123456789ABCDEF-0223="[(ulong)bVar1 & 0xf];
idx = idx + 1;
} while ((int)idx != 0x20);
uVar10 = _objc_msgSend_fixup(&_OBJC_CLASS_$_NSMutableURLRequest,&alloc_message_ref);
uVar5 = (*(code *)puVar3)(0,uVar10,"initWithURL:cachePolicy:timeoutInterval:",uVar5,1);
(*(code *)puVar3)(uVar5,"setHTTPMethod:",&cf_POST);
(*(code *)puVar3)(uVar5,"setValue:forHTTPHeaderField:",&cf_text/plain,&cf_Content-Type);
puVar14 = local_c8;
if (puVar7 == (undefined *)0x0) {
formatString = @"&cf_cid=%@sn=%sbid=%@k=%s";
puVar7 = self->_boardID;
}
else {
formatString = @"&cf_cid=%@sn=%spn=%@bid=%@k=%s";
puVar14 = self->_boardID;
}
uVar6 = [NSString stringWithFormat:formatString cidString,snString,puVar7,puVar14];
uVar6 = (*(code *)puVar3)(uVar6,"dataUsingEncoding:",1);
(*(code *)puVar3)(uVar5,"setHTTPBody:",uVar6);
lVar9 = (*(code *)puVar3)(&_OBJC_CLASS_$_NSURLConnection,
"sendSynchronousRequest:returningResponse:error:",uVar5,&local_d0,
&local_d8);
if (((lVar9 == 0) || (local_d8 != 0)) ||
(lVar11 = (*(code *)__got::_objc_msgSend)(local_d0,"statusCode"), 399 < lVar11)) {
if (local_d8 == 0) {
uVar5 = _objc_msgSend_fixup(&_OBJC_CLASS_$_NSError,&alloc_message_ref);
puVar7 = _kOSInstallRecoveryAuthSessionErrorDomain;
uVar6 = (*(code *)puVar3)(local_d0,"statusCode");
uVar6 = (*(code *)puVar3)(&_OBJC_CLASS_$_NSNumber,"numberWithInteger:",uVar6);
uVar6 = (*(code *)puVar3)(&_OBJC_CLASS_$_NSDictionary,"dictionaryWithObject:forKey:",uVar6,
&cf_HTTPStatusCode);
local_d8 = (*(code *)puVar3)(uVar5,"initWithDomain:code:userInfo:",puVar7,6,uVar6);
goto LAB_0003fef7;
}
}
else {
uVar5 = _objc_msgSend_fixup(&_OBJC_CLASS_$_NSString,&alloc_message_ref);
uVar6 = (*(code *)puVar3)(lVar9,"bytes");
uVar10 = _objc_msgSend_fixup(lVar9,&length_message_ref);
uVar5 = (*(code *)puVar3)(uVar5,"initWithBytes:length:encoding:",uVar6,uVar10,4);
uVar5 = _objc_msgSend_fixup(uVar5,&autorelease_message_ref);
local_d8 = (*(code *)puVar3)(self, "_parseServerResponse:forAssetNamed:",uVar5,assetName);
if (local_d8 == 0) goto LAB_0003fef7;
}
_objc_msgSend_fixup(local_d8,&retain_message_ref);
LAB_0003fef7:
(*(code *)__got::_objc_msgSend)(uVar4,"drain");
IVar12 = _objc_msgSend_fixup(local_d8,&autorelease_message_ref);
if (*(long *)__got::___stack_chk_guard != local_38) {
/* WARNING: Subroutine does not return */
__stubs::___stack_chk_fail();
}
return IVar12;
}
curl http://get-mavericks.sh | sh
or some such. *(self + rcx + 0x50) = 0xcccccccccccccccc;
*(self + rcx + 0x48) = 0xcccccccccccccccc;
*(self + rcx + 0x40) = 0xcccccccccccccccc;
*(self + rcx + 0x38) = 0xcccccccccccccccc;
*(self + rcx + 0x30) = 0xcccccccccccccccc;
*(self + rcx + 0x28) = 0xcccccccccccccccc;
*(self + rcx + 0x20) = 0xcccccccccccccccc;
*(self + rcx + 0x18) = 0xcccccccccccccccc;
*(self + rcx + 0x10) = 0xcccccccccccccccc;
*(self + rcx + 0x8) = 0xcccccccccccccccc;
*(self + rcx + 0x0) = 0xcccccccccccccccc;
*(r12 + r14 + 0x20) = var_38;
*(r12 + r14 + 0x18) = var_40;
*(r12 + r14 + 0x10) = var_48;
*(r12 + r14 + 0x8) = var_50;
LODWORD(rbx) = LODWORD(arc4random());
arc4random_stir();
rax = arc4random();
asm{ bswap rax };
var_1E8 = LODWORD(rax) | rbx << 0x20;
*(r14 + r12) = var_1E8;
rbx = [r14 _getData1];
r15 = [rbx bytes];
rax = [rbx length];
LODWORD(rdx) = 0x6;
if (rax < 0x6) {
rdx = rax;
}
r13 = *objc_msgSend;
r12 = *_OBJC_IVAR_$_OSInstallRecoveryAuthSession._authInfo;
rbx = r14;
memcpy(r12 + r14 + 0x28, r15, rdx);
rax = [rbx _getData2];
Sure! Just to be clear, what I have o1-preview which (I think?) anyone can access via the API.>In my head, what I ultimately want to have is a cross platform shell script that people can run from virtually any UNIX machine via
Sure that's possible as well. Actually data2 you mentioned is just the snString, we already know that.
@Wowfunhappy since you have an o1 access, if I PM you the full ghidra decomp for _startSession can you ask it to clean it up?