找回密码
 立即注册
欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 3647|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

1 ?! a; P& d; O& M/ s; z% \5 i 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 1 `/ j u7 ?) o0 j# h4 ?

: l& r! l) a( Y

5 j8 B3 H- i- W6 B! z2 A# R; f vshapes= $ T% H* [) j3 P6 o7 \: P$ S2 b

, V5 k2 I5 F) S" |2 p! X/ \

8 j3 R$ j; D+ I8 }   7 w- t3 r2 L% j' i- V

; ]+ c0 i1 N6 c3 H! b9 I2 }

# A1 t3 B# V" F$ g! ?) x% F 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * Y' e- w7 z5 Z; Q2 i! L* v

- r7 G+ l- z$ Q# u: T

4 t; y; Z: Z r   - o9 M1 q8 }4 C/ @

2 J' x) i; ]% X( L

! D3 m8 R" C5 ^ R& ^( _8 w 基础信息 $ v/ J) @- N/ L5 s1 A6 y

7 N& V& Q8 j! U" t

9 _- Z4 f. K( n: `/ z' p) N6 W4 Y 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 m2 h$ i7 R3 w3 o* n- Y4 ]; k. v

- }7 Y0 s+ N7 m& _

# P/ c; a( y+ U! t8 S9 B) B vshapes= % e6 H! |8 T5 |$ \) |& E

9 B% r# q' x( O7 t( U

