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

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

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

/ W5 ?: o, V9 o R1 \% t 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 n6 A) B- y/ t" G

- c9 C1 K, H0 k9 G7 C: h! U1 o$ E. {# q

$ J3 B3 g( k) w vshapes= 1 t6 ~% I. l3 b8 q- d" v

7 m; Q' w: ^1 J/ N1 I

9 \1 G# M* f8 ?# l7 f: d4 l/ M2 M- K   - N9 o9 }; b- J# F

& H% D- {! Y3 _/ M, g- @

8 t5 [* I( K7 z# \" |! H* n 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ) e. _3 n9 P* g% F/ N6 `! q

4 R+ }' Q+ L% K2 V

. ? A8 k+ T6 D; m   ! M2 D! l! O* k8 w, _+ E

/ N! I7 b. z3 u) U0 |0 h

) ?' W: p/ z4 p 基础信息 ( Y" T d$ S* G6 N3 I4 H# T

: ~* P+ ]# ?5 r! Q$ k. Y

& J7 `0 `1 a8 c: [9 M: O' ?( t 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 8 K& M# [7 h9 x* X9 {

8 t9 h7 C+ l S6 b$ A

8 L5 [( j: K' A- {- ?3 H vshapes= $ s$ Z: b0 w3 i, U& ? O2 f

! y" J9 [' {) @: B) t4 x

( _# s% Q, ^6 b: ~' N5 L6 _   $ Y0 g* M: V( }2 |

. g4 d3 k6 D& B

, |( J- s: t3 a 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ N5 u h2 j% \9 [

' p% a, J1 \* {

, t7 N" Q6 P; y! h vshapes= + {$ K; D* j/ c) B1 o0 N w

2 J h" m3 R* W+ l7 C6 y

0 Z+ Y b% r/ e2 @+ i   / N9 ^0 W0 J* r5 M! R

+ V. |: f/ G* d8 s

1 E0 E9 A7 A) W: J0 h& P 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; P6 h- M5 J" H) g3 ]. W

$ N" J! |' A0 C" B! \+ Y

, r; q# @& v+ D0 x+ A vshapes= $ N8 D( l6 _2 K) i2 c q

- T/ W1 O# ^$ @7 s

4 K# ^) ^* d0 ~9 @$ o/ T   ) ?% R) E' ~- B, Y3 E4 s# @9 X- g

5 N0 R% _$ O. W+ J7 r! J

3 T1 u9 r/ n6 P; d 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 - a$ d2 [/ X. q8 z

8 B5 y$ l/ a0 i0 x$ O9 e

7 b! `, }5 J( g/ ?3 [ vshapes= ! E- L+ K) ~% [

6 G! Y" D( c, h9 W& r& u! w. y

2 ~5 _! {1 M5 G! K   0 }7 E8 q9 Y5 A0 n1 F( L

. B! g O1 a; X0 m

9 G/ |1 M: d# p) U, B0 y 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ q. h0 V n) c4 k

# h( v8 x! e7 I0 H* j

4 n8 e* [; q# Y7 \) r/ o vshapes= . [7 o" t7 P" I; x( ~+ K

* f$ _* L5 u3 i! l2 F3 N p

: ]# {1 m& N8 O; }. E   5 ~5 o& M# ], ?' e# E; f/ E! [9 n1 L

, |1 M( s% o$ q* c9 Q% M, E1 _

- n O+ |% Z4 C. ^   & m6 W4 U8 r: m& E0 R3 Q

; U: j0 q0 V) b# ^! e# {3 s ]

" x% w" M) E1 A# y: ] 签名信息 - L: m6 i, Z p* i0 |: H

( S. G+ i% @5 ~. E2 j4 G$ F. s

- ~) L$ h) L0 ~7 k9 e; s+ J% |4 D 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 $ Z; O, ]1 q; |, ^2 p9 z ^; Q

# {1 Z- b0 \# X+ m0 e

; C- [. @. H- N' M4 U+ _ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ o4 U- |* d* X# E4 S2 E

( j2 ~) H2 c! ?+ }7 {. x! r% U) j

0 G6 I( H, W3 \* D8 J androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 + I1 Q; V2 H2 M# ~5 N1 a

' g$ U3 Y3 i+ j% Y8 Q3 C2 ^. r8 ~. R

) k! }8 _* Q' T& I- S5 f vshapes= 4 A* O$ t t( s9 D

- ^- C: w4 Q% d" v! I" m

. g! s) ^2 l) S( S   v1 ?2 q$ y6 _8 M& t$ S4 g

: Q& k( e' T; f6 B8 R3 i

]8 C V' |$ h8 o z, m7 I9 i android签名的数字证书的一般都是采用 X.509的国际标准。 ( b) Y8 k! h: r" L0 F! ^

. L( ^( ?* K7 M) v* u4 B7 G! G

# b4 h5 C+ B6 F2 A4 z. e6 E X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 " X6 `1 k1 i( R8 j( T1 ~

' m! m- I. A# o& _# }5 V8 a

" U7 d$ o) g2 {. ]; [! X6 W 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 X# r0 ?9 p2 R: q

) s* J8 l: J' M" M' t0 G

; j! X3 l+ N" \( ` @ vshapes= 3 d' [- r" S3 s

3 U7 [* M$ ?* w( S$ o

! h( r+ Y0 Y5 f+ W8 G, b" ]! L$ H- W   7 @( }6 g! S6 d q

, N4 c* b) M# D9 ^) B

0 X2 e6 ^. S* [* t m! C! P5 k 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , V; j3 `" e. X# j

% ]5 s0 M* s7 X& s) d# v! p

' f5 e: v3 r/ c D8 L6 q' O/ j1 B1 D/ Z vshapes= 7 ^" d9 }/ m( i5 m7 b `

2 u+ @2 O$ k5 C9 C* c

0 V' J0 R* P- F3 x! R. w7 J: T% k b* ]$ ?1 {& K: z# e; V

3 q5 l$ b# _0 P/ Q3 q- B

! @( P" O1 W: R' }! n   7 ]! d8 `/ g3 T

) h' D* z [2 ^7 m9 D6 o" E

' r& }4 r$ F: R. r, z% ~! _ 权限信息 9 ]3 G; R$ V6 S4 d. m

) {- v" H3 d* q& \6 o

9 I$ c4 k, [4 ^/ ]: D 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : [7 [% ^0 w* R7 K+ U

9 h7 R( E' v( s' n1 r

- |: \- Z I" N% f android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ M5 k f# u' x" h+ s6 ~1 g j

( }% U6 s$ q# G: b

' k% ]! \% y& p- l8 n vshapes= 3 o3 b7 e; H( Z

0 A$ W5 r, u0 f" b' N' H, w; ^

$ ^0 N5 V2 o& {* b- A" q   . T2 f& D" M7 Y: L, S% F& g/ b. o

( X+ x+ [2 m. }/ w) t- X

3 f6 ^- ]5 ~8 K# U' E 下面对这个APP的所有权限进行详解下: , t& B9 t, A3 f

+ P9 t5 a: F, h. r. O: |% D

) ^$ f5 |8 E4 L6 K android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 W/ g% k" B. W; [

3 e; z( x, h4 R. D7 H" R) N- F% R; b

3 G* d$ _* m; b6 B8 J$ e2 F/ D android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 7 @* H& e" z$ X; }2 O) m+ _

( f" G b& {- v5 k- M' D' ]3 s

N- u; F3 E. a3 C& S) Z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 |2 {+ z% ?; Y" }, A Y

. r7 |! z: r/ ]' Z7 `! X6 Y

/ p4 s( M6 Y, g" n: J/ e android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 & |) E2 ^" G9 c; v3 y' R& R

) b0 Q% {, i8 _8 o$ E$ }" {

! X1 z# t3 e5 n( r android.permission.WRITE_SMS:允许应用程序写短信内容 1 o% F: R9 k3 {6 [8 R |& R' W

# y: F4 t7 Q' [! o

- }) X4 p' O) @1 \ android.permission.READ_SMS:允许应用程序读取短信内容 6 b( Y+ D- p+ m& L8 A5 n

0 P/ M5 I3 z1 \# s

6 p% t8 i$ d0 N android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 , N4 |( b6 [' H& X( @* y

0 p) N3 m) D3 ]

/ @; J! E+ z& Y: f, g0 i8 ]# f Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ! b. b" Z" }# `- z

' q" m' L4 I& P5 I% [; w0 [1 b

5 N5 L3 `4 }5 E7 u3 r android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 Q& \" Y2 y# V/ M

1 M: @2 b% d6 o4 @! Z* p* z

: C! f8 a1 V# x' K' t2 o& X( N v android.permission.VIBRATE:允许振动 3 E$ p6 j! x0 Y* a+ `

5 D W0 m9 H" B ?$ ^+ x* o/ V

. n: N$ J0 p2 T1 t+ o1 _) \3 u9 l android.permission.READ_LOGS:允许程序读取系统底层日志 ; P' T. |* d4 n- n& h

( m, i2 `3 |* B7 b2 g

0 U; |0 w! V& j3 A6 i android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 X e- Y, W) a( \

, ?) {. f6 k4 o

7 j% ]- h: E: i: }. s* t   : d1 b% v& R+ ^! u ^

$ O2 g- z0 ?+ ?, r6 r5 v; U( }

! B9 g+ M* e1 }8 F; ~# E 功能信息 ) |: E6 K5 x1 r2 L

/ H# B! N9 u+ k6 X

# n+ r o! i+ E5 O/ E   2 h# |( D8 q3 d* Z7 t

* q" ]+ b" B" u

* M* q+ C) o/ _ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 * f$ ^( F. w2 a( S1 T8 p! w u7 q

+ n: ?9 P; n& ?( Z) k3 ?

' A+ K# u y% ^) I' X2 z( ~ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 # f4 M, O% z/ N5 `0 ]" o+ e( ~% j3 j

. C) c/ d; i, f8 z& X4 E

; `( Z: b3 W6 n1 B; B$ R* Z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ; K% Y9 R, I/ t4 }- ?: A

4 [( c$ }/ P% _7 U. T5 _

: B, c; n/ }* R @ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 T) D6 v; d$ T

3 W$ \$ Q: Z+ e* j; S& S* C- E

/ H8 t# K2 w. I+ B% H! p vshapes= ; q4 o3 K) T( u% b) I

4 s. U/ g$ y# V, L0 c! B

( }3 S/ U0 h4 @' m8 C   $ i$ i1 d! p% B9 K% j- \2 q

8 m( @8 N% Z. n7 g" ^

( @# b" T+ q* k0 |+ T" T 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 0 A, Q7 S2 m" \4 K0 G

* _9 S4 G* H( m4 i# P; o

& x3 D- `8 a# H+ y vshapes= + T l+ }" P5 k

. T7 V- ~6 o; S9 I9 t2 U& F: u

$ W0 P6 l5 I$ Q% t) c   / x" T) L$ p, F

' E" O, E+ E- X$ \& v# m8 s

5 x; q7 c7 c' o) s i, r v4 { lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 . g) ^3 q6 _4 K- w; v

4 I( h' R% ?$ B8 I0 c

8 V) x3 b) e6 J$ _5 T% A6 H! o* s vshapes= ( H) R; s5 L7 q$ {* H+ {, Z

9 p* l* J5 x% }7 G3 y4 q

1 s2 u, ]# q' p& | 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 9 C( \6 q+ B% a, v0 H

$ ^5 L7 R% P, m* u. _6 J* p

. |3 D( v' D1 B; f vshapes= ; f& _0 M6 S# A

% L; K8 F: b9 `# {

2 j5 \; B: D( X& | N+ c   # }5 C2 f) A( W) v! @6 Z% ]

/ Q1 w- T7 t \$ o. X

8 v$ h% P X% L& }) J7 { 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 0 }1 ^* I- j6 F# W

! Z H h5 T5 v5 `4 O: D% e3 v

" `6 n% A& a# `1 ]/ T1 ^; N7 T LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 8 g6 h' ^7 v0 t# F

! |$ Z" Q; Q: ^0 G" X

, I& u) U/ T, P' b: y% { 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 . B# v6 A7 s5 u* u+ P

1 e( F' p/ c s

4 n2 Y* L. V1 T b Y- w" m* b 源的luasocket代码可以参考学习下 9 x- z3 y5 z$ d; a& n1 G

5 b) B% m' Y. l# E, v

# ?2 y& P4 h8 s+ i- A https://github.com/lunarmodules/luasocket ! s$ Y! {" B" r* U7 m$ J

T" A1 w, \ ]

5 e" g# l/ z( K https://github.com/fengye/luasocket 7 y: h3 i" x# m- ^8 W) U% p( @9 R

& n4 O. `9 y! B- q! d M) p" o1 N

: g3 R( t s, p2 D+ _   ) j( j7 u2 q5 K: m [3 H

, W+ n+ G% v& i9 @* z$ m

2 \. j* h. u9 A/ T vshapes= " c( D, S6 K# c# w1 B

* b, k' E3 M- T. V: I$ b

- K; M3 |1 H# S+ H8 Q   ; h' h y4 P# D& X1 ~

# k$ j3 W3 {% f! F1 J: F& r

% |/ u) O) O' `0 t, Q   0 A, l: g# Z0 ~+ _. u

5 Q9 {* T3 k# H

4 r/ B0 }+ j4 _; n- S3 @, w: o 总结 $ X8 r% Q; \7 Y9 S2 e

& B; ~ O% N) a G

! S4 V# m N2 V6 ~2 g7 A% a! w 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 9 d9 l( D0 f* _# i

# G4 _4 V! x" K, ^" n& ~

3 r# l* J4 c; B& V3 \1 k 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 L8 y$ ]- @* x; h& [9 x4 e' B

9 s7 ?5 s$ n6 c

5 l/ {! `1 z5 z$ M: y' i9 K 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; R; i( F2 w; d5 t! O5 [! {

O$ D+ F5 g5 X

/ C6 s0 `7 a6 F) I6 D! M 结束 2 u2 u5 F; j$ o( `8 V0 g1 O; b

# {* B4 t# O6 F, X9 w; X5 Z

/ x! a) s, k. ~, O" h  【推荐阅读】 7 P) K7 {" g0 f. o

8 T7 D5 T% O% ]/ q6 Z5 H: S

3 n& l# X' k/ h1 b, J6 m 对吃鸡APP的分析 ; ^% N" i$ w# A' i: z V T

, U: Z# e" F- W( e9 P. [

2 x' }0 T9 g; b1 D. k0 G 你需要了解的APP安全 , z: n) m# M, `+ ?

* s( x, J3 ?: R( B' I2 e

, A2 [+ k* I% {9 ` I 你需要了解的APP安全 ; Q+ {8 F' g0 h: Q

1 e, n @; @, s! s& ?/ [* h

}% v3 z8 E" {2 `4 h* u   1 s0 }7 n) F1 O

回复

使用道具 举报

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

本版积分规则

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