0 s6 ^4 v6 q% B* y# @* G3 J V; w 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 3 F# v2 J7 `3 B3 B
- u% p5 \$ @8 l4 ?" N1 z4 b: e& B/ r
5 X* S) D7 J6 f5 t. `
下面就以开发者角度进行解析下这个APP的功能的实现原理。 # I/ L) l( t- Z, T+ e& o
2 }3 F, N+ a3 i) x2 @% Y3 t / j/ ^4 o' H& q7 b& H: a, S, S
1 _- o; C& f/ i) {! @基础信息
4 ^& b3 J7 L) `, H, A 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , f% A. z1 J3 ^* S
O' K1 Q d! e+ v/ c; J
: l, A- k) ]% w+ ~$ Y
4 R7 M7 C: U7 _/ V- O
9 y" y6 p0 D, b6 ?8 s% F: z6 `. H0 R% o# \2 I1 G 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。
( {% g! d. p" @1 V
; v% `" ^; m% c& l' ~! O
通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # c2 w2 `8 J2 O6 [
8 v1 ?- ]$ x" p3 V
6 @* s5 q! [2 Q8 {4 M- ], N
启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 ! M+ L- h9 J0 u' l3 ?- f5 B& Y
* k7 a/ t" h9 c
7 \% i) l$ c$ D' E$ f2 K
/ B0 l: Q! m3 l; g8 S4 f 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。
! y! F. h+ y# I6 F8 `
+ ]( [# |! d) w) Q
0 k8 A% o" }) z8 q- |
' l) T5 i8 J3 K: `' o% @
9 P% v9 g4 o; q; Y w- l2 N3 M4 g- F5 v# R8 `% N 签名信息
# v# x) R0 f: o. D9 K6 S4 d( l- ` 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。
8 t* W1 @7 U5 L& ^0 ~目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' `7 }8 T8 Z: [9 y
8 `" K: o/ F4 H$ S 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。
( I" d( L2 ~ ?/ I8 x" U
* j+ C( N! y$ H; _2 d! v) ] + O0 Z/ v8 _% I* h; B# I1 L1 b, R
6 Q- k- ?2 V" [- Q X3 nandroid签名的数字证书的一般都是采用 X.509的国际标准。
因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。
下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 2 s" s( Z+ H0 V4 v& _/ ]3 I
1 W6 [# o1 B, Q, R7 C# O u8 h
- B7 { }& {1 x7 V5 y: X* N
" R' r! F4 g8 c; t
+ j, W* o: M: S+ ]( d* \ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。
5 ?+ _& w+ R. `) Z
?5 S3 s9 N0 j/ O; C% ~* i i8 S$ t 、 ; d, N+ w6 H# Y, r8 B" p4 V
( H1 j/ H; q( \6 ^3 w- q* ?
权限信息 7 g# l. x. L/ Q9 B r
3 V" H! P+ P; |' V6 B 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等)
' p: ?! m; I+ F# e3 y1 ` L4 |8 f) O9 g7 g: } android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ) G# @1 M6 a$ V
6 Q$ p4 N; p/ w
0 _2 M; w k4 `* z) W: r# B2 ^7 ]
& ^1 n* V8 F/ o& A) y$ J
% b6 T9 P1 j, v1 R1 s0 ^ x 下面对这个APP的所有权限进行详解下:
, Q# [! {: ?5 T$ }+ I% C9 v4 E/ ]7 I7 ^- h9 E android.permission.INTERNET :访问网络连接可能产生GPRS流量
# X! W+ H7 \! d! _8 gandroid.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效
$ w- |) ?% @% t' J0 `6 [) Aandroid.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件
" F% b! S$ h; B/ {+ D android.permission.WRITE_SMS:允许应用程序写短信内容
, t/ p; @5 W; H5 P3 K- oandroid.permission.READ_SMS:允许应用程序读取短信内容
! P# A+ U% a& |0 i2 r$ K; J9 G7 d9 i android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
$ a# J6 o2 C1 ~android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存
% v; `% W: g" @6 B/ Y1 {* t( |0 { n" S/ G& | android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备
/ e; a- N3 n' M3 S+ |+ o- N7 V android.permission.VIBRATE:允许振动 $ J7 K( m& I( Y. {* k" B5 K
( {( Q4 g7 m0 J/ g0 a. E& landroid.permission.READ_LOGS:允许程序读取系统底层日志 ) b! S% G" Z0 G$ n* h8 D
. ?/ ?: a0 t& x( p/ o8 Eandroid.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图 0 ^ Z. f+ T' ]6 Q3 h6 l
1 ?) N) `( C3 Q6 v6 K
% e: E9 ?" U7 I' a' m" u0 H 功能信息 9 L- T) k- w v
% K; r4 Q3 e& R6 m9 B& U* W
& [- c- H. f, X# d% \# w$ P! \% g) d 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。
$ h: T8 I4 U7 Y& M' ]% c, W6 ? Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % g+ O2 C$ b/ C1 g* f
5 w# j3 f9 V/ M; a% _, w% V# N7 H* L 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 5 K2 Z5 h$ b2 q" w( K- d/ Z$ c
. l% ?8 a) z8 [0 r2 K) W! `3 k/ O* N6 _5 g 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ) U# Q# X/ ~* Q
+ j+ j* [% Z& b0 ~# K0 Q1 u+ x. B% V& k9 C3 c" L' j# M( J/ }- e
* O& r% Z# y4 K0 C2 y) z
输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。
7 z& i8 k' Q2 w8 d9 G3 D$ e- ]
b% @) g2 E& c& @5 l8 b4 Z1 l 8 w. ~ i* N6 L& w6 U
! M6 G2 J; ?: N/ N4 m/ c8 h$ [& y8 E% W& g6 K( h5 p4 Z6 T1 _% q' Z 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
4 M8 z1 a ^/ [: Z" t: O. }. l) F4 X( C7 y6 A8 G8 q1 ~
( f/ w: N* G' j
下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。
# K' J. v& z9 Y9 a( X
4 T6 Y& W1 e u: Q v 4 I- ]1 q; U ]6 n
) D; v0 U/ B2 O3 e: G 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 I" P7 U5 j" P. E z/ g
9 B/ t+ t( ^4 Z' l7 X$ l8 o9 K* PLuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 ! h0 L; X; { U# I: t7 m# t4 d; q
( z q0 Q u% ]& K5 W6 R! K+ V+ g这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * K, z+ k }1 u. [ T
开源的luasocket代码可以参考学习下 % i; `5 ]7 O! B- |' p
: L, K! K1 \* |$ l) z w. G% Y0 d https://github.com/lunarmodules/luasocket 1 G6 D# v, N% ?+ I% B- I
3 _, A5 u5 p! ~- D, `( J0 w1 l! R; Q9 Hhttps://github.com/fengye/luasocket
# y9 q+ W9 O4 M: b * s8 {; _1 H t& b( J" J8 I! C( ?
" H: v' }$ z( w6 z7 W) R3 m/ I5 o7 u( D# ?! x& I q
5 F5 x, n& M# M9 J2 k7 o4 q Q. A1 s
3 B7 r) h; Z5 w总结 ; L! z* m, f' D( e( s* | h/ J' q
纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 8 A! u. x7 T, A5 W% _
! f o8 m2 w' z* I2 G% u" ~ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。
对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。
) E( n7 J5 C2 y) K结束
& o# }0 K$ K+ E: Z; g0 p, b' n9 \ 【推荐阅读】 ' q, ]" B) d4 B E$ o
对吃鸡APP的分析 : c1 s" X( l9 C: I& J1 T
3 a# y2 v% b5 B; `. E 1 F6 w" r q u6 h# ]4 {7 X1 f0 Y3 K2 J! p! V, K% ? 你需要了解的APP安全 & y9 p5 D5 Q0 E! f$ w! }" Y
| 欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) | Powered by Discuz! X3.2 |