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

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

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

- H5 J9 }& B7 `8 r8 Z5 Y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 j# l. x/ H; A0 u' W

& p# E8 B5 ^ P& C$ S

- B4 ]( s( ~7 N5 H vshapes= i. C$ l! M+ C

+ u. a: S5 R/ {4 A

5 O9 B* f; L- M7 e$ ]( J   5 w8 X2 [( ?5 b4 d# _) e* I& Z) | @

9 d. S/ V7 {7 l" J7 L" A

- t8 `$ w# {: R D) ~ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 3 T1 @5 y; U1 b

% [6 p% f5 x7 i' B% N4 M

m. q8 `% v( S* g$ f. z. X3 a" \   + u% B0 Z# Y/ \& [! n

6 \6 |+ i# x* @3 J' e" e- b* V3 r

4 ^ E8 W6 O- a7 V% l' y 基础信息 8 R; P: `3 b1 U6 i+ S* ]% @

8 C/ |" f: G7 V& s# P

% ?. i7 S( \* e9 }) R% V 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 " l7 `% s/ q0 ~# i y& I9 K

* X. F( f. }; c; o% T

0 d* e( r" n) s1 y& c vshapes= 7 d: k4 e$ Z* o3 m/ S

3 m; W% f7 o- r* y2 h; R! S

9 b3 U, p1 m8 p5 Q& g8 L5 f# E   4 [. u) C) \/ v. O% }; G X4 L {

) \- H2 p' o" Z

3 A: ]& E2 x" M! w: m+ r j 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ Z4 ^5 x9 t3 h" J

6 Z4 @6 Y0 C% I( |1 Y

1 M7 S6 _; @+ Z2 `$ y) f vshapes= / Z9 @, Q/ [" _0 F) E/ ?4 i

* J! D% ]( j; ?: Y( _8 [: ]

, F5 I8 |( L2 {% a   ' E7 X) I2 r3 p

% N1 [* E1 N) u; B# i

4 ]: J( H2 ^9 S1 C- G* u/ u 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 r+ @: X; ?; l( P$ T4 d7 S0 E5 D* F

: R% e4 I2 D, p2 f( Z

' X0 |6 ]. _* p% k; u vshapes= . t' V% T a+ F; @% U2 e

' m6 Q# u% G4 I

( F9 W4 Y( y* n( x1 ~8 X   6 b8 H; U' R! y5 h9 F" E

5 @$ ?' R7 q8 O5 `0 p/ @5 a

5 ?( U5 f7 D" V; U* e( E! N0 G 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 & Y' c3 S6 A* u/ Q8 r; r

# n' ~7 L( @' i; D: c) Z

0 _7 m ~( o4 X$ N7 L& X4 P3 h, I/ z vshapes= - Z# d3 D0 `+ X% Z; e. X7 L- L6 s, F

! ^) {! K9 x( H% d" i

8 ^% N4 |/ S1 ? J5 I3 z. l$ t: I   * }3 Q4 C. C, W0 b9 k

1 V8 S' W5 B- B2 _8 Z! V

# u: T" V3 a. n( @7 ?9 D+ u 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 % m* ~& |" G6 T0 J9 R! [$ z3 U2 Y

Y2 v. h0 H3 T4 e

0 @/ G" v m! ?9 k6 R vshapes= 6 p% ], T) q7 h

; _/ Y" w2 Z. U8 @, u( c

8 ]8 [# R* A5 x9 O& v$ _   ) T4 _# b# Q7 l% {: `

* h; \9 f: g, ]3 c' X

2 j5 @2 u% I* \( t( ]7 a' F   # w4 q i, K7 W

3 i0 O% g( F) C+ W/ a

- [0 P W% L5 n1 o 签名信息 ) ]* Y/ Y) r& ?* S% D% T* D

; U5 ?; \; F+ e) ~2 v/ z