* ~( Q$ \9 E2 H; E7 T6 \. K, R   " G# b: ^- i3 ~# @6 b

+ |- B8 i# D. D; H+ e

1 \( \" Y0 _3 u2 D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : |" N( m" {( D& x; b

3 t. `" _6 |" _" s3 ]+ I

1 Q! s Q. Y: ~6 c vshapes= $ D* u! l* c" E

. w/ _$ ?- L! Y$ w/ c( _4 b

# F2 }7 |( f0 `8 y   " x2 ?7 X& j7 { q3 i; ^: F7 ?+ L

6 a5 V( W: @0 m: C

% d& l, ~0 m/ h1 a 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 8 m. d+ E6 H1 P- B; J* {1 C& z

( X/ U; d) v6 W. l/ E% I

6 s& S" l/ P6 H/ [4 t- `7 A5 n vshapes= {/ s: k- E/ i- e

* M: g' E# p2 n1 l$ y& T

$ ? E p/ w; I   ! H" _ w, m0 U" p* F/ L

% {) \4 A& N; x" W1 G# ]% m1 `

- |9 p6 G7 U9 l' g1 K 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( S; y' w* t( v8 l

, w; b# z% h1 X" d: H, T: [

1 X# E, V& k* M( Z% u vshapes= % S0 }6 g/ B& G+ R: U) F# g

) z$ d" ]$ e# _+ ~, F& p5 m

% f* M0 g* T L8 N, G* F   + L3 L; B) e$ l7 X2 D8 U

& k& |# m+ K% W2 O) R; p

3 ^: E7 r, [$ t! j6 }1 a 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ P' e- Q3 }# C1 Z/ Y

8 Q; Q- E! M/ M) `+ H6 Q6 U

: j5 D% ]6 b3 A" w) _ vshapes= 6 ~+ W! H: l2 K5 c- B

/ C& X9 M$ H0 f" i! g

l2 @) X7 w' }: b* \4 ?9 s; f, n% t   3 |: U4 l! E+ U3 J w

% {8 a1 D& h9 R$ w$ d

% C: d# W4 a9 I   3 A: [7 x B0 r) ]: w

' A- \8 U+ _, u+ `3 d$ i; Z o4 {

! g* G1 q, W1 L& |; Q7 b( m 签名信息 " y7 ]' q) B/ `

8 T7 {* J: L& E, [

: j4 l# P& j' S8 f7 j; f5 [ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 / w2 |! Z7 T8 t; }7 f+ C @

7 x- K" e2 [# _( o$ P6 `

% m3 B3 ^3 o P 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 3 `# G! ~) ]2 r( U" U/ K3 z

1 I' I r' J/ t. |& ^1 a

$ M( c* `5 W& b5 Z. P androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 : `) S) [$ W/ J; y2 K

( x) O2 C X% B& V) u; s7 D

% d( F5 b# V E& B# Y vshapes= , y9 Q; L' t7 t4 I& w% D, r

( c, d6 J1 P3 l$ p. P Q9 F H

, B; l! X+ X0 |   " }/ `: i! N2 F& p2 j3 P0 u

, h! _/ K; I% w/ g% h! U4 j$ e

. D' `% ~: q' E, _. q android签名的数字证书的一般都是采用 X.509的国际标准。 % t3 u F& r" \( B

# u8 S1 ~8 E5 ?

3 e7 \9 S- Q7 e6 B8 ]3 y X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 5 H6 ~) y7 X/ P! ~7 i/ _

, V% Z; H W( t

" j; h) H3 _1 \7 V 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 u& W6 h+ A1 l# g1 z. ? X7 k

# B: w; D1 a, E- `2 G

! T3 q1 ^8 l1 H vshapes= . h& Q3 O/ }0 O! l3 N4 g T

" ^' \# t/ f- F1 V( c$ J8 _; r

$ f+ L) |3 z+ k   # v1 h; q2 t) y& O% q, a8 c; @* d+ T

% y3 v' T8 M0 w2 N8 E' F

. o5 w6 m8 X; z) c7 `) `0 Y2 e 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , r) g% f* D; w, ^4 A y% R1 M' `( n

' z. Q/ f {0 Y2 X( u8 L" y

+ G3 G D9 W2 g. ?4 ^- N vshapes= # |0 q5 g o. S: n" o* L

, [" X9 l: H/ Z

& N# o8 u1 x# n1 e8 p w 4 y' y7 d3 ]# p( S

% g1 E* \/ Q$ ^( O4 J1 b

, b7 \0 F* `1 a7 l9 S+ Z) n   2 I& d) Q% Z4 T6 h) `* s/ M: j

; p+ Z: r+ I( J$ J1 _0 E

|5 K# z) E% P8 E' p 权限信息 ! L3 W: m4 T5 K# M7 Y

% L2 I4 ~9 ~+ k

; g+ a, F/ v5 w4 `6 K 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 p: L8 r3 f) C; a) ~0 `1 b9 _

! x# ]9 A* R% p4 P( Q: n0 Q

+ M6 [" s! u1 Y. w8 E android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; [5 d4 t4 ^4 G# q! x+ k5 g

+ O. [4 e! k* F" W

4 f# A3 k3 i. S& r# I5 T% h vshapes= 7 k0 b+ d, D) _0 Y

. b/ O4 \! ?2 S$ Q" R! y4 E

3 c) O- S: s; _" I6 G. B5 u   * k p( a3 Z: q5 [, U# `4 r

4 S. S7 Y( }- `7 s) j6 e

% C' C# t, g6 p: v2 a8 { 下面对这个APP的所有权限进行详解下: 9 c' h% u' Z: o

' F* u5 i/ m7 x8 m6 n

: i& u( H- K; O6 D5 k android.permission.INTERNET :访问网络连接可能产生GPRS流量 5 L4 F- O! Y5 \

; F9 T& H( f& Y: h- s# S

; \/ x9 p( Q& `1 U1 \ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 l" [+ @9 \1 B4 u7 J! U2 h! ]( I

: P7 m2 \! b; r) E9 `% `

. R0 A# r4 x! o! a android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # J; o0 H! \' p$ C2 R: { A

' n' ^8 M; n7 K' n& J

6 f: M6 m7 r7 n" D7 z android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 o) n, f! M; Y

# C; X$ b2 O5 M# Q

. B5 B- s2 a3 m& l+ H android.permission.WRITE_SMS:允许应用程序写短信内容 0 o5 s8 M8 c, u; [, p1 W

5 c. `$ \, R/ q9 N. ^7 F

- z& d: g0 \) [# N3 S/ G* r0 U android.permission.READ_SMS:允许应用程序读取短信内容 ) a# L4 u% H( a6 k

0 W/ X4 T) g$ W8 f

5 X) h1 e5 [; ?' }" `8 `2 D9 O android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . V6 U- a8 [: c2 C/ |- }& o

! J9 ^4 V5 a5 L. E% W; h

4 j3 `3 X# J+ q0 C) r* ]3 K! Z android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 V9 u5 L* p( I5 [# \

/ a; ^% ]' H3 y0 E: n

$ r- Z, w; X+ `' A android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : i; [5 h) R4 l2 r

9 a$ f- C3 h6 P, o7 q3 F* v$ P" j

5 I1 S3 j- o1 v* _1 v& }' k android.permission.VIBRATE:允许振动 5 i, M; G% { R+ {4 I

8 ^9 A: _0 N9 V2 l, V" ?( D

6 c( m i" u7 M4 U# R A! q3 v! G android.permission.READ_LOGS:允许程序读取系统底层日志 I( h- F" \+ {, L, q* B

& j6 N3 Z$ y. {

# f# `% R4 d/ P5 `$ X8 ?, U9 b android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 O/ i+ n5 B; m/ k

! u0 |4 ~+ I5 n; `) _

0 |# R! M0 M' [& P   ' M, q2 f& s# I

( T# v1 r3 {* L

0 R( [* |& `# G, U 功能信息 % V9 ^- I# }! |- k- D- e+ O

$ Z5 d, L2 j" n# Y- m3 O( L

2 V8 R- w. d4 G' F' ~ N) i   ) n s) K/ Q2 ^; [) \) [

, H; a* J @: V" o% \* y2 u

* a3 w$ P% t( u/ \5 ~* x 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 C: I6 a4 d" r' A! C% o3 }4 |

, w# J3 v2 D1 `* L' K$ h

0 s) n4 L, n. y Q0 R0 m- k0 D Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 F; R7 }1 Q: w j5 q/ E D' I

; b+ {$ b8 c( W% p

( u$ I3 C: D' I7 u: \ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 / M# |7 ]) d; P% |+ d# ?

' k# y, y9 n- Z: Q' F# N

7 J5 m$ [* _! e8 v 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 i$ V+ J( i) L* |, E( T% }9 H

- J( C4 }8 Z X7 H2 q

2 Q" Q) A" r5 x/ N( K9 p vshapes= * A- g5 n. r$ e0 d, F6 E( A/ [

3 o0 u9 i" H! K

. M& {, H/ v* w: \3 r: t. s   $ J9 L: W# q( A

$ X' l" f) b' N9 n* g

6 W* D9 k( J( L2 G# i! s' ?0 ? 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; z4 f! r0 I5 p! K8 H$ w( R

" A# V, c% w2 d2 L

% f# E' E! G7 p$ h! G4 [ z$ x vshapes= " z1 ^* |8 s! T. w

3 j& M5 O, I# j% e% y

; }' Q4 y8 H- @+ n' J   & [& V1 [2 I) _) A

a# O4 `4 \0 }5 O

! L! N0 o+ x/ L8 ^' \+ [ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) ]1 T3 e9 f9 H

* G' a6 i) m; [1 i$ h

4 Q% `4 M# o& }$ p8 n1 Y vshapes= N$ } l6 f% c( A$ h. j# X" v, N' E- [

; K5 O+ F; I$ i+ C' p4 w$ G

) e- m$ n( f% }9 m: x8 a' q+ m 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + m) ]/ G2 ^; K; D1 ~2 u1 j

5 i; f& W- k$ E' N

( k1 [. ?6 O2 i- r% O vshapes= , ]5 N% F- f" B! O0 G

( M/ j0 `4 O; }5 X8 c$ C4 z/ q

, s3 t! H" G9 q/ T$ k0 q   - R# o1 E& g8 A& f% Q2 ~% Z

2 b5 `7 F& e" a8 p4 ~1 o& v# N

/ O+ |5 E8 [4 \: w 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 5 _! d2 V/ \3 H2 V- v2 s

& a9 U; K5 S+ ~2 o* y

2 [4 `* u/ L* L, r( q6 v1 T LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ' n* L% V8 U' o& x

( U2 N6 g7 ~# y+ ]

' c+ |" Y! _( A8 ^6 d; G) J 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 l4 ] d& {/ K3 a) P! ~

% B R2 I) L" V5 ]1 |

! v2 n% ^7 @2 N 源的luasocket代码可以参考学习下 " `7 }* e) O& A7 w

7 O# X9 q: M: B$ m, x+ t3 z. m

5 S2 b( l- y' n3 v; Y8 G7 { https://github.com/lunarmodules/luasocket " t3 W1 ~$ S7 ~" d) f4 R* A& {

" G# c) s9 S1 C A3 P. h4 K/ A

T% X5 ]9 \* F4 o https://github.com/fengye/luasocket A0 j0 X% T1 }4 {$ c8 b/ R: [& t

u9 |& r' {' E' i

, j2 L4 S& U+ l   ! H- E/ q6 v/ f

4 m5 _$ L/ v- S, J

4 ^8 q, @& y' ]6 u- e) A vshapes= 1 r, K* n( v, ^" B

8 W7 [' J, z; a! U7 B0 y2 r

0 b! E* ]5 u' c* s2 C   * n; @9 F5 D5 A, Y

% n8 y l7 _" {# |& o$ f [+ J @

2 m$ \/ l$ z% @8 B5 k1 n6 z( p   . Y+ m9 R' @. b/ w4 Q

7 q! J* @5 `1 k3 E" j: ~8 G

7 q; c1 k" l( m0 c, C, U* ^8 p 总结 ) M9 z9 b& i0 W

/ v8 E M& N: H6 Q! n# }

" J. b4 | `: o4 k( Z! U 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 5 F+ j4 X2 q$ K0 x) t. o( ]. m

1 q9 @+ j ]" r; q( m+ W

4 A4 S) r1 N' q; w8 `. C 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 & N* A0 w- w, _( b$ l- u; ^

5 K% Y% ^! B- C$ Y, W, E8 k

/ P* Y1 q) g# D3 {6 L! d 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 . }1 H4 Z! U: C% W7 q2 U- ?+ R( o

1 O* g E% y* T' ~, i! m7 p

. d" T+ j0 _% j4 m0 k 结束 1 M1 t& L6 _% k. v0 i) B# \

; P' [' S" S2 b' N- }. ]

, K% Q+ r- L$ \  【推荐阅读】 6 y& K4 c* m8 o3 v6 h* o

7 h; u& ^3 w) c6 O; S+ j

6 p; g& \" ^* S! B 对吃鸡APP的分析 $ |! e9 F% V. y- d: h& h* K! p

+ S/ c. u5 Q9 s/ \3 h- p

9 y5 w6 V; u, e" ]: J+ `! R4 n 你需要了解的APP安全 3 b# N5 } }: a- L

* {) y8 h5 c7 d, F, \

, f& r- J' @' p3 a) s* o1 ? U" t 你需要了解的APP安全 ; u; }6 \: t& j' Y* ?

5 ~) r& p% E) l% a0 e; Z7 o* T

z0 ~0 g! o; l; x2 D x* y   " P- @0 Z2 s* g5 U& ?& x1 D1 j

回复

使用道具 举报

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

本版积分规则

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