中国网络渗透测试联盟

标题: 转载对小绵羊的轰炸APP逆向分析 [打印本页]

作者: admin    时间: 2022-7-8 21:25
标题: 转载对小绵羊的轰炸APP逆向分析

% a5 q6 c: G4 a8 O8 u, K! n$ x 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ; V* @, Q: ]5 F) x+ b2 o" v

! P4 V- ]0 _$ u* Y9 l

2 a" W/ b1 {0 Q: } vshapes= 7 p- O3 O1 w6 e/ q( c

/ ? j# \3 @3 X) d% z- p

8 y8 Z% N% l& v. K1 }   9 h2 F. ~+ b) Y+ k" T" U, y, v

9 [5 p2 g3 g4 Z" {' l) d* `

( @9 f# \* Z& i# E/ X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' P( i. x" s% t; A$ U3 d

0 E* b* @ ~6 {

# Q1 @! s& K1 r7 L   - ], n: e) q* C" N0 M4 w

6 s3 ?8 _+ ~6 u$ f) V% G, i

# I: i1 ~# V* ?1 m 基础信息 ' `6 R# ]' R! q* v+ @- m# \

! S* T' _/ l) u1 I7 D5 ^4 R: N

. |8 o% ]- U3 }& W: s% Q5 | 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % h/ Y# t2 n) N0 E: \, C

n5 k' s7 @5 X! U- b7 p6 e

: ~" S, p+ n! ?0 P vshapes= ! j$ b: A- F5 D& U2 d

5 I+ { F, C+ ?2 q+ e) [ j$ i

2 x# H+ C8 @8 C9 W( ]6 i   - X, Q; [# N; y7 z9 J( n1 L( E

: u0 q+ X j' S" ?1 h) P

5 W E3 P2 Z1 _& \( J: X& J- O 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 3 l# D7 n- O, N( v) L6 ^

) C% y1 i% I# K. T: z# L

: n) B5 d3 ]! e0 Z6 w6 Q vshapes= & P' e, i2 ]# [' j; a4 I& y( s+ A

q* ?; ?+ O7 o8 h

% D5 r! U- a& R* F- C: u& _   ! L- p% ^9 k5 b8 }6 J' T5 K$ k/ H2 h

0 z! l. ]4 e9 d# T/ l' n q- h. o

) ~8 ?: d3 ~* |* A4 R$ f: ` 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , }6 A. U- c7 l& k

! n/ [7 }9 P) x, ~; {

7 \9 O' d9 _2 d7 j2 o/ J' u) S% P0 M vshapes= 6 l- }0 |: v6 b4 E A; a

" f' |/ @8 z: c7 F6 z5 k

' K8 R" M v* R! f, ~" K3 p& f8 P   ( {9 U7 X0 E' S( ~1 W6 p" l M

1 v0 Z* R8 n! c! E" f$ U& w# c& g

4 A+ I) s, K) V 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " j) o9 S1 _8 @2 y

+ P. \1 s, \. r' Z7 {7 s

' z2 C3 w. F, V2 V( T; _ vshapes= , m. {6 O0 a* h: N! F

9 t- _0 Y/ m- |# n8 U2 k& y6 ~

n K1 O8 p4 i/ s' t0 A   4 ^" V8 ]. G* z% c1 y G: X+ @

8 b! X5 v5 l* o+ x/ c/ w+ r

- o- w* q, N! C+ R+ c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 : V( Q0 @$ Z; N* a

- X7 A( g* Z( R

! e5 X/ ^+ P. u/ }% o vshapes= 2 ~$ }5 }5 o9 c7 C9 J7 V+ Z

; F# U# N. q7 F+ ]+ I8 L0 R

5 \, J U) m* @   + [+ B: j, L8 J/ M3 e. q; j, ^& A

% y6 ^7 ^; M. g% M5 S

4 g, ]* n" M! O* o5 V# R2 z   # i% ]1 w& r3 g+ _

+ l/ B0 M. O: [$ n! W/ t+ U

}, k1 p, b% ^( ? 签名信息 ! Z. w. Q) Z8 r8 R. t

. ]; ]5 C7 k; Z! k- t

# z" q) Z7 t' s# W& p. R! V 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 4 x* h" C a4 m7 f; g

% o9 A" b7 C7 G4 Y; n) q

9 \! |% W$ q! G, n4 B9 u 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 % r- W' s! ] J' C0 A* n/ u ~

1 F H/ C8 R9 x9 d

0 {: H8 z0 P8 ^) |1 }2 P* D androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 " H8 i) ~# R0 R$ C' v

3 G/ V, }4 j- s/ k- h) j

1 V& k ^/ |# o7 _( G# b7 L( l vshapes= % i' Q4 J8 t* u

: R: P& @5 o2 M7 ]+ V r8 S1 |

& m( N" K5 [/ y   ! b& ? E, Y; z, j

3 m9 k! \: W" J2 Q v& U% |; F

7 ~3 n& A; x# \ v2 ] android签名的数字证书的一般都是采用 X.509的国际标准。 1 a/ {1 V. ]5 P) a6 N

8 }, o& ?( G' l7 e+ T

" R" C" q, @* H' h" M l/ v( B X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 w" f6 |( `2 x9 |: R/ @5 Y

