找回密码
 立即注册
查看: 5101|回复: 0
打印 上一主题 下一主题

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

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

( A3 e- F, k( D! ], ?0 r0 s; x* ^ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 $ p9 _9 [) B# H2 l

& s6 f, x& \5 [7 @0 }6 }9 G X' Z

* X3 K* }' i7 d% K0 ` vshapes= 7 ?" S9 C* G9 m

5 N+ j1 e; {7 Z8 a

+ U" ]+ [% i5 K; e% [   - \' L+ j* a9 U: q5 M: Y+ T7 J

: T! B: x3 r: I4 ^/ A

* F; M. N* s5 o$ D' @0 f. m! Z 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + ?# ^# ~2 \6 X+ @$ ~% n% Q

( k) o$ `) y! \

9 f% z W8 }+ K6 x: h   ! }+ h$ D9 G! s. e0 G& H @

: w, \& [' J1 Z4 J& x

7 r/ h8 T$ R: U 基础信息 - Y; q+ O/ o. c) S0 H! d3 F7 o( e, G

( a* G C; F8 l- j: e

. G; u6 \8 q3 z0 ` 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 / S' ~7 X6 H, n# H

7 J; o# p: a8 q1 p9 _

# J) v% k7 x' o vshapes= 6 s- w6 N$ G1 t4 M: ], ^. z

5 J" \: q, A% n: P8 |2 W; ~

8 v# g( Z8 M4 ?% f( R; A, e   % j0 r @% I: J

9 B; v* m' p1 \! N0 K

3 K; C5 W; N, F% o4 B- V+ P 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 5 ~" D) q# t7 O9 e1 k7 T

. Q7 b0 q' `- g8 V; x

1 u) r0 K! R! H$ A" T; U3 q% q5 c' w vshapes= % N9 S7 n2 |2 x1 d

( A4 H. F9 {5 T1 R8 ^; i; u( R* ?6 |; }

h# ^1 }8 n+ _8 J$ J0 e   ' l0 K; G' ?% u6 C& d

. Z" }- Z9 m" ^) y% h

- g- f5 Z8 t0 V0 U! |' W 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 3 [) m4 h' T$ [' v, b

! f! r. K; z4 M5 o) P1 a+ B3 Z! y

8 r) L' \* _ u8 V; s vshapes= ' H0 [, A4 ~4 f ]/ c" a( j

' `% m9 m7 k, x% i/ l" M

9 n0 ^: e! Y, y7 h5 B& y   " C8 L* {1 J1 k% S

) C7 t4 c' U1 F- a

$ [- X2 Q5 P3 n( Z( b 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 : `0 m9 @6 ^9 S) d, E9 @+ l# q

+ q; o+ D! z( n

) W$ d# K" T% k) p vshapes= ( e; [1 m- T/ u, w' Q! r6 |

+ L$ H8 l2 K' Y0 {5 ?: Q8 ]

4 Z$ J0 D$ d5 `" k9 E7 H   # C) b) V: M- O; v7 v

; U! h# _6 W% V+ h; ]# W

1 c) e5 Q+ P) k/ C& C. X 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 / p4 z! R8 I: t9 c; ]1 z5 K

2 _1 J" @( W8 D* x" O* x% o" _5 h' v

, @& g( E* U% H5 y* w. @ vshapes= 1 n9 F* i, h+ @9 \" p* l" Y4 W

B0 j" b$ N' {& ~

" j( {8 N! g# w   3 @" p* V; P, R+ \! b2 i5 s

* |! @5 L, m' ~. E8 R2 r* J

# r, |% p0 w! X x   9 k6 c: u9 ?* N" m$ z

$ H. `- t8 {* Y& `1 S4 _' L

: y! }* d1 I+ ]: q4 a, V3 Y 签名信息 - |& `; S& ^8 D9 `3 G

$ U* R+ C0 i- D" K. Q* o

# t$ y' J7 X0 z; b5 m5 J" A' ]# X 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ! D2 w& {5 U% @0 s3 @( P/ N/ P* T

5 V1 u) r) |: j( g5 b8 S; w

+ C) ^/ [9 j d: [% z! I 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 m7 Z# X( D/ n% ~. q: F

4 `7 K1 m# O; b2 I2 w& X

; B6 L1 j; j' R androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ; a$ P' [/ E5 B8 T1 t9 V6 y; E

" p; e; v' M4 i* L! v' E

4 f+ E+ N( G5 [ ~: q/ h vshapes= 6 Q2 t( W5 U4 m: O( m. k9 V0 y

! l+ Q, k) e) t9 P# }8 X9 @& E

7 b6 h, t# E0 w' L$ o' |   ! } l$ p- C3 v \- }

2 |$ S8 s/ ?4 i7 D+ o+ @

2 y6 L K5 n. a9 n1 G! h android签名的数字证书的一般都是采用 X.509的国际标准。 7 x# O* y; }/ a. Q

& r4 q; m& G, g

7 `( f& V1 i; C X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 U2 v5 \# ?( @0 m2 T

& J4 Z. l/ C9 d1 m5 |4 v& p

2 a% F1 p# h7 @0 [ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 X6 d7 C; Q2 z$ C2 x o0 W" p

! J) D' ?6 N' l

: A: n- O4 y( T! }0 O% G vshapes= 7 p% B# ]) x# p; @

5 G% q% V7 V& q

! Z4 c6 k, C0 c: a T   ! e2 z' J0 N( B% ^! I

2 O7 p$ V% z/ T3 I* l( Z8 q

5 `7 A3 E( W: G! j1 y2 y! E 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 " S: e5 s9 `0 S) _

2 q" w3 o/ H; M( `3 H. Q3 S

/ O) d* z" `' x) u vshapes= & V9 z: H" ^3 Y/ N n! w

* p) N5 \9 d- D) a1 ]8 d n

