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

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

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

5 q- R& ?/ @/ q$ W 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 - s' E C+ W; R9 T% n

" ?% M! \1 t# { Q$ q

' H5 G& G9 }2 ~, e; { `9 Q) ~0 z vshapes= 0 m& R$ J! r' {4 K: w

5 @8 y6 o- w F

. X7 M5 q( h, W   9 `- f2 @, Y9 w

# V5 }; S8 d! g) H

' d' J% a3 Y8 ~2 \% I 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * f: A7 w# c7 X/ m! d7 i+ ~

' j% V# n4 J& t0 M( H( {: }6 N

" J5 g+ l* X% h+ p   ) u0 u K, F6 M Q- V4 s. v) E# ?

" o$ q0 j, y/ \5 t S9 n

1 s9 o) K/ G: c+ U 基础信息 , Y3 K" E5 S( U9 r1 l% w1 Z" B* C

8 c' E1 c( @" H& p( B5 P. t/ M

" h$ s5 Y; f7 ^ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 6 d6 W- A0 e+ r, l1 B

: C) h5 P% F% R+ K4 ?

6 w2 c; o7 Z8 I3 M( v vshapes= " ?9 w& k4 X" R( E2 g" e) z! @4 t

9 J9 s' R3 P, G z' a1 P

4 G, V" j3 u$ y' c% }! Y7 Y   + F+ ~- x7 j# e$ K0 E

' Q; O/ @2 n* H# ?9 q* s

/ q! f) M$ z4 D, _: B 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * v: X4 \" s- }1 l, U

1 m0 t! S& D* @& F

5 J1 S! S* i2 o8 [5 ]1 s vshapes= ( f) _* d6 O8 h4 A- S

9 ] K' X0 T! p0 Q

. [* z9 {: x5 {& b6 P8 {% g   + } c: s$ m+ K, b

m& w9 X& \0 Y( }; G0 n) {

5 r+ v" }3 I, y) H/ w( G 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 t( \9 h( {$ P

U {2 q; w. C( v* s; s* J& P& ]% S! q

4 X q& e5 H7 W; u" ?- C+ t8 g0 z: H vshapes= # f2 b7 a A& U' k; e: z- ~

4 |% w7 \$ T# S8 @5 Y! `& E9 S

& e. c5 I4 }$ E+ c; D. I, B( A' C+ H7 G   9 S3 ~& ^. X1 S8 @% O% f

( L' {' a9 w4 C% c- N! y" u

8 G4 y4 p$ f/ i9 l$ S4 L 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 # O( y& h1 \! w2 A, A/ p- W

: Z- X# [- u4 m; [

% q3 x$ C) U" d1 b G! S$ ? vshapes= ' j4 R6 j: S3 C1 E

# S7 ^! s- \5 b9 K/ r

4 H; w7 B, f2 E* t   ! T. [" y) M- [/ z: h, q* k$ l! j

. q& e4 u& Z' D& e/ N

& p# P4 B) s1 g% J 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ! w. |6 o* }# b. c2 U

9 e1 R, E6 a. }

( O8 U* z2 H2 Q1 k% Q vshapes= ' |$ O, D* q* z6 P3 _2 t

1 x9 l/ w/ w& ^

; z( I# s3 v. M9 p& o   # B; c1 G0 G* o

& \" \8 c# J* F3 |

" A/ t* _; g9 ^& ?9 F# }   8 K+ n Q# Q/ x7 D8 {& N9 l( s

0 q. o+ P5 t5 i) ~# P. g7 v

0 X, z! x( G0 C 签名信息 r Q8 k; }& h$ R5 }

, O# u! M8 H9 W6 j" Q

$ F2 n& r- U/ D7 j( s 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 + z3 L, W# Y& H2 y3 `

8 B' Q+ V- |1 Q. l+ b) D

6 S( u+ Q4 s* {* r 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( x+ o4 {2 ?) r& C+ N- X

3 T' y4 a# z& L, v; y: @/ n7 E

' L/ w3 _ |5 P& g androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( P6 X$ H, ]+ A* H8 K+ K1 Z

9 z+ d+ M% P9 i+ b3 E

& ~# ^" s9 j* b3 T2 G/ ^3 i vshapes= ' v' u. z0 j. D! T' i2 l' B

4 Z4 W4 u/ v/ v$ o9 ]+ c& T" e* e( J

/ A8 R- j; Y$ D5 V/ y. i: [   2 k8 A& _% O; |

8 [7 M3 I$ M0 [& j' _% o/ U A

/ a( ?% f* d' b; w$ ~; D" i android签名的数字证书的一般都是采用 X.509的国际标准。 & L% _/ y$ ~4 R/ H/ z0 @4 k" B

7 I$ A0 p: b! v# o: e4 `8 ?

$ y4 l! e+ H9 ]6 p! L7 U! g X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 : W1 H/ `5 f: E O# K

! F$ K0 F0 s) ~+ t

, F' h2 C* o" ]6 S 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ; C% D d/ y, e0 N* U* }: f% h

( G% s* y$ X( U* s1 X, z5 U

2 H z( g( `! G: r+ ?! T. @! X' f vshapes= 7 r- |! F6 i( G% y( R

1 @/ d! D9 y7 ^* } T, V/ D: L

: ~. n& t" H B1 N: F3 T   2 B [. \5 U! O) Q0 o1 P) Y8 E+ Y

0 K7 s/ T& R, ~; q3 u+ i, ^

I, |9 g; w8 ~* S. x0 z# Y( I" M$ y 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 6 K* k* \4 f4 }

' m g) a* U7 F8 Y

+ a! V: ^: g' [ vshapes= 0 {7 R2 O4 |& a4 h( U4 j7 d8 O, P6 A

, j4 Q2 u7 @+ V1 R

u: [# G( x# U) ]2 D k' R . l# M0 p4 t8 t* N4 g; r7 D

8 l% p( l5 X' z3 b- L# [

5 X5 O. C. h, C   ) p0 p7 ]' J o. N3 n

' U$ u( K Z8 ?+ G

% v; ~. {* V3 V' O2 G 权限信息 % n+ D1 V; \3 v8 s

1 D, c, y6 s* c9 {0 K

" k5 ?1 J9 |$ W' o8 c 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 8 Z/ M2 u1 T j8 X8 p8 K

* [& e( I: t6 n/ s. v9 H

: d, v" b5 N6 M; o, h android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 6 v0 S- V `8 U, x

7 W6 k5 e' ]: D' q' c1 I

g, W5 w$ `6 m2 ?7 R3 r! N vshapes= 8 a _; J; a5 A) `: k( q2 Y

5 @1 R# ]1 b& S& e4 R

# m. H+ h( ~9 ]* Q   ' |- F; J3 k- s. w/ X

3 R6 U! |! T# h8 ~# D' H( {

) l) k* o( Z# p5 A% O I$ c) ? 下面对这个APP的所有权限进行详解下: m# s4 l& ~" p/ Q8 Q* k: v# A

* I" U1 G7 _1 _* s3 \$ q* Q

! n% C) U: p$ N3 M5 A( S! c _' P android.permission.INTERNET :访问网络连接可能产生GPRS流量 ) D! W" [8 [7 A$ H/ y

2 x% d" W) L b

. b% P9 J9 K1 D( s* V android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 - F0 k- u+ l `. H

2 i8 B l# t1 ^1 ]8 G. \1 Q

0 J! G9 _8 G5 D- {4 F8 }6 l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 % i% I( Y7 ?# w* h8 w" ?7 o

4 G) l& R' n5 A5 \- R* g

. _& P8 f; {( A! s android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ( @8 x3 f1 j& D* ~! U" r3 ?

/ Z* l4 `+ q3 z$ y6 Q% q

0 J. I _/ A, } android.permission.WRITE_SMS:允许应用程序写短信内容 ( m/ Q' M" I- y

! a8 m( W4 R/ \; n

4 S/ W2 f! W5 K: b android.permission.READ_SMS:允许应用程序读取短信内容 , `# c" B4 Q4 ~# C/ k

* S Y) m4 Y; k+ v; x1 i: t: j. B

: S- o+ N2 j& h* c android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ( p1 k) m5 h7 Y/ W0 f& E* o

; w9 h u/ }7 z3 f" k1 k6 @

|4 L' V3 y: |0 I/ Z4 a( d, u% J android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . O7 S" Y* L' A0 n Y

: e' p6 H3 `% }* y' O

, ^# a5 W2 x% w' x- I! K6 h android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ' ]( w0 m8 @& L* c9 r% h% N

- M0 D8 `# b+ f, z

3 B8 _- P/ X3 \. c' n$ j android.permission.VIBRATE:允许振动 ) ~1 d+ H6 C0 B+ s

/ l! I1 T8 ~& I, Z, F

% `4 o* E9 S# a android.permission.READ_LOGS:允许程序读取系统底层日志 ) Q/ P3 ~/ u: k

8 U; L8 `) H6 i5 A/ w s5 t2 N

. X/ s/ D/ L9 K4 C android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  6 S( P# `( r3 A# _6 z

! v1 E b1 J. G2 R' C: N

# y/ U; p+ D* A/ J. d   # H" e X4 j8 E( D

+ \8 M+ K1 a+ }) u% r

5 I; b1 V# L, B; N. N, C 功能信息 6 t, j! L s: Z5 X- R

, L& y0 t& M8 Y* |7 [5 y" ]$ B, ?

" ~5 T8 g2 @- N h( V. M5 a   6 R. k, T7 |$ w }( W/ W' Q: `

0 G0 Y* A m$ [' u, M* R. F

( r5 D1 y9 c2 S }" y/ y7 ~9 p 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 y2 A) W8 ?1 s% ~% }

- s" P0 |: [( G7 ~8 m# e( i

) K4 L6 ]1 E: s! P0 P Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ' L0 r4 J& E9 M' e9 f2 N) v

. F3 F& E8 @- t: ^* c

* {5 ]: c" e0 {( @% n- O9 f, B 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : v3 C) k- u* c3 w+ o

# b; @2 O, o" W9 I5 ^" e# _

- ~: Q# k4 ?& ]& P, O/ d 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 U0 P$ [* D6 [7 c, X6 L

g& W) m8 y9 O

4 y8 N, ?/ I8 ]3 \' r vshapes= U) T8 X5 C5 }0 K

" R, j9 n" h% D; G

7 x* |6 K9 C3 R. o# T- r% x; q   6 g, X1 Y+ |0 u

( O {/ L' a) a d+ L, J

2 c; {5 l' I" E+ L/ o$ ` 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 5 d6 E- z# V5 G; ^

2 K( W! T4 T6 f0 D7 B. j( v" K# o

9 V4 i7 a/ a& k# C& t vshapes= ' P) {6 ^7 }; I$ p$ k

) A9 N& Q6 i# G# A) b

, G7 `3 F1 D* s' {   5 w! e& a) p0 r. [ k$ L& P9 a

0 N) O) D. Y+ @+ h* g6 Z! _

, L ?! P# E( F3 f& _ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) N% f; a9 P$ T% p& H+ S( Y

+ B' e# {$ [, v$ B) l5 @7 K0 A

- p( d7 c, H |! S/ i4 e o' F vshapes= * s2 |2 C( n' Y

" {) N0 a2 I7 P, U* K

) [( p& |8 j9 f# S# d! ] 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 `. m+ l+ x/ R* u- x6 `+ H

9 w O6 q) z T& `. R9 p

5 B) L* q& U0 _* K3 L0 N vshapes= # {( L. K) V E; M5 i" N/ |, q

! n8 `& Y; R7 L: k

4 ~( ]" m0 N5 E- D6 m1 Q   / E' f* |, I/ O! z4 c

8 H; h4 g4 ]# z$ c$ |

! F7 {0 s( m3 Z, \5 x7 g9 M1 Y# B 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 , N2 ?, l/ u& g; o7 f- Q

: l C4 q/ d) r" m8 v

) q+ b) H; w( p. E1 Q- Z9 U8 R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ( c9 j. E6 q% c% V0 m

2 k, f! K( F) V

% i& a' p9 [, |3 v5 C0 U% M2 V 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 @6 {0 d& r' r# Y

5 P! \, z* K8 h

4 G. ^3 w% c. s" i1 F" f; y 源的luasocket代码可以参考学习下 - S7 i2 Y$ i; r8 @8 n

: D8 u! F1 ?. S

5 W' V- { A; P https://github.com/lunarmodules/luasocket 3 n; _" D* z# ?/ l) e

! p/ v2 j1 Y6 o: }6 ?

- P% O8 }2 v! [# z: R https://github.com/fengye/luasocket 5 D& E9 @/ h/ O- _/ `. c6 Y( k

5 \. U0 D: d' F

) l( B+ U2 z, b   & d ]. m0 [6 d8 Y1 |! P3 Z

; w+ \0 B: q4 g0 A- J+ X

( Z6 F# G8 P7 `7 u) d7 U$ v vshapes= ! i& S( x' g2 K9 h: i( x, z) D

( M1 ~# A' p8 j3 E' o1 I& M

5 u7 W- b4 C6 A) B' v   " K' v0 o: E7 S( |6 d! Y

8 I( j7 e" i2 ]% X9 o5 D. i) L

: F0 i5 q8 {# J% @' l( _; T   ' f: H, U1 j$ }- [

, y$ Z& y9 N* _5 m9 w e6 W z

! h) D+ V* o1 d( N7 b 总结 + m6 c/ O, t$ e1 z

& z" w/ F" b1 }2 E( G8 O1 ^

! m5 T. s% H9 U( G" n+ y5 |+ y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 8 \4 a% ?5 e5 W

& n$ F) }+ ?8 s3 |; D

$ V$ i7 z2 R1 P9 o% m; z% r 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ; i# p+ e: O/ n. J3 a9 l- ^

3 L0 A- y& `* ]7 |; _* A" z

! |$ v6 {+ e0 d 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 9 {0 Z& s0 D: J' F F. j( m7 S8 ^! p# g

) j# z. d) z- n' ~4 g1 P

; Y+ Q! z9 L; d$ a7 ^5 F 结束 ) l+ K0 w9 \2 E

$ u3 O/ L8 _) ~4 \7 j8 b& |7 l

3 k$ R U, k' ~  【推荐阅读】 ( `3 V e2 C4 c, K- {$ K, j( o

# b( x% V: y8 @, e) M! j

( z8 A* Q/ p; @' r$ ]) D 对吃鸡APP的分析 1 D( N$ _; f- U5 S3 D

3 ^( N' z$ W2 Y0 r

9 R) u w5 |4 F, W 你需要了解的APP安全 # ^) Y/ q+ k( M+ \& F

: L1 v& ?6 s& W' l' e

% ^5 t1 c8 g. O! k u 你需要了解的APP安全 , e3 e! ~3 D6 W

- l+ W$ X; g* } @. H- u# K6 X

M0 l ~$ F2 C5 c6 \   1 o. L4 B# M7 D S; _; q1 }( D/ Q0 h

回复

使用道具 举报

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

本版积分规则

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