《Android 安全(三)》动态调试Smali

环境

  • Android Studio 3.3.2
  • SmaliIdea Plugin
  • 自己随手写一个Android应用
  • baksmali

操作

安装SmaliIdea插件

编制测试应用

public class MainActivity extends AppCompatActivity {
    private int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.tv_content);

        Button button = findViewById(R.id.bt_change_text);

        button.setOnClickListener(v -> {
            count++;
            textView.setText(String.format(Locale.CHINESE, "Tap %d", count));
        });
    }
}

打包成Apk文件

为了保证android:debuggable="true",我们打包成debug版本即可。或者手动在AndroidManifest.xml文件中设置也行。

反编译

  • baksmali d app-debug.apk -o ~/projects/myapp/src

启动程序并转发端口

  • 启动测试程序主界面
    adb shell am start -D -n cn.onlyloveyd.smali/cn.onlyloveyd.smali.MainActivity

  • 启动“Android Device Monitor”,记住pid和后面8700端口,然后一定关闭Android Device Monitor
    《Android 安全(三)》动态调试Smali

  • 转发端口
    《Android 安全(三)》动态调试Smali

导入工程至Android Studio

  • “New” -》“import Project”,选择刚才创建的工程目录
    《Android 安全(三)》动态调试Smali

  • 选择"Create project from existing sources"
    《Android 安全(三)》动态调试Smali

  • 一直继续直到“Finish”

  • 设置“src"文件加为源文件
    《Android 安全(三)》动态调试Smali

  • “Edit Configurations”并配置JDK
    《Android 安全(三)》动态调试Smali
    《Android 安全(三)》动态调试Smali

调试

  • 执行“Run” -》 “Debug XXX”
  • 跳转到断点处,可执行单步调试
    《Android 安全(三)》动态调试Smali