@@ -31,57 +31,14 @@ var rootCmd = &cobra.Command{
3131 SilenceErrors : true ,
3232 SilenceUsage : true ,
3333 RunE : func (cmd * cobra.Command , args []string ) error {
34-
35- initConfig , err := cmd .Flags ().GetBool ("init" )
36- if err != nil {
37- return err
38- }
39-
4034 config , err := cmd .Flags ().GetString ("config" )
4135 if err != nil {
4236 return err
4337 }
4438
4539 if config == "" {
46- homeDir , _ := os .UserHomeDir ()
47- config = filepath .Join (homeDir , "gxpc.conf" )
48- }
49-
50- if initConfig {
51- configData := OffsetsData {
52- Offsets : []Offset {
53- {
54- OS : "iPhone14,7" ,
55- Builds : []map [string ]BuildData {
56- {
57- "20B110" : {PlistCreate : "0xb1c00" , CallHandler : "0x11c00" },
58- },
59- },
60- },
61- {
62- OS : "iPad7,11" ,
63- Builds : []map [string ]BuildData {
64- {"22B83" : {PlistCreate : "0x7dbf4" , CallHandler : "0xf98c" }},
65- },
66- },
67- },
68- }
69-
70- f , err := os .Create (config )
71- if err != nil {
72- return err
73- }
74- defer f .Close ()
75-
76- encoder := json .NewEncoder (f )
77- encoder .SetIndent (" " , " " )
78-
79- if err := encoder .Encode (configData ); err != nil {
80- return err
81- }
82-
83- logger .Infof ("Created new config at %s" , config )
84- return nil
40+ home , _ := os .UserHomeDir ()
41+ config = filepath .Join (home , "gxpc.conf" )
8542 }
8643
8744 list , err := cmd .Flags ().GetBool ("list" )
@@ -254,6 +211,8 @@ var rootCmd = &cobra.Command{
254211 return err
255212 }
256213
214+ var offsets * OffsetsData = nil
215+
257216 script .On ("message" , func (message string ) {
258217 msg , _ := frida .ScriptMessageToMessage (message )
259218 switch msg .Type {
@@ -285,6 +244,24 @@ var rootCmd = &cobra.Command{
285244 msg := fmt .Sprintf (`{"type":"jlutil","payload":"%s"}` , resPayload )
286245 script .Post (msg , nil )
287246
247+ case "newOffset" :
248+ var newOffset NewOffset
249+ for k , v := range payload {
250+ val := v .(string )
251+ switch k {
252+ case "callEvent" :
253+ newOffset .CallEvent = val
254+ case "plistCreate" :
255+ newOffset .PlistCreate = val
256+ case "machine" :
257+ newOffset .Machine = val
258+ case "version" :
259+ newOffset .Version = val
260+ }
261+ }
262+ updateConfig (config , & newOffset )
263+ logger .Infof ("Saved offset for %s (%s)" , newOffset .Machine , newOffset .Version )
264+
288265 default :
289266 logger .Warnf ("SCRIPT: %v" , subPayload )
290267 }
@@ -309,24 +286,21 @@ var rootCmd = &cobra.Command{
309286 }
310287 }
311288
312- if config == "" {
313- homeDir , _ := os .UserHomeDir ()
314- config = filepath .Join (homeDir , "gxpc.conf" )
315- }
316-
317- var offsets OffsetsData
318- f , err := os .Open (config )
319- if err != nil {
320- return err
321- }
322- defer f .Close ()
323-
324- if err := json .NewDecoder (f ).Decode (& offsets ); err != nil {
325- return err
289+ if _ , err := os .Stat (config ); os .IsNotExist (err ) {
290+ _ = script .ExportsCall ("setup" , nil )
291+ } else {
292+ f , err := os .Open (config )
293+ if err != nil {
294+ return err
295+ }
296+ defer f .Close ()
297+ offsets = & OffsetsData {}
298+ if err := json .NewDecoder (f ).Decode (offsets ); err != nil {
299+ return err
300+ }
301+ _ = script .ExportsCall ("setup" , offsets )
326302 }
327303
328- _ = script .ExportsCall ("setup" , offsets )
329-
330304 c := make (chan os.Signal )
331305 signal .Notify (c , os .Interrupt , syscall .SIGTERM )
332306
@@ -394,7 +368,6 @@ func setupFlags() {
394368 rootCmd .Flags ().StringP ("output" , "o" , "" , "save output to this file" )
395369
396370 rootCmd .Flags ().StringP ("config" , "c" , "" , "path to gxpc.conf file; default user home directory" )
397- rootCmd .Flags ().BoolP ("init" , "" , false , "create gxpc.conf file with offsets" )
398371
399372 rootCmd .Flags ().StringSliceP ("whitelist" , "w" , []string {}, "whitelist connection by name" )
400373 rootCmd .Flags ().StringSliceP ("blacklist" , "b" , []string {}, "blacklist connection by name" )
0 commit comments