9 Z `! \9 ^% H8 A* q+ W1 M1 f 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 5 t$ j! j/ g1 y+ y; T6 U% F

% U+ b* C* K# x/ m' g0 k: \9 R

1 V3 ~0 [% h7 d8 f 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 `. L# \( c2 M* R9 P% X

% R, n# L8 J% n+ D

; k) r4 d' y( S androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 D" ?6 P( ]& N) i2 ?0 o

- S4 ?3 Q( r5 P( j9 {% ]

% i* ~% k! r. F2 o; x! @ vshapes= / V1 W2 k2 I. i* y) I6 v

- {( L) z/ }& X. A" u

: m, T% ?) I) Q( l   1 W' P7 j. J8 D+ b; o0 x

0 D% k/ _" ^& {- j& W. `' F: J, Z

6 t" V1 S: V) o9 f" h$ w, _; {( D android签名的数字证书的一般都是采用 X.509的国际标准。 9 V- x) [2 b4 m7 q5 f4 f1 L7 N5 N

4 Q, z2 c% q, V; j9 W! A+ C9 C

0 g0 n& g/ H/ f6 @ n$ E X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 7 o% c5 @5 J1 F( D7 q

t8 ]; J' u* @' S, t( x, {. m$ n

9 V/ y+ ^' k2 Z; A1 r8 @9 C M1 h 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & S$ d& ~. N; ~. M

, M% \- \$ M9 I4 g

+ E$ g* f2 F* N7 @ vshapes= 6 g& P* q( L; A8 X, _& X7 w

2 T% @/ Y9 F$ v0 W9 ?9 y# E( y

) f: D, s8 g& O' C& b   3 p }2 e' i4 L% b

9 y8 f: ]6 D( I" o: N) o8 ]! j, Q6 L

7 z* }7 l: n+ m5 c" n3 D7 O 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( s0 q' Y2 Z- P! k

% z+ l: j# A; [7 T: J

0 z ?/ a8 O. n7 Q' m vshapes= ) y- k$ e1 t: |% c2 ~1 @

" f- Y+ n: q8 n- \. \, T- q

7 t1 Y# d& E; E, k7 c8 T 8 L. [, u3 q+ x* [5 l

% h* q# `: G- ^! i& V/ s

! @. |9 T( l: d- u; g   4 f8 o' @. ~. P

5 f/ ~2 H+ e t

4 Y' ~# w9 m N. A% w1 h3 x5 Z8 ~ 权限信息 ' w* P; [7 z9 } e) L8 A

, ^2 ?5 f( g4 o$ s h k4 K7 ~

6 S0 {. O5 I1 A" t* u3 L 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 N. A: t' m2 y4 l+ G

8 t* l0 r I' v0 u, Z3 B8 {8 U

% G- g1 _" c; h$ t: }- L android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 # n& x* L8 h8 e0 Z; U

9 u/ a' i. x# \: ? ~5 \, V

- t M, [+ `, w2 C" @* `# c vshapes= 8 { H+ w+ d0 Z X

; y, F6 O: m' q. \- A. r: B

5 F/ m4 U: S6 e5 p0 d   ( U, k+ L% J4 b: @4 ?8 H1 F

* ~; ^- w/ r. K* N9 f

, ^+ w5 w" q( [1 O% r 下面对这个APP的所有权限进行详解下: 7 I8 W' _) T* w: X+ H9 d( b

z4 n$ ?8 y9 }( L

6 f$ ^; M x4 ?. e android.permission.INTERNET :访问网络连接可能产生GPRS流量 5 B$ p& I6 ?. K

3 ]$ g3 L% U0 z& n

( r i8 A1 v$ W android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 % c# q+ S c5 `. ?

- }% D2 F& j! n' o I, x1 n0 ?& W; p: k* t

9 r* D' Q- k6 y& r, i8 p$ y4 a$ w4 s- l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 7 u. R" R: H' A3 X

' U! t; G" d: M

4 \4 E3 N; B3 ]0 y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 Y% u; q, r) w& x

8 D* z. {. T1 M* ]/ N# D4 W

5 \5 K y8 a* n0 b3 z: i/ G* t android.permission.WRITE_SMS:允许应用程序写短信内容 ( d- J0 Y. ], }7 _ w5 v

9 o- n" G* I1 I0 T+ l7 O

8 r# _1 G* A" E# j* t% O3 u android.permission.READ_SMS:允许应用程序读取短信内容 7 L5 B" x, J. t0 Y# ~5 t1 Z. o/ S

' T0 P* h6 S u u

" K9 X: W$ ?: q8 U* v0 [2 a android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . e5 y* W* c) I3 ^& B

% f- g/ r2 M5 s+ B

( w5 t+ L+ B' b a1 f9 F# f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ) ]0 P# h& i6 X, r; R" t

4 o+ W& E2 |7 D @" t

, e8 t2 D! P5 e1 P. x2 z6 p android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 - `" \% J3 n) {# A4 Q) _' {

: M* b# ]9 e% Q9 _

3 S+ m5 L) @6 Z6 K- K2 U* R. C android.permission.VIBRATE:允许振动 9 E8 A% K/ M) W" x

$ m+ \2 M$ I5 A% @$ s3 m1 i

) ~- n. q, ? }, `% v r0 E0 B android.permission.READ_LOGS:允许程序读取系统底层日志 ; f' g: z( }3 v( ~4 T4 D6 o

+ h$ Y( C6 D# m5 g+ f4 R

& s+ A2 f2 c2 o k android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - g- b g2 @) n1 X; K

- d2 _9 s2 F M" k$ P

0 O! \2 N7 [5 b8 ?) \; C/ t   4 o& I+ T! s# w3 D6 o4 s

9 K0 K q& H& @, a* I3 N

" u" ]; }3 I/ B% E$ U# m 功能信息 ; w$ E \0 r- b- X3 ~( N; m3 f

4 x1 }! _ b: a% g

, q: H$ G9 I6 H5 O& u% y8 O   . t4 U: i6 l+ ^3 L6 B! t) G4 a

, R! G( B$ r) L# L. ?& V; I

- n* b! T* T1 {! K 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 5 o! ^3 r7 V% L% A$ w

3 ^8 }! i: N8 i$ {

+ O* @. d7 T1 W Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 u3 V2 y9 R: V2 Z

4 {( y. L# z7 _/ K1 H8 J

1 N5 w5 D/ U! o) @4 z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 2 y3 J0 b M9 Q k

$ X5 _5 x3 b8 i4 K# F

4 A% J8 f8 |% w& V/ Y 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 `) P$ t' Z+ \ F

6 [. ~# K5 b* Y4 e- D5 }

! p1 I( W+ H& e, n& d6 n2 Y9 W vshapes= - e+ h. O$ i! b" F9 ~

' z: d& t* K ?, Y% V/ [9 T

l6 W& w/ g0 j! m   4 E0 P, P' ~* s3 H) ?4 h+ ^9 F

P) r' p/ x9 d5 c+ O' ~

$ Z T+ e6 b* m4 ?' ~ | 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 " ]1 _( P9 x* X/ O6 G

0 a0 @3 S. `4 |6 F6 y: O

7 n: e2 M; a# o7 o+ f3 z: Z vshapes= $ }( J9 I7 i4 j/ G

8 i0 ^6 G x* n7 ~

: A" C& w+ s6 y8 K' [/ X   9 x+ E, M8 f% Y( R3 `& s- t

* H3 b$ w6 G+ Z p# S% x2 r

- b& P: z" d( B0 x9 N lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ( x. h( `3 ]5 r

3 |' E9 G2 U2 E& i5 j

8 h4 m1 ?% g+ H vshapes= ' ^5 N, O7 ?" @9 s+ L6 W

: F0 P1 a/ k* ~2 P

& k% D" D+ e0 _+ D: F 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 * y' R1 y# l* }- u8 t

* c8 }7 S3 [! [* n0 Z- v; H Y

% M6 F; u. s2 G& I! w" k vshapes= ' ?. |. W1 f& C1 |6 Z$ `9 M

8 r- u+ L8 z3 m8 I n7 U2 D

4 J, J- @) l3 ]5 V- ~   # S5 V( N+ F, \' ]

5 u7 @4 \3 p& j, s2 O

9 U% i- Q6 `) y+ ]% A 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 7 G( H* ]6 i/ Z$ |4 ^# m

/ R% |6 g" D5 X' o7 w# |

; A6 P' v1 ] Y' k$ P" A LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 0 T0 {" Y+ G0 E6 G

# o0 w. } A% j) J0 L' j9 D

! g. `% S0 M& ~ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ) G, @0 j# g, w; ?

1 O" E! n! @6 j: U( h3 r

8 O5 Q+ \1 b/ E7 r; d 源的luasocket代码可以参考学习下 " @( d4 O9 w" H% u: k" O" H) B# d' q

