中国网络渗透测试联盟

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

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

) @9 Q0 [. `) O- x9 l 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 & v% a, ~4 ]1 D' _' Q

0 L7 j# k; T1 O t9 Y

. t# q+ S& r. H9 `* a vshapes= $ ]; B. N- p3 h! {

+ j6 X6 q8 T: P8 Z& @' N

3 }( \" x. N' F @8 ^3 j" @! j   0 f, e! a" G# C5 P7 U" R1 P, Z/ Y7 }! J

5 O# w6 c2 e/ [/ l* T8 z/ R7 Q/ R

M ~% {- v) X9 p 下面就以开发者角度进行解析下这个APP的功能的实现原理。 7 I* z4 y+ t+ {1 F, k, u" }% ?

: g3 @9 L4 ` n5 D& f! k

- p, F ^: g6 }" R   u) S$ C2 s1 a3 G5 w

5 u- E% Q, a0 G# R3 {

1 i. W) | f, I5 `- i k7 \0 X 基础信息 * O4 K I. Q0 _! z: o+ } F. H

! H' y" p" [, y5 O" p

' {' S$ A8 S6 v& g 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 7 c- r5 P8 x. s4 G

! D R$ N7 r- k& d8 m8 k

5 c C& @1 u$ Z5 P$ }9 j; ]) u* _ vshapes= ' I9 I8 X6 {4 `$ K4 N5 x: p: U3 y

