找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4779|回复: 0
打印 上一主题 下一主题

转载对小绵羊的轰炸APP逆向分析

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-8 21:25:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

8 a3 @1 X5 a8 G1 @ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : N, i) U( Y# ~, Z8 b, T

+ S) O( D1 |+ v# u/ e2 ?

, d$ ~$ |! ~6 d7 P) m vshapes= s' i# B4 ]& J6 ?2 _( Z

$ u: O" e" W) d1 \+ W7 }' i& N

7 ~; Q3 N7 A# r6 Q. B, f   4 {. Z5 x5 P! W# C( o

: V' y/ U. r& n; X5 c% ~- R

* _- v, {3 B" a. h 下面就以开发者角度进行解析下这个APP的功能的实现原理。 & y5 I I2 H# B; M# [/ \6 o

. R8 |6 i$ y+ t& v0 ?& X

8 a: J5 u! c6 [$ I5 ~8 v   + ?* s8 d2 @/ M( F( l% {

8 v& M- d" r5 g

& b8 Q8 O; V; f! o; l. O. | 基础信息 ! p& ~& l: y% b+ [' v$ `

, `% J3 B' j) y$ m( n

* x+ ?$ ~9 W% e4 t! C1 `( ~, A 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 1 g8 @5 S, C% t4 {. {9 Z+ `" q( m& y

) f; X/ a/ r3 X& C( |+ U

1 ~. A/ I B& ^6 B vshapes= $ O- z" |$ Q2 n: Y, D

$ z" D2 k4 y. k+ V% @

' E3 i6 Z: e+ \ h   % P# F1 X' X1 B: @; ?/ d

3 m4 I/ w- u# z w( Q3 t

% L7 G5 O) Z! c$ \ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 # m5 B% B1 x* z$ w' W

' ?8 G0 f$ ^# ]7 Y7 C4 D

/ E$ X5 T$ I9 J0 J: h. y/ t vshapes= ; ~7 @+ a; p/ ?+ s1 [ \

, V9 C4 n: e, F, Y+ X2 C

9 L" R4 j7 @% |& Y6 i   7 {7 }# j0 E: n( e0 y$ [

9 V* G4 O* Z9 f3 @" y% J4 ]6 M7 k

* |; q/ \' v% x. [! Z- O h+ p 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 5 }) {( `( U7 y; ?/ [

( a, @* P: u' M4 {, g. A+ h

7 v( c6 B( Q1 `, f) |4 [ vshapes= 9 y+ q: u% q# p

0 r# Y1 D# J r" E

" F% z7 b' N. r; W2 O- `   ; Y2 D4 |- v& E9 G1 ]

7 A! c5 n D3 \3 H

$ y9 W: a3 o1 e: | 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 6 L8 w. n- ^- J" t! `. }

2 L. a5 [8 \- }- \

5 V3 o$ D* Z- Z# i) n vshapes= ) q2 z3 \/ P, b- {% U( \

7 I0 j D3 K% o/ d, M. m

7 h0 m9 A' q5 X   + A; R0 a5 n$ |+ I

8 d, e: S& v/ E6 K* U% N. f

: e6 c1 ~9 w+ x8 a* S% D 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ) w2 c- i- ~- r0 X# S+ u/ Y

& m' w5 K. o, n2 }& L

) R6 F; N; F8 E0 q, B vshapes= # g" U+ i: @ J1 @# h

5 S! ?+ L0 o8 C, H4 I, d6 G' u& z

; T& g( C% W8 _1 b: c# j' _   1 J2 w. a6 D2 @: {$ u

+ q. y2 b7 d- H$ N: k

( K+ W( C0 ^8 y' e' ]6 t: C   6 P \' r' x8 C' F+ N

/ }% a) h6 w) _+ g1 ?% v

1 b& Z, T- a- g/ B+ @, p 签名信息 6 \5 f0 z2 G) b5 w3 c$ a

3 z1 ?* v! H* F0 O8 C4 X, N8 f& V

( K3 K9 S0 k/ d; e 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 4 R3 }7 C. M, W4 l. E

. [- l3 h: Z2 x2 ^' N! f! Q

8 d" j5 @+ l. r8 i( m 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 # m, t+ e/ g, n$ K1 ~

" }5 C( r: P! o! ]) G4 D* ?

1 h& c* a7 t1 q J7 A; O U' L$ u androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 % |* _; `1 M, ?- J0 ?9 v6 r

2 K( t' H3 b0 r

1 O1 \3 A+ Q' p" l vshapes= % U9 o) }" l' l I4 ~

/ Y. M: o7 Z: v, i& H( T

+ s+ \' ]& `/ T/ W* [" G0 f   6 ^ F ^( ]; P: \: t

6 Y' Q0 A$ A$ j9 T

, ~# O- s# c) `1 M android签名的数字证书的一般都是采用 X.509的国际标准。 6 R) I( B! l7 e+ o3 i0 A0 a" @& |

! [3 N/ f% ?6 K6 {; n

7 `/ T5 M8 N8 h+ t) ~ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 D' z, j( E0 C( ?, s7 y

" z: j, J3 B) S& `' Q0 o

- |2 `$ _- v% j; h+ I' | 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 % }3 \ w+ r. C/ G

% M* w! B( J( D! {

) e' ]6 [8 G* q0 Q/ u vshapes= ) x$ k/ G, \ o% W Y

) e( y8 M* U% k0 r

* h" e+ R9 Z; ^) l7 G, h( z   : m3 g6 t% a: A

5 Q) I6 }7 A( t8 r. U8 u- X& j

4 J5 C+ F X. [( o. P/ @* } 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * h6 U4 Y$ _2 M7 R" u g# R) z

/ x( ^* V( a. V$ E

5 y1 g2 k9 }0 Q; R3 |. [. t vshapes= $ }1 U6 ]! m1 Q% c$ Z. w4 T

( ?6 f5 [1 [: N1 }- I: A/ x

, V, p6 o' y% J* D* H. T7 f - U4 Y+ {1 |9 j* o4 z

7 C9 S" o/ m ?( c* u* u0 S

& Q2 N/ J% p" f: A6 {   0 U' e* o$ o6 i& J/ Q3 |/ n

- _. g) A# [3 m* Q

# S5 k- ]- ^& k- U& O) L* p9 [ 权限信息 4 E1 R4 Y* [; Z/ c! {

) r8 H- |7 Q5 o! b+ } b0 P2 A

; y- b8 x3 P/ @5 f 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 2 `- Z3 U' s2 h0 ?! |: N4 {( N

* Q4 E6 D$ B% V8 a$ e$ s

8 x5 P. f5 q4 c$ ?4 O- T& T android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 5 h: J/ ]# W7 ~3 Q! V

# u/ S) H! @5 R! d/ W

' b% C* d' N, W! |! d vshapes= . g/ Z6 `( f3 u7 i7 A0 ^/ \' O& m$ @; U

# D2 U3 v: W5 P+ L& H6 U, ]: W& y

) v. L* z# m" [4 g7 _   + a$ ?4 M! ]. _1 Z

1 P9 i/ [( H p( E7 n- }

% R- C* L- _2 @8 Q# c' X 下面对这个APP的所有权限进行详解下: 9 V7 [" Z$ J6 j+ c* D

& d) ]1 P6 |7 r+ c1 @

{' A, C% ~% C7 n" u9 m android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 Q" U; W8 H. w, B' }

! v. n r" a) @4 T( c2 r

, [) j1 v7 ?1 b g4 u5 T android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 + L8 q- ?- ^* @ ^; Y" O

% c& P. ?: U5 P9 x7 n! P

1 g1 q& Y; I+ n. g android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : x# \2 J# K! y3 e

. _) I7 i6 [* g5 J* q7 [

& Z$ N& d% z: O android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 P* m$ J' _' W& P; p) f1 b

( u S+ |! ]/ L" ^6 c. S& J

( g( W( Y9 y$ _* U- K i% j android.permission.WRITE_SMS:允许应用程序写短信内容 0 Z5 {; a& W+ i2 S" T$ ?: F B

$ d2 D9 [: `% K+ A% f7 a j

8 U# y# g5 }4 i" q0 b( ]: |/ p& A. t android.permission.READ_SMS:允许应用程序读取短信内容 ( x2 @4 Y( x3 D5 Z0 I3 k9 N/ |

4 X2 y5 s+ H/ ]( x; m8 n& o2 _

k+ T* Z+ G" F android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; _, I0 d5 D6 I6 s* h& ~1 f; r

0 y( F1 V9 n6 ~! n/ {7 k( {1 J; G

/ {& q- {2 F! @) N5 y, t' F android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ; w6 V' A& }4 t. f1 K

& A' B' z) |5 z- N

. K2 z9 C& ]1 i1 }; Q% \' b& l android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 2 j; i% W3 i, F. l

& b! N+ i# L/ M& F

5 u& N7 C1 w$ r# c+ d android.permission.VIBRATE:允许振动 4 s% L5 }# _0 O4 b& p2 A! }

) F- }( D/ y8 H1 z" p

" K/ V: t2 F1 }" o1 z, F% X android.permission.READ_LOGS:允许程序读取系统底层日志 $ y+ C# x- s' v6 J" d/ A% U

1 [ T' Y0 @0 b. m& P: j) F# }

& ?% B) g2 f( Y9 e! W8 o* S* W# e3 F android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  : i/ C. G) l" m. D3 Q

4 m+ J5 _0 F8 d4 j2 `% {) Q

9 y; j( W: L# W: K   + U$ D9 O5 ?: ], T' v; r

: [# g6 U; D; v! H6 k9 o9 l. L

8 K* [# i y5 F/ D9 ]# c 功能信息 - _8 Y% @. e( `$ q1 r

+ E6 Q& I" i; ?! }- N1 c) N }9 }1 }

! p9 ~4 o$ j, o, m, b% g8 c   3 Z' q1 t" u5 _& u \

, g$ e9 o8 B1 Q' v2 D, V! y4 g0 d

* m, Q: i- K# G. B0 q8 V4 t 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ ~3 t$ M2 o( } S7 O4 D+ r

* O, ]4 U1 |2 F/ D! y

2 ]* s2 S- Z2 e4 P* q. ] Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 - u. @8 O, ]& @$ e1 J

. X3 E7 X" O7 L; O9 H5 g% F

% J* [/ o5 V$ m3 W' V$ ? 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 ^- V3 x' y: z% a8 X; g

7 }! a5 `1 O, q+ ]- @9 W

8 o* t4 M" N9 ~3 {/ B) b) k9 c 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 ]& j3 ^( }5 N5 P

% o: K* s% a8 U0 Q; a) v

) N2 ]0 T5 ]- [# y1 b8 S- Q vshapes= 6 W1 X& ?4 X8 d3 O

3 M9 l* a6 d# J' d: u9 S, I

. }/ M4 {! f6 I   1 y/ o3 T! o* \

: \7 ]7 N1 p T/ p: B

9 d9 O4 z# `! x' D/ d. H% j 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( h) u1 L' C0 s& U; u" b

. U9 G O* T, }1 A- H

" z# |. w$ X1 P vshapes= 4 R8 C& ^$ R9 F( [! e- v% Q

; Q( x3 d% i7 C9 U: D- I

' D. N9 d( \2 V3 c% J   . r3 p& V7 [6 k- {8 K* I5 n8 w

! Y1 \7 Y( k9 c+ z) v2 D

: a0 P& W7 S% }8 A. w5 r lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 n z& h" o9 z! ]9 v5 ^/ e. U0 j

8 _' }' L6 V5 d) y+ p2 O* a! v

% K, }% s6 c/ t ~ vshapes= 0 _1 z- \4 W3 n4 K8 E ?0 \ d# t

$ `( ^8 L5 b) w" g, K2 n' ^" ?

3 ]# x1 i4 T M; _( P) c& C 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 . }0 Y, H6 j" G/ T6 `/ W& I& Z% J

9 G, Y4 m5 F- I$ _, I0 K

+ T2 j8 g" S7 p, J vshapes= ' L- F4 |' [8 h: L" i

7 E. h$ z$ k! U1 ]4 S

; R+ c. p( q8 g2 t9 U9 @   7 T; ]$ s2 s9 g' H3 T c

/ c, o& c$ `$ |# D1 Q5 X" W* D

! [; r6 Y! Z) S6 s. { 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 + a/ n- \. l; O" E! }

. E9 ^* [7 V# I

4 |& [% f8 @1 h' a0 o LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 5 O9 \9 q8 d. x+ B; H) `

+ [+ S- j8 n$ }

( a8 ]/ B5 Y t7 N, b% L1 Z 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 $ ^2 ~6 }6 c8 p$ U

# ?9 |- b6 { G4 ^) L

" `; O' }0 M5 K+ U1 c 源的luasocket代码可以参考学习下 % d$ S6 M2 \6 S V+ \: a, T* b" {

. \# p1 A2 }/ I$ N9 e" e+ G

1 z3 X1 M3 v# F" [) t https://github.com/lunarmodules/luasocket : K6 O9 J. E5 r! U) W

- d: a9 V5 e0 M" A6 n

8 }5 s- F2 c- M' q https://github.com/fengye/luasocket ; W7 h1 ]( p1 [1 D+ _, y0 [0 |5 y

o' H& ?0 x3 N9 C8 K

( F2 G0 g" U: e5 W' h# v8 O   . v0 D0 s5 |5 Y5 }3 {( @) \

2 H+ y, `9 [: d; ?. Z5 }- X9 `

; r6 `$ E# m: r1 \ vshapes= 4 K# L4 y6 a ]8 V

/ J8 D1 S/ U- |

0 v: ^0 O9 j& _$ M2 I   + W4 P/ G! ]2 B5 F7 {' Q$ E

& c; p* v/ H+ f9 ~7 _8 l( |

2 O" s6 z6 d! ^9 w+ n% D! ~- p   8 W) h7 l: z/ f) @

. Z, o4 W/ T; J7 i1 g2 Y

U7 b6 i! P L3 N 总结 ) r2 y' Z4 _$ ]0 J0 [

' @' |/ A4 I" v+ J

. L( X, K) M1 x# @; T 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 [% i& J4 R3 n' s

; r! _$ b) T2 P9 W

$ O9 L" C4 E3 e& G- L% g3 s2 a 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 , ^$ i Q+ w) w% h: Y; ?& {7 Y

+ x0 ~- e9 n0 U

) Q+ f+ X& S: T' Q8 J0 b; z 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ) l5 a( @/ X+ U

! A7 z, j' W( T+ F5 M D# X2 d

8 a3 f' D2 ]. ?( F2 C 结束 9 U* Q- y. t7 W2 e9 Q

+ e; W- z( P, C* J+ q

# e, n1 i5 i; U: k2 z+ [* g4 |  【推荐阅读】 , X2 Q6 o1 j6 O: e- ?! m

8 l% _2 B# m3 E

7 a, b! T5 [* W9 r0 t/ c/ u" ] 对吃鸡APP的分析 D6 u. s* s& a

* S/ W# D# @* m& W% w; x. _" J/ A

0 @4 T0 T4 }1 G) x7 Q) ^ 你需要了解的APP安全 , y7 a: N' e$ p$ K

# \" d* r7 a9 e% Y* K9 h

- j) q3 s6 k t5 N: q 你需要了解的APP安全 ! R7 s2 _; i8 }

! j, h& Q5 h& U; O( o

+ I) v1 v, E8 `+ p' a' S) O2 |' k7 K2 h   5 X9 }+ L$ d% Z% g/ I$ `( A; K/ _

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表