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

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

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

. ^9 ]% n. Q; g; [' A, M# j, U 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 & L/ \7 v% u% B h M( H. s

, C9 Q6 \! |- T

, |2 N: K% O/ ?' c0 @ vshapes= ; a. m. g$ u: ~0 y6 J T

8 C% Q+ C1 Q4 v0 g

8 k4 ~ R3 s4 t. z5 T   " e( n+ E$ N2 r4 A# a9 e

4 h* s, u; C% P7 @

7 L# h2 U, B3 q G' y, ? 下面就以开发者角度进行解析下这个APP的功能的实现原理。 / r6 E, Z. ]! N

0 w; [0 h+ u4 Y& C

2 M! s4 Q+ n0 h   : j5 F; u; I/ I$ }8 I8 e' R" _

8 a4 c) x/ l# {, |, ?4 ?

5 }. a* b8 G# [0 Z1 u 基础信息 2 a# u7 x& ^. u9 @$ y! U

" z# i8 Q. ?3 U# m

6 }& R$ K8 G" I0 Z- E 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 + t) L7 s+ Z5 e; ?# T! w

. K, ?. d8 C! l" n& L1 y+ V& g

; r; ?4 \3 {$ d! u+ e9 k0 j vshapes= 1 L3 ~% k% a, d+ E @ w

! T$ `1 h3 \ ]; l0 Q+ p0 R

* {, w% X# P- a5 {# y! E! t   / d7 l1 K9 g1 Z' |

# G) T, u6 L3 A+ h$ R5 z

+ w# q1 h @1 \ T 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 @& y H2 G* H0 t$ q

. ~; D P f8 W2 x

2 c( ?8 s `% I/ b' a1 R vshapes= 3 r) R5 g! y" o1 q3 p, [; w" V

* Q' H5 [! y7 ?! o4 ]+ a

( a' d1 Q U( j: X* u   " y9 e/ h" S( K# x( g

5 q+ P t" h% m3 [

' ]' b& R9 \0 x3 l5 I2 X# T 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ( L+ ?/ m+ W ^3 N1 H( _+ c

' _4 l1 |- e% }0 q7 j9 }" j5 E& d! j

, G/ D% {+ i4 R6 _ x# `8 s vshapes= / B% |& t7 S8 T, w# n, U

) C* I/ i; w# b" T/ K

4 t+ j1 ~, w) D. m3 c- `* }% o   " H6 f% `- j+ q9 z7 M* E0 t

U1 N0 \2 o5 L0 U# f

1 X6 g. ^8 t+ P, m( k3 _ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 5 r0 x0 Q/ b# o

% d; M `' m7 v2 z9 ?- ]3 g0 D1 t

/ Y% m' k5 z; X3 ^ vshapes= # w+ U1 G4 u2 f7 `. `* t. [

0 q6 m. Q9 a1 a

+ ^- |1 Z3 H8 o7 r3 V5 v a8 D   8 U3 w* [. i4 R& I$ U3 }

* `7 ?2 U i/ E! a* j2 j j

0 G5 [' F2 j1 F" ]: [7 `5 Y! q* |3 h+ ~ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 6 b: }7 _+ O9 `6 p

& k) d7 P$ R& M! ?) O

/ t9 L1 A4 a0 q, G" T$ s# S2 f vshapes= # Q% u i; ~: I; z# q

: E- e: a5 o* J

* A8 N. {' r0 z5 h K) r   ; P: m( o# ]0 \# b

* N& ]$ L* H7 f4 U0 h. ]! Y4 v

b# K5 |. `: L+ r   / m C: j8 k1 I5 g7 G

' q( B# K/ ~( ^& ?4 d% l) q

2 D4 i1 X8 v/ \9 i. j1 i 签名信息 . z* j0 ~. B4 ?5 Q

( T u3 K, S+ [" T. @! [; Z

4 f0 i+ G8 p2 B+ C3 A9 B 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 8 z; w' m- l8 M( ~! l

( J- y& {* Z5 D5 [0 j( ^# V

! W- h) ]7 ]* B" B. v 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + J o3 h" |- d" ?: w6 l

" ^% O% ]) j' |' A& i

/ ^- V% k) D( U5 i( L4 `; l( } androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 + L# }" }. s" T$ E% H' s

+ O) V, N; `6 b) q [

. C) @+ \% v J) M0 I- _ vshapes= : I' a( w" c. }# d& \0 T u

! [. @/ M( ^) R# x% w+ n& J" [ S

! j5 s; ^) Y1 V6 H( k" T   2 P( X- L! h+ \: \1 c

4 }4 Q; U: F7 K5 X

% ~. \" z& q# N( k; v8 a android签名的数字证书的一般都是采用 X.509的国际标准。 . H( {0 f# X) y

. t: a X; ~# v, u+ a( H

" h. k9 a7 l4 g5 e, } X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + [3 t4 v8 g+ s, i' C+ k. Q! Y

: b! _' z3 ^. _7 P

( U9 E, n& w& M/ \ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ) c* t1 V# }- X5 p& ^

1 h- G V1 q, T8 R+ F; E

7 @# z% |! T3 J4 ~7 }( a6 o7 h# F" { vshapes= ; `. i) k3 L% e, I: G

, b& n% e, g) X- c3 f& q' `

0 Z" v1 t% J* p   9 W* y0 K( T* S# }& m; k/ L G

8 |" R9 ]3 K7 z) Z5 B

' h$ [: { \1 |; {# a5 h; m6 n9 S 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 1 ]* a L0 \$ M7 |# g9 P8 L

/ Z: T: M7 C8 \8 p; P. H5 _

6 {% \; t& I' P7 ?1 w$ a vshapes= 4 b2 o9 w* {6 J9 r; f( T& o4 B) T# n

% ^ J% s$ p* F

- [6 R# B) a* U* p/ Q0 ?! i 0 o( U# t9 |0 k" u

8 T7 }% V, @. |6 B& m

) z: N, e% g) n2 `, N3 A   ; \5 Z8 O; n$ U* o

+ `/ p: c& I% H P2 w) O

