`7 v( y- Z/ e4 w G 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。
+ q, u7 t o% u9 K& K; v7 e, C
, g" t8 j' J, k! C- b x
下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' t, [5 i- I2 I; O- V$ ]1 u4 c5 B
" K/ ?$ \" P0 K8 ~ 基础信息 , S5 t9 r( Q8 V$ I! ]$ }, e
8 d3 E# x! A# K. C! M. W 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ~7 W& O& c" j: f
) q8 v" ~+ B8 a r$ ^/ T% v 7 u. g- |# j7 r! r+ c, d
. M( P7 g& h8 g( [: }3 |/ n- D通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ( E0 W$ ?5 _8 B- r/ P- I; _
4 L& I4 e1 |5 N' D7 \ \6 J7 G# Y- o& N3 Q2 E
4 K2 ~: G' h0 T% O5 Y b: V
通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; B( w& d( ^- ~4 c
" O) i/ x6 [6 q; V. a) t4 x* l9 \0 w# U9 i
: `: D5 B1 s3 w9 S8 a, C2 m
3 Y% q; S! Z3 z
" ~3 h( Y1 Y" [. \9 o启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。
3 e" L7 R& h, P9 j1 W+ t7 Q) T' H& F: J4 ?8 K
' ]; M4 a. z# q7 I, b 5 e4 P/ t, B8 c; A
/ {# V# j0 O2 [ N1 m; ]! K& t: F- v下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。
( e. U o, E4 i0 s+ J
3 r6 |! y R# S" H. Q" R$ |7 O ( c5 b/ T9 N% n% n
( H% |/ y" K; C2 }
/ X( f+ [* z' H. ]( x 签名信息 8 c' b2 s- E) B% I* U
& E( L) L U' D2 A' r+ e+ G$ P" j4 m/ D( F/ R$ b u 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 . c5 Z4 H: d- R) X5 J9 i
- s2 C/ Y; W0 v% D1 H+ z7 W* B3 Q/ N0 M9 ?0 U2 P! a 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 / b/ |* k9 W% x L) b9 U
7 y# A. c$ F, U2 kd& S/ S" L0 K: C 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。
$ D/ m' n8 Q/ M" G, K- Q. Y6 z, O
5 j7 L! u! }5 r1 v& S5 L! P
7 @' e2 T u; t$ w7 N
android签名的数字证书的一般都是采用 X.509的国际标准。 ) Y; C+ [2 ^3 u* d8 Y2 C- A
: r& L" E0 X# w6 Z2 h, x" c( o1 {' H 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。
! y, o1 s( l+ C3 ?2 h; ]9 x' O5 ^/ U4 N8 A( I8 F2 N 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 + c3 i3 F9 x" b0 y
$ f$ v+ I5 j: `" f& C: ]: |9 D& n x1 a1 K, ^
7 l( `+ [$ I# N( {
) Q5 @' C/ G# m# v7 L8 Y# d同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( b. g4 ]0 l/ e& S7 w
6 G- m, S3 o, z- T7 ^& T8 `5 H+ O& c c( I
) [) a& e: b& B$ ]$ T/ Z
、
. C1 ]. G/ |/ a8 O. Q W9 n3 @; }. X. r5 f
权限信息 8 N6 _2 w" |# N3 E+ k9 X* h
$ g9 @/ B$ Z7 r( v, c7 r8 K: q, Q6 z3 c( `( S6 V, @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 _' m' p; i, r" q" S
! [7 ^, ~! V/ N1 K# X: y% [) C2 A4 ^7 f/ v android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 m! A% B f- U8 M* `
3 @1 G5 s& b( `4 i
/ w# y9 g L! K* Y, A" z1 Y
下面对这个APP的所有权限进行详解下: 6 ~! Q8 |% ^& {0 Z
android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ E# p% X. m4 v5 {* r- z3 `
! _0 x) ?8 ?5 [8 j+ p6 t( m android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效
" I% u% K+ t4 V$ r& J( Zandroid.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 3 v# f, z& y+ K, @; i, H% W; e
android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件
z5 O* b7 r5 o: |2 _- q3 m android.permission.WRITE_SMS:允许应用程序写短信内容
" M* o T! T0 n. q; d+ R' ?) m4 ]; Z android.permission.READ_SMS:允许应用程序读取短信内容 1 p6 I. H, g r/ J
6 K- ^: B, }! ]- s& O/ z$ J android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存
3 w* g9 z, T) u3 G( { android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备
" p' {% b" A6 o J: l) p3 Q android.permission.VIBRATE:允许振动
8 {5 G) f4 j! X% ~1 q0 Candroid.permission.READ_LOGS:允许程序读取系统底层日志
android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图 + B% a, k# s0 C
5 @( n+ u& A& s2 p5 W3 P. [; k9 T8 O2 R
% [+ _5 H1 f" [9 C# Z9 y% Y2 O8 p. Y ~" {8 t5 Y3 S 功能信息 * D1 i( z6 H' a; ~7 h5 v
2 V- L8 ~; p. e) C% z
这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。
Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % ]( y a( X7 K. [$ N
4 e. b" |0 J) R4 B' _# S- i 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。
- A9 s( |' a/ ?+ @7 H! J+ }3 y: h, u1 C3 { 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * Y" B% ^7 h: ]
& g/ P2 Y0 [( m" _8 v5 C5 ]
2 d9 O/ u$ I& N5 v* Q" P7 R1 @% \: h _) ] 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。
( [& f$ {9 I5 u; a& q: Q5 k4 p
) [( I% N6 D. X$ y R2 w
在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 G) s) p! Y3 F) `; F9 |+ \- e0 Q. U
+ q) M: y5 c/ L' i, ^
2 }. S! `: c1 A/ n, R3 d: v! H
下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 ( N7 Y: s3 i7 q% @
0 I5 h# m* f& u! s# Q' Z$ e ' Z' T* T1 x5 E1 P5 @2 L
g! j e" s" \; J/ R7 h6 C8 v/ B' z \ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - L) C2 _1 ]! p$ ~
: ~- |7 x5 ~# W3 f' Z" z: E6 s3 q2 m! n6 B$ U3 f LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。
. r1 r' S( ?7 } E- O' `3 F+ w3 G, `* z 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; h0 U) P5 M$ ?/ ?7 @8 \* M
_! [4 e: ]' Q/ v7 @/ f" s6 w- H5 g" ^3 q& G8 R% u 开源的luasocket代码可以参考学习下
" U5 y' P! f( v: v https://github.com/lunarmodules/luasocket 5 D9 m1 b, K" y' l( G5 W3 Y# |, O
7 t) d f; H5 X5 w1 p5 { d* Q7 q# `/ \ https://github.com/fengye/luasocket
: O. o; q! M$ v& w6 n9 ~0 l
9 [4 R$ f# m3 Z! n& D3 B3 _) @
8 w4 q, Y2 ^( G5 e
3 U% H3 S# d) e* \6 u
8 @# `& I3 `2 b N 总结 # o- L3 h- K# o; j( I4 L) i9 p: H
纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。
感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 8 ]% ~; g( O( _% J/ Y
9 B" I2 e: s& t/ V. {% M 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。
结束
9 s, n0 K3 K- k3 {# L/ nn4 [2 [2 G( q3 I# r2 ` 【推荐阅读】
4 X' j6 L4 l" d( m/ x1 ` * O! A% S! y" U" \你需要了解的APP安全 - s1 i, r5 H; d& u
, @# S% i( i h( S, v( I' ` 你需要了解的APP安全 8 t# z, `9 C8 y% `
8 m3 e' B3 p# b$ S% ^! j8 y( Y: v' u
| 欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) | Powered by Discuz! X3.2 |