Kimsuky-Android-RAT-Client分析

AndroidManifest.xml文件

主要内容:uses-permission  //用户权限

<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"tools:ignore="ProtectedPermissions" />

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

<uses-permission android:name="android.permission.READ_SMS" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

android.permission.READ_PRIVILEGED_PHONE_STATE  //读取-特权的-手机-状态

可以访问设备的IMEI和序列号, 但从Android10开始只能系统APP才可以使用,所以对于普通的APP,已经无法获取到设备的IMEI和序列号。

tools:ignore="ProtectedPermissions"

在加权限的时候,有Permission is only granted to system apps报错,可以忽略这个错误

android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS //请求-不管-电池-优化可以通过代码申请对当前应用忽略电量优化,但有时会有弹窗确认

android.permission.POST_NOTIFICATIONS  //投递-消息

向终端用户推送通知栏消息

android.permission.INTERNET  //网络

android.permission.FOREGROUND_SERVICE  //前置的-服务

为了防止后台服务被系统干掉,我们需要将服务提升为前台服务

android.permission.READ_SMS  //读取-SMS

可以获取短信的内容

android.permission.RECEIVE_BOOT_COMPLETED   //设备-启动-完成

可以获取Android系统开机启动项列表

android.permission.READ_EXTERNAL_STORAGE  // 读取-外部的-存储

android.permission.WRITE_EXTERNAL_STORAGE  //写入-外部的-存储

android.permission.MANAGE_EXTERNAL_STORAGE  //管理-外部的-存储

外部存储就是SDcard

MainActivity.java文件

在onCreate()函数中会创建loop类的intent并以服务运行,后续检查是否具有一些权限,没有就申请

后续的onRequestPermissionsResult函数、onActivityResult函数、request_file函数也都是申请权

限的,其中request_file函数申请的是所有文件管理权限和外部存储读取权限

BootReceiver.java文件

BroadcastReceiver类作用:

用于不同组件间的通信,包括应用内和不同应用间的交互通信

监听系统资源的变化,如网络变化、SD卡状态等

多进程的通信

使用:

继承BroadcastReceiver类,重写onReceiver方法,广播接受到了会主动回调该方法

当监听到Intent.ACTION_BOOT_COMPLETED和Intent.ACTION_REBOOT时,就启动loop.class服务

生成一个loop类的intent,以服务形式运行

loop.java文件

loop服务会生成一个设置、更新插件的消息并常驻通知栏;new出一个boby对象并以线程形式运行

其中的滚动条改变监听、触摸监听、键盘监听都没有实现

body.java文件

进行了一个循环,循环里面生成了一个phone_state对象并调用对应的start_process()函数,休息300秒后继续申请和调用

phone_state.java文件

其中的start_process()函数会获取设备的IMEI信息发送到服务器,根据返回结果调用不同的回调函数,当回调函数为onSuccess()时还会根据服务器回复内容执行不同的代码。

当服务器返回结果是”Sms_interval”时,后续调用的是sms_loop类,用来获取受害机的所有SMS信息并上传服务器。

当服务器返回结果是"Filelist"时,调用Filemanager类上传受害机外部存储器上的所有目录和文件信息

当服务器返回结果是"Filedown"时,调用Filemanager类上传受害机外部存储器上的指定文件内容

还会通过send_logs()函数向服务器发送受害机的Build.MODEL、Build.MANUFACTURER、Build.VERSION.SDK_INT、Build.VERSION.RELEASE

PostByWeb.java文件

包括PostByWeb类的构造函数和request()函数,request()函数负责上传数据并根据返回结果执行不同回调函数,构造函数则会调用request()函数。

PostType.java文件

定义了一个枚举类型,包括DATA、FILE、PATCH,在PostByWeb.java中的request()函数中根据该类型的枚举值使用不同的url和链接服务器的参数

_Global.java文件

定义了一些字符串,大部分需要通过MyCrypt.crypt( , )函数解密获得;

其中有一个字符串是url地址;

System.currentTimeMillis()函数返回当前系统时间(毫秒);

ICON_START_NAME字符串看名字应该是和图标有关系,尝试base64解密后是一张png图片(在后续解密代码中证明该猜想),尝试打开但无法显示,在XP系统下显示为一张透明图片

MyCrypt.java文件

定义了一个54行2列的二维数组用来亦或解密,包括解密字符串和文件

ICallBack.java文件

定义了回调函数类,具体包括三个子函数onFinished()、onError()、onSuccess()

Filemanager.java文件

Filemanager类作用主要是上传外部存储器指定目录和文件的所有信息,并上传指定文件内容

sms_loop.java文件

sms_loop类中的主要函数是run()函数,run()函数中又调用了sms_prob()函数,sms_prob()功能是获取受害机中所有SMS卡信息并发送到服务器。

StringCompressor.java文件

StringCompressor类看代码应该是对字符串进行压缩处理的,实际只在Filemanager类代码中出现过,而且是注释形式,其他地方没有出现,估计是作者把StringCompressor类废弃了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拜乔布斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值