. v; v2 A* T9 z' Y+ g- H& l

" {* x1 t6 b* m 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 x5 f* s0 ?. C1 _# l6 f

( a+ E1 L. Q A- m1 f

6 q+ K" c* l1 V vshapes= $ u( y% b: k w

& n% R- F: H( h3 }' y8 x

2 C7 ?5 u9 W5 W4 {   + v G c. a; t& B6 I Q& d

F# L9 v8 A; @# i: s1 U

+ I) p& P, w9 m. e# v; j 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 " q: n/ ]2 C; F" P# \% B5 J/ y' z+ W

+ h! V) `9 U. a3 V1 H/ H) d g

3 ~4 Q" u& C, R6 ~) I vshapes= " ?3 z+ l' n; O L4 I' y; }1 h

, r$ d' C( x/ x4 f

?: \5 r1 B+ h$ P 1 W$ r& z9 |0 F. v/ f, k" C2 q

! v b1 m7 d2 M7 z. k

6 v4 F3 p: Q" m4 Z' ]8 n   % X/ g2 x. \7 Z2 ?' ]& \

! P# I% ~- c* |! C

* O+ _( t# k1 X& j* ]1 y 权限信息 4 a" y- D# d7 e6 `# g

" L- w$ Q- E. {' ^* a6 T# {) L/ b

0 H5 a5 `# L2 W. ]! `. S 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) - q) o+ e/ T6 H8 ~" m3 I8 d

/ S) ^& W% {! @! k/ `; a

( _7 N9 p4 U, q0 E5 C3 @) Y7 w# U' Y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : k. l7 m$ F$ i' V% c2 e4 Q

" b) T ]. l1 V) z" O( a

, T/ ]4 V; _. A) I* }3 _ vshapes= ( v! w* t$ c9 t9 a) u

0 J& m7 _- X: \+ U$ J- Y! W

9 q$ h+ Z4 W0 x" h) D4 x) n   ! [! T! E/ B+ O; A& @8 d2 v1 W

6 y( m& C! \0 `4 \7 \; r. ~+ |! @

8 z/ x6 \/ g8 o9 ]. S5 k 下面对这个APP的所有权限进行详解下: 7 I+ X/ s; o9 r* B9 z9 g5 b0 c% Z

6 \8 a! I6 J3 d& u1 V

