From f106343d4210fa0615671f0506ed81b44fd6ab5c Mon Sep 17 00:00:00 2001 From: "@" <@> Date: Sun, 15 Aug 2021 00:35:18 +0800 Subject: [PATCH] tttt --- README.MD | 6 +- README_EN.MD | 3 +- run.go => falg_run.go | 85 +++++++++++-- falgs.go | 218 +++------------------------------- api.go => flag_api.go | 48 ++++++++ bagbak.go => flag_bagbak.go | 48 ++++++-- compile.go => flag_compile.go | 33 +++++ create.go => flag_create.go | 25 ++++ lsapp.go => flag_lsapp.go | 19 +++ lsds.go => flag_lsdevs.go | 22 ++++ lsps.go => flag_lsps.go | 20 ++++ func.go | 25 ++++ go.mod | 12 +- go.sum | 27 +++++ md/api.md | 11 ++ md/bagbak.md | 32 +++-- md/compile.md | 5 + md/create.md | 5 + md/lsapp.md | 6 + md/lsdev.md | 4 + md/lsps.md | 7 ++ md/run.md | 21 +++- 22 files changed, 432 insertions(+), 250 deletions(-) rename run.go => falg_run.go (70%) rename api.go => flag_api.go (63%) rename bagbak.go => flag_bagbak.go (87%) rename compile.go => flag_compile.go (61%) rename create.go => flag_create.go (71%) rename lsapp.go => flag_lsapp.go (69%) rename lsds.go => flag_lsdevs.go (58%) rename lsps.go => flag_lsps.go (67%) diff --git a/README.MD b/README.MD index 643bb20..9e52fe5 100644 --- a/README.MD +++ b/README.MD @@ -1,7 +1,7 @@ ## fd #### 简要介绍 -* **要是你看不懂中文可以使用chrome翻译功能** +* **English can use chrome translation or [click english doc](README_EN.MD)** * **frida 运行时(不需要python,只有单一个文件)** * **fd 使用fd前请确认手机上有frida-server** * **优雅的使用webstorm开发(拥有智能完美的智能提示,内置了一些调试库) ** @@ -10,7 +10,6 @@ ![](gif/run.webp) #### a brief introdction -* **English can use chrome translation or [click english doc](README_EN.MD)** * **frida runtime (no python required, only a single file)** * **fd need you phone require frida-server** @@ -40,7 +39,8 @@ 3. 搜索: frida 并且安装 4. 根据系统下载fd: https://github.com/a97077088/fd/releases 5. 数据线链接到电脑 -6. fd bagbak 通讯录 //通讯录需要手动打开并且置于前台 +6. fd bagbak 通讯录 //通讯录需要手动打开并且置于前台,fd仅以附加模式工作 +7. 或者: fd bagbak com.apple.MobileAddressBook //通讯录需要手动打开并且置于前台,fd仅以附加模式工作 //Contacts.app现在出现在你的目录 ```` diff --git a/README_EN.MD b/README_EN.MD index e1c712f..d401113 100644 --- a/README_EN.MD +++ b/README_EN.MD @@ -1,12 +1,12 @@ ## fd #### 简要介绍 +* **[中文文档点击这里](README.MD)** * **frida 运行时(不需要python,只有单一个文件)** * **fd 使用fd前请确认手机上有frida-server** * **优雅的使用webstorm开发(拥有智能完美的智能提示,内置了一些调试库) ** #### a brief introdction -* **[中文文档点击这里](README_EN.MD)** * **frida runtime (no python required, only a single file)** * **fd need you phone require frida-server** * **Elegant use of webstorm development (with smart and perfect smart tips, some built-in debugging libraries) ** @@ -42,6 +42,7 @@ 4. Download according to the system fd,(windows or linux or macos?): https://github.com/a97077088/fd/releases 5. Data cable link to computer 6. shell (The address book needs to be opened manually and placed in the front desk):fd bagbak 通讯录 +7. or: fd bagbak com.apple.MobileAddressBook //dump file:Contacts.app Now it appears in your directory ```` diff --git a/run.go b/falg_run.go similarity index 70% rename from run.go rename to falg_run.go index 22e2862..3593855 100644 --- a/run.go +++ b/falg_run.go @@ -3,6 +3,8 @@ package main import ( "bytes" "context" + "errors" + "flag" "fmt" frida_go "github.com/a97077088/frida-go" jsoniter "github.com/json-iterator/go" @@ -15,12 +17,50 @@ import ( "sync" ) +var param_run_name= FlagRun.String("name","","调试进程名称,比如 通讯录,(lsps的结果中可以看到)") +var param_run_pid= FlagRun.Uint("pid",0,"进程pid") +var param_run_jsbyte= FlagRun.Bool("jsbyte",false,"是否使用编译过的js 字节码") +var param_run_devi= FlagRun.String("devi","","设备") +var param_run_restart=FlagRun.Bool("restart",false,"restart app") +var FlagRun =flag.NewFlagSet("run",flag.ExitOnError) +func init(){ + FlagRun.Usage= func() { + fmt.Fprintf(FlagRun.Output(), "============== 脚本调试 使用方法:%s\n", "run 1.js -name 通讯录") + FlagRun.PrintDefaults() + } +} + +func FlagRunMain(args []string)error{ + + + + if len(args)<1{ + fmt.Println("解析js文件失败") + FlagRun.Usage() + return nil + } + a1:=args[0] + param_jspath:=a1 + FlagRun.Parse(args[1:]) + if *param_run_name==""&&*param_run_pid==0{ + fmt.Println("name参数,和pid同时解析失败") + FlagRun.Usage() + return nil + } + if FlagRun.Parsed(){ + return NewRun().Run(RunParam{JsPath: param_jspath,Name:*param_run_name,JsByte: *param_run_jsbyte,Devi: *param_run_devi,Pid:*param_run_pid,ReStart: *param_run_restart}) + } + return errors.New("run命令解析失败") +} + + type RunParam struct { Pid uint Name string JsPath string JsByte bool Devi string + ReStart bool } type Run struct { @@ -41,28 +81,51 @@ func (l *Run) Run(param RunParam) error { jsos:=jssys.Get("os") fmt.Printf("内核平台:%s cpu构架:%s 当前系统:%s(%s) 设备名称:%s 权限:%s \n",jssys.Get("platform").ToString(),jssys.Get("arch").ToString(),jsos.Get(1).Get("id").ToString(),jsos.Get(0).Get("version").ToString(),jssys.Get("name").ToString(),jssys.Get("access").ToString()) - var pid uint - if param.Pid==0{ - p,err:=d.GetProcessByName(param.Name,frida_go.ProcessMatchOptions{}) + var app *frida_go.ApplicationDetails + pid:=param.Pid + + if pid==0{ + app,pid,err=GetName(d,param.Name) if err!=nil{ - return err + return err } - fmt.Printf("调试进程:%s 进程id:%d 脚本:%s\n",p.Name(),p.Pid(),param.JsPath) - pid=p.Pid() }else{ - pid=param.Pid fmt.Printf("进程id:%d 脚本:%s\n",pid,param.JsPath) } + + + spawnCtx,resumeOK:=context.WithCancel(context.TODO()) + if app==nil{ + fmt.Printf("进程id:%d 脚本:%s\n",pid,param.JsPath) + }else{ + if param.ReStart{ + d.Kill(pid) + pid=0 + } + if pid==0{ + pid,err=d.Spawn(app.Identifier(),frida_go.SpawnOptions{}) + if err!=nil{ + return err + } + go func() { + select { + case <-spawnCtx.Done(): + d.Resume(pid) + } + }() + } + fmt.Printf("调试进程:%s 进程id:%d 脚本:%s\n",app.Name(),pid,param.JsPath) + } + + session,err:=d.Attach(pid,frida_go.SessionOptions{}) if err!=nil{ return err } defer session.Detach() //fmt.Println("download file example: send({\"type\":\"download\",\"path\":\"test/test.txt\",\"append\":true},new Uint8Array([0x01]).buffer)") - - _,err=os.Stat("./agent/box") if err==nil{ tmplatebox,err:=frida_agent_example.ReadFile("frida-agent-example/agent/box.ts") @@ -102,9 +165,6 @@ func (l *Run) Run(param RunParam) error { return err } } - - - fd,err:=ioutil.ReadFile(param.JsPath) if err!=nil{ return err @@ -186,6 +246,7 @@ func (l *Run) Run(param RunParam) error { return err } defer sc.UnLoad() + resumeOK() diff --git a/falgs.go b/falgs.go index 226dcee..87087e5 100644 --- a/falgs.go +++ b/falgs.go @@ -5,102 +5,26 @@ import ( "flag" "fmt" "os" - "strings" ) func entry()error{ - - create:=flag.NewFlagSet("create",flag.ExitOnError) - create.Usage= func() { - fmt.Fprintf(create.Output(), "============== 创建工程 使用方法:%s\n", "create pdir") - create.PrintDefaults() - } - create_dir:="" - - - run:=flag.NewFlagSet("run",flag.ExitOnError) - run.Usage= func() { - fmt.Fprintf(run.Output(), "============== 脚本调试 使用方法:%s\n", "run 1.js -name 通讯录") - run.PrintDefaults() - } - run_name:=run.String("name","","调试进程名称,比如 通讯录,(lsps的结果中可以看到)") - run_jsbyte:=run.Bool("jsbyte",false,"是否使用编译过的js 字节码") - run_jspath:="" - run_devi:=run.String("devi","","设备") - run_pid:=run.Uint("pid",0,"进程pid") - - compile:=flag.NewFlagSet("compile",flag.ExitOnError) - compile.Usage= func() { - fmt.Fprintf(compile.Output(), "============== 脚本编译 使用方法:%s\n", "compile 1.js -name 通讯录") - compile.PrintDefaults() - } - compile_jspath:="" - compile_name:=compile.String("name","","app屏幕上看到的名字,比如 通讯录,(lsps的结果中可以看到)") - compile_devi:=compile.String("devi","","设备") - - lsapp:=flag.NewFlagSet("lsapp",flag.ExitOnError) - lsapp_devi:=lsapp.String("devi","","设备") - lsapp.Usage= func() { - fmt.Fprintf(lsapp.Output(), "============== 列出所有application 使用方法:%s\n", "lsapp") - lsapp.PrintDefaults() - } - - lsps:=flag.NewFlagSet("lsps",flag.ExitOnError) - lsps_devi:=lsps.String("devi","","设备") - lsps.Usage= func() { - fmt.Fprintf(lsps.Output(), "============== 列出所有进程 使用方法:%s\n", "lsps") - lsps.PrintDefaults() - } - - lsdev:=flag.NewFlagSet("lsdev",flag.ExitOnError) - lsdev.Usage= func() { - fmt.Fprintf(lsdev.Output(), "============== 列出所有设备 使用方法:%s\n", "lsdev") - lsdev.PrintDefaults() - } - - api:=flag.NewFlagSet("api",flag.ExitOnError) - api.Usage= func() { - fmt.Fprintf(api.Output(), "============== api导出 使用方法:%s\n", "api 1.js -name 通讯录") - api.PrintDefaults() - } - api_http:=api.Bool("http",true,"导出http接口") - api_grpc:=api.Bool("grpc",false,"导出grpc接口(暂时还不支持)") - api_jspath:="" - api_jsbyte:=api.Bool("jsbyte",false,"是否使用编译过的js 字节码") - api_name:=api.String("name","","app屏幕上看到的名字,比如 通讯录,(lsps的结果中可以看到)") - api_address:=api.String("address",":8080","接口监听地址") - api_path:=api.String("path","/call","api监听路径") - api_devi:=api.String("devi","","设备") - - - bagbak:=flag.NewFlagSet("bagbak",flag.ExitOnError) - bagbak.Usage= func() { - fmt.Fprintf(bagbak.Output(), "============== bagbak(ipa脱壳) 使用方法:%s\n", "bakbag 通讯录") - bagbak.PrintDefaults() - } - bagbak_devi:=bagbak.String("devi","","设备") - bagbak_app:="" - bagbak_pid:=bagbak.Uint("pid",0,"进程id") - - flag.Usage=func() { - lsdev.Usage() + FlagLsDev.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - create.Usage() + FlagCreate.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - run.Usage() + FlagRun.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - compile.Usage() + FlagCompile.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - lsapp.Usage() + FlagLsApp.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - lsps.Usage() + FlagLsPs.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - api.Usage() + FlagApi.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - bagbak.Usage() + FlagBagBak.Usage() fmt.Fprintln(flag.CommandLine.Output(),"") - } @@ -112,99 +36,21 @@ func entry()error{ cmd:=os.Args[1] switch cmd{ case "lsdev": - lsdev.Parse(os.Args[2:]) + return FlagLsDevMain(os.Args[2:]) case "lsapp": - lsapp.Parse(os.Args[2:]) + return FlagLsAppMain(os.Args[2:]) case "lsps": - lsps.Parse(os.Args[2:]) + return FlagLsPsMain(os.Args[2:]) case "api": - if len(os.Args)<3{ - fmt.Println("解析js文件失败") - compile.Usage() - } - a2:=os.Args[2] - if a2=="help"||a2=="-help"||a2=="--help"||a2=="-h"||a2=="--h"||strings.HasPrefix(a2,"-"){ - fmt.Println("解析js文件失败") - api.Usage() - return nil - } - api_jspath=os.Args[2] - api.Parse(os.Args[3:]) - if *api_name==""{ - fmt.Println("name参数解析失败") - api.Usage() - return nil - } + return FlagApiMain(os.Args[2:]) case "compile": - if len(os.Args)<3{ - fmt.Println("解析js文件失败") - compile.Usage() - return nil - } - a2:=os.Args[2] - if a2=="help"||a2=="-help"||a2=="--help"||a2=="-h"||a2=="--h"||strings.HasPrefix(a2,"-"){ - fmt.Println("解析js文件失败") - compile.Usage() - return nil - } - compile_jspath=a2 - compile.Parse(os.Args[3:]) - if *compile_name==""{ - fmt.Println("name参数解析失败") - compile.Usage() - return nil - } + return FlagCompileMain(os.Args[2:]) case "run": - if len(os.Args)<3{ - fmt.Println("解析js文件失败") - run.Usage() - return nil - } - a2:=os.Args[2] - if a2=="help"||a2=="-help"||a2=="--help"||a2=="-h"||a2=="--h"||strings.HasPrefix(a2,"-"){ - fmt.Println("解析js文件失败") - run.Usage() - return nil - } - run_jspath=a2 - run.Parse(os.Args[3:]) - if *run_name==""&&*run_pid==0{ - fmt.Println("name参数,和pid同时解析失败") - run.Usage() - return nil - } + return FlagRunMain(os.Args[2:]) case "create": - if len(os.Args)<3{ - fmt.Println("解析目录失败") - create.Usage() - return nil - } - a2:=os.Args[2] - if a2=="help"||a2=="-help"||a2=="--help"||a2=="-h"||a2=="--h"||strings.HasPrefix(a2,"-"){ - fmt.Println("解析目录失败") - create.Usage() - return nil - } - create_dir=a2 - create.Parse(os.Args[3:]) + return FlagCreateMain(os.Args[2:]) case "bagbak": - if len(os.Args)<3{ - fmt.Println("解析名称失败") - bagbak.Usage() - return nil - } - if strings.HasPrefix(os.Args[2],"-"){ - bagbak.Parse(os.Args[2:]) - }else{ - a2:=os.Args[2] - if a2=="help"||a2=="-help"||a2=="--help"||a2=="-h"||a2=="--h"||strings.HasPrefix(a2,"-"){ - fmt.Println("解析名称失败") - create.Usage() - return nil - } - bagbak_app=a2 - bagbak.Parse(os.Args[3:]) - } + return FlagBagBakMain(os.Args[2:]) case "help": flag.Usage() case "-h": @@ -218,38 +64,6 @@ func entry()error{ default: return errors.New("不支持这个命令行") } - if lsdev.Parsed(){ - return NewLsDev().Run(LsDevParam{}) - } - if lsapp.Parsed(){ - return NewLsApp().Run(LsAppParam{Devi: *lsapp_devi}) - } - if lsps.Parsed(){ - return NewLsPs().Run(LsPsParam{*lsps_devi}) - } - if api.Parsed(){ - - kd:=0 - if *api_http{ - kd=0 - } - if *api_grpc{ - kd=1 - } - return NewApi().Run(ApiParam{ApiType: kd,JsPath: api_jspath,JsByte: *api_jsbyte,Name:*api_name,Address: *api_address,Path: *api_path,Devi: *api_devi}) - } - if compile.Parsed(){ - return NewCompile().Run(CompileParam{JsPath: compile_jspath,Name:*compile_name,Devi: *compile_devi}) - } - if run.Parsed(){ - return NewRun().Run(RunParam{JsPath: run_jspath,Name:*run_name,JsByte: *run_jsbyte,Devi: *run_devi,Pid:*run_pid}) - } - if create.Parsed(){ - return NewCreate().Run(CreateParam{Dir: create_dir}) - } - if bagbak.Parsed(){ - return NewBagBak().Run(BagBakParam{App: bagbak_app,Devi: *bagbak_devi,Pid:*bagbak_pid}) - } return nil } diff --git a/api.go b/flag_api.go similarity index 63% rename from api.go rename to flag_api.go index d230a9f..7689f74 100644 --- a/api.go +++ b/flag_api.go @@ -3,6 +3,7 @@ package main import ( "context" "errors" + "flag" "fmt" frida_go "github.com/a97077088/frida-go" "github.com/gin-gonic/gin" @@ -11,6 +12,53 @@ import ( "time" ) + +var FlagApi =flag.NewFlagSet("api",flag.ExitOnError) + +var param_api_http=FlagApi.Bool("http",true,"导出http接口") +var param_api_grpc=FlagApi.Bool("grpc",false,"导出grpc接口(暂时还不支持)") +var param_api_jsbyte=FlagApi.Bool("jsbyte",false,"是否使用编译过的js 字节码") +var param_api_name=FlagApi.String("name","","app屏幕上看到的名字,比如 通讯录,(lsps的结果中可以看到)") +var param_api_address=FlagApi.String("address",":8080","接口监听地址") +var param_api_path=FlagApi.String("path","/call","api监听路径") +var param_api_devi=FlagApi.String("devi","","设备") + +func init(){ + FlagApi.Usage= func() { + fmt.Fprintf(FlagApi.Output(), "============== api导出 使用方法:%s\n", "api 1.js -name 通讯录") + FlagApi.PrintDefaults() + } +} + +func FlagApiMain(args []string)error{ + if len(args)<1{ + fmt.Println("解析js文件失败") + FlagApi.Usage() + return nil + } + api_jspath:=args[0] + FlagApi.Parse(args[1:]) + if *param_api_name==""{ + fmt.Println("name参数解析失败") + FlagApi.Usage() + return nil + } + + if FlagApi.Parsed(){ + + kd:=0 + if *param_api_http{ + kd=0 + } + if *param_api_grpc{ + kd=1 + } + + return NewApi().Run(ApiParam{ApiType: kd,JsPath: api_jspath,JsByte: *param_api_jsbyte,Name:*param_api_name,Address: *param_api_address,Path: *param_api_path,Devi: *param_api_devi}) + } + return errors.New("api命令解析失败") +} + type ApiParam struct { ApiType int JsPath string diff --git a/bagbak.go b/flag_bagbak.go similarity index 87% rename from bagbak.go rename to flag_bagbak.go index ab18578..d089193 100644 --- a/bagbak.go +++ b/flag_bagbak.go @@ -5,6 +5,7 @@ import ( "context" _ "embed" "errors" + "flag" "fmt" frida_go "github.com/a97077088/frida-go" "github.com/cheggaaa/pb/v3" @@ -18,6 +19,35 @@ import ( "sync" ) +var bagbak_devi=FlagBagBak.String("devi","","设备") +var bagbak_pid=FlagBagBak.Uint("pid",0,"进程id") +var FlagBagBak =flag.NewFlagSet("bagbak",flag.ExitOnError) +func init(){ + FlagBagBak.Usage= func() { + fmt.Fprintf(FlagBagBak.Output(), "============== bagbak(ipa脱壳) 使用方法:%s\n", "bakbag 通讯录") + FlagBagBak.PrintDefaults() + } +} +func FlagBagBakMain(args[] string)error{ + if len(args)<1{ + fmt.Println("解析名称失败") + FlagBagBak.Usage() + return nil + } + bagbak_app:="" + if strings.HasPrefix(args[0],"-")==false{ + bagbak_app=args[0] + FlagBagBak.Parse(args[1:]) + }else{ + FlagBagBak.Parse(args[2:]) + } + if FlagBagBak.Parsed(){ + return NewBagBak().Run(BagBakParam{App: bagbak_app,Devi: *bagbak_devi,Pid:*bagbak_pid}) + } + return errors.New("bagbak命令解析失败") +} + + type BagBakMemcpyInfo struct { Bytes []byte } @@ -60,11 +90,13 @@ func (l *BagBak) Run(param BagBakParam) error { return err } + var pid uint if param.Pid==0{ var execapp *frida_go.ApplicationDetails for _, app := range as { - if app.Name() == param.App { + if app.Name() == param.App ||app.Identifier()==param.App{ execapp = app + pid= uint(execapp.Pid()) } } if param.App == "" || execapp == nil { @@ -79,6 +111,9 @@ func (l *BagBak) Run(param BagBakParam) error { if execapp == nil { fmt.Println(fmt.Sprintf("获取app失败:%s", param.App)) } + if pid==0{ + return errors.New(fmt.Sprintf("查找 应用名称:[%s] 或 包名:[%s] 的进程失败(fd仅以附加模式工作),确认是否已在手机上打开",param.App,param.App)) + } } @@ -90,17 +125,6 @@ func (l *BagBak) Run(param BagBakParam) error { jsos := jssys.Get("os") fmt.Printf("内核平台:%s cpu构架:%s 当前系统:%s(%s) 设备名称:%s 权限:%s \n", jssys.Get("platform").ToString(), jssys.Get("arch").ToString(), jsos.Get(1).Get("id").ToString(), jsos.Get(0).Get("version").ToString(), jssys.Get("name").ToString(), jssys.Get("access").ToString()) - var pid uint - if param.Pid==0{ - p, err:= d.GetProcessByName(param.App, frida_go.ProcessMatchOptions{}) - if err != nil { - return err - } - pid=p.Pid() - }else{ - pid= param.Pid - } - session, err := d.Attach(pid, frida_go.SessionOptions{}) if err != nil { return err diff --git a/compile.go b/flag_compile.go similarity index 61% rename from compile.go rename to flag_compile.go index e8a13da..4fa7857 100644 --- a/compile.go +++ b/flag_compile.go @@ -1,6 +1,8 @@ package main import ( + "errors" + "flag" "fmt" frida_go "github.com/a97077088/frida-go" jsoniter "github.com/json-iterator/go" @@ -9,6 +11,37 @@ import ( "path" "strings" ) +var param_compile_name=FlagCompile.String("name","","app屏幕上看到的名字,比如 通讯录,(lsps的结果中可以看到)") +var param_compile_devi=FlagCompile.String("devi","","设备") +var FlagCompile =flag.NewFlagSet("compile",flag.ExitOnError) +func init(){ + FlagCompile.Usage= func() { + fmt.Fprintf(FlagCompile.Output(), "============== 脚本编译 使用方法:%s\n", "compile 1.js -name 通讯录") + FlagCompile.PrintDefaults() + } +} + +func FlagCompileMain(args []string)error{ + if len(args)<1{ + fmt.Println("解析js文件失败") + FlagCompile.Usage() + return nil + } + a1:=args[0] + param_jspath:=a1 + FlagCompile.Parse(args[1:]) + if *param_compile_name==""{ + fmt.Println("name参数解析失败") + FlagCompile.Usage() + return nil + } + + + if FlagCompile.Parsed() { + return NewCompile().Run(CompileParam{JsPath: param_jspath,Name:*param_compile_name,Devi: *param_compile_devi}) + } + return errors.New("compile命令解析失败") +} type CompileParam struct { Name string diff --git a/create.go b/flag_create.go similarity index 71% rename from create.go rename to flag_create.go index 64b5679..96d558e 100644 --- a/create.go +++ b/flag_create.go @@ -4,6 +4,7 @@ import ( "bytes" "embed" "errors" + "flag" "fmt" "io/fs" "os" @@ -12,6 +13,30 @@ import ( //go:embed frida-agent-example var frida_agent_example embed.FS + +var FlagCreate =flag.NewFlagSet("create",flag.ExitOnError) +func init(){ + FlagCreate.Usage= func() { + fmt.Fprintf(FlagCreate.Output(), "============== 创建工程 使用方法:%s\n", "create pdir") + FlagCreate.PrintDefaults() + } +} + +func FlagCreateMain(args []string)error{ + if len(args)<1{ + fmt.Println("解析目录失败") + FlagCreate.Usage() + return nil + } + create_dir:=args[0] + FlagCreate.Parse(args[1:]) + if FlagCreate.Parsed(){ + return NewCreate().Run(CreateParam{Dir: create_dir}) + } + return errors.New("create命令解析失败") +} + + type CreateParam struct { Dir string } diff --git a/lsapp.go b/flag_lsapp.go similarity index 69% rename from lsapp.go rename to flag_lsapp.go index 28246df..4e289bb 100644 --- a/lsapp.go +++ b/flag_lsapp.go @@ -1,10 +1,29 @@ package main import ( + "errors" + "flag" "fmt" "github.com/a97077088/frida-go" jsoniter "github.com/json-iterator/go" ) +var param_lsapp_devi= FlagLsApp.String("devi","","设备") +var FlagLsApp =flag.NewFlagSet("lsapp",flag.ExitOnError) +func init(){ + FlagLsApp.Usage= func() { + fmt.Fprintf(FlagLsApp.Output(), "============== 列出所有application 使用方法:%s\n", "lsapp") + FlagLsApp.PrintDefaults() + } +} + +func FlagLsAppMain(args []string)error{ + FlagLsApp.Parse(args) + if FlagLsApp.Parsed(){ + return NewLsApp().Run(LsAppParam{Devi: *param_lsapp_devi}) + } + return errors.New("lsapp命令解析失败") +} + type LsAppParam struct { Devi string Dir string diff --git a/lsds.go b/flag_lsdevs.go similarity index 58% rename from lsds.go rename to flag_lsdevs.go index b8f01ab..8a10e8d 100644 --- a/lsds.go +++ b/flag_lsdevs.go @@ -1,10 +1,32 @@ package main import ( + "errors" + "flag" "fmt" frida_go "github.com/a97077088/frida-go" ) + + +var FlagLsDev =flag.NewFlagSet("lsdev",flag.ExitOnError) +func init(){ + FlagLsDev.Usage= func() { + fmt.Fprintf(FlagLsDev.Output(), "============== 列出所有设备 使用方法:%s\n", "lsdev") + FlagLsDev.PrintDefaults() + } +} + +func FlagLsDevMain(args []string)error{ + FlagLsDev.Parse(args) + if FlagLsApp.Parsed(){ + return NewLsDev().Run(LsDevParam{}) + } + return errors.New("lsdev命令解析失败") +} + + + type LsDevParam struct { } diff --git a/lsps.go b/flag_lsps.go similarity index 67% rename from lsps.go rename to flag_lsps.go index 832a7e0..8ade223 100644 --- a/lsps.go +++ b/flag_lsps.go @@ -1,11 +1,31 @@ package main import ( + "errors" + "flag" "fmt" frida_go "github.com/a97077088/frida-go" jsoniter "github.com/json-iterator/go" ) +var param_lsps_devi= FlagLsPs.String("devi","","设备") +var FlagLsPs =flag.NewFlagSet("lsps",flag.ExitOnError) +func init(){ + FlagLsPs.Usage= func() { + fmt.Fprintf(FlagLsPs.Output(), "============== 列出所有进程 使用方法:%s\n", "lsps") + FlagLsPs.PrintDefaults() + } +} + +func FlagLsPsMain(args []string)error{ + + FlagLsPs.Parse(args) + if FlagLsApp.Parsed() { + return NewLsPs().Run(LsPsParam{*param_lsps_devi}) + } + return errors.New("lsps命令解析失败") +} + type LsPsParam struct { Devi string } diff --git a/func.go b/func.go index e8e2dd2..1a9f0ac 100644 --- a/func.go +++ b/func.go @@ -1,11 +1,36 @@ package main import ( + "errors" frida_go "github.com/a97077088/frida-go" "net" "strings" ) + +func GetName(d* frida_go.Device,name string)(*frida_go.ApplicationDetails,uint,error){ + apps,err:=d.EnumerateApplications(frida_go.ApplicationQueryOptions{}) + if err!=nil{ + return nil,0,err + } + for _, app := range apps { + if strings.ToLower(app.Name())==strings.ToLower(name)||(strings.ToLower(app.Identifier())==strings.ToLower(name)){ + return app, uint(app.Pid()),nil + } + } + pss,err:=d.EnumerateProcesses(frida_go.ProcessQueryOptions{}) + if err!=nil{ + return nil,0,err + } + for _, ps := range pss { + if strings.ToLower(ps.Name())==strings.ToLower(name){ + return nil,ps.Pid(),nil + } + } + return nil,0,errors.New("查找进程和application失败,确认是否有这个进程") +} + + func ParseDevice(mgr* frida_go.DeviceManager,s string)(*frida_go.Device,error){ s=strings.ToLower(s) if s==""||s=="usb"||s=="u"{ diff --git a/go.mod b/go.mod index 5901fc7..dc03e68 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( code.cloudfoundry.org/bytefmt v0.0.0-20210608160410-67692ebc98de github.com/a97077088/frida-go v0.0.0-20210730162326-5858a01c2323 github.com/cheggaaa/pb/v3 v3.0.8 - github.com/gin-gonic/gin v1.7.2 + github.com/gin-gonic/gin v1.7.3 github.com/json-iterator/go v1.1.11 github.com/unrolled/render v1.4.0 ) @@ -14,13 +14,13 @@ require ( require ( github.com/VividCortex/ewma v1.2.0 // indirect github.com/a97077088/dylib v0.0.0-20210726041103-cf42039dadef // indirect - github.com/a97077088/libfridabinres v0.0.0-20210731063204-bd0ab9fac69b // indirect + github.com/a97077088/libfridabinres v0.0.0-20210814071747-e5dbb326819e // indirect github.com/fatih/color v1.12.0 // indirect github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-playground/locales v0.13.0 // indirect - github.com/go-playground/universal-translator v0.17.0 // indirect - github.com/go-playground/validator/v10 v10.8.0 // indirect + github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/validator/v10 v10.9.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mattn/go-colorable v0.1.8 // indirect @@ -31,7 +31,7 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/ugorji/go/codec v1.2.6 // indirect golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect + golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect golang.org/x/text v0.3.6 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index c7ef1eb..05572a4 100644 --- a/go.sum +++ b/go.sum @@ -28,8 +28,11 @@ github.com/a97077088/libfridabinres v0.0.0-20210731045259-c570dd9f8578 h1:+Tc/N7 github.com/a97077088/libfridabinres v0.0.0-20210731045259-c570dd9f8578/go.mod h1:ooSNVs9odQ8D99rUL1SsXoYDiXzC5yGvdWG1sYeir+0= github.com/a97077088/libfridabinres v0.0.0-20210731063204-bd0ab9fac69b h1:mNp4ezrFHjg17mTWTyaj0/MCnol0F2FD9Ha9JqYNPsg= github.com/a97077088/libfridabinres v0.0.0-20210731063204-bd0ab9fac69b/go.mod h1:ooSNVs9odQ8D99rUL1SsXoYDiXzC5yGvdWG1sYeir+0= +github.com/a97077088/libfridabinres v0.0.0-20210814071747-e5dbb326819e h1:zn5COGlJLUl+4z21pU3VU8o2LiR4RV0wMiE7wJDgTaU= +github.com/a97077088/libfridabinres v0.0.0-20210814071747-e5dbb326819e/go.mod h1:ooSNVs9odQ8D99rUL1SsXoYDiXzC5yGvdWG1sYeir+0= github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -44,15 +47,23 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.7.2 h1:Tg03T9yM2xa8j6I3Z3oqLaQRSmKvxPd6g/2HJ6zICFA= github.com/gin-gonic/gin v1.7.2/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.7.3 h1:3U500Wp728rATEiFJtk1L7dhAbWobNDQC0Cbd4yhhdc= +github.com/gin-gonic/gin v1.7.3/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-playground/validator/v10 v10.8.0 h1:1kAa0fCrnpv+QYdkdcRzrRM7AyYs5o8+jZdJCz9xj6k= github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk= +github.com/go-playground/validator/v10 v10.9.0 h1:NgTtmN58D0m8+UuxtYmGztBJB7VnPgjj221I1QHci2A= +github.com/go-playground/validator/v10 v10.9.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= @@ -75,6 +86,12 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= @@ -105,17 +122,21 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E= github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= @@ -160,6 +181,8 @@ golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 h1:siQdpVirKtzPhKl3lZWozZraCFObP8S1v6PRp0bLrtU= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -186,6 +209,9 @@ google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+Rur google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -197,3 +223,4 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/md/api.md b/md/api.md index e085997..c90db2f 100644 --- a/md/api.md +++ b/md/api.md @@ -3,6 +3,17 @@ #### api(导出api) 使用方法: ```` api 1.js -devi string -name string + +example: + +1. api 1.js -name 通讯录 + +2. api 1.js -name 通讯录 -jsbyte + +3. api 1.js -name 通讯录 -address ":1234" + +3. api 1.js -name 通讯录 -devi local + ```` #### -path diff --git a/md/bagbak.md b/md/bagbak.md index d055848..c213703 100644 --- a/md/bagbak.md +++ b/md/bagbak.md @@ -1,13 +1,28 @@ ![](../gif/bagbak.webp) #### bagbak(ipa脱壳) 使用方法: + +##### pid优先级大于名称 + +#### 输入applabel或者identifier 他自动会搜索 + +#### fd 只会以附加模式工作,使用前确认app是否在手机上打开 + ```` -bakbag appname -devi string +bakbag applabel -devi string + +example: + +1. fd bagbak 通讯录 + +2. fd bagbak -pid 907 + +3. fd bagbak -pid 907 -devi local + ```` -#### appname: -- ios is app icon label -- android is app icon label +#### applabel or identifier: +- ios is app icon label,macos use pid - fd lsapp 获取 - 如果获取不到,fd lsps 获取 @@ -21,13 +36,6 @@ bakbag appname -devi string - -devi 1234(devi id) #### -pid -- 要脱壳的 process id (appname or pid) +- 要脱壳的 process id - pid模式应该支持macos - pid模式应该支持系统库,比如webkit - -pid 例子: -```` -bagbak -pid 123 -devi string -```` - - diff --git a/md/compile.md b/md/compile.md index 399a028..21efa01 100644 --- a/md/compile.md +++ b/md/compile.md @@ -3,6 +3,11 @@ #### compile(显示进程列表) 使用方法: ```` compile 1.js -devi string -name string + +example: + +1. fd compile 1.js -name 通讯录 + ```` #### -name diff --git a/md/create.md b/md/create.md index 17ac99e..ea299a4 100644 --- a/md/create.md +++ b/md/create.md @@ -3,6 +3,11 @@ #### create(创建工程) 使用方法: ```` create dir + +example: + +1. fd create fridaTest + ```` #### dir: diff --git a/md/lsapp.md b/md/lsapp.md index d23e4a6..5db08ba 100644 --- a/md/lsapp.md +++ b/md/lsapp.md @@ -3,6 +3,12 @@ #### lsapp(显示app列表) 使用方法: ```` lsapp -devi string + +example: + +1. fd lsapp + +2. fd lsapp -devi local ```` #### local app is emtry diff --git a/md/lsdev.md b/md/lsdev.md index b741c49..b8f5e86 100644 --- a/md/lsdev.md +++ b/md/lsdev.md @@ -3,4 +3,8 @@ #### lsdev(显示所有设备列表) 使用方法: ```` lsdev + +example: + +1. fd lsdev ```` \ No newline at end of file diff --git a/md/lsps.md b/md/lsps.md index 196b652..38bc978 100644 --- a/md/lsps.md +++ b/md/lsps.md @@ -3,6 +3,13 @@ #### lsps(显示进程列表) 使用方法: ```` lsps -devi string + +example: + +1. fd lsps + +2. fd lsps -devi local + ```` #### -devi: diff --git a/md/run.md b/md/run.md index 3492a50..0ef4782 100644 --- a/md/run.md +++ b/md/run.md @@ -1,17 +1,34 @@ ![](../gif/run.webp) +#### 如果进程不存在,并且是Applicatoin,那么将以spawn模式启动 + #### run(运行js在webstorm中) 使用方法: ```` run 1.js -devi string -name string + +example: + +1. fd run 1.js -name 通讯录 + +2. fd run 1.js -name 通讯录 -jsbyte + +3. fd run 1.js -name 通讯录 -devi local + ```` +#### -restart +- bool 重启进程,并以spawn模式注入 + #### -jsbyte - bool 是否使用编译过的js +#### -pid +- processId + #### -name -- ios is app icon label -- android is app icon label +- ios is appLabel or Identifier or ProcessName +- ios is appLabel or Identifier or ProcessName - fd lsapp 获取 - 如果获取不到,fd lsps 获取