! F* q0 {. r Q( r

/ g- c( I m4 Q7 D. B0 \   2 b# N* ~& E5 `) k' _

* Q* Y- w. ` k, c

) M: d. f' P& n- x1 W+ T* A1 s 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 % u8 B, q8 \. |$ i5 F6 u0 h

) @2 C; L; x& b7 D

+ P9 C5 D' _7 L1 ]0 w vshapes= * Q. `+ t9 Q8 n/ i, }/ ~ ~

" `& X. f% V: F; r; J

; k7 k# L1 E) V% l- G( t   0 o5 E& v( _ ^

- G* K$ P7 {8 n6 y/ v5 N3 W

/ L3 M* [+ q& _: j7 M6 r) K! t3 L 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ) L, Z. r. j/ z5 y

+ w7 z, L# U4 A# y4 y+ _

* [, a2 X( ]0 K! R vshapes= # b6 f% x2 l1 m# ^- \

" U' o' j6 H0 }

/ ^; [! N9 ^- X4 s* X) A   / N; n! J7 v+ V( ]" Z8 D( V) K

5 ~/ I T( c3 B& B$ B; J2 W

V3 K0 e. j+ {; { 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' M( g7 w' V/ l; i4 R5 @) P

' R v$ t( x" J; x1 p

( A/ V _/ e$ z1 z- z" h2 P vshapes= 1 n; ]4 Q+ C: T& b- u7 \

$ d2 u% S% Z0 `

; c2 Q$ j! O9 ]% U' r   ( R- w! K7 w# L0 m/ O

5 y" T5 u0 @* \+ _

8 W0 b- _) O6 D6 i: B; m7 l 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 9 k6 z6 @( f3 m1 k4 d) h+ w

7 b- J) C/ j1 E1 A6 q# a

& m6 n/ X1 p4 v, Y& e/ N& Y1 D vshapes= + C, B/ f; t1 N) [% i

/ u- q( O/ Z8 e' K5 h! p+ E

( {+ ?' _; d- x+ ?* C   ; B# N) H# I) m/ z7 t/ r! S

* C3 r) h; @" U* j0 e/ t' K

4 P G& Z/ a2 m |7 k# N   4 X% K p* R* W, q

. N h% g! \. y0 [& M4 G

4 M" k* p5 y' [4 A% } 签名信息 0 F& ]. V. J/ [: O/ j

( ]0 q2 Y: z' |" Q+ d

# N3 G5 o& m' _6 n1 X3 y& g5 V 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' H$ k$ B6 h; V% e3 E

: V' G& ?9 \; R

1 ^4 b1 Q5 S- W7 l8 T) U. Z 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 ~& z3 r, t- N' z4 `0 B

, c4 }3 i9 [% ?" T _

$ M) P2 x3 G/ P- P. r/ O! z1 p/ g" N l androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( M: {5 p9 d5 p+ ]/ Q

4 J1 [ S9 p" u

0 g- C" ~# ^6 r vshapes= " g9 q, L: ^9 {3 c

) |+ Q+ L( S8 E Y* C

/ h$ H: p T" S" Q   # I* B+ ]- [5 [5 F0 D+ q

* ^7 J; E9 x* ?1 R* l

: g4 P/ x9 w4 y" }' k android签名的数字证书的一般都是采用 X.509的国际标准。 & @2 u0 X3 a( F ~1 {. k

. r; v6 z/ j8 B+ r. ?0 F

- x6 ?/ ?" @4 V4 w' P/ p/ r X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 " f$ E5 n' D3 z9 ?( [1 n

4 g: h; h( `' M" \' }/ ^; z: q

2 S" C! K% E) z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 Y% [( M7 ?; ]% ~7 @

1 j7 \+ e4 U- x3 v9 p

/ N" n; S6 o J$ H, L5 _8 b7 b/ R vshapes= D4 F* w) }7 t1 m

% x* _' h+ ~2 x0 T# Q; o5 h' I, Y5 N

7 ]- ], g: h3 Z K, v   : ^) |2 C7 l7 n

! M% w8 ^- e7 M2 y' E" s

( E+ M1 a) X! D# G 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 m3 A* h' F& Y

# T( f* i W& Z) h+ m

; o2 w f& c) W4 g$ O+ F vshapes= ' Z, e( }7 `( q6 s

6 ^/ k" M0 x3 N' I2 F V

% K+ c! P6 K5 Z: a0 s( m% S9 X. s ; D$ S9 w8 }3 u

/ p3 O/ J+ \7 o0 Q% L; d' e' ~# Q }

8 y' X+ s0 O( V. [/ P   # I, A2 W1 V* I1 C3 V( ?

0 b1 ~. r8 n0 F1 s- n% C$ J

+ n1 T2 u$ W/ i4 k% d 权限信息 ! t3 }5 B$ y+ ~5 A9 T

8 @4 x d% E$ C) E& V* V

6 T- D, o" Q$ P% H 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) & A: ^8 n9 D @; Z3 L* P3 f

% m' [4 N" P( h" I6 H" @ ~; v

& V6 S/ c0 q$ C' u- Q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' I1 Y3 H; |- y2 X2 y

9 b+ S6 e' y$ \* E: T

x2 d6 f3 p \& h vshapes= % }7 A4 {, z. \, ^2 {

/ b# ?$ ^1 |* o7 ^' {- s$ D, w

4 K" H# g9 v8 G( h9 t" c   2 ^4 n7 T: c2 C. a

- v) l) u$ `4 y5 |6 U+ \

y7 S3 a0 Q* @; V( v 下面对这个APP的所有权限进行详解下: - c& Q, x' Q( K* D6 L

1 O+ p6 ^1 c$ s( O- G* G1 D: R

, v6 A. @2 n. p+ s' J$ R z android.permission.INTERNET :访问网络连接可能产生GPRS流量 " a. S* V2 p i5 H. m6 w4 a! n, q

$ c8 U; d. W+ c R$ I/ f( i* ^

! w) D9 l9 ]; R7 k. S7 }' d android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 * E$ m0 ~- C: C+ {

! ^# A# Y+ b I2 e) J9 _

+ I1 L0 K4 o8 n [+ P2 J android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 9 i5 q& D& L2 M0 {

. t; `) H6 u' J, E4 o- b

* T* |8 j# o. o* D3 T android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 2 F! c( ]: C, S

$ f' L/ [" w' B% y* k; ^

) o+ V" h! B7 X" h0 n7 k$ F android.permission.WRITE_SMS:允许应用程序写短信内容 5 ?! u }5 p' Q! x( _6 M: \3 n0 w

7 q/ Y5 V* W3 Q( }7 w$ j

% Q6 `" a. Q7 y android.permission.READ_SMS:允许应用程序读取短信内容 5 k5 z5 h u2 E f- i6 C6 ] K0 k

) |9 J4 [) k* f8 D2 Z( W

3 Z. [4 x% Z9 A2 Z; | android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 , Y) R9 a, d1 Q1 g8 @0 j. M

0 s; j% a1 c0 S% } K7 P) S/ {

2 l0 _1 m8 R2 F( [2 k1 j android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 D2 A. g1 R( P7 ]

5 Q4 }8 k0 A8 N5 c. Z

3 M! D1 }% C5 P- H. f4 j: D android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 + j" d7 L) C C' e

4 I7 G/ k) V$ x' s m

* d( W- r2 C0 V+ ^ android.permission.VIBRATE:允许振动 ) L8 i. Z" o3 F9 O

# J* i" I2 [, C+ v: Y( J; i- M0 e

' f* O' j6 \5 j* h6 k; l ~ android.permission.READ_LOGS:允许程序读取系统底层日志 : i2 r% w3 z# o$ w

7 m+ w8 {7 E5 K7 ^

+ r1 E9 E: @) T, w; ~! C( X android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  $ W7 U3 l3 D& H- ?( v

1 r" X) ~' v& F

7 p- q0 w* H6 x% D; U# u   9 Q: C) z2 P9 x/ S2 D, p N% u" V9 |8 |

2 N r4 R- _% W3 X* v4 S: L7 Y% }% d8 S

% R$ K) ~8 z7 x/ S, f, B 功能信息 # x/ f2 @/ }3 ~2 w, e- j0 i

0 ~8 ]9 m7 [) }) p- W

) e' W& A7 a1 `" C$ r   . P* P& N5 Y, L1 V+ G) e

4 z6 _7 b: x- @: f7 s- L

: o/ E' a, D3 S$ m5 P- B 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 z* j0 P) ]; x

, E% {2 O) a- E# B4 t

9 r( o/ y. H6 \- N4 i' ^ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 / j5 U7 _4 ~/ k# N, Z5 {5 Y

2 s8 D* D/ l) \- _

2 F3 ?4 _& d9 R9 }) y$ a6 [2 M 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 " \: z% F9 f- [3 z

4 r; @+ K! V V

) V+ b; K( J0 [( o2 C 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , E* q0 h+ k5 s( S

7 s0 S# c1 B4 R, Z

4 v% Z+ w! L2 `7 s vshapes= 4 i! W8 a. P2 p, |7 Z( y' S4 \4 O

4 M' L3 H; y2 x1 A. Y; S

; z! T4 T. m' O: ` P   5 A; q$ \% C+ t! Q

6 |; z+ I/ |: y; F& Q. \

D* E" y1 I- t" y1 @, A 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ' ]6 h+ O: A& w! f; ]. M2 Q% `

6 x* _8 y% K/ c3 [4 N/ a3 F

# [% F u1 w3 D+ |, r3 N1 U- G vshapes= 5 g3 m* r- o& \

: d/ z4 h8 F, L, a+ G! N% Q' }! {

; _: q3 Y+ ?: s) W   . ]1 L' i: U$ O

. A$ e! l$ f! K V! y$ l9 Q$ K1 W; ?

8 g( f+ q9 N; G/ C lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ; H r# z+ r" Y

, u \' P) b6 M5 J8 e/ q# [

6 C" s" P d) q! O vshapes= - ?& l% |. h' x6 v: N5 A) |

* t! R; ]$ i( g3 n. Q

5 X1 G$ s) H* s. T( L% a 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 q: [2 u$ Q2 ]* z; R( I9 f

; ^& N2 l+ F/ b% ^

A' M0 G; ?) V5 I. \( T ] vshapes= 9 E G5 Q8 C8 Q5 V1 G L J

& A0 `, h1 D; v& B$ }3 |+ h, g

6 s, i9 _9 D. [& ]' H   * X9 N" I- i7 t! h2 O5 ~7 d

3 P1 k3 r% ]" N

% u. {1 n2 g' ?/ i, W) B 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 5 E6 i# |9 m" ~

8 M {# T: ~+ F4 E% A) q5 L3 F" _. V

4 ~ t* p: A, s8 }$ v$ o9 E1 G LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 0 g3 R; t* `1 ^ `& J

3 v( w6 q5 A" D

7 t! Q% T0 o g1 F& ~5 j9 E: e" e9 d m 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 + _! W5 a1 B& Z- J. w

7 }$ g! T- ~+ o; K, }7 a( ?6 E

: t' w1 I: m! u1 @ 源的luasocket代码可以参考学习下 ; u2 _8 Z% u; c) a) f* I

7 X, p' u1 ?1 e7 V3 y+ Y

~7 v1 a! `5 s4 z, x5 }; G/ D https://github.com/lunarmodules/luasocket ) j6 w6 R! i/ t1 Z, \

( k" O y9 t! t; u. p; p

4 m$ O( ]" d0 g1 `" M) @8 v https://github.com/fengye/luasocket ) T0 R9 N/ y D0 o! B

V7 J% A% I1 K! v) o" [

! t) V9 Q2 n5 G& ~& R* Z3 `   " _1 u+ ^. Z! E+ _' n6 u6 `

3 Y% [7 t: }) N! |0 \/ Q" z

6 d7 [ S1 ], W) J# y8 U# b vshapes= 9 {: e6 S: H: G6 t t9 k3 I0 R

