2024年11月2日发(作者:威凡雁)
android 通过DHCP获取IP初步流程
====================================================================
1.
java中实现log的方法是
Log.v(TAG, "Static IP configuration succeeded");
D/WifiStateTracker( 860): DhcpHandler: DHCP request started
发生在 ./frameworks/base/wifi/java/android/net/wifi/:2285
2.
java层运行dhcp的地方有两个
./frameworks/base/ethernet/java/android/net/ethernet/
./frameworks/base/wifi/java/android/net/wifi/
定义在
./frameworks/base/core/java/android/net/
runDhcp的jni实现./frameworks/base/core/jni/android_net_:231
对应的函数是android_net_utils_runDhcp,此函数会调用dhcp_do_request, dhcp_do_request
定义在./system/core/libnetutils/dhcp_utils.c中
3.
rt3070 wifi 驱动适配层在./hardware/libhardware_legacy/wifi/wifi_ralink3070.c
Ethernet分析
的jni在./frameworks/base/core/jni/android_net_
故障描述:
(android手机)LG P350连接wifi(wlan)时若使用动态ip分配,则总停留
在“正在从[SSID名称]获取IP地址”,然后获取失败,自动断开。反复重新连
接均如此。
设置静态IP则可以连接。
排查过程:
(1)搜索引擎输入“LG P350 wifi obtain ip fail”,无有效信息。
(2)刷包,刷了3个官方KDZ(V10K_00,V10N_00,V10P_00),无果。
(3)今天反编译关系,得学android调试技术,adb logcat时发现DHCP获取
ip时,提示有文件无权限打开,接着就是超时失败。关键部分信息摘录如下:
D/NetworkStateTracker(1372): setDetailed state, old =AUTHENTICATING and
new sta
te=OBTAINING_IPADDR
„...
D/WifiStateTracker(1372): DhcpHandler: DHCP request started
„.
E/dhcpcd ( 9576): open`/data/misc/dhcp/': Permission
denied
„...
V/WifiStateTracker(1372): Changing supplicant state: COMPLETED ==>
DORMANT
D/WifiStateTracker(1372): Reset connections and stopping DHCP
„„.
D/WifiStateTracker( 1372): Disabling interface
D/NetworkStateTracker(1372): setDetailed state, old=OBTAINING_IPADDR
and new state=FAILED
E/WifiInfo( 1372):setSSID null
„„.
V/WifiStateTracker( 1372): New network state is DISCONNECTED
V/WifiStateTracker(1372): Changing supplicant state: DORMANT ==> DORMANT
E/WifiInfo( 1372):getSSID null
D/ConnectivityService(1372): ConnectivityChange for
WIFI:DISCONNECTED/FAILED
V/ConnectivityService(1372): Attempt to connect to WIFI failed.
D/ConnectivityService(1372): getMobileDataEnabled returning false
(4)root explorer(又名RE浏览器)浏览该文件夹(/data/misc/dhcp/),
发现others组无写权限。
推测dhcpcd进程在动态获取到ip,需要写配置文件到这个文件夹的时候,发现
无权限写入,结果外部等待超时,wifi连接被放弃和重置,因此外部也就表现
为无法连接了。
解决方法:
(1)手机要先root,推荐SuperOneClickv2.3.3。
(2)安装root explorer(又名RE浏览器)应用。
(3)关闭wifi(即wlan)
(4)打开root explorer并授权获取root权限。
(5)找到文件夹“/data/misc/dhcp/”,将others组的权限改为可读可写可执
行,如图。
(6)打开这个文件夹,如果里面有文件,全部删掉或者改名为bak作备份。
(7)开启wifi重试。
其它和备注:
(1)只是为了反编译安卓apk,现在连adb logcat都得看了,悲催啊。目测本
人走远了?
(2)ps看了看,貌似dhcpcd运行在root权限啊?为啥会对那个文件夹无写权
限?对linux毫无经验,附图求解释„...
用re浏览器搜索所有带dhcp关键字的文件时候发现dhcpcd (这个程序linux
下叫做dhcp客户端 主要负责获取ip地址的!!!如果你静态ip好使 但是无
法获取路由分配的ip地址的话 肯定是这个程序的问题)文件和
system/bin/dhcpcd 修改日期与系统rom中的文件大多的日期不符,那么这个文
件明显是被替换了!!所以想到了中毒或者文件损坏丢失。提取原厂ROM,解压
后用re浏览器放到system/bin目录下(必须有root权限)。
===================================================================
恶意软件——系列变种分析及修复
病毒分析
整体架构由两个模块构成,第一个模块(Loader)会在宿主运行
到特定场景时激活,随后执行提权操作,并加载第二个模块(Payload),Payload
模块则常驻内存,执行各种威胁手机安全的操作。不同的变种
之间,区别主要在于不同的Loader,Payload模块则基本相同。
当Loader模块被激活后,首先会试图获得ROOT权限。根据宿主软件的不同,
Loader会采用不同的策略,如果Loader宿主本身需要ROOT权限, Loader就会
附着在宿主需要以ROOT权限执行的代码之后运行(例如一键科学上网免费版,
其中捆绑的会嵌入在安装科学上网的代码中)。如果宿主本身
不需要ROOT权限,Loader会利用公开的漏洞(NPROC_RLIMIT)在后台静默获取
ROOT权限(例如音乐随身听)。由于这个漏洞广泛的存在于Android2.1和2.2
设备上,所以,即使手机没有ROOT权限,多数手机依然会受这个病毒威胁。然
后,随后,Loader会进行以下操作(不同的变种具体细节可能不同)
1.将系统分区设置为可写
2.获取设备信息,包括系统版本,手机品牌,Device ID,SDK版本等数据,写
入,并将此ini文件复制到/system/etc下重命名为.rild_cfg
使用AES加密算法解密Payload(Payload通常保存在宿主的assets中,名为
),并将Payload复制以下位置:
/system/etc/.dhcpcd
/system/xbin/ccb
/system/bin/installd(将原始文件备份为/system/bin/installdd)
/system/bin/dhcpcd(将原始文件备份为/system/bin/dhcpcdd)
/system/bin/bootanimation(将原始文件备份为/system/bin/bootanimationd)
3.恢复系统分区为只读,并执行/system/xbin/ccb
至此,Payload已经完成金蝉脱壳,从宿主APK中成功的被释放出来了。由于病
毒替换的关键系统文件(installd, dhcpcd, bootanimation)在开机过程中会自
动启动,因此病毒实际上具备了以ROOT权限开机自动启动的能力。同时,由于
Payload已经脱离APK藏身于系统分区内,即使安全软件检测到病毒,也无法进
行清理操作。
当Payload随系统自动启动之后,会尝试连接以下地址,获取攻击命令:
:8511
:8511
:8511
由于Payload感染了多个系统进程,为避免相互冲突,当任意一个Payload进程
连接至控制服务器后,便创建/system/etc/文件锁来进行进程同
步。
目前Payload已知的功能包括:
1.自动下载APK软件包至本地
2.静默安装APK软件包
3.启动指定APK软件包
4.静默卸载APK软件包
5.设置浏览器首页(未使用)
至此,病毒就会源源不断的向受感染的手机中自动下载并安装软件,从中获取高
额利益了。
清除方法
1.使用专杀工具
由于的特殊性,常规安全软件无法完全清除此病毒,因此LBE
小组提供了专用专杀工具,彻底清理在系统内
的残留,您可以从 /app/8/下载到此工具。
需要注意的是,使用此工具之前,您必须使用安全软件全盘扫描,确保所有感染
病毒的APK文件已被清理,否则有可能清除不彻底导致重新感染。
2.手工清理
我们推荐用户使用专杀工具,方便快捷,但如果您希望能自己动手的话,也可以
手工清除残留。同样在手工清除前,请使用安全软件全盘扫描,
确保所有感染病毒的APK文件已被清理,否则有可能清除不彻底导致重新感染。
如果您的手机未安装过Busybox,请首先安装Busybox:
/app/8/
使用超级终端软件,或者在PC上使用adb shell连接至手机,获取root权限后,
执行以下命令:
busybox mount –o remount,rw /system
busybox chattr –i /system/etc/.dhcpcd
busybox rm /system/etc/.dhcpcd
busybox chattr –i /system/etc/
busybox rm /system/etc/
busybox chattr –i /system/etc/.rild_cfg
busybox rm /system/etc/.rild_cfg
busybox chattr –i /system/xbin/ccb
busybox rm /system/xbin/ccb
如果/system/bin/installdd文件存在的话,执行以下操作
busybox rm /system/bin/installd
busybox mv /system/bin/installdd /system/bin/installd
如果/system/bin/dhcpcdd文件存在的话,执行以下操作
busybox rm /system/bin/dhcpcd
busybox rm mv /system/bin/dhcpcdd /system/bin/dhcpcd
如果/system/bin/bootanimationd文件存在的话,执行以下操作
busybox rm /system/bin/bootanimation
busybox rm mv /system/bin/bootanimiationd /system/bin/bootanimation
最后,重启手机,完成清理
reboot
对以上操作的一些说明:
chattr命令是用来去除文件的EXT2_IMMUTABLE_FL标志位。如果系统分区使用
ext文件系统的话,病毒会给所有受感染的文件设置此标志位,此标志位可以防
止文件被删除(这也是有些用户尝试用RE管理器删除失败的原因)。如果您在
执行chattr命令的时候出现错误,也不要惊慌,这说明您的系统分区不是ext
文件系统,只要随后的rm命令能够成功执行,就表示清理操作已成功。
2024年11月2日发(作者:威凡雁)
android 通过DHCP获取IP初步流程
====================================================================
1.
java中实现log的方法是
Log.v(TAG, "Static IP configuration succeeded");
D/WifiStateTracker( 860): DhcpHandler: DHCP request started
发生在 ./frameworks/base/wifi/java/android/net/wifi/:2285
2.
java层运行dhcp的地方有两个
./frameworks/base/ethernet/java/android/net/ethernet/
./frameworks/base/wifi/java/android/net/wifi/
定义在
./frameworks/base/core/java/android/net/
runDhcp的jni实现./frameworks/base/core/jni/android_net_:231
对应的函数是android_net_utils_runDhcp,此函数会调用dhcp_do_request, dhcp_do_request
定义在./system/core/libnetutils/dhcp_utils.c中
3.
rt3070 wifi 驱动适配层在./hardware/libhardware_legacy/wifi/wifi_ralink3070.c
Ethernet分析
的jni在./frameworks/base/core/jni/android_net_
故障描述:
(android手机)LG P350连接wifi(wlan)时若使用动态ip分配,则总停留
在“正在从[SSID名称]获取IP地址”,然后获取失败,自动断开。反复重新连
接均如此。
设置静态IP则可以连接。
排查过程:
(1)搜索引擎输入“LG P350 wifi obtain ip fail”,无有效信息。
(2)刷包,刷了3个官方KDZ(V10K_00,V10N_00,V10P_00),无果。
(3)今天反编译关系,得学android调试技术,adb logcat时发现DHCP获取
ip时,提示有文件无权限打开,接着就是超时失败。关键部分信息摘录如下:
D/NetworkStateTracker(1372): setDetailed state, old =AUTHENTICATING and
new sta
te=OBTAINING_IPADDR
„...
D/WifiStateTracker(1372): DhcpHandler: DHCP request started
„.
E/dhcpcd ( 9576): open`/data/misc/dhcp/': Permission
denied
„...
V/WifiStateTracker(1372): Changing supplicant state: COMPLETED ==>
DORMANT
D/WifiStateTracker(1372): Reset connections and stopping DHCP
„„.
D/WifiStateTracker( 1372): Disabling interface
D/NetworkStateTracker(1372): setDetailed state, old=OBTAINING_IPADDR
and new state=FAILED
E/WifiInfo( 1372):setSSID null
„„.
V/WifiStateTracker( 1372): New network state is DISCONNECTED
V/WifiStateTracker(1372): Changing supplicant state: DORMANT ==> DORMANT
E/WifiInfo( 1372):getSSID null
D/ConnectivityService(1372): ConnectivityChange for
WIFI:DISCONNECTED/FAILED
V/ConnectivityService(1372): Attempt to connect to WIFI failed.
D/ConnectivityService(1372): getMobileDataEnabled returning false
(4)root explorer(又名RE浏览器)浏览该文件夹(/data/misc/dhcp/),
发现others组无写权限。
推测dhcpcd进程在动态获取到ip,需要写配置文件到这个文件夹的时候,发现
无权限写入,结果外部等待超时,wifi连接被放弃和重置,因此外部也就表现
为无法连接了。
解决方法:
(1)手机要先root,推荐SuperOneClickv2.3.3。
(2)安装root explorer(又名RE浏览器)应用。
(3)关闭wifi(即wlan)
(4)打开root explorer并授权获取root权限。
(5)找到文件夹“/data/misc/dhcp/”,将others组的权限改为可读可写可执
行,如图。
(6)打开这个文件夹,如果里面有文件,全部删掉或者改名为bak作备份。
(7)开启wifi重试。
其它和备注:
(1)只是为了反编译安卓apk,现在连adb logcat都得看了,悲催啊。目测本
人走远了?
(2)ps看了看,貌似dhcpcd运行在root权限啊?为啥会对那个文件夹无写权
限?对linux毫无经验,附图求解释„...
用re浏览器搜索所有带dhcp关键字的文件时候发现dhcpcd (这个程序linux
下叫做dhcp客户端 主要负责获取ip地址的!!!如果你静态ip好使 但是无
法获取路由分配的ip地址的话 肯定是这个程序的问题)文件和
system/bin/dhcpcd 修改日期与系统rom中的文件大多的日期不符,那么这个文
件明显是被替换了!!所以想到了中毒或者文件损坏丢失。提取原厂ROM,解压
后用re浏览器放到system/bin目录下(必须有root权限)。
===================================================================
恶意软件——系列变种分析及修复
病毒分析
整体架构由两个模块构成,第一个模块(Loader)会在宿主运行
到特定场景时激活,随后执行提权操作,并加载第二个模块(Payload),Payload
模块则常驻内存,执行各种威胁手机安全的操作。不同的变种
之间,区别主要在于不同的Loader,Payload模块则基本相同。
当Loader模块被激活后,首先会试图获得ROOT权限。根据宿主软件的不同,
Loader会采用不同的策略,如果Loader宿主本身需要ROOT权限, Loader就会
附着在宿主需要以ROOT权限执行的代码之后运行(例如一键科学上网免费版,
其中捆绑的会嵌入在安装科学上网的代码中)。如果宿主本身
不需要ROOT权限,Loader会利用公开的漏洞(NPROC_RLIMIT)在后台静默获取
ROOT权限(例如音乐随身听)。由于这个漏洞广泛的存在于Android2.1和2.2
设备上,所以,即使手机没有ROOT权限,多数手机依然会受这个病毒威胁。然
后,随后,Loader会进行以下操作(不同的变种具体细节可能不同)
1.将系统分区设置为可写
2.获取设备信息,包括系统版本,手机品牌,Device ID,SDK版本等数据,写
入,并将此ini文件复制到/system/etc下重命名为.rild_cfg
使用AES加密算法解密Payload(Payload通常保存在宿主的assets中,名为
),并将Payload复制以下位置:
/system/etc/.dhcpcd
/system/xbin/ccb
/system/bin/installd(将原始文件备份为/system/bin/installdd)
/system/bin/dhcpcd(将原始文件备份为/system/bin/dhcpcdd)
/system/bin/bootanimation(将原始文件备份为/system/bin/bootanimationd)
3.恢复系统分区为只读,并执行/system/xbin/ccb
至此,Payload已经完成金蝉脱壳,从宿主APK中成功的被释放出来了。由于病
毒替换的关键系统文件(installd, dhcpcd, bootanimation)在开机过程中会自
动启动,因此病毒实际上具备了以ROOT权限开机自动启动的能力。同时,由于
Payload已经脱离APK藏身于系统分区内,即使安全软件检测到病毒,也无法进
行清理操作。
当Payload随系统自动启动之后,会尝试连接以下地址,获取攻击命令:
:8511
:8511
:8511
由于Payload感染了多个系统进程,为避免相互冲突,当任意一个Payload进程
连接至控制服务器后,便创建/system/etc/文件锁来进行进程同
步。
目前Payload已知的功能包括:
1.自动下载APK软件包至本地
2.静默安装APK软件包
3.启动指定APK软件包
4.静默卸载APK软件包
5.设置浏览器首页(未使用)
至此,病毒就会源源不断的向受感染的手机中自动下载并安装软件,从中获取高
额利益了。
清除方法
1.使用专杀工具
由于的特殊性,常规安全软件无法完全清除此病毒,因此LBE
小组提供了专用专杀工具,彻底清理在系统内
的残留,您可以从 /app/8/下载到此工具。
需要注意的是,使用此工具之前,您必须使用安全软件全盘扫描,确保所有感染
病毒的APK文件已被清理,否则有可能清除不彻底导致重新感染。
2.手工清理
我们推荐用户使用专杀工具,方便快捷,但如果您希望能自己动手的话,也可以
手工清除残留。同样在手工清除前,请使用安全软件全盘扫描,
确保所有感染病毒的APK文件已被清理,否则有可能清除不彻底导致重新感染。
如果您的手机未安装过Busybox,请首先安装Busybox:
/app/8/
使用超级终端软件,或者在PC上使用adb shell连接至手机,获取root权限后,
执行以下命令:
busybox mount –o remount,rw /system
busybox chattr –i /system/etc/.dhcpcd
busybox rm /system/etc/.dhcpcd
busybox chattr –i /system/etc/
busybox rm /system/etc/
busybox chattr –i /system/etc/.rild_cfg
busybox rm /system/etc/.rild_cfg
busybox chattr –i /system/xbin/ccb
busybox rm /system/xbin/ccb
如果/system/bin/installdd文件存在的话,执行以下操作
busybox rm /system/bin/installd
busybox mv /system/bin/installdd /system/bin/installd
如果/system/bin/dhcpcdd文件存在的话,执行以下操作
busybox rm /system/bin/dhcpcd
busybox rm mv /system/bin/dhcpcdd /system/bin/dhcpcd
如果/system/bin/bootanimationd文件存在的话,执行以下操作
busybox rm /system/bin/bootanimation
busybox rm mv /system/bin/bootanimiationd /system/bin/bootanimation
最后,重启手机,完成清理
reboot
对以上操作的一些说明:
chattr命令是用来去除文件的EXT2_IMMUTABLE_FL标志位。如果系统分区使用
ext文件系统的话,病毒会给所有受感染的文件设置此标志位,此标志位可以防
止文件被删除(这也是有些用户尝试用RE管理器删除失败的原因)。如果您在
执行chattr命令的时候出现错误,也不要惊慌,这说明您的系统分区不是ext
文件系统,只要随后的rm命令能够成功执行,就表示清理操作已成功。