在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) H9 y- r- j5 y: T# Z
/ i9 u7 o) {. `; R6 x: z5 B0 w. _0 C E# F0 F; V8 G
4 ^5 L! t# r3 P8 G8 R- `# M7 S 下面就以开发者角度进行解析下这个APP的功能的实现原理。
( |% P |( J7 C5 l' B$ ~
3 \" }# z t) a& @, n8 @" Z7 l0 ~9 i5 W, E! x( ` 基础信息 & J" w) J5 ?4 s' I z4 {+ N3 B
7 j0 B: h) e$ ?/ ^; \. d+ q 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 - H. Z5 z& _" c; }
! i2 ]. K; n% J) {3 \, T E, W
- Q+ J0 O f9 y7 [8 I h* [0 U; j' x1 e8 C( X
通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。
' a* `9 r3 d3 q8 a q) ]6 J 8 m/ K6 \" y0 E6 k, g6 m1 L
; s" H7 _4 O$ w0 O# t# H9 f2 H% tn, q. R3 y* @) h8 ]8 ^: e
, w+ ]2 i g2 C2 c5 p 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。
8 \. i8 G5 ~/ I
S( X9 a) \. o( V' _! h( K% a
& _: H- P7 v" ?6 `3 @6 }' k% ` 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 5 Q8 [8 X, k2 K
7 n8 T, q/ I0 S7 D" F; f% u) x : r5 q* A4 E/ ?, Y1 ]+ p
6 ]/ x" M' L) C& Q3 ? }/ c- i. K. a
* A! \$ Q4 L7 l3 C( O% b 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。
`- y1 O ~9 o+ W* m
/ G& H( M( v' u7 ]
2 R a2 a1 |0 Z# W ' A# e3 `. _9 n8 T0 D
! L P; r3 K" ^" Q* v L1 x: T- n" ` 签名信息 2 l, z3 ^( d. O# m
- g9 S6 x" s% W9 J) F* G3 h! H通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。
3 k' {. {, E" T& o1 r, v7 T% L8 {3 J4 J$ T, c! E 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。
5 l. [7 y. @; \/ V, [, X4 m- i+ j 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。
# U( U; l0 B4 l2 ]
+ C Z6 [" h& b l! w$ \ P android签名的数字证书的一般都是采用 X.509的国际标准。 ) |& }/ P& @1 U
因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ! q0 n0 e) G( s
下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & b' N1 P4 T4 e& M$ T- R* q
4 w; {1 V* I$ g7 z
+ J) b* C8 ^; g* o2 P9 I0 [: y
4 a/ Q7 ~5 `. `5 e同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * M$ ^( B. n+ g6 z$ m: o
、 + F! x7 V9 p) o" f! S
0 x2 w, Y; b' e5 `" E$ `
权限信息 2 x. {& R2 B7 P- |% a
2 l1 A0 {# b6 w. T4 y8 H6 {1 K 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等)
7 U, J0 u( }/ V7 f. l android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。
$ a% }& L' @* Z N0 A" V' S- X! k& K" c: v0 Z; g8 v; Z; r
$ q; t+ ?0 G, o( W / }6 P0 y: m, T. S
y5 X6 q; s! X& z& U 下面对这个APP的所有权限进行详解下: 9 O# l( A k0 n* |$ D7 p4 Z5 Z9 [2 v
android.permission.INTERNET :访问网络连接可能产生GPRS流量
3 Q [4 @9 ]8 C$ r' F+ |5 G$ B7 t# v4 N) \& p; N android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效
$ w3 F7 P, b! s1 s+ l8 [6 c! ^& R$ O android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
: m7 N, B# E% o' `* e+ Y0 }: s% Eandroid.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件
android.permission.WRITE_SMS:允许应用程序写短信内容
* Q# s/ T* m5 ^& Y* t# I' j0 U2 E android.permission.READ_SMS:允许应用程序读取短信内容 9 n7 q& p: n5 {. x! G" O9 i
' ^4 }; E! c( h) i android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
! k6 M8 f; d& n, G# I+ y# I- L5 U0 T. P, b android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : z5 W' J+ e0 G) w5 t- t: g
& Y; [& A* N* l* f5 \) d$ G android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备
) E) |5 u h: v+ A" l1 \* W4 [5 m+ F0 ^ I0 N9 ` android.permission.VIBRATE:允许振动
android.permission.READ_LOGS:允许程序读取系统底层日志 0 B$ D0 _( l/ V: O
android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图
( J ]: Y7 |( A, D( _, @% C2 }- _5 {1 H6 {1 U $ r; T+ i* \9 `/ Q0 o( O8 L7 t4 I5 F
& q' X2 V" [4 r0 o( x$ t功能信息 . X; ~1 h; {+ A! {9 {+ c: Z" U
% ^. G2 [0 Z; `+ i' t/ ~3 n " q; w. H: P! c. T% Q, C; F: \
/ p9 H3 ^0 P, ` p1 s" A; U2 I9 e& z 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % X1 L: r1 g% b) l0 Q3 F( X) k4 ~
" L# u. `. B L) J# }: M" ]" t) a4 i* d, S; ]' Y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。
' t* T/ D3 T' v& [- v 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 6 w. V f3 n! T3 J( V/ T) m
' L/ w+ `8 I- p: T+ B' A( d O* F1 X4 W7 u9 p2 l, C* ? 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - U Q5 d9 _% b0 Q5 x
, u# f2 S2 ^: k0 J; J X5 j) {* k( l; P1 F
$ o1 G" e$ h, D" K0 I8 |" N# w
输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 U( J+ i. e4 ]0 }1 C& S
5 R' y9 E* w6 m. _4 H
3 m' i2 c T$ g: M# M. Q/ M
3 d2 C4 D7 ]! N) f- A& j5 x$ I在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
. ^% d- M- B4 M$ r/ i; _& j V! k: J! K5 `& I
! b8 I. D" m) |: F7 r' w/ v1 G 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。
( m; H% H5 U# y8 w$ r7 M. o! _6 o' \& K3 e3 w9 K# z+ Z 8 p, D8 j% [. e$ G5 r
+ u( o5 l2 ?& m7 _
通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本
LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。
4 X1 P! S/ n9 F7 C; j这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 1 Y9 b/ Z, u0 N) }# y( c0 ?
7 z f' Y) H3 E开源的luasocket代码可以参考学习下 + x/ D: h+ ]& N. f
. Y, [+ {% X, ?7 `* o+ m https://github.com/lunarmodules/luasocket # D t- j5 l8 w
3 ~' C" K) Q% t3 _https://github.com/fengye/luasocket
* \) O# T; t+ Z) T4 s " _ B. h) M) U5 l: v
3 ]! R7 Y) J3 F+ F# d) C& D8 l# V9 X4 B ) q) Q) F! j1 o. E
0 D) @' a4 \+ ^8 _! K , s( I; i+ u+ _$ E2 z. K, g
' R; B& J5 W+ S, V6 [, H. Z; x3 P5 [
总结
' q/ S8 J# C- i; W2 ]9 e+ ?5 O; C0 h$ a) F& h 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。
: n' m3 l8 F$ d; J( O. c: d# y2 F' j \4 a9 u/ K( o) b 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ! e& o2 I7 o% V! h: i: O; Y" I* T
对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 - X0 C* U& G' M
结束 e6 _* B* m {3 @; q% a
【推荐阅读】 # j- a4 ], y d/ q' j
2 O! |& @ g) K5 F- c' k3 x0 Q/ K6 }( u6 Z. @( T; ] 你需要了解的APP安全
5 ]! T1 r6 Q2 o: b* H5 ]+ [' i4 [. Q 你需要了解的APP安全 + v+ @- f- l+ u7 w/ ^: a) f* ?3 Q
2 `6 b' B+ M9 A. D' I* G
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) | Powered by Discuz! X3.2 |