- a: c- ?/ [: d( l6 [

7 c3 H0 z% T7 `9 C0 K+ m   - d( A/ ^5 S- k

% E/ W- t! S: @

# o6 P/ n% ~( `3 l# F# J3 Y   & z, x0 a# L& i+ \% c5 a1 O

8 \- Z7 z& u2 r Y& H) J: ~

- z# x* S+ G! o( a, m. m 总结 9 Y! v8 |# S& K4 |

' j4 f) ^+ R. L

: E5 a0 V" ?$ n2 ^# K" }' y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ' d2 a) R0 n* w8 R) }8 C

# ^& t; Q$ ~' u: p# w

0 _: Q) a/ j% d" E Q& l4 t5 ~) |! k }: n 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ' o' T0 [+ i3 `7 i; _

' z4 c) M. A* g: `. g- d

4 T g0 o- f; Z& \. Y 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 + C( S1 T5 t0 ?2 l1 w% g% j F& R

4 d! s, D5 V5 j6 i5 A o- ]9 x$ L* Z

: b& W) k% G) Y# }6 q/ p4 x 结束 , q$ |$ O4 m2 [1 \2 s6 \

+ i4 x% G7 | O( {8 U

, O5 b: X. i6 L8 A/ X) _  【推荐阅读】 ! J/ S2 L1 H6 a. \$ V7 c, R

7 N1 r' B% L. I0 c+ _8 H

& h; D+ I# E5 y) R 对吃鸡APP的分析 , C: b3 j$ v4 H: _1 D& x0 Q* N) |

) Y8 ^; | I# X0 _ w; l. |- U

( V$ I; k" E) R& C 你需要了解的APP安全 ( t$ j, G! B4 X

: }( v* K+ {7 N# j& R

0 s5 v; h& i) c) o 你需要了解的APP安全 7 L3 E: [2 I, m: k" `; v4 I. i$ B

6 D2 r* O+ [4 n* X# L, Q) A

# F& \0 h( J& z# b3 f2 o   7 p& s2 g8 M1 B& G G- A






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