rendered paste bodyint __usercall sendCommandToDevice<eax>(AMRecoveryModeDevice *amrecd<esi>,void *cfsCommand){ char *_szCommand; // eax@1 unsigned int v3; // eax@3 int result; // eax@4 unsigned int _cmdLen; // ebp@5 signed int v6; // eax@10 int _writeSize; // edi@13 char v8; // cl@2 unsigned __int8 v9; // dl@9 AppleDevice *v10; // ebx@9 AppleDevice *v11; // ebx@14 char *buffer; // [sp+Ch] [bp-434h]@1 unsigned int v13; // [sp+43Ch] [bp-4h]@1 char szCommand[1028]; // [sp+38h] [bp-408h]@1 int v15; // [sp+18h] [bp-428h]@8 ControlRequest cmdRequest; // [sp+20h] [bp-420h]@9 DWORD pbufsize; // [sp+10h] [bp-430h]@9 ControlResponse cmdResponse; // [sp+2Ch] [bp-414h]@10 char ctlNo; // [sp+1Ch] [bp-424h]@14 v13 = (unsigned int)&buffer ^ security_cookie; CFStringGetCString(cfsCommand, szCommand, 1024, 134217984); strcat_s(szCommand, 0x400u, L"\n"); _szCommand = szCommand; do v8 = *_szCommand++; while ( v8 ); v3 = _szCommand - &szCommand[1]; if ( v3 < 0x400 ) { _cmdLen = (v3 + 15) & 0xFFFFFFF0; if ( _cmdLen > v3 ) memset(&szCommand[v3], 0, _cmdLen - v3); buffer = szCommand; if ( _cmdLen > 0 ) { v15 = 0; do { v9 = amrecd->nControlWrite; v10 = amrecd->m_pAppleDevicePipe; cmdRequest.userData2 = v15; pbufsize = 12; cmdRequest.nReqNo = 3; cmdRequest.wMagic = 4660; cmdRequest.nExtraSize = 8; cmdRequest.userData1 = _cmdLen; if ( AMRUSBInterfaceWritePipe(&cmdRequest, 0xCu, v10, v9) ) break; v6 = AMRUSBInterfaceReadPipe(&cmdResponse, &pbufsize, amrecd->m_pAppleDevicePipe, amrecd->nControlRead); if ( v6 ) break; if ( pbufsize == v6 || (_BYTE)cmdResponse.nExtraSize != 8 ) break; _writeSize = cmdResponse.userData1; if ( cmdResponse.userData1 ) { v11 = amrecd->m_pAppleDevicePipe; ctlNo = amrecd->nExtraDataWrite; if ( AMRUSBInterfaceWritePipe(buffer, cmdResponse.userData1, v11, ctlNo) ) break; _cmdLen -= _writeSize; buffer += _writeSize; } } while ( _cmdLen ); } result = -(_cmdLen != 0) & 6; } else { result = 1; } return result;}