2 O b! J* c0 d- p: |& e7 H

9 Q, w. m, u; @ c https://github.com/lunarmodules/luasocket 9 V, K K; u1 a) U$ L* Z/ k3 |2 u

# s a2 Z3 K8 G& T* D5 K$ u

6 K/ h% b' c8 I! ?3 ]/ L8 T https://github.com/fengye/luasocket g |! c1 Z" u* a4 \4 y4 ^* @ C

7 s% e% d% R) s( Q

" B9 o/ ~: C' Q   $ z) ?; y# ]1 u; w$ a

2 l: |! z; C1 H# I* V/ t

0 Q n6 r1 [0 z& e9 w$ @ vshapes= % b# d5 j& B6 I* ^! B6 v

* d8 ]0 ]+ S0 f% l, w

3 [) v, x0 ^3 k4 m8 b* e   1 [# H- K. ?6 d

6 F* I0 `& J. Z8 Q7 U

3 }$ {3 Y# Z& v( I7 e& A+ e& V   6 {2 v a7 f* q1 f7 W" k0 K6 @

9 b1 }5 [( r r3 V1 ]* S

- V" t6 u3 e) g b D/ a 总结 / V6 R$ h/ n8 h! d7 C

6 p) ^3 R1 l/ v4 } B; P

; ?" k Z; z1 C- i! n1 N D7 ~2 ~ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 {9 C) I. J2 g' z- e9 |0 \* }' J' _

; \1 `) V! c1 k

; b5 J0 j! T; U7 d 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) c" t0 S7 U% c8 J6 p7 p" H

7 I v# u& a% C+ D) T! f% j

7 _# ~! M, E) _5 G. k 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 3 k$ J( c& X6 C2 s

U/ b: q$ W: w7 l

$ U Q3 t! h' i* U, b 结束 / O3 M, |* k! \* V2 W' x

" x' P6 `3 Q2 e/ K* k+ j

/ I8 B" W# u3 n  【推荐阅读】 4 ~+ e' f- j% d6 H" K+ h

. w0 v5 L/ @! r

& j- w/ Q/ R! z" b 对吃鸡APP的分析 ' @8 z8 j5 I) @# A- T7 Z3 V" J

# q4 W4 ]. v: Q7 c7 m: [0 Z' W

* a( c2 V5 T* V; W% o$ U/ D+ ] 你需要了解的APP安全 0 m" c. T; `* ]2 E! `/ j' Z) K

) f) P2 A' k% B* |: }* @% E: J

5 }5 B P) f7 v& M# X2 d 你需要了解的APP安全 , f& o2 _% H: M$ l7 J

* ^# {" P& [8 H3 c- D5 c

: G3 M+ n" }0 e; K5 n A   9 ^+ Y4 H$ n1 T0 ^ t

回复

使用道具 举报

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

本版积分规则

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