8 A. f6 I( F6 {0 r& V android.permission.INTERNET :访问网络连接可能产生GPRS流量 ( ~0 F! v- M D' O% K& e5 y# s% D

# b- b: u% b0 e; z: E E

! o+ B6 H* N( G5 b android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 - y2 j3 q+ e" ]; `

1 L: N" W) ~( N8 `: t. ?" u

7 F) m# S ~3 {# ]: j android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " Z+ N( W# X. F5 e& N

' Q! o7 I. A9 K' J

6 o: j: A- u3 V# f& p android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 , V9 \( J! E, ~/ d

( I2 H0 X& i0 k) w! r$ G9 n. x

0 v9 H4 y, }( r' H" R# r7 l android.permission.WRITE_SMS:允许应用程序写短信内容 5 @+ d7 i1 B+ _4 H! p# D5 x

4 K4 }, G: Z V0 q# @* F

9 g' ~# \) n4 G6 T( v android.permission.READ_SMS:允许应用程序读取短信内容 9 @, ?' I- E7 b9 ?( c$ Z) S. @

. f5 S# |& r+ l/ n0 e: Z, ]

8 v; k- b5 [ ?! W. I! N, a) D android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 M5 A) e l. L/ ~; ]2 }$ u: ]0 o

4 \( |# E1 N9 f; S

0 M0 h" {& z+ i, U/ k; i2 s android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ' y" ~* B' f5 B C) z8 F5 R

9 m8 n. b2 d2 N; w

- y/ c7 s/ K8 V4 ^: V android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 2 s ?; ?4 _) T* S

3 v5 g& |% j! p0 Q. F q

/ @, d C; z3 H, c android.permission.VIBRATE:允许振动 7 v* l7 v" _8 {( j/ W

