在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。
! P4 V- ]0 _$ u* Y9 l2 a" W/ b1 {0 Q: }
9 h2 F. ~+ b) Y+ k" T" U, y, v
9 [5 p2 g3 g4 Z" {' l) d* `下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' P( i. x" s% t; A$ U3 d
# Q1 @! s& K1 r7 L - ], n: e) q* C" N0 M4 w
# I: i1 ~# V* ?1 m 基础信息
. |8 o% ]- U3 }& W: s% Q5 | 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。
n5 k' s7 @5 X! U- b7 p6 e
: u0 q+ X j' S" ?1 h) P
通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。
& P' e, i2 ]# [' j; a4 I& y( s+ A
) ~8 ?: d3 ~* |* A4 R$ f: ` 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。
! n/ [7 }9 P) x, ~; {
' K8 R" M v* R! f, ~" K3 p& f8 P ( {9 U7 X0 E' S( ~1 W6 p" l M
1 v0 Z* R8 n! c! E" f$ U& w# c& g4 A+ I) s, K) V 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。
+ P. \1 s, \. r' Z7 {7 s
, m. {6 O0 a* h: N! F
n K1 O8 p4 i/ s' t0 A
- o- w* q, N! C+ R+ c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。
2 ~$ }5 }5 o9 c7 C9 J7 V+ Z
5 \, J U) m* @ + [+ B: j, L8 J/ M3 e. q; j, ^& A
% y6 ^7 ^; M. g% M5 S# i% ]1 w& r3 g+ _
}, k1 p, b% ^( ? 签名信息 ! Z. w. Q) Z8 r8 R. t
. ]; ]5 C7 k; Z! k- t通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 4 x* h" C a4 m7 f; g
9 \! |% W$ q! G, n4 B9 u 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 % r- W' s! ] J' C0 A* n/ u ~
1 F H/ C8 R9 x9 d在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 " H8 i) ~# R0 R$ C' v
3 G/ V, }4 j- s/ k- h) j1 V& k ^/ |# o7 _( G# b7 L( l
% i' Q4 J8 t* u
7 ~3 n& A; x# \ v2 ] android签名的数字证书的一般都是采用 X.509的国际标准。 1 a/ {1 V. ]5 P) a6 N
8 }, o& ?( G' l7 e+ T因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。
. v; v2 A* T9 z' Y+ g- H& l下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。
( a+ E1 L. Q A- m1 f
$ u( y% b: k w
+ v G c. a; t& B6 I Q& d
F# L9 v8 A; @# i: s1 U同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。
、
! v b1 m7 d2 M7 z. k6 v4 F3 p: Q" m4 Z' ]8 n
! P# I% ~- c* |! C权限信息
" L- w$ Q- E. {' ^* a6 T# {) L/ b在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) - q) o+ e/ T6 H8 ~" m3 I8 d
android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。
, T/ ]4 V; _. A) I* }3 _
( v! w* t$ c9 t9 a) u
! [! T! E/ B+ O; A& @8 d2 v1 W
6 y( m& C! \0 `4 \7 \; r. ~+ |! @8 z/ x6 \/ g8 o9 ]. S5 k 下面对这个APP的所有权限进行详解下: 7 I+ X/ s; o9 r* B9 z9 g5 b0 c% Z
6 \8 a! I6 J3 d& u1 V8 A. f6 I( F6 {0 r& V android.permission.INTERNET :访问网络连接可能产生GPRS流量 ( ~0 F! v- M D' O% K& e5 y# s% D
# b- b: u% b0 e; z: E E! o+ B6 H* N( G5 b android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效
android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件
android.permission.WRITE_SMS:允许应用程序写短信内容
9 g' ~# \) n4 G6 T( v android.permission.READ_SMS:允许应用程序读取短信内容
. f5 S# |& r+ l/ n0 e: Z, ]8 v; k- b5 [ ?! W. I! N, a) D android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存
android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 2 s ?; ?4 _) T* S
3 v5 g& |% j! p0 Q. F q/ @, d C; z3 H, c android.permission.VIBRATE:允许振动
! @. g* o" u' V2 S# L5 K+ F" N0 r9 d android.permission.READ_LOGS:允许程序读取系统底层日志
8 G2 X8 p- g$ ^5 B. y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图
2 X7 y+ @1 e, e( V3 P
+ [/ G' Q6 j0 i! r. d+ M6 c0 ^功能信息
' F8 {0 P. C; x/ L5 u 0 w6 r. E" V7 H% C% Z
2 t6 o$ x/ D. g* U% p4 [6 }$ n3 m这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。
+ _6 Q6 @8 d; {# J; t; h g$ l# j7 p& C Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。
+ ^) u. d( D% r, t1 I) r, |- H' { ]* T0 \0 h6 q# o) O 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 , `* V/ S- B k. m. K
. g" y" U$ N" D2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; }- F) s4 ]- ^2 p7 w
6 ~; A8 z, d( l' g' A- R
; d7 _* N+ p) E输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / l7 Q6 Y# y! v q
" |" l; Y3 A( P; O: i2 V6 [
* n- v# |4 f/ d2 r2 [, R
. F2 ]. x& H8 e2 i% H 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
: G: _, p H% c' O+ C
. @7 \) K) t# {4 T4 E& O
下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 / l) N- Q+ L9 W& s. m
6 Z1 ]3 E/ \# T& f5 R
( P) p2 n/ ]8 W% U2 D" [! x0 \4 q. z/ d
h2 H( P4 ` G8 @- }
8 M# B. o/ x4 j/ _ |通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # b9 Y: o: y/ t2 i7 M5 v
+ m# a( F- ~; H1 x0 A: O$ W! c4 o0 w/ d+ X' Q2 q LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 # }- e+ j; T0 `
6 G7 D( \* N8 j; a a- Q2 D7 \" }7 H6 ?& a 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : Q l. ]5 K/ }) Z+ e' L r5 z
/ r6 {0 }8 I. m- Q1 u8 d! l开源的luasocket代码可以参考学习下 6 T+ o' ^) S% N, r/ v
1 U$ ]2 h# H& @, Rhttps://github.com/lunarmodules/luasocket
& |3 m. q. v& X2 D' h$ ?https://github.com/fengye/luasocket $ ?% b& s8 W" e/ w, A) S) I
, r$ x Y+ [9 b/ A* x0 ^- C7 o7 b
, p$ p# |1 \ g. m j/ i9 O9 d, \! H; x; Q
8 k5 L1 y& `% c5 h9 {; |; v$ K, E 总结 & d+ t0 A9 Q+ [7 S( ?* t7 C. x
& X) A8 u0 M$ }" Y, Q/ K0 H/ R) e! R, C$ `' }) T/ A& _# S 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。
D* N; `9 s. {1 {, M5 j0 e 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。
3 v1 ^ I+ r) J3 m% t( j$ r. {. q: x# ~ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。
结束 5 ^. p& n/ Y1 l& `% P4 x
1 x) Z. ~4 F# ?% }: J' U! A【推荐阅读】
对吃鸡APP的分析 & h" a# @0 B# L# J. B: f S
! q4 \1 J: W- a9 }你需要了解的APP安全 , l6 L' h, {9 Y' ~$ C
- d2 I$ L' j" S; G3 `5 W& p* E+ D. H4 m9 V 7 b$ x6 b8 A3 p* z: F
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) | Powered by Discuz! X3.2 |