前提条件 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==}后点击验证按钮,会提示秘钥正确 文件, 代码