Android安全:代码注入
2023-09-14 09:16:10 时间
一、常用的Smail注入代码
在逆向分析APK文件的时候,我们往往需要注入一些自己的代码方便调试,如增加调试Log信息等。常用的Smail注入代码如下:
1.增加调试Log信息:
Log.i("test","Log Test");
2.增加堆栈跟踪信息:
new Exception("print trace onCreate").printStackTrace();
3.增加MethodTracing信息:
Debug.startMethodTracing("qprojecttract");
Debug.stopMethodTracing();
二、增加调试Log信息
推荐大家先书写相应的Java语言逻辑代码,然后将其反编译拿到Smali指定代码,最后复制过去即可;
1.我们常在应用中使用Log方法输出日志(如网络请求参数、加密数据等),书写如下:
2.Smali语言描述如下:
3.如在Activity的onCreate()方法中,调用super.onCreate()之后,注入Log.i("test","Log Test")代码如下:
4.重新打包、签名APK,运行至页面Logcat输出如下:
三、栈跟踪法
栈跟踪同样属于代码注入的范畴,它主要是手动向反汇编后的smail文件中加入栈跟踪信息输出的代码。栈跟踪法只需要知道大概的代码注入点,而且注入代码后的反馈信息比Log注入要详细的多;
1.我们使用的栈跟踪信息(跟踪指定代码调用堆栈)代码如下:
2.Smali语言描述如下:
3.如在Toast显示提示处,注入栈跟踪代码,用于追踪Toast.show()调用的地方;
4.修改完毕之后,重新打包并签名。安装apk运行Logcat输出如下,Toast.show()方法在NextActivty.onCreate()方法中调用:
四、使用MethodTracing
DDMS提供了MethodProfing功能,它的作用是在执行程序时记录下每个被调用的API名称,只需要查看API的调用序列即可知道这段代码的具体用途;
1.我们使用的MethodProfing代码(分析API调用序列)如下:
2.Smail语法如下:
3.在onCreate()方法中,加入跟踪代码(在AndroidManifest.xml中添加WRITE_EXTERNAL_STORAGE权限),分析setContentView()API的调用序列:
4.重新打包,签名apk,并安装运行相关追踪的代码,使用adb工具从设备的/sdcard目录,获取分析结果文件qprojecttract2.trace;
5.打开Android Studio->Captures窗口,双击qprojecttract2.trace文件,查看分析结果:
在逆向分析APK文件的时候,我们往往需要注入一些自己的代码方便调试,如增加调试Log信息等。常用的Smail注入代码如下:
1.增加调试Log信息:
Log.i("test","Log Test");
2.增加堆栈跟踪信息:
new Exception("print trace onCreate").printStackTrace();
3.增加MethodTracing信息:
Debug.startMethodTracing("qprojecttract");
Debug.stopMethodTracing();
二、增加调试Log信息
推荐大家先书写相应的Java语言逻辑代码,然后将其反编译拿到Smali指定代码,最后复制过去即可;
1.我们常在应用中使用Log方法输出日志(如网络请求参数、加密数据等),书写如下:
2.Smali语言描述如下:
3.如在Activity的onCreate()方法中,调用super.onCreate()之后,注入Log.i("test","Log Test")代码如下:
4.重新打包、签名APK,运行至页面Logcat输出如下:
三、栈跟踪法
栈跟踪同样属于代码注入的范畴,它主要是手动向反汇编后的smail文件中加入栈跟踪信息输出的代码。栈跟踪法只需要知道大概的代码注入点,而且注入代码后的反馈信息比Log注入要详细的多;
1.我们使用的栈跟踪信息(跟踪指定代码调用堆栈)代码如下:
2.Smali语言描述如下:
3.如在Toast显示提示处,注入栈跟踪代码,用于追踪Toast.show()调用的地方;
4.修改完毕之后,重新打包并签名。安装apk运行Logcat输出如下,Toast.show()方法在NextActivty.onCreate()方法中调用:
四、使用MethodTracing
DDMS提供了MethodProfing功能,它的作用是在执行程序时记录下每个被调用的API名称,只需要查看API的调用序列即可知道这段代码的具体用途;
1.我们使用的MethodProfing代码(分析API调用序列)如下:
2.Smail语法如下:
3.在onCreate()方法中,加入跟踪代码(在AndroidManifest.xml中添加WRITE_EXTERNAL_STORAGE权限),分析setContentView()API的调用序列:
4.重新打包,签名apk,并安装运行相关追踪的代码,使用adb工具从设备的/sdcard目录,获取分析结果文件qprojecttract2.trace;
5.打开Android Studio->Captures窗口,双击qprojecttract2.trace文件,查看分析结果:
相关文章
- [Android Pro] android控件ListView顶部或者底部也显示分割线
- [Android Pro] android 禁用和开启四大组件的方法(setComponentEnabledSetting )
- [Android Memory] android 警告:Exported activity does not require permission
- [Android Pro] android 混淆文件project.properties和proguard-project.txt
- 【黑马Android】(02)短信发送器/布局演示/android下单位/android下Junit/保存数据/android下权限/xml解析和序列化
- android混淆和反编译
- android 自定义drawable
- 沉浸式-- Android沉浸式状态栏完全解析
- android性能优化
- Android studio 提示“android qemu-system-i386.exe停止工作”
- Android版OpenCV图像处理技术亲自验证[四十三]之图像直方图均衡(附源码)
- Android stuido 解决Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file
- Android【报错】android.content.ActivityNotFoundException:activity in yourAndroidManifest.?
- Android 获取TARGET_OUT的值
- Android 11.0 系统Settings去掉开发者模式功能
- Android 11.0 当安装多个播放器时,设置默认播放器播放歌曲
- Android 11.0 12.0Recent列表不显示某个app
- Android 9.0 延时开机动画解决首次开机黑屏和去掉android正在启动的提示框
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
- 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
- 【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )
- 《Android第一行代码》笔记
- Android编译系统中的Android.bp
- 【AI with ML】第 13 章 :在 Android 应用程序中使用 TensorFlow Lite