@efffrida/rpc 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FridaRpcClient/package.json +6 -0
- package/FridaRpcServer/package.json +6 -0
- package/LICENSE +674 -0
- package/README.md +3 -0
- package/dist/cjs/FridaRpcClient.js +82 -0
- package/dist/cjs/FridaRpcClient.js.map +1 -0
- package/dist/cjs/FridaRpcServer.js +132 -0
- package/dist/cjs/FridaRpcServer.js.map +1 -0
- package/dist/cjs/index.js +13 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/dts/FridaRpcClient.d.ts +30 -0
- package/dist/dts/FridaRpcClient.d.ts.map +1 -0
- package/dist/dts/FridaRpcServer.d.ts +47 -0
- package/dist/dts/FridaRpcServer.d.ts.map +1 -0
- package/dist/dts/index.d.ts +17 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/esm/FridaRpcClient.js +71 -0
- package/dist/esm/FridaRpcClient.js.map +1 -0
- package/dist/esm/FridaRpcServer.js +121 -0
- package/dist/esm/FridaRpcServer.js.map +1 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +53 -0
- package/src/FridaRpcClient.ts +113 -0
- package/src/FridaRpcServer.ts +165 -0
- package/src/index.ts +17 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.makeProtocolFrida = exports.layerProtocolFrida = void 0;
|
|
7
|
+
var RpcClient = _interopRequireWildcard(require("@effect/rpc/RpcClient"));
|
|
8
|
+
var RpcSerialization = _interopRequireWildcard(require("@effect/rpc/RpcSerialization"));
|
|
9
|
+
var FridaScript = _interopRequireWildcard(require("@efffrida/frida-tools/FridaScript"));
|
|
10
|
+
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
11
|
+
var Function = _interopRequireWildcard(require("effect/Function"));
|
|
12
|
+
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
13
|
+
var Predicate = _interopRequireWildcard(require("effect/Predicate"));
|
|
14
|
+
var Schema = _interopRequireWildcard(require("effect/Schema"));
|
|
15
|
+
var Stream = _interopRequireWildcard(require("effect/Stream"));
|
|
16
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
17
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
18
|
+
/**
|
|
19
|
+
* Implements a Frida RPC client protocol for effect using the frida script
|
|
20
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
21
|
+
* those are shared channels by everybody.
|
|
22
|
+
*
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @category Protocol
|
|
29
|
+
*/
|
|
30
|
+
const makeProtocolFrida = (script, options) => RpcClient.Protocol.make(Effect.fnUntraced(function* (writeResponse) {
|
|
31
|
+
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
32
|
+
const exportName = options?.exportName ?? "rpc";
|
|
33
|
+
const rpcIsAvailableWhen = options?.rpcIsAvailableWhen;
|
|
34
|
+
const send = request => {
|
|
35
|
+
if (request._tag !== "Request") {
|
|
36
|
+
return Effect.void;
|
|
37
|
+
}
|
|
38
|
+
const parser = serialization.unsafeMake();
|
|
39
|
+
if (!serialization.supportsBigInt) {
|
|
40
|
+
const mutable = request;
|
|
41
|
+
mutable.id = request.id.toString();
|
|
42
|
+
}
|
|
43
|
+
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
44
|
+
const encode = Function.compose(parser.encode, Schema.encode(schema));
|
|
45
|
+
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
46
|
+
return encode(request).pipe(Effect.flatMap(script.callExport(exportName))).pipe(Effect.orDie).pipe(Effect.flatMap(incoming => {
|
|
47
|
+
try {
|
|
48
|
+
const responses = decode(incoming);
|
|
49
|
+
if (responses.length === 0) return Effect.void;
|
|
50
|
+
let i = 0;
|
|
51
|
+
return Effect.whileLoop({
|
|
52
|
+
while: () => i < responses.length,
|
|
53
|
+
body: () => writeResponse(responses[i++]),
|
|
54
|
+
step: Function.constVoid
|
|
55
|
+
});
|
|
56
|
+
} catch (defect) {
|
|
57
|
+
return writeResponse({
|
|
58
|
+
_tag: "Defect",
|
|
59
|
+
defect
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
};
|
|
64
|
+
if (Predicate.isNotUndefined(rpcIsAvailableWhen)) {
|
|
65
|
+
yield* script.stream.pipe(Stream.map(({
|
|
66
|
+
message
|
|
67
|
+
}) => message)).pipe(Stream.filter(Predicate.isString)).pipe(Stream.takeUntil(rpcIsAvailableWhen)).pipe(Stream.runDrain);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
send,
|
|
71
|
+
supportsAck: false,
|
|
72
|
+
supportsTransferables: false
|
|
73
|
+
};
|
|
74
|
+
}));
|
|
75
|
+
/**
|
|
76
|
+
* @since 1.0.0
|
|
77
|
+
* @category Layers
|
|
78
|
+
*/
|
|
79
|
+
exports.makeProtocolFrida = makeProtocolFrida;
|
|
80
|
+
const layerProtocolFrida = options => Layer.effect(RpcClient.Protocol, Effect.flatMap(FridaScript.FridaScript, script => makeProtocolFrida(script, options)));
|
|
81
|
+
exports.layerProtocolFrida = layerProtocolFrida;
|
|
82
|
+
//# sourceMappingURL=FridaRpcClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","_interopRequireWildcard","require","RpcSerialization","FridaScript","Effect","Function","Layer","Predicate","Schema","Stream","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","makeProtocolFrida","script","options","Protocol","make","fnUntraced","writeResponse","serialization","exportName","rpcIsAvailableWhen","send","request","_tag","void","parser","unsafeMake","supportsBigInt","mutable","id","toString","schema","Union","String","Uint8Array","encode","compose","decode","decodeUnknownSync","pipe","flatMap","callExport","orDie","incoming","responses","length","whileLoop","while","body","step","constVoid","defect","isNotUndefined","stream","map","message","filter","isString","takeUntil","runDrain","supportsAck","supportsTransferables","exports","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.makeProtocolFridaWithExport = exports.makeProtocolFrida = exports.layerProtocolFrida = void 0;
|
|
7
|
+
var RpcMessage = _interopRequireWildcard(require("@effect/rpc/RpcMessage"));
|
|
8
|
+
var RpcSerialization = _interopRequireWildcard(require("@effect/rpc/RpcSerialization"));
|
|
9
|
+
var RpcServer = _interopRequireWildcard(require("@effect/rpc/RpcServer"));
|
|
10
|
+
var Array = _interopRequireWildcard(require("effect/Array"));
|
|
11
|
+
var Deferred = _interopRequireWildcard(require("effect/Deferred"));
|
|
12
|
+
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
13
|
+
var Function = _interopRequireWildcard(require("effect/Function"));
|
|
14
|
+
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
15
|
+
var Mailbox = _interopRequireWildcard(require("effect/Mailbox"));
|
|
16
|
+
var Predicate = _interopRequireWildcard(require("effect/Predicate"));
|
|
17
|
+
var Runtime = _interopRequireWildcard(require("effect/Runtime"));
|
|
18
|
+
var Schema = _interopRequireWildcard(require("effect/Schema"));
|
|
19
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
20
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
|
+
/**
|
|
22
|
+
* Implements a Frida RPC server protocol for effect using the frida script
|
|
23
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
24
|
+
* those are shared channels by everybody.
|
|
25
|
+
*
|
|
26
|
+
* @since 1.0.0
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @category Protocol
|
|
32
|
+
*/
|
|
33
|
+
const makeProtocolFrida = exports.makeProtocolFrida = /*#__PURE__*/Effect.gen(function* () {
|
|
34
|
+
const runtime = yield* Effect.runtime();
|
|
35
|
+
const disconnects = yield* Mailbox.make();
|
|
36
|
+
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
37
|
+
let clientId = 0;
|
|
38
|
+
const clients = new Map();
|
|
39
|
+
let writeRequest;
|
|
40
|
+
const rpcExport = async function (request) {
|
|
41
|
+
const id = clientId++;
|
|
42
|
+
const parser = serialization.unsafeMake();
|
|
43
|
+
const chunks = Array.empty();
|
|
44
|
+
const deferred = await Runtime.runPromise(runtime, Deferred.make());
|
|
45
|
+
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
46
|
+
const encode = Function.compose(parser.encode, Schema.encodeSync(schema));
|
|
47
|
+
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
48
|
+
clients.set(id, {
|
|
49
|
+
end: Effect.void,
|
|
50
|
+
write: response => {
|
|
51
|
+
try {
|
|
52
|
+
if (!serialization.supportsBigInt && "requestId" in response) {
|
|
53
|
+
const mutable = response;
|
|
54
|
+
mutable.requestId = mutable.requestId.toString();
|
|
55
|
+
}
|
|
56
|
+
chunks.push(encode(response));
|
|
57
|
+
if (Predicate.isTagged(response, "Chunk")) return Effect.void;
|
|
58
|
+
const final = Predicate.isString(chunks[0]) ? chunks.join("") : Array.flatten(chunks);
|
|
59
|
+
return Deferred.succeed(deferred, final);
|
|
60
|
+
} catch (cause) {
|
|
61
|
+
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
62
|
+
const encoded = encode(message);
|
|
63
|
+
return Deferred.succeed(deferred, encoded);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
try {
|
|
68
|
+
const decoded = decode(request);
|
|
69
|
+
if (decoded.length === 0) return "";
|
|
70
|
+
let i = 0;
|
|
71
|
+
await Runtime.runPromise(runtime, Effect.whileLoop({
|
|
72
|
+
while: () => i < decoded.length,
|
|
73
|
+
body: () => writeRequest(id, decoded[i++]),
|
|
74
|
+
step: Function.constVoid
|
|
75
|
+
}));
|
|
76
|
+
} catch (cause) {
|
|
77
|
+
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
78
|
+
const encoded = encode(message);
|
|
79
|
+
return Promise.resolve(encoded);
|
|
80
|
+
}
|
|
81
|
+
return Runtime.runPromise(runtime, deferred);
|
|
82
|
+
};
|
|
83
|
+
const protocol = yield* RpcServer.Protocol.make(writeRequest_ => {
|
|
84
|
+
writeRequest = writeRequest_;
|
|
85
|
+
return Effect.succeed({
|
|
86
|
+
disconnects,
|
|
87
|
+
send: (clientId, response) => {
|
|
88
|
+
const client = clients.get(clientId);
|
|
89
|
+
if (!client) return Effect.void;
|
|
90
|
+
return client.write(response);
|
|
91
|
+
},
|
|
92
|
+
end(clientId) {
|
|
93
|
+
const client = clients.get(clientId);
|
|
94
|
+
if (!client) return Effect.void;
|
|
95
|
+
clients.delete(clientId);
|
|
96
|
+
return client.end;
|
|
97
|
+
},
|
|
98
|
+
initialMessage: Effect.succeedNone,
|
|
99
|
+
supportsAck: false,
|
|
100
|
+
supportsTransferables: false,
|
|
101
|
+
supportsSpanPropagation: false
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
protocol,
|
|
106
|
+
rpcExport
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* @since 1.0.0
|
|
111
|
+
* @category Protocol
|
|
112
|
+
*/
|
|
113
|
+
const makeProtocolFridaWithExport = options => Effect.gen(function* () {
|
|
114
|
+
const {
|
|
115
|
+
protocol,
|
|
116
|
+
rpcExport
|
|
117
|
+
} = yield* makeProtocolFrida;
|
|
118
|
+
rpc.exports[options?.exportName ?? "rpc"] = rpcExport;
|
|
119
|
+
const messageOnRpcAvailable = options?.messageOnRpcAvailable;
|
|
120
|
+
if (Predicate.isNotUndefined(messageOnRpcAvailable)) {
|
|
121
|
+
send(messageOnRpcAvailable);
|
|
122
|
+
}
|
|
123
|
+
return protocol;
|
|
124
|
+
});
|
|
125
|
+
/**
|
|
126
|
+
* @since 1.0.0
|
|
127
|
+
* @category Layer
|
|
128
|
+
*/
|
|
129
|
+
exports.makeProtocolFridaWithExport = makeProtocolFridaWithExport;
|
|
130
|
+
const layerProtocolFrida = options => Layer.effect(RpcServer.Protocol, makeProtocolFridaWithExport(options));
|
|
131
|
+
exports.layerProtocolFrida = layerProtocolFrida;
|
|
132
|
+
//# sourceMappingURL=FridaRpcServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","_interopRequireWildcard","require","RpcSerialization","RpcServer","Array","Deferred","Effect","Function","Layer","Mailbox","Predicate","Runtime","Schema","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","makeProtocolFrida","exports","gen","runtime","disconnects","make","serialization","clientId","clients","Map","writeRequest","rpcExport","request","id","parser","unsafeMake","chunks","empty","deferred","runPromise","schema","Union","String","Uint8Array","encode","compose","encodeSync","decode","decodeUnknownSync","end","void","write","response","supportsBigInt","mutable","requestId","toString","push","isTagged","final","isString","join","flatten","succeed","cause","message","ResponseDefectEncoded","encoded","decoded","length","whileLoop","while","body","step","constVoid","Promise","resolve","protocol","Protocol","writeRequest_","send","client","delete","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation","makeProtocolFridaWithExport","options","rpc","exportName","messageOnRpcAvailable","isNotUndefined","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FridaRpcServer = exports.FridaRpcClient = void 0;
|
|
7
|
+
var _FridaRpcClient = _interopRequireWildcard(require("./FridaRpcClient.js"));
|
|
8
|
+
exports.FridaRpcClient = _FridaRpcClient;
|
|
9
|
+
var _FridaRpcServer = _interopRequireWildcard(require("./FridaRpcServer.js"));
|
|
10
|
+
exports.FridaRpcServer = _FridaRpcServer;
|
|
11
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
12
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements a Frida RPC client protocol for effect using the frida script
|
|
3
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
+
* those are shared channels by everybody.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import type * as FridaSessionError from "@efffrida/frida-tools/FridaSessionError";
|
|
9
|
+
import * as RpcClient from "@effect/rpc/RpcClient";
|
|
10
|
+
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
11
|
+
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @category Protocol
|
|
17
|
+
*/
|
|
18
|
+
export declare const makeProtocolFrida: (script: FridaScript.FridaScript, options?: {
|
|
19
|
+
readonly exportName?: string | undefined;
|
|
20
|
+
readonly rpcIsAvailableWhen?: ((message: string) => boolean) | undefined;
|
|
21
|
+
} | undefined) => Effect.Effect<RpcClient.Protocol["Type"], FridaSessionError.FridaSessionError, RpcSerialization.RpcSerialization>;
|
|
22
|
+
/**
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
* @category Layers
|
|
25
|
+
*/
|
|
26
|
+
export declare const layerProtocolFrida: (options?: {
|
|
27
|
+
readonly exportName?: string | undefined;
|
|
28
|
+
readonly rpcIsAvailableWhen?: ((message: string) => boolean) | undefined;
|
|
29
|
+
} | undefined) => Layer.Layer<RpcClient.Protocol, FridaSessionError.FridaSessionError, RpcSerialization.RpcSerialization | FridaScript.FridaScript>;
|
|
30
|
+
//# sourceMappingURL=FridaRpcClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.d.ts","sourceRoot":"","sources":["../../src/FridaRpcClient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAGlF,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAKtC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,QAAQ,WAAW,CAAC,WAAW,EAC/B,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,CAyD9G,CAAC;AAEN;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,KAAK,CAAC,KAAK,CACV,SAAS,CAAC,QAAQ,EAClB,iBAAiB,CAAC,iBAAiB,EACnC,gBAAgB,CAAC,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAK1D,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements a Frida RPC server protocol for effect using the frida script
|
|
3
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
+
* those are shared channels by everybody.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import * as RpcMessage from "@effect/rpc/RpcMessage";
|
|
9
|
+
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
10
|
+
import * as RpcServer from "@effect/rpc/RpcServer";
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as Layer from "effect/Layer";
|
|
13
|
+
import * as Mailbox from "effect/Mailbox";
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @category Protocol
|
|
17
|
+
*/
|
|
18
|
+
export declare const makeProtocolFrida: Effect.Effect<{
|
|
19
|
+
protocol: RpcServer.Protocol["Type"];
|
|
20
|
+
rpcExport: (request: string | Uint8Array) => Promise<string | ReadonlyArray<number>>;
|
|
21
|
+
}, never, RpcSerialization.RpcSerialization>;
|
|
22
|
+
/**
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
* @category Protocol
|
|
25
|
+
*/
|
|
26
|
+
export declare const makeProtocolFridaWithExport: (options?: {
|
|
27
|
+
readonly exportName?: string | undefined;
|
|
28
|
+
readonly messageOnRpcAvailable?: string | undefined;
|
|
29
|
+
} | undefined) => Effect.Effect<{
|
|
30
|
+
readonly run: (f: (clientId: number, data: RpcMessage.FromClientEncoded) => Effect.Effect<void>) => Effect.Effect<never>;
|
|
31
|
+
readonly disconnects: Mailbox.ReadonlyMailbox<number>;
|
|
32
|
+
readonly send: (clientId: number, response: RpcMessage.FromServerEncoded, transferables?: ReadonlyArray<globalThis.Transferable>) => Effect.Effect<void>;
|
|
33
|
+
readonly end: (clientId: number) => Effect.Effect<void>;
|
|
34
|
+
readonly initialMessage: Effect.Effect<import("effect/Option").Option<unknown>>;
|
|
35
|
+
readonly supportsAck: boolean;
|
|
36
|
+
readonly supportsTransferables: boolean;
|
|
37
|
+
readonly supportsSpanPropagation: boolean;
|
|
38
|
+
}, never, RpcSerialization.RpcSerialization>;
|
|
39
|
+
/**
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
* @category Layer
|
|
42
|
+
*/
|
|
43
|
+
export declare const layerProtocolFrida: (options?: {
|
|
44
|
+
readonly exportName?: string | undefined;
|
|
45
|
+
readonly messageOnRpcAvailable?: string | undefined;
|
|
46
|
+
} | undefined) => Layer.Layer<RpcServer.Protocol, never, RpcSerialization.RpcSerialization>;
|
|
47
|
+
//# sourceMappingURL=FridaRpcServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FridaRpcServer.d.ts","sourceRoot":"","sources":["../../src/FridaRpcServer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AAGnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAK1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,CACzC;IACI,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;CACxF,EACD,KAAK,EACL,gBAAgB,CAAC,gBAAgB,CA+FnC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GACpC,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD,GACD,SAAS;;;2FAtEM,CAAC;;;;;;4CAgFpB,CAAC;AAEP;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD,GACD,SAAS,KAChB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CACD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements a Frida RPC client protocol for effect using the frida script
|
|
3
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
+
* those are shared channels by everybody.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export * as FridaRpcClient from "./FridaRpcClient.js";
|
|
9
|
+
/**
|
|
10
|
+
* Implements a Frida RPC server protocol for effect using the frida script
|
|
11
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
12
|
+
* those are shared channels by everybody.
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export * as FridaRpcServer from "./FridaRpcServer.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;GAMG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements a Frida RPC client protocol for effect using the frida script
|
|
3
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
+
* those are shared channels by everybody.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import * as RpcClient from "@effect/rpc/RpcClient";
|
|
9
|
+
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
10
|
+
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as Function from "effect/Function";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
import * as Predicate from "effect/Predicate";
|
|
15
|
+
import * as Schema from "effect/Schema";
|
|
16
|
+
import * as Stream from "effect/Stream";
|
|
17
|
+
/**
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
* @category Protocol
|
|
20
|
+
*/
|
|
21
|
+
export const makeProtocolFrida = (script, options) => RpcClient.Protocol.make(Effect.fnUntraced(function* (writeResponse) {
|
|
22
|
+
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
23
|
+
const exportName = options?.exportName ?? "rpc";
|
|
24
|
+
const rpcIsAvailableWhen = options?.rpcIsAvailableWhen;
|
|
25
|
+
const send = request => {
|
|
26
|
+
if (request._tag !== "Request") {
|
|
27
|
+
return Effect.void;
|
|
28
|
+
}
|
|
29
|
+
const parser = serialization.unsafeMake();
|
|
30
|
+
if (!serialization.supportsBigInt) {
|
|
31
|
+
const mutable = request;
|
|
32
|
+
mutable.id = request.id.toString();
|
|
33
|
+
}
|
|
34
|
+
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
35
|
+
const encode = Function.compose(parser.encode, Schema.encode(schema));
|
|
36
|
+
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
37
|
+
return encode(request).pipe(Effect.flatMap(script.callExport(exportName))).pipe(Effect.orDie).pipe(Effect.flatMap(incoming => {
|
|
38
|
+
try {
|
|
39
|
+
const responses = decode(incoming);
|
|
40
|
+
if (responses.length === 0) return Effect.void;
|
|
41
|
+
let i = 0;
|
|
42
|
+
return Effect.whileLoop({
|
|
43
|
+
while: () => i < responses.length,
|
|
44
|
+
body: () => writeResponse(responses[i++]),
|
|
45
|
+
step: Function.constVoid
|
|
46
|
+
});
|
|
47
|
+
} catch (defect) {
|
|
48
|
+
return writeResponse({
|
|
49
|
+
_tag: "Defect",
|
|
50
|
+
defect
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}));
|
|
54
|
+
};
|
|
55
|
+
if (Predicate.isNotUndefined(rpcIsAvailableWhen)) {
|
|
56
|
+
yield* script.stream.pipe(Stream.map(({
|
|
57
|
+
message
|
|
58
|
+
}) => message)).pipe(Stream.filter(Predicate.isString)).pipe(Stream.takeUntil(rpcIsAvailableWhen)).pipe(Stream.runDrain);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
send,
|
|
62
|
+
supportsAck: false,
|
|
63
|
+
supportsTransferables: false
|
|
64
|
+
};
|
|
65
|
+
}));
|
|
66
|
+
/**
|
|
67
|
+
* @since 1.0.0
|
|
68
|
+
* @category Layers
|
|
69
|
+
*/
|
|
70
|
+
export const layerProtocolFrida = options => Layer.effect(RpcClient.Protocol, Effect.flatMap(FridaScript.FridaScript, script => makeProtocolFrida(script, options)));
|
|
71
|
+
//# sourceMappingURL=FridaRpcClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","RpcSerialization","FridaScript","Effect","Function","Layer","Predicate","Schema","Stream","makeProtocolFrida","script","options","Protocol","make","fnUntraced","writeResponse","serialization","exportName","rpcIsAvailableWhen","send","request","_tag","void","parser","unsafeMake","supportsBigInt","mutable","id","toString","schema","Union","String","Uint8Array","encode","compose","decode","decodeUnknownSync","pipe","flatMap","callExport","orDie","incoming","responses","length","i","whileLoop","while","body","step","constVoid","defect","isNotUndefined","stream","map","message","filter","isString","takeUntil","runDrain","supportsAck","supportsTransferables","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements a Frida RPC server protocol for effect using the frida script
|
|
3
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
+
* those are shared channels by everybody.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import * as RpcMessage from "@effect/rpc/RpcMessage";
|
|
9
|
+
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
10
|
+
import * as RpcServer from "@effect/rpc/RpcServer";
|
|
11
|
+
import * as Array from "effect/Array";
|
|
12
|
+
import * as Deferred from "effect/Deferred";
|
|
13
|
+
import * as Effect from "effect/Effect";
|
|
14
|
+
import * as Function from "effect/Function";
|
|
15
|
+
import * as Layer from "effect/Layer";
|
|
16
|
+
import * as Mailbox from "effect/Mailbox";
|
|
17
|
+
import * as Predicate from "effect/Predicate";
|
|
18
|
+
import * as Runtime from "effect/Runtime";
|
|
19
|
+
import * as Schema from "effect/Schema";
|
|
20
|
+
/**
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
* @category Protocol
|
|
23
|
+
*/
|
|
24
|
+
export const makeProtocolFrida = /*#__PURE__*/Effect.gen(function* () {
|
|
25
|
+
const runtime = yield* Effect.runtime();
|
|
26
|
+
const disconnects = yield* Mailbox.make();
|
|
27
|
+
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
28
|
+
let clientId = 0;
|
|
29
|
+
const clients = new Map();
|
|
30
|
+
let writeRequest;
|
|
31
|
+
const rpcExport = async function (request) {
|
|
32
|
+
const id = clientId++;
|
|
33
|
+
const parser = serialization.unsafeMake();
|
|
34
|
+
const chunks = Array.empty();
|
|
35
|
+
const deferred = await Runtime.runPromise(runtime, Deferred.make());
|
|
36
|
+
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
37
|
+
const encode = Function.compose(parser.encode, Schema.encodeSync(schema));
|
|
38
|
+
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
39
|
+
clients.set(id, {
|
|
40
|
+
end: Effect.void,
|
|
41
|
+
write: response => {
|
|
42
|
+
try {
|
|
43
|
+
if (!serialization.supportsBigInt && "requestId" in response) {
|
|
44
|
+
const mutable = response;
|
|
45
|
+
mutable.requestId = mutable.requestId.toString();
|
|
46
|
+
}
|
|
47
|
+
chunks.push(encode(response));
|
|
48
|
+
if (Predicate.isTagged(response, "Chunk")) return Effect.void;
|
|
49
|
+
const final = Predicate.isString(chunks[0]) ? chunks.join("") : Array.flatten(chunks);
|
|
50
|
+
return Deferred.succeed(deferred, final);
|
|
51
|
+
} catch (cause) {
|
|
52
|
+
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
53
|
+
const encoded = encode(message);
|
|
54
|
+
return Deferred.succeed(deferred, encoded);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
const decoded = decode(request);
|
|
60
|
+
if (decoded.length === 0) return "";
|
|
61
|
+
let i = 0;
|
|
62
|
+
await Runtime.runPromise(runtime, Effect.whileLoop({
|
|
63
|
+
while: () => i < decoded.length,
|
|
64
|
+
body: () => writeRequest(id, decoded[i++]),
|
|
65
|
+
step: Function.constVoid
|
|
66
|
+
}));
|
|
67
|
+
} catch (cause) {
|
|
68
|
+
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
69
|
+
const encoded = encode(message);
|
|
70
|
+
return Promise.resolve(encoded);
|
|
71
|
+
}
|
|
72
|
+
return Runtime.runPromise(runtime, deferred);
|
|
73
|
+
};
|
|
74
|
+
const protocol = yield* RpcServer.Protocol.make(writeRequest_ => {
|
|
75
|
+
writeRequest = writeRequest_;
|
|
76
|
+
return Effect.succeed({
|
|
77
|
+
disconnects,
|
|
78
|
+
send: (clientId, response) => {
|
|
79
|
+
const client = clients.get(clientId);
|
|
80
|
+
if (!client) return Effect.void;
|
|
81
|
+
return client.write(response);
|
|
82
|
+
},
|
|
83
|
+
end(clientId) {
|
|
84
|
+
const client = clients.get(clientId);
|
|
85
|
+
if (!client) return Effect.void;
|
|
86
|
+
clients.delete(clientId);
|
|
87
|
+
return client.end;
|
|
88
|
+
},
|
|
89
|
+
initialMessage: Effect.succeedNone,
|
|
90
|
+
supportsAck: false,
|
|
91
|
+
supportsTransferables: false,
|
|
92
|
+
supportsSpanPropagation: false
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
protocol,
|
|
97
|
+
rpcExport
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
/**
|
|
101
|
+
* @since 1.0.0
|
|
102
|
+
* @category Protocol
|
|
103
|
+
*/
|
|
104
|
+
export const makeProtocolFridaWithExport = options => Effect.gen(function* () {
|
|
105
|
+
const {
|
|
106
|
+
protocol,
|
|
107
|
+
rpcExport
|
|
108
|
+
} = yield* makeProtocolFrida;
|
|
109
|
+
rpc.exports[options?.exportName ?? "rpc"] = rpcExport;
|
|
110
|
+
const messageOnRpcAvailable = options?.messageOnRpcAvailable;
|
|
111
|
+
if (Predicate.isNotUndefined(messageOnRpcAvailable)) {
|
|
112
|
+
send(messageOnRpcAvailable);
|
|
113
|
+
}
|
|
114
|
+
return protocol;
|
|
115
|
+
});
|
|
116
|
+
/**
|
|
117
|
+
* @since 1.0.0
|
|
118
|
+
* @category Layer
|
|
119
|
+
*/
|
|
120
|
+
export const layerProtocolFrida = options => Layer.effect(RpcServer.Protocol, makeProtocolFridaWithExport(options));
|
|
121
|
+
//# sourceMappingURL=FridaRpcServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","RpcSerialization","RpcServer","Array","Deferred","Effect","Function","Layer","Mailbox","Predicate","Runtime","Schema","makeProtocolFrida","gen","runtime","disconnects","make","serialization","clientId","clients","Map","writeRequest","rpcExport","request","id","parser","unsafeMake","chunks","empty","deferred","runPromise","schema","Union","String","Uint8Array","encode","compose","encodeSync","decode","decodeUnknownSync","set","end","void","write","response","supportsBigInt","mutable","requestId","toString","push","isTagged","final","isString","join","flatten","succeed","cause","message","ResponseDefectEncoded","encoded","decoded","length","i","whileLoop","while","body","step","constVoid","Promise","resolve","protocol","Protocol","writeRequest_","send","client","get","delete","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation","makeProtocolFridaWithExport","options","rpc","exports","exportName","messageOnRpcAvailable","isNotUndefined","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements a Frida RPC client protocol for effect using the frida script
|
|
3
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
+
* those are shared channels by everybody.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export * as FridaRpcClient from "./FridaRpcClient.js";
|
|
9
|
+
/**
|
|
10
|
+
* Implements a Frida RPC server protocol for effect using the frida script
|
|
11
|
+
* exports. The reason we don't use the send/recv script channels is because
|
|
12
|
+
* those are shared channels by everybody.
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export * as FridaRpcServer from "./FridaRpcServer.js";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["FridaRpcClient","FridaRpcServer"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;AAOA,OAAO,KAAKA,cAAc,MAAM,qBAAqB;AAErD;;;;;;;AAOA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
|