中国网络渗透测试联盟

标题: 转载对小绵羊的轰炸APP逆向分析 [打印本页]

作者: admin    时间: 2022-7-8 21:25
标题: 转载对小绵羊的轰炸APP逆向分析

2 D& i9 j/ j; q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 & i7 g7 [7 Q; @

. M- X9 c6 M; e2 D

* D2 i5 U1 s6 P, K* N, Y; G* N& v vshapes= 5 T" H! T; V, o6 T

2 @: s3 w& t7 T, \) g3 @, q

0 H N, w) i, W7 `$ k9 E+ E$ F, Z   2 z0 ] ]% w' r+ P7 a

7 g; n7 z, h% Q% w

3 T, K$ L- d K1 U, F. \6 G 下面就以开发者角度进行解析下这个APP的功能的实现原理。 7 L7 `1 M+ F! N5 }2 j6 h F

! w1 B. A4 A- P- t5 ?

0 }6 t+ t% N0 g. G: b- \+ p" p   - T0 K( C2 S6 W+ ~, o3 Y1 G# K

- a* u) e2 D2 U

, k% e5 B1 s0 q% R! v. O8 ` 基础信息 ! M) n" J) E3 _

% t9 d. k5 a9 ?1 q |% Q

- f5 U% K9 t( A K6 h1 z% ~; h 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 9 E% p% p* J( N2 Z7 ?: X9 P e+ U

& l& l: x% e+ w

! a3 H3 N) N/ ^. | vshapes= ' Q8 @1 ?- c- G7 [/ L6 [2 L; \

) p9 T2 H- d+ p

" J" f3 `( I/ k3 [- p- @   9 F3 Z4 x8 V& Z# O* d% {! m

9 l) ]) a! B1 K8 C' I# k

3 _: d, X b# J; l' m, j' Y 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : b: P' ^' ^! T, K3 c

9 `3 F1 w3 n6 Y* R \7 e" U

- ]) X( Q1 X2 o: q; Y vshapes= & X, k8 \$ C6 Y: t# ?' W% `& n

) t" r: ~8 U' K

2 \- P& G# c: z, J/ `! ^! U' A   ' f, Y9 d- M9 Y! y* y

* C5 V4 ^, r6 l) C# U2 ^7 B6 ^

! s' }7 B8 W9 r& D0 D; i 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # w. ?. f6 q+ L9 ?: U/ Q

- ?6 e4 K8 v: U7 a. g

e9 J9 x, ~ Z& S5 Q1 ^4 n M V0 u vshapes= # [' b! t: Z$ A: m1 J4 c

0 {$ L* T, z% _$ V- b, ]

, N$ k6 H3 A' y7 o9 v4 @$ r' e   $ K8 J; J/ h3 A

7 q: ^2 j8 p3 u* z: m/ g% K. T

: c5 [ ^& }/ E7 P 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 $ y3 t) U$ e6 C" t5 x/ b" r/ \

4 B, B* M/ c5 a g. v f3 R

: _# r2 N+ Y6 O/ I C5 a5 ? vshapes= " U6 k, J0 p! y" d5 K; h

. d3 Y, U2 s+ |+ S4 g. P

/ |% U4 k, S) C" h8 g4 o   1 w, x4 t0 \& R2 Z0 N! f" Y3 i

" c( G/ m s) c+ Z4 T/ e! o# p

5 y3 w: T1 H3 a# c) m- n7 p" F 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 3 e( {2 @2 X7 v7 ~( O) z6 V; o

( {0 ?4 Y0 ?9 i1 t

7 Q0 _7 H6 z3 B2 m vshapes= & Z* U7 @3 G1 r7 r, M& D

- K0 o" ~! M% E" ] X" ~8 q

" `' \% O; c- L7 B$ m5 y2 ?/ Q   2 I: K! r4 o% p ?& Y" v9 w

6 Y. p! C; I# e

9 d. {3 Q" Z9 z* B1 @3 \% H: R   6 S& G* t. a1 e4 r

( Z) z7 r! y7 I0 D. K$ G# V

( w1 j l: q: v: h 签名信息 # L# h7 j6 `" K# B' S/ c

: y! a* r- }$ e I6 ]' [

4 N ^) w6 b6 U% V 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 1 N' ~- H& Q" ?8 S! X4 H/ a- r; D8 c

