Objection结合Jeb分析实战

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了,无法继续向下进行!!!