Android Studio 动态调试

调试仍然使用我们喜闻乐见的Android Studio,不过使用的是AS3,AS在3.0版本后便不在使用DDMS,调试smali上有点不适应,不过我们仍然可以在配置SDK后,在命令行输入“monitor”来打开DDMS。

apk使用我们自己生成的一个简单的登陆判断界面来做测试。

使用网上的一段登陆代码如下

1548750208555

生成APK后,利用AK反编译为smali代码。

1548750320824

然后用AS打开反编译后的文件夹,当然在利用AS调试smali的时候,需要安装ideasmali插件,具体可以百度插件名即可下载。

调试的时候需要我们进行端口的转发,可以先用DDMS查看一下端口是否是8700(一般默认为8700),因为启动AS后会占有相应的端口,导致无法打开DDMS。

具体使用方式为:打开DDMS。在CMD命令行输入以下内容,其中package为包名。MainActivity是需要调试的activity名,具体看情况修改。

adb shell am start -D -n package/.MainActivity

可以看到手机端或者模拟器端已经以调试的方式启动我们相应的程序了。在DDMS中就可以看到一只红色的小蜘蛛了。后面有一个端口默认应该是8700。然后查看进程PID,假设为1980。

adb forward tcp:8700 jdwp:1980

进行端口转发到。转发的时候要先关闭DDMS,不然显示端口被占用。

在使用AS打开我们需要的文件后,如以下内容。

1548750452683

配置远程调试参数,修改端口为8700.

1548750876061

然后在需要的地方设置断点,此处在账户密码的判断处下断点。启动调试,然后就可以看到界面显示到我们断点前的地方了。在模拟器上输入账号密码后,就可以看到断点被执行。

1548751037753

可以看到下面两部分第一部分为为v0赋值为admin,调用String类的equals方法来判断v0参数和p1对象值是否相同,并把结果赋值给v0,一个布尔值。第二部分,判断v0是否为0,等于0跳转到:cond_0处。不等于0则继续,同样为v0赋值一个字符串为12345,调用方法判断是否相同,以下则和上面基本一致。

1548751160949

此时,需要做些什么修改,判断,以后参数变化,可以在下面的variables查看,上图中的参数就是在模拟器中输入的参数显示。





# Android逆向  

tocToc: