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

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

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

7 x) V' r+ L j' P2 d! G6 P1 ^+ l 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 - ~7 h* n& ?# ^2 D+ x Z

6 Q& k( _ p! i8 {) v# S& f/ a

+ k6 w5 S4 j9 e) w1 I8 _5 K vshapes= M( i; u* n J' S( j0 }5 Q

5 D% Z3 \" q! L8 ~: i

# K" |7 E( N3 X3 K5 \   3 A1 z" _' A0 ~ }

* b w$ W5 l: A: Z

. K2 G0 k4 f0 ]2 a) a5 T. Z2 T: S& Y1 r 下面就以开发者角度进行解析下这个APP的功能的实现原理。 " X! H0 Y% {8 }6 V

/ K2 v0 h( V/ O) e8 Z3 r8 |

1 P y) l6 q2 o   ( G: i8 K A5 U: P$ j

& v! T$ u' n- ?- Y$ P; R+ d

; H: W2 l. \% _0 ^6 O' f 基础信息 3 m, B1 [# _; [# f' r0 ^& p

, a- R6 P6 v: V5 i9 @- `

) t- H: ^& |& v; v; `$ F% X 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 0 s$ `% O/ m( N, g4 h

- \: b) T& l2 h, h+ a1 A6 _% P1 D

5 V7 v( N1 G8 r vshapes= 3 B, {; [9 z I& Q& o

7 p; [3 ]4 x9 n7 C% O; u

0 T3 Z3 m% s3 e( [/ D% q5 g5 @   ! Q4 N' |* X5 h# V. d1 H

8 p1 F) \+ k5 U

$ ~+ k- W' p& Q, {1 z* @ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ A" t3 ]3 {) U8 C) Z" P4 ?' E5 J

* Y" B0 a: }/ I# y( g

, |$ z3 K/ Y& G4 R. h, ] vshapes= K; w) Z: x3 X; x, _

; p; @$ Z/ a) h& v! b8 E- ~

- b+ q* U) n" v) Y   - ~# R' ?0 y1 Y0 _1 T

. D: X6 J5 q# Q

6 o. T. \$ w7 @* M( B 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; N1 [$ x" b, C+ i& B; S4 R

2 w# U5 [3 ]% |( a" k. H

. _' I j0 X* G, O% L/ A vshapes= " t/ K+ D4 L# D+ E+ E: e

9 G8 a) I, q8 c% }* M

' v% ~, P7 V/ O4 _" k& F4 _   # [8 U# q0 Y7 \7 x

* A2 k N$ P, y

: @) C( @9 h( Z 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 2 D; |* F$ s$ x+ _2 \, d

; [. Y! ~7 p1 i2 x$ Q( z

& P# e/ o' d6 ]; d$ s vshapes= ' `% q0 [5 ~2 h. F

' y( N6 ]; K' Q& }" E: u* w' I

, @1 A3 ~2 _- r   ) |* V/ L7 Y# C% u: U

* c, e6 X1 y- ^$ _4 z

. B ~, h* c b P1 R, Z 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ( g& g- w& s! i

/ U$ e$ b, D8 ^1 x/ n2 |/ J5 |" d

) G7 u& v4 s5 b vshapes= ( P- T; x+ Q% @ u7 c$ O# q

( Z9 @: Q3 l) [/ j( x k

$ J+ i; `- V( h   $ ^: a! {8 C8 i* O' a

/ D- s- |3 G. n, r" Z* i9 Q1 c

3 A) y @# p2 k- [0 ]5 u* ~4 \   ; y0 v( d8 w) X$ O# g5 }* d

6 A( v7 i4 z! W# x% l0 C6 m9 j8 O& B

, n {* V" {: s6 f 签名信息 ( t a# _9 d1 F$ x- O" q: s3 ^: V

& g6 ^2 u$ J- u+ {% R, G% h7 g

1 H/ D* y( d5 ~) O2 U. B9 Y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' n/ `7 t B9 }, ?0 A; F6 n

$ N# m' n' [6 T

2 i: W1 \- o6 l' D 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 s9 e$ M# K9 X2 y4 x$ U

! c+ _$ r4 H' K, x

0 ?$ ]$ h( ~& X7 L+ N$ s# v androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # _& N5 l0 G! b" v2 U" E

3 L% [3 p+ Z' k& A9 m5 j5 q

/ y7 ]7 ^1 R" Y1 b* U, S/ O* L vshapes= $ t( l6 o Q% h: h3 r2 a+ I

$ W7 Y7 J4 R/ B# {7 |/ [

; G% M! D: {" ?9 T/ M   - N( g' V/ g& N6 N, w# A

( g; s$ L- @' _/ X

' o; g$ ^6 _2 ]0 _% U3 p0 _ android签名的数字证书的一般都是采用 X.509的国际标准。 5 S" P7 t" e& ^2 R, z0 H

8 }4 B; X, ?5 U8 T, e- k

1 Y1 P. B/ Q2 c0 z X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ' [) S6 p& V4 _7 Z+ z' N$ d

0 _# ~ m$ S; ?) [

. q' s' j/ B# g i1 y$ [( s3 t- L 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 7 Q+ X L: H' O2 B0 _& a

" S$ [9 s4 ]) L u

' W( m- o9 s: u1 G5 W- ^! o vshapes= . r6 i7 Y8 t$ G5 A

. `$ q/ H- H1 H% U$ f. L

0 ~; b/ a& v& U% x( y H2 }% M   ; P/ C' a& u! ~4 k9 j; N3 ~

. U$ X/ _4 v$ f/ v% e

% W- W2 B0 N- f$ h E( e 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 : q# @* m% d; }- T' W

+ t& q7 }' r: W8 S( @

6 ~. U# O4 Z8 F1 `9 t0 B vshapes= # V" B8 o1 v# s

, W4 H6 l+ ~, G* L7 _- ^( w

% J7 p c! N) d8 l% D1 @ ! Z# a3 m: L# z9 d

: D% N$ ]4 _7 C, p+ A2 N

; G) j8 [" _2 u% p2 r; X: z; Z' _   & J/ @" r2 S) c6 C. ]$ c3 z- r$ z

0 n% Y6 V/ c' e

. l( S% h* o( I. X$ p8 r 权限信息 0 w- f/ M+ Q) i+ d" Z

- ]* p( r3 T( [; U' e7 c

6 ~. V4 K# Q8 t* A 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' S+ \# ^3 @& K( y, \& c- v

" O, k! d A% V0 |( {5 h0 @1 |

3 }% b* G! X% }# [' m4 }5 n" O android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 e* }* c. l* x J$ r

0 i0 S+ d( F4 v6 q) s L

$ ^2 V7 ~0 J- m" u vshapes= 7 k, F$ ^8 O& F: X: z

( r) |7 e9 r% M8 }' S( `

! Y( d+ Y- G' o; W' E1 s   & l. G0 r m. u$ g

4 F6 u4 y- [+ z3 O; k

- j1 H$ O2 Q8 J: F$ A 下面对这个APP的所有权限进行详解下: " Q' E$ J4 i) N0 I7 ^; K

. |# q% B6 ~9 V$ m n

8 j0 q% ^8 A% x android.permission.INTERNET :访问网络连接可能产生GPRS流量 # t; o* D4 a6 X' l, M8 h& \

8 l! i9 }9 Y# b/ ^# ?7 f

. m4 M+ l3 C2 }# L. W. S K android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' G% N! Y% k! i

9 Q8 ~+ T9 B7 G

4 H, @- V3 q4 O0 P9 { android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " [- n6 @. ]. L5 k& r- _

8 d! g! {) D5 ~7 [7 Q

3 a; ?8 d1 E+ L8 O# M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 / m* K- T# t8 f" _ H" n

% ^, g6 `0 }. ^" O

% K, J" q- S& ^, D4 s* d" X android.permission.WRITE_SMS:允许应用程序写短信内容 $ c7 r A5 Q% S

7 p- U2 k. w" a8 I. e' ^

- H0 b1 I9 `* } android.permission.READ_SMS:允许应用程序读取短信内容 , [- e# t% K; y

( a; q w7 i) D6 y$ I

( I c8 A) i# m9 O# Q android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ) ?/ F7 }9 l7 c' F) n% s0 r) k. T

0 D2 L ]( [6 t7 F5 ?0 I

3 W1 j& Z' {5 ~: T- @% B android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 1 ?" ]5 D8 N) i7 \& B3 N7 i

. Y' ~& V* e5 G& d5 C2 Z

! k+ }6 R. T& F$ ?- v android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 + f* t5 q* ~& _6 G/ [

3 E( y* x$ O" h9 j

* a6 X+ `' N( x" j8 N android.permission.VIBRATE:允许振动 J5 y0 w- b* s$ F+ I

% S) b q2 P3 b3 }9 {

' E5 h3 D" E3 K9 a6 A+ q3 F4 z5 q android.permission.READ_LOGS:允许程序读取系统底层日志 ; r2 X7 f3 w0 @& s

2 O3 c, W4 q) R6 G* ~# j

. k& d- [! g& [1 O0 D" P android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( p' y; u: f+ J8 V+ L. Y4 p

' M) ^) H2 v5 t' y

! q+ s" N! X* q   - X" h0 N9 n* @0 I7 k

' H/ @: Y, }2 B; ^4 r6 }7 @

; [/ P! {5 n* [ 功能信息 : Z2 R: O5 u5 |/ }8 t ]5 ?

4 T% p' D$ s1 R" Y) M9 M

. A( o7 N0 l9 s A   9 _# m* r* [7 W. w* O, ~

/ S8 h( i+ y! Z! x

3 n" o& R) U3 K# n 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 ^1 g( N1 {3 _7 b

3 S: R( w$ k. K" O3 ^

" C, L2 [6 e) m8 m# |& z Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 c& G$ i( J# S/ r# a

3 \1 R- V" I2 \6 ~' [

/ p" P& q( h0 b. F# }! g M, l 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ! a1 b2 W& ?: _( [

# A& W, ]5 ?# s. @' }. I

# X0 @0 g' K) M& o q 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ! a3 z; o: u# e

2 W G7 ]+ J# f* r& X) C$ N

& C6 M$ s" _) n* W, B3 \ vshapes= ; A; O4 t0 N3 T$ R) _' y

! |7 g; \" ]6 y: M0 r8 M

' O$ l0 a8 s ~" N T" a/ h   7 A4 `" c# w; v3 `) v& h |. ~

7 m" R9 H6 d$ m- z) |

: W4 J ?" |, A$ u ]& \ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / C) C7 a0 J1 {

- u( J* g! O3 E0 T3 N

7 J* Z [: u. H0 M5 ` vshapes= - g3 v8 x& k; q% h- n

- V# l. M' {4 S

; K4 C& H1 C( O% M0 {1 j8 o- R. l. O   0 y, Y2 D. }5 U! S0 d- h* @0 ]9 y

5 g0 N' F: L& f$ q

2 l- S/ [- j% T3 B( x: g, o ^8 t3 Q lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 0 E1 C3 r$ A* S$ h$ ?8 `+ Q" V

3 K) b+ @3 t9 P* L1 `, l

0 j. o! L) a9 K7 V5 C" F& T- f' a* s vshapes= " R9 S2 M2 |( n. ^4 \; I

1 V. T* S, d, K' d* Q- g" U- `

* R* {2 ~# B0 t 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + R2 A$ p, e. C2 m

0 e; N4 R L0 ~$ e! O; \

( }7 z* r E( X; v2 R vshapes= 7 t- I5 S1 A& Y" x

3 f: ~ E2 ?8 k1 Y+ f

; S0 t( N/ T2 I3 G5 [2 b0 L+ Q   # h& X5 Q8 ?( e

: b) t' A! a* T+ q! R

; y- y4 Y. G8 ~* Z e0 m2 L4 P 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # ?3 s5 H0 D+ |( U S

( l5 o K7 R7 }7 I6 R+ I. g# n

. P1 o! ]# g2 U" i LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ( g! L0 K9 @) R& s- T2 f, m

$ s% g0 ]9 ^6 V l9 j0 m

. Q: }! Q" b1 ~; G P, `4 c( e 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 d: y$ [; ]) D# @( b

+ H8 E% w* C: D& V

1 d: L2 i1 g& `# u+ |" D. G+ R 源的luasocket代码可以参考学习下 & ^! m- l4 z* Q

- T. Q/ q. S* d3 ^! x

7 {# \: i& h& _0 y" }2 I- Y& p7 q https://github.com/lunarmodules/luasocket % @; H1 Y1 m% E# v! p

' `, i8 b4 J7 w' T6 s( f" P& @

* [. }9 z, {7 a; g( m& f) _0 b https://github.com/fengye/luasocket ; g; o! ?* z2 p8 k9 M

7 U/ a$ z+ N) z$ ^6 j* E0 T( q

! T$ L& \0 g; S5 I8 u# j2 _. R   9 K' n; ^2 x9 \! N6 t5 n

: _0 L3 P7 ` {$ `- D6 U

' n' w3 E/ D4 P8 ? vshapes= ; K4 i) o& S/ P7 u- c3 O9 j5 J

; q+ J" B. U7 V+ f# G

& T6 a4 t$ @2 V0 P1 Q4 z4 z8 r   * j' ?2 p: [2 V; N( }" a' l

" Y: _$ r9 W7 d+ P5 r5 Z- P

' [0 U4 u$ D4 t( x, m e! d& M7 D   ; T- Y) {% G* m( z5 j& J

' u& x) X5 P: q5 y/ f" N% C

5 [3 h1 m# {/ {- W9 Y 总结 . K3 C) r# q# o M. X$ I- H

& q7 `# C# S+ y/ C# ] f

; ]+ ? J* t9 X8 i 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ) ^7 T4 q, d3 R6 ?

$ g- i% o t- R$ o% }" A7 I

9 |6 l- _+ @$ y% |( W0 R+ \- a4 w& u3 V 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ' t2 ?1 N+ ?3 g! t% n/ V1 d

) Q4 @ _2 P* L- z f

* D0 f& |! H& Z1 D 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 ~5 J- ~0 H/ @! G* U

y5 C7 B m1 m" \' c. h$ v: {) b2 [- d7 y

! y8 t% s. e- v; U- x3 {& R, m( r) ~ 结束 6 v6 a. I( Y* B* p

7 Y* M7 }9 N$ m0 `7 y2 Y3 S! M

' @0 `$ U4 r) _  【推荐阅读】 + j: |8 ?4 L4 @) |/ `3 R

/ H# [9 s( w" V: `; n2 ?

" c' R2 G6 f4 }% S: w' i& d 对吃鸡APP的分析 7 G, C" ]6 g" z* i2 k( B1 ^. k9 e

8 `! t2 f; J( U. Q; L7 k0 j2 J# h

: B |6 i( B2 q4 X 你需要了解的APP安全 + O4 ]+ ] l/ \

* G: I- \' T( Z Y6 E

& O' a6 _6 Z @/ X 你需要了解的APP安全 9 ?0 X0 q/ a. Q9 U7 J: |

; n# m" B" ~- F

! T6 T8 r- m# y' L6 J& ~, b   ) Y, Y) {3 s* o, u7 G

回复

使用道具 举报

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

本版积分规则

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