在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。
5 y$ n1 O! L/ L" ]; B9 J# l4 }- S; x }1 v/ I) `
! X& V7 K2 s7 l0 f( b& | 4 }8 ?& p; E) S
' H% N( r% V! Y2 g7 w5 L2 V! u; @0 X4 Z$ c5 ~4 f3 t 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 B+ d# [/ P# b2 m2 W, V, L
1 M- ~6 b3 d9 g5 k5 u6 F* f& e; _& Y- |5 k / b! a9 y0 m# k* U4 x) f
- X) z) ]* m5 y$ K/ ^ 基础信息 ' p+ l7 e& i! o+ h {2 [5 s
拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。
. c$ R4 o1 D f) d3 M! Y5 t, }& Q
" Y. C @- }5 }; k5 L% ^
, q1 r9 I. _4 Y5 R. m8 ` 4 f' T! z J$ h# A& t
; a0 v4 g" e7 |3 ?" V* k通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 / z8 k- A1 X, `
0 e& Y6 b* ^5 b. D( z) L
( U2 }. g4 [6 }1 A) Y ' L# J' y9 A* Y! ?# R9 |" E. h8 ]9 K5 C
9 {' r- @* q$ i# H通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。
4 U; `# B/ x# I4 `0 h
$ ^! w! B. D1 O7 \9 n! ]6 X3 n
; q$ t* U: m3 [# V+ f0 q启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。
) [9 n7 t* K# q* f4 y, M3 n
1 \; Y3 A" ?0 ~, u9 K0 }/ L' M
4 `. l! y2 N! ]% _$ L/ ^# J* M6 g
8 q. l( Y( m! F. u7 Q下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。
# t5 l/ k$ k+ j8 G, l% k9 Z! }
, s: ^5 a6 h1 }$ C/ n( I$ m
9 b& I/ G6 O! K+ d& z. Y3 i ( n' n7 f0 J( w7 b- S# l
7 h, e. _- a7 t9 `/ t: J 签名信息
( b" w1 J- _) f3 ?% d6 W* O" h1 m9 a2 e 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 5 Y7 |$ x3 a8 E: A" ]
* @% L' U2 l7 n. d目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。
在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。
, O; Q: K5 f( M; k6 E& K/ `. J
. i: `5 E! L3 d+ ~" `
android签名的数字证书的一般都是采用 X.509的国际标准。
. V/ I# [0 X2 h4 c 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 K" h( R. [3 Y$ X
" k9 q3 Z) L/ s& x1 S7 _. p" E% z6 Y, J! G$ M/ J! [ J8 m. O5 D8 h; @2 U 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 5 V: J/ E% m) ?: F2 |2 D
7 V. ]& N4 e2 N# A. V% P
% u% m$ Z' s; F
+ R3 ?+ F8 _) _' ~) Q3 w! @ ~ ' N9 o! c m. W" z
* t( w+ J6 W: y. `8 N8 r; B# T( p: b$ Q3 W6 I _+ x; [6 ?' N 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 }+ J; {2 h/ V, s4 j/ t
; `9 W9 U9 ]6 E2 q, V Y; o3 T" M: V- P; l+ ]# e) f! X
2 q2 c' }5 w+ E5 [* u
: b& j# d6 g" a) d" m% J 、
, @# e% N g( r" P3 q1 ~6 H+ p8 j" K4 U( B1 }5 D) e' s; S* C0 O ( g: Y3 g& j4 P
3 p5 Y7 x$ r/ ], G- f$ n! T R) H; _ 权限信息 $ U# l) D( i1 n1 s8 V# Z; Y* u3 Z
, s+ s$ n, _5 e: _) F8 K. L; m* \ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等)
( i& _0 s7 p2 u1 r$ T3 q! Y, \7 I$ l0 }! n! w% k1 O3 R$ |- V android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。
|* J# k- u# X( X0 ]2 z3 U% w9 c
6 o+ \" m, k. s. l
7 U3 G: F0 ]& N7 y/ E7 E) R
下面对这个APP的所有权限进行详解下: 4 E+ @* t+ v& O" O
android.permission.INTERNET :访问网络连接可能产生GPRS流量
! W* o* e6 W+ N# r android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效
; }8 k+ z; N& N* p* k& A4 J$ e( jandroid.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
$ p" D* r1 Y* P. q9 _$ q+ _1 ?* f" \. A6 k8 b- \* E/ l* A; A android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件
- R3 w" H& Y# k; l! |6 Wandroid.permission.WRITE_SMS:允许应用程序写短信内容 2 f( n0 j+ Y, V$ C/ F4 G x
! ~8 D' ?6 ~* s' r$ y! ]; v android.permission.READ_SMS:允许应用程序读取短信内容 & P) q# h x: `( b8 N
, u8 L5 J" R6 M: l( p/ Candroid.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 8 G6 R6 D- H( X! s: \" x% t# n
2 e! D, P; _0 P4 Q1 v, v" }2 B1 d* @8 A* U" j. G android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备
android.permission.VIBRATE:允许振动
X: h3 G- h7 w& l9 oandroid.permission.READ_LOGS:允许程序读取系统底层日志 7 \6 \# n6 f$ P1 v/ o
* O* U. J& L- f+ tandroid.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图
. @# i; y7 \" i# n! i3 E; y/ J7 zD7 y8 O( i% u9 x 0 G; L. A- l& `2 Z+ Y) E
! l8 f, x# V0 ?7 d' Y4 s7 k: Z1 ~ 功能信息 4 ~- r/ _2 L' ~1 t
这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。
: L: O! \5 t8 O8 Y% ~ d9 m$ ?6 O3 Y c- I6 L( x# o3 I, { Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 Q3 O3 q% C) q" k
1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 3 W* O+ |) ~2 P% [/ l
* O# T% X( y4 V6 t# V$ N 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。
$ K+ `6 D4 M8 h4 l: X$ P9 v/ o
8 y: K9 O0 }9 o
" G' m( c4 ~+ b) i* I6 g( u! z- \6 z4 t* o7 {6 J/ { 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 _3 s8 ~, t7 b/ ~" J/ {
& H E; P, a# z/ Y; m3 m
6 I7 s/ \5 ]& B
0 k* j) r7 }& G' | ! H6 W- t1 z$ f3 W; N6 ?: J5 d
" y0 [; c) R% t" u. L- r; t. a) B+ k: x1 c! ]8 R( X 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
" L, D( Q1 @. B) S2 @/ i; J: E
t; }, I6 V, L3 J 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。
/ i# w4 S. Q: R. s4 I9 f3 @4 N
6 _8 H v' o, E* u3 R0 L5 @
0 F/ Y3 A |- B- s- _/ q! M' N
4 W+ a1 |+ Y1 [& U: \: v 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 3 k1 R m8 q- A0 [$ T L( C. q& W
! I8 V' M$ r' G9 ]+ n# f9 Y* Z% W, G: q. f4 e, r2 X( a* x0 o2 f LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。
这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。
" i; Y0 R- g ?0 n开源的luasocket代码可以参考学习下
, b9 q: { k7 Ihttps://github.com/lunarmodules/luasocket ; W4 s) T' @3 ?$ P! {/ H) l
" t" r E2 M @; Q+ s) Phttps://github.com/fengye/luasocket
" I$ v C6 ~8 j! l, N: Q3 `7 N3 @( @4 k( V1 N- U' `
# [1 K2 `% g/ X
- J4 A: ~+ e! y8 @" w. C2 C
' x5 Y2 d2 V. y& s' [4 ^
总结
( C* L: X. T! w- F1 n8 j 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。
9 R. V- Y: l3 X# H# k- v+ @3 _% o' L, O) |0 @$ q9 t+ o 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。
对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。
结束
) `# w9 v( g3 h! e' a 【推荐阅读】 4 y3 Z7 p5 `% i- Y8 i" r/ U2 @/ C( }
' p, F) ~& U7 Z' o& j 对吃鸡APP的分析
8 i1 V7 L5 e1 E2 r- I % ?7 Z3 |- N1 l: }9 ^ 8 Y, @( W4 r: p2 G A1 S" i( R( G8 \0 {! m; F0 n% ]- ^; [ / m2 C0 u/ C4 Y7 m4 _: q0 V
| 欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) | Powered by Discuz! X3.2 |