4 S% z5 R& H+ D9 ?4 m# q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。
. u9 }, y% E' U& d: W5 J
6 }4 T9 v' c- |) M; I" Q8 [ & p' k1 c$ s5 t& O4 `9 u! X
下面就以开发者角度进行解析下这个APP的功能的实现原理。 * J& ^3 S- |$ T
3 r7 f$ i. b) W$ l0 n3 g
, r/ a& s6 |0 _+ g+ C! U9 @7 L* ]" u: w5 n 基础信息 7 `2 o; ?; W. L
) _; S+ p) l% X! L" J% O 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! U2 _9 r" H! t0 D/ x, R
4 [5 c+ Q8 C- o' v$ ~# Q5 \+ r
: o! S1 z$ a2 g
- S' p. c8 t! P' u+ V0 C1 w
通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 6 o4 `3 p! M# H' t, E# }
& z1 b. Y- p. s/ E
" j2 r9 j" \, p6 l1 Q
' q6 g/ C4 W: R* [ 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # y7 s- L0 X& h
; u* Q0 K& l& y: O( K) G: l# j9 O7 q" D; ]; c
( d+ X3 ?& f( U1 K* v
/ ]/ Z+ t7 m9 j' R- `& o 6 Z* M/ g6 ` E+ [8 c
* ~0 N) f5 l% N3 q5 {; E( n1 I启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。
6 V+ i1 _7 O, N8 H
! F% Z( T/ p9 _4 d0 x
' o2 D) s0 X1 Y l
, q/ H) l! |0 A* O2 v下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 X4 m) g* v3 ]4 a) Y
) t, z- o% n9 w+ T: ^: }9 V. t2 \3 w2 ~. x( U( H/ Y2 A6 h" t& }
6 U7 Q0 a t# G/ J+ V* ]- a: d
2 I7 E% e) N( X
签名信息 6 z4 C9 k) p1 s+ {
5 d! o3 d) l- d9 V0 l 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 , e# W3 Y+ g. J- x6 @/ G
' h9 K( c9 G; ~" A1 g! ?& ?* Y: P7 l- \目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。
在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( y2 h' t. ] o, Y! o
% g; z4 V( _, b1 X2 L$ {! b
1 V) K8 [, x( R d4 \$ F; M0 M
3 H5 j' R% \2 h. l& a* S, n+ p
android签名的数字证书的一般都是采用 X.509的国际标准。 0 g' E( f* q* L/ E
/ a! o( \2 a- F; B2 w! ~$ |3 g& ^' d2 l7 L/ A5 z& I9 B: |& l/ L, p 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。
下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。
( Q/ u- ]1 Y9 B I n/ f
7 D9 {# ^/ S% U% O4 H
& e; u$ b- Q8 E" R- f- p 0 g7 A* @7 S: c' o5 F. g
- o: j4 w# A0 f) R: s7 Q7 c ?) {4 X3 ^4 F; J( }8 x& ` 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 5 W2 g3 Z9 c# A
( \) @( ^! I; d1 L7 }/ e
、 * S4 ~- V# Y$ f9 p8 `: A% [8 V
! m$ O! _# A9 d$ p / B1 t2 {; K; D- y- B. d
$ e3 C- h5 Z8 g5 C! Q- u8 g, |6 s4 l权限信息 / t% M. J/ T$ b7 L' N3 Z! a4 b# i1 k, t
7 w' S! ]/ d2 ?1 |, W) i0 ~ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 w; N1 Q( Z5 C# c" P
' `8 w9 w& U/ W+ s, |% b. J+ `% |. Q7 _ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。
' M. F* ]* r- K o6 B3 P
8 S/ c( k* W! ^( E2 U0 `
9 m1 Y" [4 @* z" G( N8 x# \# S4 b& C* }+ E1 O$ D3 P1 ^ 下面对这个APP的所有权限进行详解下: ) r8 v: h* }, c+ n; e1 k. p
) J+ G& _; I+ x android.permission.INTERNET :访问网络连接可能产生GPRS流量 , W3 P; [" f5 l; Y' B% U" S
* S' K1 X$ \; y) e- H6 A/ r' u4 dandroid.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 t6 d+ K1 K# k' r# N
3 C) \# i; K& Nandroid.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件
android.permission.WRITE_SMS:允许应用程序写短信内容
& I( I, b/ K. z9 S2 ~7 e& h android.permission.READ_SMS:允许应用程序读取短信内容 ; Q. S3 v# C; c
) d. p6 R3 B' O+ N- a4 U android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
; X4 S F2 A) Y, V- y2 F5 L5 r% V! { I, n" } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 B4 Y9 k4 B1 m) V9 {
android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备
, w- e# `7 U" G: }2 O: h2 Iandroid.permission.VIBRATE:允许振动 * z( X' k# L6 t7 D8 a$ F3 O& G
android.permission.READ_LOGS:允许程序读取系统底层日志 ' S7 e0 j2 O0 T) t4 M4 @! ?
5 w8 r7 Y0 Y; `+ q4 d6 ?android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图
功能信息 9 A1 D L$ d7 |8 C- W% Y2 A
* D, V+ h3 K: G; z" E: E6 t
8 E/ i- B& o+ z# ?3 h& D+ F8 d7 Q! y2 r. Y- t 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 7 i% A$ F1 c# Q# t: h w4 c
Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。
1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 ! S7 c# U, ]' g; \
5 N3 {7 Y; y& c0 X5 f( l 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 S5 w8 u6 n- y5 C
- B! {1 {$ y3 x: l2 l& `+ {
; u3 l; Q, a2 g( s Q
# T- s2 L$ t" r9 y 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 q! k1 V& `( z- m4 S7 ^$ l" v
6 q2 L5 h9 H" \( ^6 r) m8 F+ d5 m
3 a- d4 k7 M( L9 V, o9 s5 {% p
/ B8 k9 H; E' j" O: ?4 F. c在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
- J$ u5 b5 U$ g- \/ H' Q
下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。
0 R7 `# Y. C& z
通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本
7 A+ M4 E+ s0 v2 fLuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 $ V P8 |) S0 k( U& o9 G
+ o; h6 i8 r2 M$ Q 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 # @1 C" ] B5 l& T% i0 O% |
开源的luasocket代码可以参考学习下 7 C# d/ I" O9 s* M+ v! J
6 R4 @8 [7 Y& h! s3 D9 nhttps://github.com/lunarmodules/luasocket ) K: U8 e- k# s1 J3 U% k+ |/ m, A; C. D
. N( {9 c8 t; o9 w& A( ihttps://github.com/fengye/luasocket , ]9 K9 c m4 l& T4 L
* U5 K1 e' O; l8 o! s; c1 c9 s* U" y# N. M- x& U' V
$ k( o' M5 H. o# G7 g( f; L4 C! \6 Q# }) b1 J* v- |" g
0 N: K) s, j3 E) G; e0 S
5 L7 Y- H8 Z x0 o" [! I
c8 l0 a( Q. z2 y( M6 |$ y 总结
$ o4 q8 V$ i2 f* L! J4 O; r" W9 U J7 P9 Z- S 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 % e4 h" V' K/ N
& @% j! a/ g, X! m; x& y5 g p p4 i" K8 Q 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 , e D8 K8 f y
$ N( ~ U B) o% z对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " O* a& s6 _% r3 Q
. q) r" a+ V. A- d结束
7 l7 \/ E( I9 l$ i" b$ q【推荐阅读】 % V; y2 G u$ `8 v* H" ~! `
+ }* Y$ r) k( V( F. }) \5 v+ t A7 s+ C5 A! H 对吃鸡APP的分析 % W3 M b5 `! t8 @9 F2 v
' P! c2 B, m( |4 B' s, e 你需要了解的APP安全
{. h# Q+ f+ X% E( G, X; c* ] D4 h( r% |/ u6 e ]1 |. S* L" V 你需要了解的APP安全 : v1 U; l& C: G! r$ Z, G. s
' i6 e1 |7 b6 L/ i6 d
| 欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) | Powered by Discuz! X3.2 |