@zsa233/frida-analykit-agent 2.0.0 → 2.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.
Files changed (87) hide show
  1. package/dist/api/android.d.ts +41 -0
  2. package/dist/api/android.js +1 -0
  3. package/dist/bridges.d.ts +4 -0
  4. package/dist/bridges.js +8 -0
  5. package/dist/cmodule/scan_adrp.d.ts +9 -0
  6. package/{src/cmodule/scan_adrp.ts → dist/cmodule/scan_adrp.js} +19 -30
  7. package/dist/config.d.ts +26 -0
  8. package/dist/config.js +27 -0
  9. package/dist/consts.d.ts +18 -0
  10. package/dist/consts.js +23 -0
  11. package/dist/elf/insn.d.ts +10 -0
  12. package/dist/elf/insn.js +43 -0
  13. package/dist/elf/module.d.ts +95 -0
  14. package/dist/elf/module.js +632 -0
  15. package/dist/elf/struct.d.ts +235 -0
  16. package/{src/elf/struct.ts → dist/elf/struct.js} +63 -149
  17. package/dist/elf/tools.d.ts +6 -0
  18. package/dist/elf/tools.js +25 -0
  19. package/dist/elf/verifier.d.ts +11 -0
  20. package/dist/elf/verifier.js +57 -0
  21. package/dist/elf/xref.d.ts +32 -0
  22. package/dist/elf/xref.js +271 -0
  23. package/dist/func.d.ts +7 -0
  24. package/dist/func.js +23 -0
  25. package/dist/helper.d.ts +130 -0
  26. package/dist/helper.js +527 -0
  27. package/{src/index.ts → dist/index.d.ts} +0 -1
  28. package/dist/index.js +9 -0
  29. package/dist/jni/env.d.ts +821 -0
  30. package/dist/jni/env.js +1054 -0
  31. package/{src/jni/struct.ts → dist/jni/struct.d.ts} +8 -54
  32. package/dist/jni/struct.js +173 -0
  33. package/dist/lib/libc.d.ts +68 -0
  34. package/dist/lib/libc.js +125 -0
  35. package/dist/lib/libssl.d.ts +23 -0
  36. package/dist/lib/libssl.js +60 -0
  37. package/dist/message.d.ts +18 -0
  38. package/dist/message.js +21 -0
  39. package/dist/net/ssl.d.ts +29 -0
  40. package/dist/net/ssl.js +249 -0
  41. package/dist/net/struct.d.ts +34 -0
  42. package/{src/net/struct.ts → dist/net/struct.js} +4 -18
  43. package/dist/net/tools.js +1 -0
  44. package/dist/process.d.ts +43 -0
  45. package/dist/process.js +77 -0
  46. package/dist/rpc.d.ts +1 -0
  47. package/dist/rpc.js +248 -0
  48. package/dist/utils/array_pointer.d.ts +21 -0
  49. package/dist/utils/array_pointer.js +81 -0
  50. package/dist/utils/queue.d.ts +19 -0
  51. package/dist/utils/queue.js +89 -0
  52. package/dist/utils/scan.d.ts +35 -0
  53. package/dist/utils/scan.js +72 -0
  54. package/dist/utils/std.d.ts +40 -0
  55. package/dist/utils/std.js +128 -0
  56. package/dist/utils/text_endec.d.ts +8 -0
  57. package/dist/utils/text_endec.js +29 -0
  58. package/dist/utils/utils.d.ts +28 -0
  59. package/dist/utils/utils.js +66 -0
  60. package/package.json +18 -5
  61. package/src/api/android.ts +0 -80
  62. package/src/bridges.ts +0 -18
  63. package/src/cmodule/scan_adrp.c +0 -81
  64. package/src/config.ts +0 -56
  65. package/src/consts.ts +0 -31
  66. package/src/elf/insn.ts +0 -61
  67. package/src/elf/module.ts +0 -751
  68. package/src/elf/tools.ts +0 -33
  69. package/src/elf/verifier.ts +0 -74
  70. package/src/elf/xref.ts +0 -360
  71. package/src/func.ts +0 -32
  72. package/src/helper.ts +0 -685
  73. package/src/jni/env.ts +0 -1439
  74. package/src/lib/libc.ts +0 -161
  75. package/src/lib/libssl.ts +0 -95
  76. package/src/message.ts +0 -26
  77. package/src/net/ssl.ts +0 -360
  78. package/src/process.ts +0 -137
  79. package/src/rpc.ts +0 -268
  80. package/src/runtime-globals.d.ts +0 -11
  81. package/src/utils/array_pointer.ts +0 -102
  82. package/src/utils/queue.ts +0 -102
  83. package/src/utils/scan.ts +0 -103
  84. package/src/utils/std.ts +0 -165
  85. package/src/utils/text_endec.ts +0 -35
  86. package/src/utils/utils.ts +0 -111
  87. /package/{src/net/tools.ts → dist/net/tools.d.ts} +0 -0
