apk位置在https://github.com/r0ysue/AndroidFridaBeginnersBook/tree/main/Chap04
注意:这里一定要把apk安装在模拟器上!这里一定要把apk安装在模拟器上!这里一定要把apk安装在模拟器上!
Jadx分析
使用Jadx将App拖入进行初步分析,查看AndroidManifest.xml内容,这个文件会记录一些App相关的属性信息,包括App的包名、版本号、所申请的权限信息、四大组件信息以及入口类等信息。
AndroidManifest.xml文件信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.shimeng.qq2693533893" platformBuildVersionCode="21" platformBuildVersionName="5.0-1521886"> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.GET_TASKS"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.BROADCAST_STICKY"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:theme="@style/MT_Bin" android:label="@string/app_name" android:icon="@drawable/MT_Bin_res_0x7f020002" android:debuggable="true" android:allowBackup="true"> <activity android:label="@string/app_name" android:name="com.shimeng.qq2693533893.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <service android:name="com.shimeng.qq2693533893.MyServiceOne"/> <receiver android:name="com.shimeng.qq2693533893.MyBroadcast"> <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BATTERY_CHANGED"/> <action android:name="android.intent.action.DATA_ACTIVITY"/> <action android:name="android.intent.action.DATA_STATE"/> <action android:name="android.intent.action.DATE_CHANGED"/> <action android:name="android.server.checkin.FOTA_CANCEL"/> <action android:name="android.intent.action.MEDIABUTTON"/> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.REBOOT"/> <action android:name="android.intent.action.USER_PRESENT"/> <action android:name="android.intent.action.MEDIA_MOUNTED"/> <action android:name="android.intent.action.MEDIA_SCANNER_STARTED"/> <action android:name="android.intent.action.MEDIA_SCANNER_FINISHED"/> <action android:name="android.intent.action.TIME_SET"/> <action android:name="android.intent.action.TIME_TICK"/> <action android:name="android.intent.action.UMS_CONNECTED"/> <action android:name="android.intent.action.WALLPAPER_CHANGED"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <action android:name="android.intent.action.PHONE_STATE"/> <action android:name="android.intent.action.SCREEN_OFF"/> <action android:name="android.intent.action.SCREEN_ON"/> <action android:name="android.intent.action.SERVICE_STATE"/> <action android:name="android.intent.action.SIG_STR"/> <action android:name="android.intent.category.ALTERNATIVE"/> <action android:name="android.intent.action.SETTINGS"/> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> <action android:name="android.net.wifi.STATE_CHANGE"/> <category android:name="android.intent.category.HOME"/> </intent-filter> </receiver> </application> </manifest>
|
App的包名就是进程唯一的标志(com.shimeng.qq2693533893),根据activity、service、等标签可以确认App的四大组件的信息。这个App只有一个activity,因此MainActivity就是入口类。
也可以通过intent-filter标签中的action属性信息和category属性信息标志入口类,入口类的action属性为android.intent.action.MAIN
,而category属性则为android.intent.category.LAUNCHER
。
查看入口类代码,在左侧界面选中并点击MainActivity后,会显示翻译出的MainActivity内容。
这个activity是通过startService()函数启动了一个名为com.shimeng.qq2693533893.MyServiceOne的服务。查看MyServiceOne类的内容,代码很复杂,而且由于混淆信息导致静态代码可读性不好。
这时要是想快速分析程序逻辑就要选择使用Objection进行动态调试,在开始动态调试前还要解决一些问题。
在开始前提到过要在模拟器中运行这个恶意应用,因为如果模拟器的系统被恶意代码攻击或者损坏了,可以直接删除后重新创建一个全新的系统。
在恶意app打开应用后,adb连接会自动断开,并且无法通过USB连接。
使用Jadx查看App的包结构会发现有一个USBLock的相关类
查看内容会发现,类中执行了一个setprop persist.sys.usb.config none
的命令,它与getprop相对,setprop用于Android系统的某个属性。搜索persist.sys.usb.config
会发现这个属性与设置USB调试相关,属性被设置为none时,就会导致adb调试被禁用,达到断开连接的作用。
如果无法使用USB连接,就无法通过adb启动frida-server,无法进行Objection进行连接。
我们可以使用Termux软件。他是一个安卓手机的Linux模拟器,可以在手机上模拟Linux环境,它提供一个命令行界面,让用户与系统互动,实际上就是个普通手机App。下载地址在这里Termux下载好后通过adb安装到模拟器上。
安装好后打开
模拟器默认root过,直接用su
命令启用root权限。运行frida-sever -help
来查看帮助信息,发现frida-sever其实是支持使用网络模式进行监听的
Objection默认使用USB模式连接,但也可通过USB模式连接,但可以通过-N
参数使用网络模式,使用时通过-h
参数指定IP地址、-p
参数指定端口去实现网络模式链接。
出bug了,无法继续向下进行!!!