[AltServer] Handles EnableUnsignedCodeExecutionRequest

Allows sideloaded apps to connect to AltServer and enable JIT execution.
This commit is contained in:
Riley Testut
2021-06-04 13:01:42 -07:00
parent 07ef7ae18f
commit e0b50ac80c
5 changed files with 105 additions and 3 deletions

View File

@@ -20,6 +20,8 @@ public protocol RequestHandler
completionHandler: @escaping (Result<RemoveProvisioningProfilesResponse, Error>) -> Void)
func handleRemoveAppRequest(_ request: RemoveAppRequest, for connection: Connection, completionHandler: @escaping (Result<RemoveAppResponse, Error>) -> Void)
func handleEnableUnsignedCodeExecutionRequest(_ request: EnableUnsignedCodeExecutionRequest, for connection: Connection, completionHandler: @escaping (Result<EnableUnsignedCodeExecutionResponse, Error>) -> Void)
}
public protocol ConnectionHandler: AnyObject
@@ -152,6 +154,11 @@ private extension ConnectionManager
finish(result)
}
case .success(.enableUnsignedCodeExecution(let request)):
self.requestHandler.handleEnableUnsignedCodeExecutionRequest(request, for: connection) { (result) in
finish(result)
}
case .success(.unknown):
finish(Result<ErrorResponse, Error>.failure(ALTServerError(.unknownRequest)))
}

View File

@@ -25,6 +25,7 @@ public enum ServerRequest: Decodable
case installProvisioningProfiles(InstallProvisioningProfilesRequest)
case removeProvisioningProfiles(RemoveProvisioningProfilesRequest)
case removeApp(RemoveAppRequest)
case enableUnsignedCodeExecution(EnableUnsignedCodeExecutionRequest)
case unknown(identifier: String, version: Int)
var identifier: String {
@@ -36,6 +37,7 @@ public enum ServerRequest: Decodable
case .installProvisioningProfiles(let request): return request.identifier
case .removeProvisioningProfiles(let request): return request.identifier
case .removeApp(let request): return request.identifier
case .enableUnsignedCodeExecution(let request): return request.identifier
case .unknown(let identifier, _): return identifier
}
}
@@ -49,6 +51,7 @@ public enum ServerRequest: Decodable
case .installProvisioningProfiles(let request): return request.version
case .removeProvisioningProfiles(let request): return request.version
case .removeApp(let request): return request.version
case .enableUnsignedCodeExecution(let request): return request.version
case .unknown(_, let version): return version
}
}
@@ -92,6 +95,10 @@ public enum ServerRequest: Decodable
let request = try RemoveAppRequest(from: decoder)
self = .removeApp(request)
case "EnableUnsignedCodeExecutionRequest":
let request = try EnableUnsignedCodeExecutionRequest(from: decoder)
self = .enableUnsignedCodeExecution(request)
default:
self = .unknown(identifier: identifier, version: version)
}
@@ -105,6 +112,7 @@ public enum ServerResponse: Decodable
case installProvisioningProfiles(InstallProvisioningProfilesResponse)
case removeProvisioningProfiles(RemoveProvisioningProfilesResponse)
case removeApp(RemoveAppResponse)
case enableUnsignedCodeExecution(EnableUnsignedCodeExecutionResponse)
case error(ErrorResponse)
case unknown(identifier: String, version: Int)
@@ -116,6 +124,7 @@ public enum ServerResponse: Decodable
case .installProvisioningProfiles(let response): return response.identifier
case .removeProvisioningProfiles(let response): return response.identifier
case .removeApp(let response): return response.identifier
case .enableUnsignedCodeExecution(let response): return response.identifier
case .error(let response): return response.identifier
case .unknown(let identifier, _): return identifier
}
@@ -129,6 +138,7 @@ public enum ServerResponse: Decodable
case .installProvisioningProfiles(let response): return response.version
case .removeProvisioningProfiles(let response): return response.version
case .removeApp(let response): return response.version
case .enableUnsignedCodeExecution(let response): return response.version
case .error(let response): return response.version
case .unknown(_, let version): return version
}
@@ -169,6 +179,10 @@ public enum ServerResponse: Decodable
let response = try RemoveAppResponse(from: decoder)
self = .removeApp(response)
case "EnableUnsignedCodeExecutionResponse":
let response = try EnableUnsignedCodeExecutionResponse(from: decoder)
self = .enableUnsignedCodeExecution(response)
case "ErrorResponse":
let response = try ErrorResponse(from: decoder)
self = .error(response)
@@ -424,3 +438,28 @@ public struct RemoveAppResponse: ServerMessageProtocol
{
}
}
public struct EnableUnsignedCodeExecutionRequest: ServerMessageProtocol
{
public var version = 1
public var identifier = "EnableUnsignedCodeExecutionRequest"
public var udid: String
public var processID: Int
public init(udid: String, processID: Int)
{
self.udid = udid
self.processID = processID
}
}
public struct EnableUnsignedCodeExecutionResponse: ServerMessageProtocol
{
public var version = 1
public var identifier = "EnableUnsignedCodeExecutionResponse"
public init()
{
}
}