@@ -0,0 +1,235 @@
1
+ export type Ehdr = {
2
+ ei_class: number;
3
+ e_type: number;
4
+ e_phoff: number;
5
+ e_shoff: number;
6
+ e_phnum: number;
7
+ e_shnum: number;
8
+ e_shstrndx: number;
9
+ };
10
+ export type Phdr = {
11
+ p_type: number;
12
+ p_offset: number;
13
+ p_vaddr: number;
14
+ p_paddr: number;
15
+ p_filesz: number;
16
+ p_memsz: number;
17
+ p_align: number;
18
+ };
19
+ export type Shdr = {
20
+ name: string | null;
21
+ base: NativePointer;
22
+ size: number;
23
+ sh_name: number;
24
+ sh_type: number;
25
+ sh_addr: number;
26
+ sh_offset: number;
27
+ sh_size: number;
28
+ sh_link: number;
29
+ sh_info: number;
30
+ sh_addralign: number;
31
+ sh_entsize: number;
32
+ };
33
+ export type Dyn = {
34
+ d_tag: number;
35
+ d_un: number;
36
+ };
37
+ export declare class Soinfo {
38
+ strtab: NativePointer;
39
+ strtab_size: number;
40
+ symtab: NativePointer;
41
+ plt_rela: NativePointer;
42
+ plt_rela_count: number;
43
+ rela: NativePointer;
44
+ rela_count: number;
45
+ relr: NativePointer;
46
+ relr_count: number;
47
+ init_func: NativePointer;
48
+ init_array: NativePointer;
49
+ init_array_count: number;
50
+ fini_array: NativePointer;
51
+ fini_array_count: number;
52
+ plt_got: NativePointer;
53
+ }
54
+ export type Rela = {
55
+ r_offset: number;
56
+ r_info: number;
57
+ r_addend: number;
58
+ };
59
+ export type Sym = {
60
+ name: string;
61
+ relocPtr: NativePointer | null;
62
+ hook: NativePointer | null;
63
+ implPtr: NativePointer | null;
64
+ linked: boolean;
65
+ st_name: number;
66
+ st_info: number;
67
+ st_other: number;
68
+ st_shndx: number;
69
+ st_value: NativePointer | null;
70
+ st_size: number;
71
+ };
72
+ export declare const Elf_Ehdr: {
73
+ EI_Magic: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => ArrayBuffer;
74
+ EI_CLASS: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
75
+ B64: {
76
+ E_Type: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
77
+ E_Phoff: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
78
+ E_Shoff: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
79
+ E_Phnum: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
80
+ E_Shnum: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
81
+ E_Shstrndx: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
82
+ SIZE: number;
83
+ };
84
+ B32: {
85
+ E_Type: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
86
+ E_Phoff: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
87
+ E_Shoff: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
88
+ E_Phnum: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
89
+ E_Shnum: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
90
+ E_Shstrndx: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
91
+ SIZE: number;
92
+ };
93
+ };
94
+ export declare const Elf_Phdr: {
95
+ B64: {
96
+ P_Type: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
97
+ E_Flags: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
98
+ P_Offset: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
99
+ P_Vaddr: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
100
+ P_Paddr: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
101
+ P_Filesz: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
102
+ P_Memsz: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
103
+ P_Align: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
104
+ SIZE: number;
105
+ };
106
+ B32: {
107
+ P_Type: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
108
+ E_Flags: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
109
+ P_Offset: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
110
+ P_Vaddr: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
111
+ P_Paddr: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
112
+ P_Filesz: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
113
+ P_Memsz: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
114
+ P_Align: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
115
+ SIZE: number;
116
+ };
117
+ };
118
+ export declare const Elf_Shdr: {
119
+ B64: {
120
+ Sh_Name: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
121
+ Sh_Type: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
122
+ Sh_Flags: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
123
+ Sh_Addr: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
124
+ Sh_Offset: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
125
+ Sh_Size: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
126
+ Sh_Link: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
127
+ Sh_Info: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
128
+ Sh_Addralign: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
129
+ Sh_Entsize: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
130
+ SIZE: number;
131
+ };
132
+ B32: {
133
+ Sh_Name: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
134
+ Sh_Type: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
135
+ Sh_Flags: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
136
+ Sh_Addr: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
137
+ Sh_Offset: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
138
+ Sh_Size: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
139
+ Sh_Link: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
140
+ Sh_Info: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
141
+ Sh_Addralign: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
142
+ Sh_Entsize: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
143
+ SIZE: number;
144
+ };
145
+ };
146
+ export declare const Elf_Dyn: {
147
+ B64: {
148
+ D_Tag: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
149
+ D_Un: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
150
+ SIZE: number;
151
+ };
152
+ B32: {
153
+ D_Tag: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
154
+ D_Un: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
155
+ SIZE: number;
156
+ };
157
+ };
158
+ export declare const Elf_Sym: {
159
+ B64: {
160
+ St_Name: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
161
+ St_Info: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
162
+ St_Other: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
163
+ St_Shndx: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
164
+ St_Value: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
165
+ St_Size: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
166
+ SIZE: number;
167
+ };
168
+ B32: {
169
+ St_Name: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
170
+ St_Info: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
171
+ St_Other: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
172
+ St_Shndx: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
173
+ St_Value: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
174
+ St_Size: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
175
+ SIZE: number;
176
+ };
177
+ };
178
+ export declare const Elf_Rela: {
179
+ B64: {
180
+ R_Offset: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
181
+ R_Info: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
182
+ R_Addend: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
183
+ SIZE: number;
184
+ INFO_SYM: bigint;
185
+ INFO_TYPE: bigint;
186
+ Reloc: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
187
+ };
188
+ B32: {
189
+ R_Offset: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
190
+ R_Info: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
191
+ R_Addend: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
192
+ SIZE: number;
193
+ INFO_SYM: bigint;
194
+ INFO_TYPE: bigint;
195
+ Reloc: (base: NativePointer | import("../utils/array_pointer.js").ArrayPointer) => number;
196
+ };
197
+ };
198
+ export declare enum DyntabTag {
199
+ DT_NULL = 0,
200
+ DT_NEEDED = 1,
201
+ DT_PLTRELSZ = 2,
202
+ DT_PLTGOT = 3,
203
+ DT_HASH = 4,
204
+ DT_STRTAB = 5,
205
+ DT_SYMTAB = 6,
206
+ DT_RELA = 7,
207
+ DT_RELASZ = 8,
208
+ DT_RELAENT = 9,
209
+ DT_STRSZ = 10,
210
+ DT_SYMENT = 11,
211
+ DT_INIT = 12,
212
+ DT_FINI = 13,
213
+ DT_SONAME = 14,
214
+ DT_RPATH = 15,
215
+ DT_SYMBOLIC = 16,
216
+ DT_REL = 17,
217
+ DT_RELSZ = 18,
218
+ DT_RELENT = 19,
219
+ DT_PLTREL = 20,
220
+ DT_DEBUG = 21,
221
+ DT_TEXTREL = 22,
222
+ DT_JMPREL = 23,
223
+ DT_ENCODING = 32,
224
+ DT_BIND_NOW = 24,
225
+ DT_INIT_ARRAY = 25,
226
+ DT_FINI_ARRAY = 26,
227
+ DT_INIT_ARRAYSZ = 27,
228
+ DT_FINI_ARRAYSZ = 28,
229
+ DT_RUNPATH = 29,
230
+ DT_FLAGS = 30,
231
+ DT_RELR = 1879040000,
232
+ DT_RELRSZ = 1879040001,
233
+ DT_RELRENT = 1879040003,
234
+ DT_RELRCOUNT = 1879040005
235
+ }
@@ -1,97 +1,23 @@
1
-
2
- import {
3
- readByteArray,
4
- binaryReadU8, binaryReadU16,
5
- binaryReadU32, binaryReadS32,
6
- binaryReadU64, binaryReadS64,
7
- } from "../utils/utils.js"
8
-
9
-
10
-
11
- export type Ehdr = {
12
- ei_class: number,
13
- e_type: number,
14
- e_phoff: number,
15
- e_shoff: number,
16
- e_phnum: number,
17
- e_shnum: number,
18
- e_shstrndx: number,
19
- }
20
-
21
- export type Phdr = {
22
- p_type: number,
23
- p_offset: number,
24
- p_vaddr: number,
25
- p_paddr: number,
26
- p_filesz: number,
27
- p_memsz: number,
28
- p_align: number,
29
- }
30
-
31
- export type Shdr = {
32
- name: string | null,
33
- base: NativePointer
34
- size: number
35
-
36
- sh_name: number,
37
- sh_type: number,
38
- sh_addr: number,
39
- sh_offset: number,
40
- sh_size: number,
41
- sh_link: number,
42
- sh_info: number,
43
- sh_addralign: number,
44
- sh_entsize: number,
45
- }
46
-
47
-
48
- export type Dyn = {
49
- d_tag: number,
50
- d_un: number,
51
- }
52
-
53
-
1
+ import { readByteArray, binaryReadU8, binaryReadU16, binaryReadU32, binaryReadS32, binaryReadU64, binaryReadS64, } from "../utils/utils.js";
54
2
  export class Soinfo {
55
- strtab: NativePointer = NULL
56
- strtab_size: number = 0
57
- symtab: NativePointer = NULL
58
- plt_rela: NativePointer = NULL
59
- plt_rela_count: number = 0
60
- rela: NativePointer = NULL
61
- rela_count: number = 0
62
- relr: NativePointer = NULL
63
- relr_count: number = 0
64
- init_func: NativePointer = NULL
65
- init_array: NativePointer = NULL
66
- init_array_count: number = 0
67
- fini_array: NativePointer = NULL
68
- fini_array_count: number = 0
69
- plt_got: NativePointer = NULL
70
- }
71
-
72
- export type Rela = {
73
- r_offset: number,
74
- r_info: number,
75
- r_addend: number,
76
- }
77
-
78
-
79
- export type Sym = {
80
- name: string
81
- relocPtr: NativePointer | null
82
- hook: NativePointer | null
83
- implPtr: NativePointer | null
84
- linked: boolean
85
-
86
- st_name: number
87
- st_info: number
88
- st_other: number
89
- st_shndx: number
90
- st_value: NativePointer | null
91
- st_size: number
3
+ constructor() {
4
+ this.strtab = NULL;
5
+ this.strtab_size = 0;
6
+ this.symtab = NULL;
7
+ this.plt_rela = NULL;
8
+ this.plt_rela_count = 0;
9
+ this.rela = NULL;
10
+ this.rela_count = 0;
11
+ this.relr = NULL;
12
+ this.relr_count = 0;
13
+ this.init_func = NULL;
14
+ this.init_array = NULL;
15
+ this.init_array_count = 0;
16
+ this.fini_array = NULL;
17
+ this.fini_array_count = 0;
18
+ this.plt_got = NULL;
19
+ }
92
20
  }
