@corellium/corellium-cli 1.2.9 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -15,8 +15,12 @@ npm install -g @corellium/corellium-cli
15
15
  ## Development
16
16
 
17
17
  1. Clone the repo
18
- 2. Install dependencies: `npm install`
19
- 3. Link with `npm link`
18
+ 2. Ensure NPM has access to private package registery for dependencies
19
+ - Create a Personal Access Token with read_api scope in GitLab.
20
+ - Authenticate to the registry. (in ~/.npmrc): ``npm config set -- //[FQDN HERE]/api/v4/packages/npm/:_authToken=[TOKEN HERE]``
21
+ - Set the registry. (in ~/.npmrc): `npm config set @corellium:registry https://[FQDN HERE]/api/v4/packages/npm/`
22
+ 3. Install dependencies: `npm ci`
23
+ 4. Link with `npm link`
20
24
 
21
25
  *Note*: if you are running it locally create `.env` file and put the following line there `NODE_TLS_REJECT_UNAUTHORIZED=0`
22
26
 
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" ?>
2
2
  <!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
3
- <coverage lines-valid="0" lines-covered="0" line-rate="NaN" branches-valid="0" branches-covered="0" branch-rate="NaN" timestamp="1715965392380" complexity="0" version="0.1">
3
+ <coverage lines-valid="0" lines-covered="0" line-rate="NaN" branches-valid="0" branches-covered="0" branch-rate="NaN" timestamp="1716906748524" complexity="0" version="0.1">
4
4
  <sources>
5
5
  <source>/builds/middleware/corellium-cli</source>
6
6
  </sources>
@@ -86,7 +86,7 @@
86
86
  <div class='footer quiet pad2 space-top1 center small'>
87
87
  Code coverage generated by
88
88
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
89
- at 2024-05-17T17:03:12.387Z
89
+ at 2024-05-28T14:32:28.531Z
90
90
  </div>
91
91
  <script src="prettify.js"></script>
92
92
  <script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corellium/corellium-cli",
3
- "version": "1.2.9",
3
+ "version": "1.3.1",
4
4
  "description": "Corellium CLI Tool",
5
5
  "scripts": {
6
6
  "corellium": "node index.js",
@@ -25,6 +25,9 @@ class AgentCLI extends Client {
25
25
 
26
26
  ready = async () => await this._fetch('GET', `${this.agentBasePath()}/app/ready/`, {})
27
27
 
28
+ // only for iOS
29
+ unlock = async () => await this._fetch('POST', `${this.agentBasePath()}/system/unlock/`)
30
+
28
31
  /**
29
32
  * List files on device
30
33
  * @returns {Promise<Array<{object}>>}
@@ -6,7 +6,7 @@ const { getApi } = require('../../utils')
6
6
  async function builder (yargs) {
7
7
  yargs.option('project', {
8
8
  type: 'input',
9
- describe: 'Project Id',
9
+ describe: 'Project UUID',
10
10
  string: true
11
11
  })
12
12
  .option('format', {
@@ -22,7 +22,7 @@ async function builder (yargs) {
22
22
  })
23
23
  .option('instance', {
24
24
  type: 'input',
25
- describe: 'Instance Id',
25
+ describe: 'Instance UUID',
26
26
  string: true
27
27
  })
28
28
  .positional('imageName', {
@@ -33,11 +33,13 @@ async function builder (yargs) {
33
33
  .positional('imageType', {
34
34
  type: 'string',
35
35
  describe: 'Image type to upload',
36
- demandOption: true
36
+ demandOption: true,
37
+ choices: ['fwbinary', 'kernel', 'devicetree', 'ramdisk', 'loaderfile', 'sepf']
37
38
  })
38
39
  .positional('encoding', {
39
40
  type: 'string',
40
- describe: 'Encoding, e.g. plain or encrypted'
41
+ describe: 'Encoding',
42
+ choices: ['plain', 'encrypted']
41
43
  })
42
44
  .positional('file', {
43
45
  type: 'string',
@@ -74,5 +76,5 @@ module.exports = {
74
76
  builder,
75
77
  handler,
76
78
  command: 'create [project] [instance] <imageName> <imageType> <encoding> <file>',
77
- describe: 'Create image and optionally associate with a project/instance'
79
+ describe: 'Create image and associate it with a project or instance (you must specify either the project or instance UUID)'
78
80
  }
@@ -0,0 +1,44 @@
1
+ const { handleError } = require('../../error')
2
+ const { getApi } = require('../../utils')
3
+
4
+ async function builder (yargs) {
5
+ yargs
6
+ .option('instance', {
7
+ alias: 'i',
8
+ type: 'string',
9
+ demandOption: true,
10
+ describe: 'virtual device id'
11
+ })
12
+ .option('verbose', {
13
+ alias: 'v',
14
+ type: 'boolean',
15
+ describe: 'Console will receive verbose error output'
16
+ })
17
+ }
18
+
19
+ async function handler (argv) {
20
+ const api = await getApi()
21
+
22
+ try {
23
+ const instance = await api.v1GetInstance(argv.instance)
24
+ if (!instance) {
25
+ throw new Error(`Instance ${argv.instance} not found`)
26
+ }
27
+ console.log(JSON.stringify({
28
+ id: instance.id,
29
+ flavor: instance.flavor,
30
+ type: instance.type,
31
+ state: instance.state,
32
+ os: instance.os
33
+ }))
34
+ } catch (err) {
35
+ handleError(err, 'Get instance failed', argv.verbose)
36
+ }
37
+ }
38
+
39
+ module.exports = {
40
+ builder,
41
+ handler,
42
+ command: 'get',
43
+ describe: 'Get instance'
44
+ }
@@ -10,7 +10,9 @@ const subcommands = [
10
10
  require('./ready'),
11
11
  require('./file'),
12
12
  require('./apps'),
13
- require('./input')
13
+ require('./input'),
14
+ require('./unlock'),
15
+ require('./get')
14
16
  ]
15
17
 
16
18
  let _yargs
@@ -0,0 +1,51 @@
1
+ // this is for iOS only
2
+
3
+ const chalk = require('chalk')
4
+ const AgentCLI = require('../../clients/Agent')
5
+ const { handleError } = require('../../error')
6
+ const { getApi } = require('../../utils')
7
+
8
+ async function builder (yargs) {
9
+ yargs
10
+ .option('instance', {
11
+ alias: 'i',
12
+ type: 'string',
13
+ demandOption: true,
14
+ describe: 'virtual device id'
15
+ })
16
+ .option('verbose', {
17
+ alias: 'v',
18
+ type: 'boolean',
19
+ describe: 'Console will receive verbose error output'
20
+ })
21
+ }
22
+
23
+ async function handler (argv) {
24
+ const api = await getApi()
25
+
26
+ try {
27
+ // verify instance type
28
+ const instance = await api.v1GetInstance(argv.instance)
29
+ if (!instance) {
30
+ throw new Error(`Instance ${argv.instance} not found`)
31
+ }
32
+ if (instance.type !== 'ios') {
33
+ throw new Error(`Instance ${argv.instance} is not an iOS device`)
34
+ }
35
+
36
+ const agent = new AgentCLI(argv)
37
+ await agent.unlock()
38
+ console.log(
39
+ chalk.green(`Successfully unlocked ${argv.instance}`)
40
+ )
41
+ } catch (err) {
42
+ handleError(err, 'Unlock failed', argv.verbose)
43
+ }
44
+ }
45
+
46
+ module.exports = {
47
+ builder,
48
+ handler,
49
+ command: 'unlock',
50
+ describe: 'Unlock iOS device'
51
+ }