: C1 E- x! b$ q b( N K8 w: |( [

" ~( a# P; S9 V5 ~ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 , @. K F2 q3 I" ]

* M2 R. l- z8 T* Z" g

( V0 |& z) g/ b+ h4 L androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 / |' j! k" Y/ G8 j( R8 N

4 y5 o; i* V' ]5 ~& b3 d

5 p. A$ R1 m5 e d vshapes= : a- m# ~& P% f* }. s/ s: v

9 U9 \( S9 a& ]/ o! B; n# o

; y+ ~7 K% l0 @1 k- {   0 h( a+ D" Q2 O. F4 A

/ R/ A: U' _8 x

3 a1 K( N5 j/ M4 k6 Z android签名的数字证书的一般都是采用 X.509的国际标准。 ! l8 _ F7 u, n7 v3 y$ Q4 C& v8 G

3 Y9 o H) X9 x& b/ [

2 e' K+ O9 d: M+ _6 q" {9 w5 B) I" ~ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 v. K$ z5 q3 _9 @

5 A. W' I$ H! e4 v" b1 x

$ @' e0 @: N& U/ o 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 . R2 o Y8 i! z$ S* x, A% y' z

% c- O' E: H* \- I9 M/ \

$ z$ z$ s: b, _: M( H vshapes= / ?! P6 \' o* L1 u: ]- b

6 R& Y, ~; O& a- s3 x# {1 {2 ~

$ [/ T8 p4 I* S/ E1 [- e   3 }; T. h: S! v. r

: m' f g# T0 z0 Q

+ d1 ? }3 d; n6 V, B3 @6 A; W/ H 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 : a6 C2 ]5 ~! M0 [

# B" z$ t* S& M7 k: f

0 L E" N$ H: x* o7 R vshapes= 4 V' ~9 y$ P. g

. M, ~. D9 R. p" C! |* p

8 Q+ ]# K. t2 s. G " r# ~1 y- S' e6 I1 j6 J

3 y$ S2 k* O% q! H. s" G" @5 ~

' E0 Q( D+ D7 [ m2 r   8 \1 x3 c% w* h) ^

2 O' ~1 o+ J7 ~( z7 \

0 e8 {6 N% m0 p0 U* r: G& ? 权限信息 . H% O. D: @; J' ]! e

. _5 X' S9 j2 |# K

1 s. |& D: l7 M: p 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 G7 S0 K+ I7 l% \8 g( D8 S

1 r0 u3 R1 C% b, N+ ^8 R

7 k2 E- \7 Y5 f' S7 {4 d* k android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , Y6 _3 H6 D6 Q0 s3 @; _3 v

1 n; W5 ]0 E, u$ A

0 F/ Y% i% q! [ vshapes= 0 s7 c- K6 O \1 b! i

( `6 o7 K. Z: W3 H

3 @6 f. O) r( K/ L% ^ `) g   ! ~0 H0 B0 m% l' u( d6 A) [

% G3 f/ l9 E6 M

; }5 m4 H; g M- H, o) U4 ]" D 下面对这个APP的所有权限进行详解下: 2 a* y3 Z" V7 p" T

1 d c- l+ w, q

5 D3 _! }# Z: t android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; ]* I. m* `+ N

$ }7 ^# n8 z3 A0 W; U" |" _

% ^- x5 L3 G" l2 B: X android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 4 ]$ l8 g- \5 G" K

+ T5 @5 T8 m2 A( ~# M. P# \# d Y

! a+ X& b, L1 S+ n; N0 b. | android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 5 r4 T6 ~9 P7 q4 I" l

* v* K) ~5 N* b f% ~' q. \* N' H

* J+ O+ ]3 Q* a android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 % x1 J9 G1 T! U+ I* g0 X! _6 I# n

/ ^* z4 `3 a. v, n

. |( q/ O1 [( f6 j! O android.permission.WRITE_SMS:允许应用程序写短信内容 5 Q# R/ s+ h; T" I

0 _5 p3 w* J9 ~ Z: j0 J

; k/ G% `7 @6 s- ~4 f' U0 j( I' Y2 ~ android.permission.READ_SMS:允许应用程序读取短信内容 7 }! j, U- Y7 `5 h+ e6 o

/ l3 B8 c- x) i7 @1 X' [( D

( t7 { F( O( E4 n* f4 P android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 4 C; E; C3 e' C5 d

# {, `, w' r1 S# o! k- b- ]3 B& T# G

