Mac上Log插桩安卓手机应用

查看 37|回复 5
作者:ipk2046   
前提条件
  • M芯片Mac
  • 安卓手机,不是模拟器
  • 参考学习正己大佬的《安卓逆向这档事》第五课https://www.52pojie.cn//forum.php?mod=viewthread&tid=408645&extra=page%3D1%26filter%3Dtypeid%26typeid%3D236
  • 已编译好的插入Log代码文件dex,第五课资源里有
  • 可反编译的安卓应用,第五课资源里有

    步骤
  • 反编译APK后,在清单文件里添加android:debuggable="true"
  • 注意添加的地方在
  • 将准备好的Log代码文件dex复制到反编译后的文件夹根目录里,和清单文件、smail文件夹同级
  • 修改复制的Log代码文件dex名字为classes2.dex
  • 此处的classes2.dex名字是因为目前apk打包后只有一个classes.dex,如果要修改的apk打包后有其他dex,可视情况改为classes3.dex等
  • 要确认名字是否可以的话,可以先在未复制前回编译打包一次,看下生成的build文件夹里apk下有几个dex文件
  • 因此这里的名字不是随意设置的,其他的如class2.dex可能不会被正常打包
  • 用文本编辑器打开目标smail,在想要打印变量的位置插入下列代码
  • invoke-static {对应寄存器}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V
  • 第五课里,demo app要插入的位置在check方法里,具体位置为.line 57上面
    move-result-object v0
    invoke-static {v0}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V
    .line 57
  • 将修改后的apk文件重新签名打包,用adb install到已USB连接的手机上
  • 打开手机的调试模式,在设置里某级菜单下会出现开发人员选项类目
  • 在开发人员选项里,
  • 打开USB调试开关
  • 在Mac的终端里输入查看log命令行:adb logcat --pid=$(adb shell pidof com.zj.wuaipojie) | grep qtfreet
  • 这里的com.zj.wuaipojie为应用包名。如果先查询pid的话在这里代替也可以,但要注意每一次卸载安装app后都会变。
  • | grep qtfreet是在筛选含有qtfreet的日志,qtfreet是第五课里提供的插桩Dex里打印Log时一定含有的字符串。不加这个筛选打印的就是本应用的所有日志。
  • 这个命令执行后,终端会一直等待log打印,要结束可按ctrl+c主动退出
  • 命令adb logcat --pid=$(adb shell pidof com.ipk123.pojie) -c可用来清除当前应用的log,log过多时可使用
  • 在手机上点击打开刚才安装的apk,点击到目标页面触发新加的log代码
  • 第五课里demo apk是要点击挑战后到第四关初识jeb&动态调试,在输入框里输入flag{1234}
  • flag{}是用jeb或jadx查看app代码后知道的逻辑,这里会先检测是否以flag{开头,然后检测是否以}结尾,最后检测中间位置的内容是否符合要求
  • 1234不是必需的,随便输
  • 在Mac终端里可以看到打印的Log日志,也就是需要放到代替上面1234位置的正确内容
  • 这个内容是根据进入app时填写的名字确定的,例如你填写的是o,那么打印的会是如下内容
  • 07-25 15:23:59.556  4351  4351 V qtfreet  ChallengeFourth.check(ChallengeFourth.kt:56): XQwKAw==
  • 在APP输入框里输入flag{XQwKAw==}后点击验证按钮,会提示秘钥正确


    文件, 代码

  • jesse365   

    同一节课的内容可以并在一起哦
    JohnS   

    好好学习  感谢
    seagull000   

    感谢楼主的分享!
    hk1129   

    有没有ios的急需  
    seagull000   

    长知识了感谢分享
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部