动态调试目的
由于上篇反编译脱壳拿到了应用的dex文件拿到之后不搞点事情表示不是很开心.重新打包之后会有闪退现象(加固之后.smali文件被修改)由于查了资料说可以动态调试
虽然我没有调试成功(可能是水平不到位哈哈)不过动态调试流程还是可以记录一下的
前期准备
1.反编译工具apktool 下载地址提取码:qyxw
2.带有root权限手机(我用的是模拟器)
3.需要调试的apk包(我这里是自己写了一个Demo)
public class MainActivity extends AppCompatActivity {
private EditText edit;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = findViewById(R.id.et_edit);
button = findViewById(R.id.bt_button);
init();
}
private void init() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = edit.getText().toString();
if (TextUtils.equals("123",text)) {
Toast.makeText(MainActivity.this, "核验成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "和验失败", Toast.LENGTH_SHORT).show();
}
}
});
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_edit"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<Button
android:id="@+id/bt_button"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:text="验证"
android:textSize="40dp"
android:layout_height="wrap_content"/>
</LinearLayout>
4.打包签名不做说明
动态调试步骤
1.使用apktool将签名后的包反编译命令行执行 java -jar apktool.jar d -f appname.apk -o OUT
(OUT为生成文件夹名称可更改)
2.将反编译后的文件夹作为porject导入到studio
3.配置debug

点击左上角+添加一个Remote

必须要强调一下 这个端口啊就是个大坑 !!!好多资料都说端口要改成 8700然后吧啦吧啦...人家ADM(Android Device Monitor)默认的就是8700何必跟它抢来抢去的去配置呢,,这里先不用管一会回来配置就好
保存成功后回到首页完善项目配置 file>Project Structure

4.接下来打开Android Device Monitor(sdk目录下>tools>monitor.bat 双击即可)
如果提示以下说明端口被占用

可以查看端口被谁占用
如果被studio占用的话关掉studio先打开ADM在打开studio即可
5.打开模拟器确保模拟器和ADM相关联([关联后ADM会显示进程信息)
6.模拟器中安装要调试的apk打开要调试的应用(找到端口信息)
7. 如图我要调试的应用为8600我们就回到第三步进入studio配置那个端口为8600

切记端口在应用关闭重启后有可能会改变所以要重新回到第三步配置
8.愉快的调试
1).我们所有的带码都会在smali文件夹下面所以打开文件夹找到需要调试的文件

我们的带码在MainActivity.smali中 不过我要拿到edittext中的值这些都是在点击事件里面完成的 所以逻辑在
MainActivity$1.smali
文件中(真心不晓得为啥哈哈)
-
所以我们来到MainActivity$1.smali
一句话看不懂就在getText()这个方法前面debug了因为我知道这个是我调用的方法
- 开始debug发现没反应?(其实已经成功了只不过视觉效果不好)
- 让程序出现等待debug
方法一: 打开cmd窗口进入sdk目录>platform-tools
输入adb shell am start -D -n com.xiao.test/com.xiao.test.MainActivity
(包名/打断点文件的全路径)
如果配置了全局adb就直接cmd窗口就好了
方法二: 点开模拟器进入到开发者
选择调试应用>勾选要调试的应用然后打开等待调试
图片.png
5)等待模拟器出现等待调试界面后重新run debug(成功后等待界面就会消失)


接下来就是熟悉的debug流程了
总结
每次重新启动程序端口都可能会发生变化改来改去好无助(可能网上那些改成8700巴拉巴拉是为了让程序的端口不变???以后再研究吧...)
网友评论