. t( G9 O v* z9 c! s/ h) j 权限信息 : q, A. v1 {7 k

$ ^6 g& ]1 O8 k+ N9 u

. ~6 t. H7 u5 Y% [ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ! {8 s% X q% p, c" X1 k) J9 x0 U

. t# S8 V5 f% x7 {

% Q- [6 Z+ V, t; J android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 & p+ T D* p' u: X* f: ~

c; `/ B, e. {. {0 I' R0 o

1 j4 h s% Q/ ?( w' A vshapes= 5 H1 j/ s/ u9 w

2 y3 a" L' ]2 _# v

L9 ]" b& V/ ` i   ; w$ ~- p& d: ]4 z

' L7 m8 l6 y; E' t/ O

; ~+ U0 r- ?4 g+ c2 v( v0 }5 J 下面对这个APP的所有权限进行详解下: 5 @9 n) @# O; i$ W: V$ C; c3 L4 _

$ W7 P/ @. r4 S* @3 X ]

9 y8 }( I8 M$ @# ?) d android.permission.INTERNET :访问网络连接可能产生GPRS流量 / ]' l7 M! T( Z$ j) n5 q' T$ u3 r; u

5 [5 l5 G* X' ]5 z6 L: y* {

& T3 W+ b8 K3 _2 _ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 * s }- s; T% j4 [! Y. c- Q, b

8 X h/ P5 J. O5 x* l" C, \

' H. V( s, D; L. M3 k# Y- E android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 * K- C3 [6 ^6 d M* ^& Q) ]* C

& u- `' o7 M6 u1 Z0 G" @) F

7 e* V! [3 o6 i$ w3 N: U4 E. i0 w android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 C4 h+ j& j+ ^7 l T. {% o5 T

& G5 @4 t9 K; a' I

4 [+ e4 h: [8 R6 Q android.permission.WRITE_SMS:允许应用程序写短信内容 ! p1 x. P6 B3 Y! b

7 D5 J9 \& M$ B6 `

) V+ L3 l' Y, V0 |: L8 n! v" F android.permission.READ_SMS:允许应用程序读取短信内容 / n. J3 |' \1 i* B+ X& B3 Z! z

. Z# J5 [' E& s/ w( t

0 H* m& Y' y, F android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 \% q8 g4 o" ~6 U

1 [3 s% n" M* Q( K; {

" P0 L; [4 c+ k android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . X. Q9 V+ f$ U) L4 ?% Z

9 V% N3 _ n$ O0 X

+ @6 r: X! M, W( x2 { android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 7 H# E* B( T, m( B* v( f6 V3 A a

7 [* C' e4 u( _% N \/ o! H& D& {& z

& r1 k& Q5 w0 q: N6 e& k3 V g6 k1 x android.permission.VIBRATE:允许振动 1 w. u$ F* u8 m9 u* o9 {% G. _# j) R

, \$ p- m( C9 m% q. Z& ^

% d" O, Q5 R( `) x4 A android.permission.READ_LOGS:允许程序读取系统底层日志 + h! _. ~; W2 K4 k

% q- c7 j6 h6 p9 A$ X# S

5 z+ N+ P! H0 o# p2 w; S$ f& m android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  8 a% E0 g) {" V5 t6 A- |

" H; t0 C; a; M. |. }- B, c ?( Z

1 Z: x" z4 p) v1 \& R   % Q. R4 x- x/ c1 Z

0 u3 t6 c- ~5 {$ O# e

5 r( r$ {6 J r" W: O 功能信息 ; n1 Y0 j8 ~/ e: i

% h# z, e- y+ B" B% b7 s$ x

% Q; ^/ A* l$ n% j4 U: u3 G* D   4 N1 z; B5 {# T3 L- |

5 R* M# D4 k5 M# |4 M& r$ [

) E' [! s8 m* B, D/ }( w 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 0 S! x# }% v' G7 k! P( s w

: B4 G( H" Y6 |; S: G6 I

6 i$ x: W& A# r* e$ U Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 / o5 s4 z$ o5 U

7 F* ^" p: V! l3 R5 s

9 X) t5 ^* h' L6 |+ @+ S 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : c2 _; Z- ~; G) E" j: x

: I/ U: Q: u7 t0 e" u% X8 w

" V3 H( n y: ?* ]/ J8 e 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 5 O+ ? i; h$ h6 X$ X5 ] j( L$ |

" k/ d" \ C' m% Z( q

/ L' B; F1 c5 {5 S: m$ s vshapes= $ f. {1 [6 y' E

. U$ s5 ^, s" M& s/ G- z' y* I

+ _1 P. l D2 e9 ?   2 ]6 u t- c5 ^1 |. m: C

& Q4 F2 b7 ~9 Z# G

* _9 g* n- I7 r5 V! F$ x 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 M* f% ]4 [' p

/ m9 ]: f( M* N n/ U+ Z- \

: P" d; z# x9 i& k( l vshapes= 0 g! a, C6 `9 P. B1 Q4 k

. t' D8 k+ n9 B) Q- w

2 R# U: S' c% |, A- o* Y   $ U; s3 C g( z2 o% N! `

1 P( d l, ]% F& T

* f/ Y( T, l+ F4 G9 G% Q$ { lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 2 P) ]) R2 r) v# f

0 Z( U) P/ m' v% i

p7 c" ]5 Y! O9 I vshapes= - x1 z9 a/ r) P5 [" C

9 a: y7 k" M) w

; }3 _& |! H% W, ?3 c: r* M3 X 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 8 |8 O4 x \: l! U/ N/ I

. o- S" V4 n# |; t

! v; q0 E0 \7 i6 ~* F @$ c vshapes= . w# q: g m' b6 i5 { r

8 q4 t2 ^: B- V. A& t# v

2 W/ t. `7 d1 n6 s9 g   6 a5 Y/ I5 w6 \0 i

2 g8 {+ j$ ?% P4 x- n! Q

( u6 i) G$ d, e$ a1 s4 | v 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( K5 M1 Z, f, _9 Z) i

T% L: a+ m2 @# P, H2 r

) U6 L# r3 l6 S7 r4 E- V9 C LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / w" s: X% L: C: V

7 g5 s* [4 X& D2 |

9 o4 U* n4 Y D" y; \+ \ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 . s! E2 t: L5 e+ \

) z% ^" D/ Y; i; x1 p

, `. ~) J; i! y 源的luasocket代码可以参考学习下 3 c' v4 H9 t$ _& r/ ~ s2 e

+ X2 i3 _& Z) f( n! @

8 U" F/ j! o B" A8 g: A https://github.com/lunarmodules/luasocket 1 p2 m, g; Y2 N0 e

6 g8 V8 ?' d) H

- b# ?& X$ V- y* V: ?* \ https://github.com/fengye/luasocket ) z6 }! ]4 B' Z3 I+ {( Y

- r1 [7 |0 y4 `0 H

1 x' c/ U) j1 r   0 j. ^- R' W+ i' E

$ Q' x& }8 o) c& y# u& G- }

* Q& m( e& z4 [" \ vshapes= " n% m2 f& }( h

G1 n6 g6 U6 G

1 q, j( a) f% O0 A- w2 }6 [* c   w# J+ s s1 o; Q! w T) B

; E m, v ^) W% X( P4 ?

) K% n* Z, e( k% o   " k; b& o8 _8 q) B5 o

9 K! ?4 o$ s0 y$ k& b, J6 B/ A/ D

" t! _, i7 L2 @" C# S 总结 ( U; z. } R3 U

C* }( Z. k: H1 E2 s7 a- h q Y

% S+ N: S, J- Q4 x 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 8 @+ ]5 P6 H8 Q# C: f# f' P3 M

: b i% Z" k1 `4 w! t- F

r" F" q8 B% { 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 P# b+ v4 g& Z( R" c6 m) n

% j% K/ U: G' W' x( Y, i

" f3 O4 M* o c% D$ w E- I K6 Y6 L 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 2 G. y# t- a" d

3 O, Q+ X+ y5 l, i% p$ F7 f

1 @' b9 e% O' ~4 V# a) w& S 结束 & R# q% o& O' q6 X8 l+ Y

" W' b/ Z2 P/ q$ g$ G2 z

, ?& ~3 Y) R5 d- h! H2 U6 R  【推荐阅读】 , C; {, `/ c' ~3 U: M: M6 u! J

* K& P1 c$ U# h$ ^( O/ p$ o0 t

; a/ v( J$ V0 F+ y* ^# S i! s 对吃鸡APP的分析 6 z! {- v1 E2 ]

. ]0 k5 v9 P6 j# a d g

, |0 b. y. I- p6 Z6 \) N 你需要了解的APP安全 ( t+ p9 v% M, J

/ z) J: A* n9 R9 h0 K

0 _( \( O$ J1 j4 M! ] 你需要了解的APP安全 ! ~. a' \( V( n4 [

+ L# o# ?5 o6 N

0 U. u" t. e# f0 C8 g; B   " f3 X7 i. }. {& G; Q* N

回复

使用道具 举报

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

本版积分规则

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