1 L6 T7 X! X) [# K* |( r" ?* r! @ 1 S. ]1 l8 _, ]- F C1 c* I0 R- F' K/ A

; S( t. L- U' Y; n3 @

8 H e" A S3 u5 z, b   " Q! z$ |, S2 @( G

- E1 f1 f/ J% } m( X5 m

}0 H: n( V9 D. n* b* q 权限信息 / }- a' R+ k! S* b

, r: F- H3 u- a

1 S' b9 n( D5 y6 q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ; Y: D$ z$ c W0 Q0 c/ `0 \

# c/ A1 B) N: z8 B7 ^

, v5 P/ m, \0 C" M4 g# }( U8 j+ f android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ) C1 v8 _3 _8 \) J

5 b6 D, ~7 k, X6 U1 z/ M

M& i3 S8 g6 z4 I1 p vshapes= 7 u& E7 U1 @3 U2 V( r& J. J3 M

" P0 _5 E9 P: j4 z8 P

6 I4 @' R# D9 v2 I* H7 B4 R; C5 G   ! ?+ G; Y& e- N: [6 z

8 @1 C# l; I: I0 r- _4 `' a

1 e+ W9 q& g: o C 下面对这个APP的所有权限进行详解下: / w& ?* p5 e1 `

* a* S8 n/ q' M7 p- r

+ c9 O* s0 o; T- c6 }) | android.permission.INTERNET :访问网络连接可能产生GPRS流量 & G+ y& p& q1 s$ `/ T- `

% l2 [7 v. J4 M1 b, r2 b7 H Q& Z3 W& i

4 W% ~: ~" o) S: G android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 & u% B. k$ r3 S" I# e/ X8 a

* B$ T+ t& _; K5 ~6 ]1 |% y

0 m$ n/ ~" @, C s android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 $ m+ N$ h1 X; R1 s

5 J; j) y S9 s0 O! g

( Y2 _9 g5 h8 p" f android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 2 a0 R3 V6 G# L$ ~9 R

" R5 z2 n R9 v4 p' x9 p: t

! R2 z t6 s% ` android.permission.WRITE_SMS:允许应用程序写短信内容 1 s6 H/ q, S$ e" E) @5 c

* D0 V2 F* m. K/ K3 x" [

& p0 M T. L# h8 j1 U1 [( H- h android.permission.READ_SMS:允许应用程序读取短信内容 / s$ O/ q4 u. Z# H

! @' v0 U, J+ d% y

" J$ @8 {. j4 R% i8 R android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 4 ?, K( g% }6 u

" \2 i4 B# \' h$ {. l! O* I

! C0 i6 y z5 Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 $ h% B' t% @/ q: e6 S+ e! o0 L

6 l( i# M: G# t& z: M0 a

% k; a l' C+ X2 G$ s7 T android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * l; i( P" B0 ?, ^3 j

. F, y' z; K3 E4 A8 x

, ]# G5 W. U. F% c E4 K1 F android.permission.VIBRATE:允许振动 / B4 i3 A& p3 Q& m2 G: N6 H

6 w. [6 c& g) J% }6 s2 S- C+ ^

0 d! | p( ]: {& ` android.permission.READ_LOGS:允许程序读取系统底层日志 % Z5 r) O& i" B; w

+ B2 M/ s$ e5 r

8 m7 g4 d) h: t4 j$ c O android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & V% C. n! W% n% S o4 O

' J5 o2 F- ~5 a. s: M

8 _/ c( S$ u- w+ ^9 I& Y p   % C3 \( {. C+ m% l$ @" k# Z" Z f; z

& R8 P- s+ q5 b; @3 I. x

; m3 `1 l( e0 @5 B, |3 G7 G( P1 r 功能信息 $ N; }1 I( v+ E9 I# v3 d: S# p

! T# ~1 i' z0 z* i E: p

2 ^: g$ X+ d, r$ R4 o8 A% C   3 e$ S: w" F2 a# S* ]5 E

0 h0 W8 y5 i+ _ z9 ~* F2 k

* v( y8 |: c# D! ?/ ] 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 - @7 \$ b+ R1 r( i3 z

) l; x+ a! f- O% i, d1 k |

, }! o; x5 x5 s2 x4 c6 U, g( o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 5 j' Y+ g! I+ u0 L) L

5 f% A# c9 p& x# v

: o$ x, l' J: `) c% W8 v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 1 ^+ s2 C8 M, l

q4 u! i* a q# z; {: t: ?

N3 p+ _. H' A; z 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 . a* j! `/ ^0 }' u0 C- E

" g& F% a' \) D7 o' o, U

) ^: G/ \; c4 A1 Y( Z vshapes= 6 Z- F0 l9 R' p5 I8 p

" F( h& K& m, q9 n. b( r t

7 |9 b7 R( t% _1 J o4 b* M   * O$ x/ P$ F9 O# t

* c- i. c% H0 D

; |) w. n+ s- B" n 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 - F% ], g' N+ F! f4 z" d

9 ~! c* ~; Z O y5 ^

U$ h1 ^+ T0 t2 y' z4 P- T* S vshapes= 5 C8 P! A& E6 ^% |4 ^

4 f, \0 S* K# e" m2 i) M+ R

4 n6 z. d' N/ l) c   & U7 M5 w, k, {

+ M4 s4 Z7 v$ h$ n" y

* w/ t* P. p5 d, [- Q, n+ V C lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 4 ^3 }$ d' {* f, o

2 i, m5 {+ n) Y2 E

$ o* ?, h) [) r( R- x5 @2 f. E vshapes= / H, S8 r2 y& P8 W- P

+ I* p" O; F: c

1 u1 i- E, ]9 G- q$ w6 U" c, S 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 & j. k0 n2 t! y" {7 A2 {

3 f$ Z: w6 L I; J( { R' q2 L

5 {7 _" o8 l& Q. o* j7 O vshapes= : m! B7 Z( {9 C

* D8 s) C: i8 T" h% l2 I# ~; d

% x' {3 J9 i* c1 q   a2 M0 g' f; ~9 U

" j$ U$ ^$ @) S G3 r- q* B- W5 Y

$ ~4 g( G3 I1 E* y1 k. I* q" Z 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ; H" c1 D* g+ [5 p. e X

8 u4 ]2 P0 |9 q2 n

3 c9 ^9 l9 U$ D1 O9 W% [ {* r% \ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 K0 k# c, I1 @+ d' ^" {5 [

7 r0 U0 E1 m: f. @

$ _5 O; e- i& T+ F1 J& r 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ! J( o" N2 `% R$ \7 u' a

8 S% `" ^, v) N- E# h) y, K

2 u3 f+ Q( y& _+ w 源的luasocket代码可以参考学习下 ( _5 X7 o% U) S( P) r: \, T

) t& `5 S& y8 ~0 r

' }! @0 d8 B6 x K6 ~ https://github.com/lunarmodules/luasocket N/ v( K0 N9 {7 n) a

; f# t3 i+ p! m0 w3 b& |

' g E# Q! Z4 v$ e) { https://github.com/fengye/luasocket 8 g1 x: _# M3 Q! G

" T7 w" X& Y! m" b

$ E+ |+ v0 |) b1 S% f& @. a) q   6 n) v/ w) z% @/ o7 ?

& c4 k( k: C3 S' `, _# J" ?8 n

: J2 k4 a! x G9 W$ r vshapes= ' L0 A/ ^9 V$ ]+ |& @

( O1 b$ M2 Z# ?# C# [$ u" s: J9 ~

! U" V' T3 G$ p. {5 [6 k   . ~7 T' L h" c$ G7 }3 l0 A2 N

4 T2 J* U' H% Y# E6 O( C

/ h- e y, K( k4 ?) x$ R   4 X: l5 q/ t' o% b8 h5 l3 Q

7 U: P! T, t& S+ _4 Q3 H" @5 j

( H. K" ^5 y5 E% Z$ @% ? 总结 I* j) n6 n; k$ |( B, F

( @, e7 O% D# ]4 \

8 ?; z' t" W2 a0 Q- U 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 , I+ ?* h5 b* W" l+ V# E0 G7 j

% j: J8 o- n6 H: R6 V1 M% L

( t$ {$ \ M( B# ^0 A 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 M# W. [+ h/ F6 v4 o2 ^; j

' h' Z$ b" ^6 ^( B

5 F$ {$ j8 F, p 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 8 M. e0 R9 i P- s

" K' `: d5 g) k+ i ?" H% Q

) y+ t+ d4 V$ u4 l2 V" C+ } 结束 ! ?" N4 _! m7 Z

% d0 G: M! n! B- f

0 L/ Z$ i: a# a  【推荐阅读】 1 _$ \" E/ ?6 G$ \ `1 m

6 \3 j& a+ D" ^/ x4 U& h

+ h( W7 i, }+ A8 g6 v# k 对吃鸡APP的分析 ) L5 r% A6 U! j! P* M# j8 _: j7 @

) M* v9 r P# \6 W1 C+ e

1 m+ u0 W! G0 Z( l 你需要了解的APP安全 : @9 t" @* |1 t) u" I

' v+ N2 ^, e1 T ?' X+ F

/ C0 P0 v+ |$ s8 A 你需要了解的APP安全 7 E' O1 D4 H+ ^, b

/ l9 D/ m1 ^7 A8 n9 v

' y3 {; S% Z6 M   ; a7 X+ [# c' f* L4 q

回复

使用道具 举报

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

本版积分规则

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