8 Y4 M; L# T8 Z6 a( {% j" s8 b: L android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 % i7 t6 c- }( `0 r2 \% Y

) r! I% t: [) v- Q9 Q$ i

}/ x& I1 z$ W+ Q7 g android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 n% w% Q6 i d- m

6 ~6 `! s4 x* O( Z U0 T

' \5 N* I0 j1 e: O android.permission.VIBRATE:允许振动 ; f( @6 A, S& J9 U' Q! a

. A: a0 P) _- b/ k! o! D/ J1 c

# o' y. ? e% r7 `; e( i. |% X android.permission.READ_LOGS:允许程序读取系统底层日志 9 d( {3 ~9 H* W, k6 C9 j

% J1 z1 I, r; v8 Y; N5 Y

, k D7 r7 C! `- i0 @ u android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 ?1 ?) t# r5 Z; t

* f$ {) ]' N M3 s2 b b# q

7 q) g4 g6 ~: B9 C   & f6 }5 E) M3 [% N

5 r4 f2 L" Q) D2 `

0 H0 O2 i0 e6 h1 c% ]9 `; a 功能信息 6 z$ Q) m* M: q1 z

" R+ ], i, J, }& t6 }

- v- p1 U% h7 Q; y# K$ [   % A- u3 _. o" W- I

; k1 f. h( {+ a0 \( p

7 k0 z" j0 ]; L4 @; s 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 , ^9 J( }1 N' u7 w: `

5 C9 v# J; O& ?! ?; k& g& G; F' B

0 F0 _* n: M( v1 E. |8 G. o5 S6 x Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 , a9 P0 }! f; }* n$ E; w

' A1 P7 O4 |+ `* E

! M' X" T5 E8 S; z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 4 V3 a' v4 v: \( L

; C6 ~7 V! D y5 Z! q

. ^1 i g: N% j4 v1 B U 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ' Z& x7 G; g% r

* @7 \2 o. I, ?% E

( T3 Z; d4 m3 t+ C vshapes= + J* H2 m6 D, O9 P

$ A( E4 t# y) Y. l

/ c: { t2 K( M M* d+ X" L" M0 e$ L   % ? X: x9 d& u9 d5 L+ Z

1 I( g$ \9 A- P/ Y" f

, o8 O- `3 J: @$ {) d1 S 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 , A) m% K g: N& x) J! U3 m

; A3 D0 }- _$ z/ K E0 i

1 w. O+ U0 z+ o' R vshapes= 5 i9 e& l* l0 s; t

) r8 ]. r3 b# N. i7 r7 h

$ @: p7 ?3 a, r   0 s n j( i0 U/ o6 u! b, U3 @8 i, P# ?

* j' o& R( u$ W( l! {4 Z: q! A

* ]$ q+ Q) s" J6 l$ _1 s9 F lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * a5 ~2 Y2 k% \9 H h

/ V y' g* w b4 W8 Z

5 z& \7 d& E' H0 s1 S% M vshapes= 6 i! w. H! }. R# S# B

+ S( B* |" l8 ^: a f

/ {5 G6 l1 J4 @, q& d, X& X 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ( {8 w7 ~- ? ~

" L H$ ]9 G/ O# h7 ~

$ Q0 }: x. o6 B( R2 N4 I4 Z vshapes= 2 c x; ?% Q* @

. H ]5 h& N: A! \& m

; n. }+ {# ?2 U' {   7 {" z: n; e1 ^! v x

8 D5 ?3 n0 ]- `* J! l

4 M, s4 H2 Q5 F7 M3 s! B$ J m7 X8 q 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 * G: i/ Z$ x/ v4 `9 R5 v

' f2 H3 Y$ `9 l0 r) u5 Q; m2 k: @

2 v/ t- g$ S/ V3 C3 \ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! b" t2 _2 X+ Z' _4 Z' P

2 {) P2 ` I( W: `3 `- r. L

* v) t" d; }3 U4 w% b 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : m8 k! L8 N6 I4 S0 l4 o# B* ]5 h

8 F9 U1 r/ r1 T4 M+ }9 ]3 c

7 i& @7 ^: n4 m( \) [9 i9 d 源的luasocket代码可以参考学习下 / ?0 o% z Z0 K8 r* n a" d

( e0 r, l# _: _

9 s2 t4 x5 a# Z7 Q https://github.com/lunarmodules/luasocket ) k# T y7 ]% m2 a0 t' z( `. P

. V$ p" g2 ?& Z9 a/ |' D

% c8 w! |8 @) Q* n" k; B https://github.com/fengye/luasocket / v: k3 D5 l( S2 D% i, @. d' d

: R6 _! W$ @# i; `- ]

$ q% |0 {4 L0 j: y1 |4 F   + _: l) U5 d8 |0 d) Q5 [. t

. j: [6 @3 X' _1 O0 z, Q

) ]' V* o( F7 U4 p6 A; ^3 g6 ? vshapes= * e; u. d$ C$ a! Z5 J

- E$ q7 i7 i* Z9 I- V S

3 H$ w1 G- j$ }   ( Z! o* p4 ? |" e& ^

, C$ i; J; [ l

% y. N# {8 n8 V$ U3 \4 y+ n; K7 j4 l   8 q6 g3 c& N, c( G2 E

+ x7 { r' z! Q! F. D! C3 o: B

8 `7 z6 Y( d4 }$ m" {5 C3 T& H9 q( _ 总结 ; V" h8 m3 i; ?3 }8 q0 \; p; P) O4 A

0 W- V R$ K/ u

1 I7 Q1 E: m6 m8 G+ N8 Z7 J0 Y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 + r$ Q: a2 V# r) @* Z! r7 ` h7 s

Z, F } x2 r5 @; ^6 j6 a

4 h3 g* W/ Y4 i& g, [+ J' W: } K 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 , U/ T3 q5 s2 ~3 Q" Z8 M4 F/ J

4 h; r+ t. x( h! @& k7 D& Y

9 x. T0 ?" w3 E5 X9 ` 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 3 R( z& G- F/ a

$ B' E* I0 p. y- d( `! {

1 d1 l! N' j: b 结束 7 C" h& }, z+ ? x2 {: O- S

* Z) K: |7 ~% X6 b5 ?2 j& ?" q

. ^" T5 c# G: h  【推荐阅读】 ! x' j6 D. g$ E+ ~3 a. X/ r

- l$ C: X, d( M! b- H

# ]* M7 y1 L5 i" D0 n8 c( T 对吃鸡APP的分析 2 y H7 f) C2 L5 ]$ J5 g3 O5 ?

4 ]# Y) r `/ y4 P, x

" M! a2 U6 z; f 你需要了解的APP安全 $ h( G* N, n7 p9 k7 j

" n& G: s% G" W5 ]

6 O4 A/ ^5 L/ o, }* i& U* X 你需要了解的APP安全 5 l5 n G% l' T% p! P! k4 U

. _5 ?! ?/ c0 b& V' J9 O& P/ X" [

/ G2 c" ? o" W" [* P3 p   $ x, {0 B! I0 c9 ^% I" [






欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2