93
-
94
-
95
21
  export const Elf_Ehdr = {
96
22
  EI_Magic: readByteArray(0, 4),
97
23
  EI_CLASS: binaryReadU8(4),
@@ -113,9 +39,7 @@ export const Elf_Ehdr = {
113
39
  E_Shstrndx: binaryReadU16(50),
114
40
  SIZE: 52,
115
41
  },
116
- }
117
-
118
-
42
+ };
119
43
  export const Elf_Phdr = {
120
44
  B64: {
121
45
  P_Type: binaryReadU32(0),
@@ -139,9 +63,7 @@ export const Elf_Phdr = {
139
63
  P_Align: binaryReadU32(28),
140
64
  SIZE: 32,
141
65
  },
142
- }
143
-
144
-
66
+ };
145
67
  export const Elf_Shdr = {
146
68
  B64: {
147
69
  Sh_Name: binaryReadU32(0),
@@ -169,8 +91,7 @@ export const Elf_Shdr = {
169
91
  Sh_Entsize: binaryReadU32(36),
170
92
  SIZE: 40,
171
93
  },
172
- }
173
-
94
+ };
174
95
  export const Elf_Dyn = {
175
96
  B64: {
176
97
  D_Tag: binaryReadU64(0),
@@ -182,9 +103,7 @@ export const Elf_Dyn = {
182
103
  D_Un: binaryReadU32(4),
183
104
  SIZE: 8,
184
105
  },
185
- }
186
-
187
-
106
+ };
188
107
  export const Elf_Sym = {
189
108
  B64: {
190
109
  St_Name: binaryReadU32(0),
@@ -204,8 +123,7 @@ export const Elf_Sym = {
204
123
  St_Size: binaryReadU32(12),
205
124
  SIZE: 16,
206
125
  }
207
- }
208
-
126
+ };
209
127
  export const Elf_Rela = {
210
128
  B64: {
211
129
  R_Offset: binaryReadU64(0),
@@ -225,47 +143,43 @@ export const Elf_Rela = {
225
143
  INFO_TYPE: 0xffffn,
226
144
  Reloc: binaryReadU32(0),
227
145
  },
228
- }
229
-
230
-
231
- export enum DyntabTag {
232
- DT_NULL = 0,
233
- DT_NEEDED = 1,
234
- DT_PLTRELSZ = 2,
235
- DT_PLTGOT = 3,
236
- DT_HASH = 4,
237
- DT_STRTAB = 5,
238
- DT_SYMTAB = 6,
239
- DT_RELA = 7,
240
- DT_RELASZ = 8,
241
- DT_RELAENT = 9,
242
- DT_STRSZ = 10,
243
- DT_SYMENT = 11,
244
- DT_INIT = 12,
245
- DT_FINI = 13,
246
- DT_SONAME = 14,
247
- DT_RPATH = 15,
248
- DT_SYMBOLIC = 16,
249
- DT_REL = 17,
250
- DT_RELSZ = 18,
251
- DT_RELENT = 19,
252
- DT_PLTREL = 20,
253
- DT_DEBUG = 21,
254
- DT_TEXTREL = 22,
255
- DT_JMPREL = 23,
256
- DT_ENCODING = 32,
257
-
258
- DT_BIND_NOW = 24,
259
- DT_INIT_ARRAY = 25,
260
- DT_FINI_ARRAY = 26,
261
- DT_INIT_ARRAYSZ = 27,
262
- DT_FINI_ARRAYSZ = 28,
263
- DT_RUNPATH = 29,
264
- DT_FLAGS = 30,
265
-
266
- DT_RELR = 0x6fffe000,
267
- DT_RELRSZ = 0x6fffe001,
268
- DT_RELRENT = 0x6fffe003,
269
- DT_RELRCOUNT = 0x6fffe005,
270
- }
271
-
146
+ };
147
+ export var DyntabTag;
148
+ (function (DyntabTag) {
149
+ DyntabTag[DyntabTag["DT_NULL"] = 0] = "DT_NULL";
150
+ DyntabTag[DyntabTag["DT_NEEDED"] = 1] = "DT_NEEDED";
151
+ DyntabTag[DyntabTag["DT_PLTRELSZ"] = 2] = "DT_PLTRELSZ";
152
+ DyntabTag[DyntabTag["DT_PLTGOT"] = 3] = "DT_PLTGOT";
153
+ DyntabTag[DyntabTag["DT_HASH"] = 4] = "DT_HASH";
154
+ DyntabTag[DyntabTag["DT_STRTAB"] = 5] = "DT_STRTAB";
155
+ DyntabTag[DyntabTag["DT_SYMTAB"] = 6] = "DT_SYMTAB";
156
+ DyntabTag[DyntabTag["DT_RELA"] = 7] = "DT_RELA";
157
+ DyntabTag[DyntabTag["DT_RELASZ"] = 8] = "DT_RELASZ";
158
+ DyntabTag[DyntabTag["DT_RELAENT"] = 9] = "DT_RELAENT";
159
+ DyntabTag[DyntabTag["DT_STRSZ"] = 10] = "DT_STRSZ";
160
+ DyntabTag[DyntabTag["DT_SYMENT"] = 11] = "DT_SYMENT";
161
+ DyntabTag[DyntabTag["DT_INIT"] = 12] = "DT_INIT";
162
+ DyntabTag[DyntabTag["DT_FINI"] = 13] = "DT_FINI";
163
+ DyntabTag[DyntabTag["DT_SONAME"] = 14] = "DT_SONAME";
164
+ DyntabTag[DyntabTag["DT_RPATH"] = 15] = "DT_RPATH";
165
+ DyntabTag[DyntabTag["DT_SYMBOLIC"] = 16] = "DT_SYMBOLIC";
166
+ DyntabTag[DyntabTag["DT_REL"] = 17] = "DT_REL";
167
+ DyntabTag[DyntabTag["DT_RELSZ"] = 18] = "DT_RELSZ";
168
+ DyntabTag[DyntabTag["DT_RELENT"] = 19] = "DT_RELENT";
169
+ DyntabTag[DyntabTag["DT_PLTREL"] = 20] = "DT_PLTREL";
170
+ DyntabTag[DyntabTag["DT_DEBUG"] = 21] = "DT_DEBUG";
171
+ DyntabTag[DyntabTag["DT_TEXTREL"] = 22] = "DT_TEXTREL";
172
+ DyntabTag[DyntabTag["DT_JMPREL"] = 23] = "DT_JMPREL";
173
+ DyntabTag[DyntabTag["DT_ENCODING"] = 32] = "DT_ENCODING";
174
+ DyntabTag[DyntabTag["DT_BIND_NOW"] = 24] = "DT_BIND_NOW";
175
+ DyntabTag[DyntabTag["DT_INIT_ARRAY"] = 25] = "DT_INIT_ARRAY";
176
+ DyntabTag[DyntabTag["DT_FINI_ARRAY"] = 26] = "DT_FINI_ARRAY";
177
+ DyntabTag[DyntabTag["DT_INIT_ARRAYSZ"] = 27] = "DT_INIT_ARRAYSZ";
178
+ DyntabTag[DyntabTag["DT_FINI_ARRAYSZ"] = 28] = "DT_FINI_ARRAYSZ";
179
+ DyntabTag[DyntabTag["DT_RUNPATH"] = 29] = "DT_RUNPATH";
180
+ DyntabTag[DyntabTag["DT_FLAGS"] = 30] = "DT_FLAGS";
181
+ DyntabTag[DyntabTag["DT_RELR"] = 1879040000] = "DT_RELR";
182
+ DyntabTag[DyntabTag["DT_RELRSZ"] = 1879040001] = "DT_RELRSZ";
183
+ DyntabTag[DyntabTag["DT_RELRENT"] = 1879040003] = "DT_RELRENT";
184
+ DyntabTag[DyntabTag["DT_RELRCOUNT"] = 1879040005] = "DT_RELRCOUNT";
185
+ })(DyntabTag || (DyntabTag = {}));
@@ -0,0 +1,6 @@
1
+ import { ElfModuleX } from "./module.js";
2
+ export declare class ElfTools {
3
+ static findModuleByName(name: string, tryFix?: boolean): ElfModuleX | null;
4
+ static getModuleByName(name: string, tryFix?: boolean): ElfModuleX;
5
+ static loadFromModule(mod: Module, tryFix?: boolean): ElfModuleX;
6
+ }
@@ -0,0 +1,25 @@
1
+ import { setGlobalProperties } from "../config.js";
2
+ import { ElfFileFixer, ElfModuleX } from "./module.js";
3
+ export class ElfTools {
4
+ static findModuleByName(name, tryFix = false) {
5
+ const mod = Process.findModuleByName(name);
6
+ if (mod === null) {
7
+ return null;
8
+ }
9
+ return this.loadFromModule(mod, tryFix);
10
+ }
11
+ static getModuleByName(name, tryFix = false) {
12
+ const modx = this.findModuleByName(name, tryFix);
13
+ if (modx === null) {
14
+ throw new Error(`[getModuleByName] ${name} module not found.`);
15
+ }
16
+ return modx;
17
+ }
18
+ static loadFromModule(mod, tryFix = false) {
19
+ const fixers = tryFix ? [new ElfFileFixer(mod.path)] : undefined;
20
+ return new ElfModuleX(mod, fixers);
21
+ }
22
+ }
23
+ setGlobalProperties({
24
+ ElfTools,
25
+ });
@@ -0,0 +1,11 @@
1
+ import { InstructionSequence } from "./insn.js";
2
+ type ScoreResult = {
3
+ instructions: Arm64Instruction[];
4
+ eoi?: Arm64Instruction;
5
+ score: number;
6
+ };
7
+ export declare class Subroutine extends InstructionSequence {
8
+ constructor(entry: Arm64Instruction);
9
+ scoreThunk(): ScoreResult;
10
+ }
11
+ export {};
@@ -0,0 +1,57 @@
1
+ import { setGlobalProperties } from "../config.js";
2
+ import { InstructionSequence } from "./insn.js";
3
+ export class Subroutine extends InstructionSequence {
4
+ constructor(entry) {
5
+ super(entry);
6
+ }
7
+ scoreThunk() {
8
+ const MAX_INSTR = 20;
9
+ let score = 0;
10
+ let i = 0;
11
+ const insns = [];
12
+ loop: for (const insn of this) {
13
+ insns.push(insn);
14
+ const ops = insn.operands;
15
+ switch (insn.mnemonic) {
16
+ case 'br':
17
+ case 'b':
18
+ this.eoi = insn;
19
+ score += 100;
20
+ break loop;
21
+ case 'stp':
22
+ case 'ldp':
23
+ if (ops[2].type === 'mem' && ops[2].value.base === 'sp') {
24
+ score -= 20;
25
+ break;
26
+ }
27
+ case 'ret':
28
+ score = 0;
29
+ this.eoi = insn;
30
+ break;
31
+ case 'sub':
32
+ case 'add':
33
+ if (ops[0].value === 'sp') {
34
+ score -= 20;
35
+ break;
36
+ }
37
+ break;
38
+ }
39
+ if (i >= 5) {
40
+ // 指令越多分数越低
41
+ score -= 5;
42
+ }
43
+ i++;
44
+ if (i >= MAX_INSTR) {
45
+ break;
46
+ }
47
+ }
48
+ return {
49
+ instructions: insns,
50
+ eoi: this.eoi,
51
+ score: score,
52
+ };
53
+ }
54
+ }
55
+ setGlobalProperties({
56
+ Subroutine,
57
+ });
@@ -0,0 +1,32 @@
1
+ import { InstructionSequence } from "./insn.js";
2
+ export declare class AdrlXref {
3
+ static readonly ADRP_FIXED28_24_BITSET_MASK: NativePointer;
4
+ target: NativePointer;
5
+ constructor(target: NativePointer);
6
+ get targetPage(): NativePointer;
7
+ get targetPageOffset(): NativePointer;
8
+ scanAdrl(scanRange: {
9
+ base: NativePointer;
10
+ size: number;
11
+ }, maxGapToAdd?: number): Adrl[];
12
+ scanAdrlSlow(scanRange: {
13
+ base: NativePointer;
14
+ size: number;
15
+ }, maxGapToAdd?: number): Adrl[];
16
+ verify(p: NativePointer, maxGapToAdd?: number): Adrl | null;
17
+ scanAdr(): Adrl[];
18
+ }
19
+ type JumpScanRes = {
20
+ src: InstructionSequence;
21
+ insn: Arm64Instruction;
22
+ next: NativePointer;
23
+ };
24
+ export declare class Adrl extends InstructionSequence {
25
+ readonly adrpInsn: Arm64Instruction;
26
+ private addInsn?;
27
+ constructor(adrp: Arm64Instruction, add?: Arm64Instruction);
28
+ get instruction(): Arm64Instruction;
29
+ scanBL(base?: NativePointer, maxGap?: number): JumpScanRes | null;
30
+ getTarget(mustFoundAdd?: boolean, maxGapToAdd?: number): NativePointer | null;
31
+ }
32
+ export {};