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

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

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

8 ]2 {$ s' _6 e# s$ x, r 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ' L* Q& w K* }6 O/ [

u! \ o+ f2 d) A* ~9 y

9 K/ b- E0 q9 D# T+ n4 V' F/ ~5 W vshapes= 3 V* A. M% y8 @, B2 A

5 ~! a G) n2 j) P9 b

5 S7 p( ^8 x' \, N$ e* d- Q8 r   # p: n9 u$ K1 o% d& L

8 G* J& G/ _6 U p% _, }6 s* o4 K

! l, w' O/ H* P$ t( I) G5 | 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + G4 r- F3 R9 x8 F

, |( s N2 {$ Q

# W2 r7 q6 r, M$ e   . O1 Z, G. s* U$ n

7 p, u4 b$ c/ [+ B( o

0 v6 b2 C4 i4 r$ H- M 基础信息 8 {4 l' z2 ^3 b

/ B" i4 [( x; }; g' |

$ M: }. o& j+ @$ U5 l; C4 j 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ; r3 X3 x- ?( j* c4 @+ G: l! U

! _+ [: l; p; l2 N% z

1 [2 O. F2 E( M+ o* E vshapes= ' f! \4 p) o8 B

3 t7 a! Q9 u" Q- `

, e, ], G. q" G5 Y2 W+ i   - X. `' q8 A9 v/ N

o$ s: h2 u* E4 h+ b6 b7 {7 q

! g/ J8 E" D2 z% ]( a 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 6 l4 W* h" m4 o* U8 ^" ^

5 N$ M a2 ~! u& @

8 a8 o& c* x# ]5 |! q0 p( v- d- O$ u vshapes= 9 s( ]) I H. G5 R! e' A

! R( m8 W8 X4 r3 u2 u7 U$ ]' e i$ j& v

: c' K8 Q: E; ?: z& b* T   4 V4 S ?: C7 W, D

2 s5 n: u4 n) |4 p( {

I6 M ~" i+ ]3 A; g$ x 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 a# M. Y/ f2 k" \+ K) {1 w. f

. D# M( Q; `# \" X& K

5 ~# F; G% O& |. [" q+ T/ T2 a vshapes= 6 `% L7 x. i, I& P$ \

_/ B4 o+ \' U. K3 C) n- D, a: e

) o% G( v* r5 B9 q6 c0 [, u   8 o: B2 f& z; R4 q% {6 `0 K9 d

% G) r9 c6 S/ }. j6 R

/ z% I- C' D. l: T. z! u 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " s5 s. u9 F2 g3 Z q" f

# f9 q/ R( E" f4 }6 Y& i* f0 x

# H2 H8 C7 t3 W4 h3 k6 A( G$ \ vshapes= : ?& H3 S- k* y% j; J* i

7 Y1 D5 @8 A$ g: G' u

! w! z% m1 a! F   4 u O2 D) X# X+ W6 j/ d% D4 G

" H& V+ v9 i: V f# I! t2 w) h

' E0 N4 m ~" Y+ U( r 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . v* B, R/ M5 e, _- x

! A1 x0 K4 c; n( h8 ^% _( l$ k

' l' {2 X. w, q vshapes= : v0 t7 g4 n# F8 ]2 U

& L9 f" k/ q( d! S1 c7 f3 e/ k6 x

: Z3 p* ^4 M. R) |6 x   ; o0 `6 D, L* F; X% T9 p

+ Y; L/ h7 y/ x' n. ~

% B" w4 W, Y& ~/ G   * Q! k# ~2 C" r" k7 d! ~$ _. {! a$ C

, P( Q+ V5 I9 M* ]- ^" g

2 e, C- @6 N' a2 T% K9 w 签名信息 ! y6 o! K1 U" B' M% v5 M

3 u) ?' i5 l, Q

/ }, o6 l ^1 } 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 s6 L) I5 P" h2 U l

% h- v% @/ v8 a8 C* ? l& k3 {

. Z9 N7 u$ B' B" n 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 2 p2 d L% l* } w$ D- l3 v6 m" u, P( U

6 _/ v. d4 B5 {4 x: P# n5 n

$ q, [% ~" g: ]4 V! O; x androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 4 R5 E( `( h/ C: [7 @5 V% c

. W! S. g/ [0 B1 I3 r2 Z) e# U" |

- u* z% }0 r+ Q$ H% y( W. o, Y4 |# S. H vshapes= " M# ]' Y* \# x7 V& i9 w

- n# J+ h1 _6 s2 t( f

5 `4 r/ h/ n$ B0 J* X! [   & C& y2 `3 Y$ k a/ T2 J

) V) k: Z# k1 B

* x" H+ S7 l: e* `) E android签名的数字证书的一般都是采用 X.509的国际标准。 3 o' v- e/ s' G2 E& m

/ x) u* H! [- A- ?6 V

) |( g; l! H# R! B$ P X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ; [ q/ `" u1 @

) x% r7 o0 Z1 A% }

+ d' O% a. p* L4 }8 N* M# N: Q 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 5 }/ g7 E( `, @7 \

3 p4 H% {5 G3 {

" w# g: x( V# n& K5 ~6 k8 Q+ `" a4 | vshapes= 0 J0 k5 @" \) S. A+ @' x* V

" u3 m4 y3 o3 n- K o

' j$ d* s# L3 A! E% f   * }6 I7 a% |) c/ S O( {1 [; x$ i! B

& B. ]/ j$ d3 ?! W

( u+ c# ~4 _2 R. \, H 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 5 i6 m( S! y$ X, t3 L" G

8 d* z1 ^4 T# J+ g) S; x; \; n- V

/ L3 h" N: R. l' h2 r9 P vshapes= ) A8 O% T# b$ E P, g% V/ c

, Q! q: ]& |1 }$ I3 ]4 ?

6 [1 u/ j& c3 s) |7 e 2 {% N- V, |9 S

+ o* ~+ x6 j. {! Z; Z& P! }* E

0 Z% B! t9 Z2 ^" P5 }   . A$ l& g ], X/ C! s

5 l( ^! a8 s# i Y T7 T4 P

" U+ }4 e% W3 e 权限信息 [" d. e) k( k4 u7 E) H5 g' e

, F% X+ Z1 t4 g1 W

" }; M1 E4 u9 w8 H/ O$ c% i 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ; _+ P) c! z) N7 Q

+ ~+ j; }$ g. y' T S( E

, W% R3 Q7 e( G( i! X1 W' ]6 B android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 & \2 a' u6 B: ?& D; t1 m* H

6 S7 _7 p: s! c5 F2 \

1 y9 u: ]$ n! N vshapes= 1 J* U" ~5 `# @( q% W1 f- _ k1 n

) n* P. W3 T- Y

/ W4 [+ Z, t1 h8 I1 u O* x- J   ) x- a0 f) Q4 D' q

# v" h {* j7 V# B5 L3 ?" u

' I3 ]+ o7 A% L9 r; H% Y) \ 下面对这个APP的所有权限进行详解下: 7 s# V8 M( `0 e c, i8 E

1 Q$ u$ f) G* m; l. S

3 @& x% O; D% _( r# A" h6 g android.permission.INTERNET :访问网络连接可能产生GPRS流量 , U, |, l5 M/ J3 @% i! B

! `+ q" @) l) M( C# d

( `5 {6 u! E4 a" T android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 " y( K7 Q3 f) ^5 B ?* q c

+ \8 o/ _/ T( u5 G8 L2 Q

. x4 O1 S* \3 ~6 ] android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " i5 { G* {6 ~' m

$ `7 s/ y; o7 ~* h% d! M

" b2 N) X& e5 I0 L* l A android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 0 M" i" \6 \$ g% w& Q) R

) V# }4 o8 U! Q: X

* r6 p# {' |9 A' F4 J+ {, n android.permission.WRITE_SMS:允许应用程序写短信内容 ( u8 Z, W8 U2 b/ s* {

$ r: `$ A$ U8 {- o2 m* g

( y- i9 N% @8 E1 z7 L android.permission.READ_SMS:允许应用程序读取短信内容 5 G; y0 j2 c: p; N+ H

0 t% f6 T1 P( y1 w" v

3 B9 m* ^6 ]0 b. E android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 " q4 Q: P7 z2 o5 _6 c% y5 k+ q5 c: W

, o9 b$ a4 H2 _& }8 ~

! E' H& a3 b2 b- J8 O5 f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 V, P# B" [0 Q

9 X: ~9 u! Y* L' E5 r

2 Z2 o1 Q" t& I6 h7 `8 r android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , O2 m8 J1 F: u2 O4 B. ?

/ K* l) v0 S5 b, q8 F

8 W6 m% P. W% [" s android.permission.VIBRATE:允许振动 1 X v$ _* j1 I2 B/ T# x) B% \

, C4 G$ w: Z- F; {" h2 @0 v

[; b6 w$ Z/ e& P* H& X7 U6 @ android.permission.READ_LOGS:允许程序读取系统底层日志 / y/ q1 J+ S: h/ Q9 f, u6 M: J. C

$ l8 |7 X9 a b' t# y9 D# V

7 C5 i) E2 x5 | android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( x- a$ O j4 c/ D: m

0 Z8 \! E' q3 d; J7 ?4 E, t6 b' }$ F9 F

3 u* g, G8 b- z: M+ F5 W9 w7 @" q   , y! F9 u& S$ X; e$ Y b

# g! J6 m* T' j

6 [- m, w- L/ H. i 功能信息 ; i: s& @9 r& i3 `( b1 A @9 m

. l2 i1 v7 i/ n$ Y* d6 ~: H+ K$ L

( m$ _0 Q1 ]) Y& k0 M3 R: I   7 }2 F' o& s2 H8 _; d# O3 Z

" A" C5 @: |. k6 \& v

% z/ [7 H6 l2 s 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 2 M2 u+ m* ?+ \; h

B5 K* i" l, O3 ?0 | D0 J

$ @% N+ A+ l8 w4 z8 i Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 / ^2 j( y# m3 m; D

+ i) Q+ d- v" g" Y- a

( N g& V0 ^! h# ~+ y& e 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ! m6 H+ s+ x( m

3 I- Y0 ?+ L6 ~- ^! i( w' G

E1 I) h. n0 v6 W# l2 d 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 t* J {& W! z o7 E

- t2 S: H3 }' S; Y

$ X2 E7 j' \* m& c: f5 i vshapes= 8 q; x1 T# P$ d1 N

; I" A2 W' T3 z! ]9 d1 z; b

! M4 k" l+ G% ~& V `) ]' ^# `* r   0 t$ R4 @3 S6 x, _2 ]( z4 q$ q

/ ~; y, ?, _& Y. i

. j0 T3 s: H, o- ?& |$ f 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 e; v0 j5 ~$ x- I# p$ M

" O7 j4 n( } {- ~

5 h( k; n- [3 \0 f vshapes= 5 g7 F2 O5 U s' Q& ]# K

0 x( }# o4 ?" v+ F' S$ w: }

& S; @. `- b. v   / ?, u: F) S. q' k5 V

- o+ a6 V- T+ L

% H& }! B& Q7 K' b, Y# L lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ! d" V F+ m q% c

5 a y/ Z3 W- m6 [* L' r4 O- q$ `9 C8 U

$ v( K- f4 l$ `. F vshapes= , e. g5 E/ b8 o- v9 x2 q* W

" W- [# m; t- I# Z, H) n" h

0 D- Z9 {, z0 I; w 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 V0 a3 y& q; }0 G

; B" X1 c0 i! W5 s7 Z6 _" x

: t" G& g! _! i vshapes= $ W: Y* f5 W% S

7 v5 m% Y5 O, T, S

$ b' D6 j+ x6 U- X; G: K) |$ i3 z d8 j   ! f3 G/ y: @ d: \4 h# V& I

; s- l1 v+ N) s; Q! {: Z. B

' \ t! ` b& N" \! C' r 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 . e* Y+ p% Z/ M; G. J

8 Z# O" m/ x9 P O9 O9 W: n1 i

+ I0 U, p9 ?# H$ C; n% ` LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 h" s, H* V Z" U' A3 t$ G

& t8 T, e0 E& _! x

% V' h/ k/ D3 V/ k% }8 y 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 5 t- n$ a4 x/ p. `& N3 t6 D6 Z" s9 a

3 Y4 j: [* S; e# U& G

7 p7 Z- c: l3 s 源的luasocket代码可以参考学习下 8 K+ i/ M! H" c9 n, V' B$ _, D9 U: |

: u3 Y- }1 i- g! F1 ?, w

& e6 D7 `; f* N: i$ Z( E% y! P _ https://github.com/lunarmodules/luasocket 2 N1 G+ R/ I: E% v

2 |( Q( I) g+ T( M9 f5 j

& f: n: V) j) s4 L5 D https://github.com/fengye/luasocket ! i# f& W) N- o3 |9 h3 a

8 S3 H( X+ i- J" D# b- m& e

@$ _1 _' h. E0 w+ O z1 e4 `' j7 p   3 Q' k% R/ I/ A: H1 Q' L6 u! D

/ u' d9 z# J; \

! c3 W9 |& S P' [+ d# ` \ vshapes= 0 q+ C; C' Y9 _$ ^7 N" n; \) q, [6 D

# i7 o: V; Y5 Y8 C! y

2 c* d8 r: i5 T! x, P   ' f! e: T7 x+ g2 u

; l, y# R2 u0 u q

0 ?7 d9 i) ^( v8 }. N' t   ) S! n* H' e! d6 Z: `& G+ f

, O% R2 m6 Y# R3 [

# u0 |' L, Q+ n 总结 3 N/ E Q9 S$ V: I5 T( B

. O1 a% y/ _6 A0 V7 |* Z# r1 `8 L

/ ]4 _2 B- f2 w" W 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 9 e5 I1 V# \4 R K: x6 ~

% \# C$ X+ C( R* {% O

& ]4 ~+ j, E2 f7 Z" O. H 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * \3 R7 Q2 s) j

$ i s1 F. `8 L$ G- I0 n$ N- s

4 W# V3 Y# Z9 a* `: Y& l 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; j5 f; {' _3 u

- s2 K. b/ ?7 G/ Z& ~

3 R1 ~! e) Q1 L% e! j, X0 ?4 Q( | 结束 # W/ U4 i0 G6 g; ~3 Z5 f7 f6 o2 Y: C

+ t, H' A- G9 k/ q( X$ S

8 A: B$ {. l/ }' h# ?7 ]' ?6 O, L: U  【推荐阅读】 3 e+ ?+ L* i" a

7 S. O! h' ^) e4 `- k/ y

3 ^8 H; U0 p& E) T Q3 i 对吃鸡APP的分析 ! U& c/ y3 [; v' U' L% f. d

- x6 ~; B2 r: t+ t; S

/ w) Y/ |3 R, } 你需要了解的APP安全 4 k9 G. U8 ~0 ] {

8 F! y& C# d2 v( m3 g- m; ]! |

7 J6 N9 i1 B+ w3 | 你需要了解的APP安全 . R- N6 I1 H$ }8 _; }' C$ d

9 q/ ^9 A7 L( r8 R. N7 g

- D! e( Q( [ Y- }   / N# N+ N, ^$ `! S9 Z

回复

使用道具 举报

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

本版积分规则

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