- `, X/ L4 e0 b. k8 Q

! @. g* o" u' V2 S# L5 K+ F" N0 r9 d android.permission.READ_LOGS:允许程序读取系统底层日志 1 H9 C& C- ~1 t: L

0 [; ?- Q( r) b1 p; Z6 \! T/ j$ C

8 G2 X8 p- g$ ^5 B. y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 V: q# N( D% m8 F. M

2 }8 j+ `8 Y: ]% Q. C1 V( d

2 X7 y+ @1 e, e( V3 P   0 b2 ?9 c9 }" V& m# W

+ [/ G' Q6 j0 i! r. d+ M6 c0 ^

; r# t- m# x" a8 _- n- c0 } 功能信息 " k2 e0 ?# l1 ~$ r+ c

% Y9 }, e6 W6 `) V

' F8 {0 P. C; x/ L5 u   0 w6 r. E" V7 H% C% Z

2 t6 o$ x/ D. g* U% p4 [6 }$ n3 m

, w2 r, F/ z" Y 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ; t( t, A# @# k+ P

+ _6 Q6 @8 d; {# J; t

; h g$ l# j7 p& C Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 9 u& x1 ^" c; f- Y% E

+ ^) u. d( D% r, t1 I) r, |

- H' { ]* T0 \0 h6 q# o) O 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 , `* V/ S- B k. m. K

. g" y" U$ N" D

. z/ T, N$ W" [, f 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; }- F) s4 ]- ^2 p7 w

; ?7 T; N' h& }' \

0 M" }$ P5 l. I3 T5 M- V vshapes= , k/ ]' |6 v0 _, h) g& {! f' Q

* M/ u: e9 s0 Z" B7 M! g

6 ~; A8 z, d( l' g' A- R   $ s* P l" G$ E& ~. M: y9 v- E1 M

; d7 _* N+ p) E

" m2 x( i( j5 `9 h2 N 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / l7 Q6 Y# y! v q

" |" l; Y3 A( P; O: i2 V6 [

1 t/ j5 c0 d. n$ [3 [; Y vshapes= * n- v# |4 f/ d2 r2 [, R

' Q- c0 M" T' O9 x

( d/ _+ G! }3 ^( W. K6 M   ' m' }5 Q9 H7 N

. `6 `/ b/ \# t/ ~/ i7 L

. F2 ]. x& H8 e2 i% H lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 2 p3 @7 ^+ M: [7 p* Y3 D

/ n H1 c* L8 }: h( \7 k! T" |7 N" s

: G: _, p H% c' O+ C vshapes= . @7 \) K) t# {4 T4 E& O

8 p% E }* n8 _

6 Y: b6 w+ _5 ` @6 L 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 / l) N- Q+ L9 W& s. m

! L/ P$ F% e9 F$ Y/ c

6 Z1 ]3 E/ \# T& f5 R vshapes= ( P) p2 n/ ]8 W% U2 D" [! x0 \4 q. z/ d

6 W% ]4 W8 y; \9 b1 k. O

- w; H M9 ]% B+ {8 ?   h2 H( P4 ` G8 @- }

8 M# B. o/ x4 j/ _ |

' x2 U, F+ s: B: X3 n( H. i E2 m 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # b9 Y: o: y/ t2 i7 M5 v

+ m# a( F- ~; H1 x0 A: O

$ W! c4 o0 w/ d+ X' Q2 q LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # }- e+ j; T0 `

6 G7 D( \* N8 j; a a

- Q2 D7 \" }7 H6 ?& a 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : Q l. ]5 K/ }) Z+ e' L r5 z

/ r6 {0 }8 I. m- Q1 u8 d! l

! e1 R* _( @$ O8 t) Y! X7 f 源的luasocket代码可以参考学习下 6 T+ o' ^) S% N, r/ v

1 U$ ]2 h# H& @, R

7 b/ ~4 h3 C) K5 ?" ] https://github.com/lunarmodules/luasocket # b u$ q" i- X$ o" [8 T p

& |3 m. q. v& X2 D' h$ ?

+ F: P, R6 W' L+ i https://github.com/fengye/luasocket $ ?% b& s8 W" e/ w, A) S) I

5 b. o( U M- Y. Z# |' m' k

Z% Q: o5 B/ O4 {% r   0 s2 g7 Q2 S- M$ D8 \% U

; A3 p* R8 {4 [# h

K" ]! i& Y, c1 ~+ z9 n2 s vshapes= * D, q8 p& ?3 x `( b3 Q

, ^; C* s1 C8 P1 @, U4 Z/ {

, K ^4 P4 |' S; M; j( F   ; o6 L9 P" H* p$ q4 ]( D4 `

, r$ x Y+ [9 b/ A* x0 ^- C7 o7 b

, p$ p# |1 \ g. m   j/ i9 O9 d, \! H; x; Q

5 b& u4 F5 X! F# L; U! k

8 k5 L1 y& `% c5 h9 {; |; v$ K, E 总结 & d+ t0 A9 Q+ [7 S( ?* t7 C. x

& X) A8 u0 M$ }" Y, Q/ K0 H/ R) e

! R, C$ `' }) T/ A& _# S 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 / I2 f) [& K( _$ g3 P7 d8 {6 ?$ R8 \

0 E* J, h& M$ Q+ D7 V

D* N; `9 s. {1 {, M5 j0 e 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 w5 S1 r; S' k$ z, K: S

3 v1 ^ I+ r) J3 m% t

( j$ r. {. q: x# ~ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 * i; H* i8 Q l5 l5 p0 ^6 y

) T3 }6 y3 C- k9 h0 j/ t

- X* f! X1 D& ^* N& B" R3 b 结束 5 ^. p& n/ Y1 l& `% P4 x

1 x) Z. ~4 F# ?% }: J' U! A

: z* N% f( E: T4 {  【推荐阅读】 ; n4 F8 C3 K& q2 n( G

& O% o# V1 w- b; W

$ z1 f ~3 }3 Y2 v4 } 对吃鸡APP的分析 & h" a# @0 B# L# J. B: f S

! q4 \1 J: W- a9 }

9 b' U0 N, [+ f 你需要了解的APP安全 , l6 L' h, {9 Y' ~$ C

( f P1 u$ E I6 t

) |" k, Y9 R( e 你需要了解的APP安全 % N+ B6 b3 @! k: n" }

- d2 I$ L' j" S; G3 `5 W

& p* E+ D. H4 m9 V   7 b$ x6 b8 A3 p* z: F






欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2