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

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

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

- b i! B, u4 r4 x/ D 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , f7 b; Q7 M5 |) K

) ]" S6 }- \- ]1 l' I

5 F. V* X" @- I* R* w5 J- x$ b) P vshapes= / Z9 h! H8 U; o& x, t3 {

1 T) @6 a; A# u! D1 J

) d! g% b2 k- }+ H% O6 O/ P   5 \* W) n5 ]. E i4 _2 E1 f9 e

+ K' j: k: c7 m: j. @4 U

7 C" n+ m8 Y# {/ }, E9 k, l3 F 下面就以开发者角度进行解析下这个APP的功能的实现原理。 - l0 S2 \5 C" s4 A7 t

6 |( ^4 R7 J9 M1 l, R* g" |( q

8 @; R2 I7 H. @; v) `   0 a; Q5 N& U8 B; E% O: C) b, I! M

# ?6 z8 k0 ^! d: L) b. o+ g

5 Y, e- o# n* v1 u 基础信息 ( m( z- _9 g. \

0 U# b" g6 L. B$ R* W4 K0 y- [ F

Z0 j7 q* _ x* F* |6 l+ g" p 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 # `1 s1 y( B" W8 ?1 L

. k6 {- k% D/ Q" d: ?

2 G5 d' S& R- n! J2 G- K, v vshapes= " E( k6 M! I5 X5 M% F$ E c* r

; o$ {' E2 m* h: W4 H9 W

9 A1 E s) n; W& ~7 e   6 G; n7 d2 _- C0 h. S2 I5 y6 [

# N J" J4 E( n9 i4 E- V

9 c% u: B% u8 \5 _" M 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , \+ G0 ?0 a8 [

( ]. `2 ~3 J8 r) w; f- ^$ m" C

- B W; S1 s8 J1 B- F' I1 ]6 G; | vshapes= % q+ c' \1 V, Y( p: p4 T! ~

9 ~! }5 X6 F" C$ N* E6 A Q" |

2 w# l: I, c; s6 V; k4 q2 {   4 A/ i+ S k9 f8 c9 M6 Z( T

! ?7 z9 ~6 {3 u$ u7 H0 U

/ w {6 E5 W, m7 U2 ?7 V, b' y 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 e+ P; ?9 z! t( x8 `2 g

( i$ {. D7 f& D- ]" K9 e- _

j9 v! d" G8 e. v/ n vshapes= ; k; ]+ A$ ~ g2 H: Z2 w

# ?8 g! F' v, f: l/ ?+ c/ [

2 [# y& ]( i; r4 B T& o6 T   ; g$ ^- ?9 a+ j, ?2 e

' v0 X) f$ b) W% Z6 b% p

% u" h6 S1 t$ g0 J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + w, J3 W+ R' ^; o

) ^+ _. j3 A! {8 M, g

7 Q) a8 ~% U) N- j, h4 Z vshapes= ) e9 j6 S b) p6 T7 ?! ^

/ Y/ t& R. x# E9 N

, m2 S, x7 I. {1 i& f( X8 v' c( R   + v: K# @5 _9 V" f u. W0 Y9 x

2 K7 I8 P& ~5 [$ ]: D, E

' e$ b8 f9 X* h8 T- n' x 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 r, i3 F5 Z6 h- M O

5 b: q, E) k- y

% n$ V& w6 ~$ ]5 \6 c0 G: N, r vshapes= # l+ F% n, Y! A* |( C1 I% }

8 T {, V3 V/ @. o% O$ ]# J: r9 p/ e3 {

& \- p% a* d( [8 Z1 l   - O @! V$ d% }4 R4 q/ H

& U5 m* b' E# I! ? h; |6 c

. I3 z3 i, D5 B/ I: l$ M' w   ! m( E. L, ~: I: e

m# y9 q+ G% G" K

! i' ?; z3 `( X- |$ q3 D 签名信息 8 E8 u5 n* [' u

+ L; \5 \) O8 [ k' P- l; I7 M( L

( U9 R1 g1 o$ x1 _3 r 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' V- N+ t) o2 l6 R2 _% P/ e3 h/ `

" e/ Z8 L2 B M G. A, C

! O: X& h# s" M" z. z 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ P3 ~! F& [/ c1 R H( ?

7 Q8 o2 W; \2 K) V" L2 _. ?3 ~

5 u8 K! y- v( O# U androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 / Q' b3 W) F4 M. O+ J. _# u* { y

+ g2 J& y8 E+ w9 J, s2 ^' K( z

% g9 n- n2 e. i6 I1 f7 T7 u vshapes= 4 Z `# m' V4 `; C8 `7 q

; }) n1 ?+ a7 U$ E. \

! H$ I, w, V9 N( R4 x   ! e2 E& m8 j( @! L

0 ~1 u0 M: D) q/ O2 S4 P

7 K" G9 X- B# b: f android签名的数字证书的一般都是采用 X.509的国际标准。 / J5 `3 W+ q& |% D* a2 L9 Q" X

$ ?1 \) c1 y; e; B, L( I

. E+ T1 p8 j2 L7 {' E X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 A+ W, N9 F- v* x

t$ N( a) K# c O' a+ A* B' K

: g' |" x; m0 \2 j; i; [4 T 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # f( K' I% O% B" l4 C6 G- t

6 c4 C$ ^2 c- h( D! ^4 r: Q W1 t

- T" K( w8 V$ B7 @( Y0 B vshapes= . d' U6 g, L0 G+ n) l0 U

2 E; h X8 i \7 t; v% _5 j& Y

7 G, h( j- p! }* m3 w, x! v   # s6 D8 g* y9 q x( _* Y4 C7 d

- s( S& E- E' D r% J3 ~; N' R

6 ?! M+ T( Q* O0 K9 T! v& L. q 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 R( X6 e4 S2 z& v

( b# j+ M2 Y3 {6 Y% ^8 w, X

- R3 u H5 M& q# P3 C; D: C4 Y vshapes= ' d- c' m9 R3 W1 w2 S5 C+ n

& V8 l: G+ F( B) R% K2 R$ d4 o9 ]* I

# C2 ~& A) I, n( o: [8 X. {9 F " a7 a! t" S" V0 y: K$ `

8 k A8 a% i: m0 i

$ O4 w+ m7 |5 m/ U   ; o+ `1 C: m, c7 R; ~2 v( B8 g

}2 s9 ^' A+ e. L

# `) Q4 y) G# L! `% `7 f 权限信息 1 e. B# Q( K3 z% P% z

( e+ K3 u3 ^/ x n/ i) s# X+ W

0 S2 m- O0 N4 ] 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) . H! p7 U: }& U+ a5 K

, S- P1 U1 x z6 q6 O5 I

- @ P1 `2 r4 S" Q' L android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' J' N, }. u5 ?

3 g8 y: n( G' u

& @! y7 M! `. S9 K5 x% _. q vshapes= " h6 X" }& U' P: @# s% b

6 d* l. N; Q2 A- t$ Z

% o5 \: J, x. @% K' ?   ' c- v! L; v$ Q- u( Q8 @

" e4 k& S1 B) E6 ^

2 S+ F7 [$ x8 x4 c0 W 下面对这个APP的所有权限进行详解下: , Y; [. P* u4 h/ R7 E

9 g [, ?+ M( I& R2 F6 I9 D

1 Q3 h7 d; i: Z& H) Y android.permission.INTERNET :访问网络连接可能产生GPRS流量 R2 m1 X- r: A

, d `6 U+ X/ r) Z$ L/ m1 b

8 F) t, u. t6 W+ i5 k3 C android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , L# Q& N. Z- k* e5 {

# c- _- P" k' @/ }4 ?8 k3 g$ Q' }3 g

+ s4 i. A4 V+ J2 m) o* R+ _. N! I android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 5 u0 S( ~3 O7 p8 j

* ]% }7 b. p& b

6 O( p* D% @. G8 B android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 2 j" W2 b+ p7 F( K3 c' T3 s

" l) b; g& @( ^% F* w7 q/ c1 d

+ s! e, D& H: u8 A android.permission.WRITE_SMS:允许应用程序写短信内容 ' f# K& Y( X; z7 m. W- ?: ?

8 [( U1 _" u" U# E, n. e0 g

: A/ e. p, V; [1 X android.permission.READ_SMS:允许应用程序读取短信内容 " E4 D( }6 i H- @3 O6 G

8 t* V$ m y) v+ T5 o, o" E

! |" [9 q# S: N R y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 $ z, S/ U4 ?/ ~5 q$ F

m9 q8 H, f. _ ^

9 z" n1 \ y8 t7 [% W6 B- x& \" F& Y7 r: l android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 8 K; Y7 }4 J, c* w6 m* T! T

3 U: _6 t! i. d* {: ]

x' O# i: ]7 w android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 2 h; b _6 z; G& y) j! \4 S

' V; t# a; l/ F5 Q+ _4 _

3 P1 A0 \# E7 ^' V' ~2 [0 | android.permission.VIBRATE:允许振动 % p+ W+ ]7 X5 {- r2 W" o* K

( y/ X- W' ~0 W" _9 N

( @8 g2 x0 N6 i6 Y android.permission.READ_LOGS:允许程序读取系统底层日志 # F; K2 h" }4 Q7 h; }

; o- q+ l) l* h% x) s% z' T

1 S' n: w3 A k) V android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  $ G# w( p/ R& C- u% r

- |# v3 F3 q1 o# T

5 x7 C ^) v/ }6 E   / O+ `& K+ C/ z% D% w1 z. t' J. O

5 ] F. v& V5 r! f8 d

8 K4 l- G: M7 f" @7 v$ e1 } 功能信息 7 u" x/ F7 J5 ?* ?

( E7 m: s1 ?' X! x

$ o7 j1 r* f9 \' r   % [+ r8 n* x9 V0 a

$ L, U2 I7 x2 {- ~! U

7 N6 j; C4 p+ C% P- h _ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 - {8 I2 n. K. T. m) w* h

" O7 d7 L5 h J: Q' J

9 r& I8 `; k2 [6 K3 |4 s5 a) V Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ( R& [) r7 ^2 t5 B, `

{0 g/ w6 \9 {1 S9 k; v7 V

& U% h: |* I) z' V j) R 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 % [1 r7 h, t- S0 m6 V' N7 u. a0 Y# x

$ R; b; s/ S( {& d8 @3 p/ x8 i

/ P* o" Z' r0 V$ M% w e 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 & U: u' R3 I1 u" `8 h

+ a& o i9 d! a6 u2 d

9 D$ ~' H- r& L) U+ B vshapes= ) s" J$ ]$ U) _$ T5 K/ e

8 Y5 E$ [% ?& K% A! e

" d( T: V, F) |# ^7 \   " L( u8 I" @: D; t/ e. X4 D

& s+ }8 B# _# j- t \

/ V5 p- P. |; x. }" e# @- Y 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 5 n1 u# G; z/ Y6 ^- t9 ^# c" ^

+ y, P/ p8 m8 T: d- Y2 a9 {# A, @

& J5 E* h0 P+ M# J vshapes= / ^ ?9 g' w3 z1 X3 e

7 S- F8 g: I' R. \' M2 j

' S$ g7 N9 u8 G   ) b+ D9 i: Z( J/ ^/ U

7 r, \8 S6 C3 b$ |& C& H

4 M. t. b6 l5 g, J+ Z! _; @( B0 w$ D lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 6 J M: n2 C0 w# S6 y E

# x/ M) v5 j, n& p2 c

1 ]* v* k# q/ b- B3 q2 O% o- o vshapes= 3 q0 s/ V e [9 W& T* ~ D/ D

1 U6 D3 L' C0 b$ I

+ b& M. \1 M5 c" w/ I 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 o& o1 a" V9 d9 Y0 o

- N; \, ]! u0 r4 q

4 w0 B' C( _; i) c' A& M- E vshapes= 6 m% v5 E& P; s. I: q

. [3 W( s- J* Q3 L8 P' U

* Y# g K7 m, H& |   ! K. R% O1 J7 n8 w6 g/ c3 J

; v) R, h- a! v) m, O7 L

) ?5 n- t8 D& v6 Y" B1 u6 J 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( }# E2 f7 O; B' y; W! R

' j$ ]$ Y+ N$ N' C2 I! Q

. r- s) U+ _$ l5 u/ \. f7 r6 d9 U LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ g0 _0 k x" c! }

% S8 f& y+ u, J- c

7 B6 U V9 v; r 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 2 R4 @ d( Q7 ^8 q5 P

* G" N! \2 E8 ^$ U

. g+ ]9 d8 K4 x2 E4 r1 j% }6 Q 源的luasocket代码可以参考学习下 - c( L( o* d, r6 V/ p* k- q, q) `

, m- C5 a1 m# F+ R6 G# q

3 z, p, P- _( v% b4 M! ~ https://github.com/lunarmodules/luasocket ) G* Y( q1 S, A/ A3 S

& N( D! ], j! Z- i$ G

7 i' \& l0 e9 \8 l* t$ @7 [! O% {( p https://github.com/fengye/luasocket 6 S$ ^, |3 o! B

* a- o9 S( J' b1 f( ?' \3 t6 W

p. o# Z" N: y! F0 \   9 L) c& b0 m+ v- ^ R7 u( h$ T( Y( d

5 @( f/ |; l0 g

( m) W* Z2 r" q vshapes= 4 f# e- S2 v4 u7 S7 H3 c# }9 j

2 \) z* A& \: s

* f. k' T- q- I   ) s2 ]3 O! P U

, P! s7 r+ e' V

5 R0 P, U' T. p* W3 e   % g( F, P9 P' A1 A

" P1 {' y0 O8 y: a

# d V' L' y3 P2 H1 ]" x. Q( E0 r 总结 . \" U$ P* I3 S1 W% n1 n

0 H+ E) b1 ]2 m& C- }% q

' g4 ~* D% k1 b( a 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 % ]7 r& M* k" H

& m" Y. e0 a1 x' L# ` V9 E# h" K

4 Q/ Z4 c* s' l- j" M% g! F$ O6 f5 b 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 v) N# J/ d" z' t* _+ H5 J, {

" T7 ?6 @" C+ \5 D% C2 d1 |1 b

4 n w" `4 o; H! `6 h+ v; ? 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ! r8 }% x! ^3 M3 w* ?" D4 z+ Q

- ` [$ g+ q& p

. R7 a3 w; h5 ]) U3 y p: y, D8 k 结束 4 i/ k5 r; {& ^" W$ x8 Q3 `

7 ?+ [: i; G2 Q

# {. c5 t/ D0 m% W0 j4 O  【推荐阅读】 & m. K9 X8 l% G: G$ ]

8 m1 f; w; ^; H0 U

# T% @ ^0 b8 N" X, P0 W 对吃鸡APP的分析 8 I$ k. n+ n- r! x- q3 P! L) O0 C

! e* g R: ?6 _2 U$ \% J' y9 B

- v5 Y2 s/ x6 v* @% g8 P2 s- k 你需要了解的APP安全 2 S& h4 h7 E& e1 E

9 X# j/ ^; _* z+ ~ ]+ e& V7 u. @

& J/ T% [4 T: c1 e2 p( w 你需要了解的APP安全 ; j' I5 q/ P2 T* [) Z

2 C. Y" z5 s, T4 o" |3 Q

8 V9 D, Y! ]$ v! }: S, k5 F$ l   4 F! r" _9 w, L1 g- k

回复

使用道具 举报

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

本版积分规则

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