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

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

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

# y6 | V( q9 u9 z3 } 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 0 p' }7 T4 S5 Q1 z4 H, }1 n

5 X; ?* O+ P, B8 M; j

6 {/ B" w2 [" W) V9 ^ O- s7 J- q vshapes= 0 w$ _: Q6 x6 Q$ V. m1 _1 ~$ W- D9 R

X+ @/ g5 m, y" T

1 ]7 k% d0 z) ~) k7 p8 \   ) a1 v+ c0 X2 S- \- H( w. M

3 N* _% ^5 w- M

1 a4 h4 ]6 _$ Y6 s7 Y+ X0 {* }% k 下面就以开发者角度进行解析下这个APP的功能的实现原理。 5 S/ p0 q/ h4 B v" I: {9 a u

% `( H5 J' v" D2 S: y

1 O5 M+ ]$ P$ H {- ]   ( O/ r0 I1 q9 S( |, u

+ A' y( v- B9 e" j+ z4 a* e1 V; x

6 ~% ]& A$ `0 k% ]/ @ 基础信息 ' \8 t) x" O* @

0 n, [/ d0 P+ w$ ]0 o" o! ?

8 c7 c( h( z" e0 q% E) b 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 2 k, Z2 L2 h9 h

0 ]) t% W2 p" B+ N5 g: ~* k3 F

9 k8 p3 m$ H( a! [# W0 W vshapes= 5 h Z1 L( I2 `0 t6 K. e, w$ x8 X4 u

( g0 ?5 R! i" U

* D6 Q, s: ]8 I Q7 [   ( j; M( S6 Q1 o8 p& ^

2 u& m" B4 m* Z+ Y7 J q+ s

$ J. p4 A( |5 n6 {5 U 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 8 ~/ D* [% z) r: I9 x* H% a

?+ x8 U/ b- z5 F. M* `

& @, a, u- Z2 J' j vshapes= " y* J1 q; o6 R

5 G& W" ?, }6 |- Y

9 S3 d) V9 J; `) v C   / n3 }% b$ t% W/ ?: T" }" t

# P+ _6 B3 G' Z

! l) g7 q/ D. w- u. A6 F2 _ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 * y; ^( c$ A8 h3 Y* s7 b$ Q

! n/ V9 F( E/ F7 r% l

0 ?9 x1 N* f4 f" e vshapes= & ~! g+ w8 G; r2 x1 P1 `

, u) R' X! }2 j. j

+ B6 k( ~+ A! K3 r   L. V3 K w4 V1 U, ]; ^0 k

9 G9 c8 u1 ^- g

7 \) J. e) _8 |4 b" H# L6 q$ n/ I! Q 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 - [, H- U. K `1 U# m

) x2 F5 ?) J- e3 L( b' ^

8 c5 Z' h! |8 A- D! q' |8 s6 I0 {4 y vshapes= * S, Z- E/ F+ D% A. V& E

" o/ F3 C" n3 S2 s

; S* N' I; e8 q f   / O+ R4 F) M: B5 R7 y

5 H) Y' [5 I4 b9 U! y1 T

- i% j4 s( Q1 v o6 U' @. _' N! a 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 # ]8 q- ]2 a* s' Y' U

: Z: m( {8 ^5 y0 ^: A' x3 Z; `

7 F! k z7 Z2 O( V' D$ \ vshapes= - l& L7 H; ]& s1 S% r

+ e! ]0 B7 w5 Y6 G

9 e+ W+ T f; t   : U% F2 w$ D) K8 Z: ]% e

8 Z; ]) s4 {; Z; h

% g: [, F5 H* X' E1 h: j   , q& I5 F- x" F$ t8 B

0 {$ K5 h/ Z7 K

6 q& _' Y( N, _1 V# j/ a 签名信息 1 }6 J" J; I; \' [' }' ^* J

; u4 H q/ o5 ]7 e( `* q

( L: ? }7 A% v 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 9 W( E! v. o f4 X% O

. D% B$ K* l7 u$ T1 `! X8 J7 q

- z; V6 `- e+ R6 r) w 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 1 X& C# Y+ s9 q

; m* V0 D8 M2 |: \/ `- j( f

5 s/ M6 }5 ^8 Q androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 . N9 A& V4 I. J3 k

/ {" K1 b5 f4 @" {8 }* B; l L

2 L4 @" q4 ~5 b8 h1 z* h vshapes= 6 G4 T# Z0 A$ T0 M G8 @; j1 q

4 Q! k0 c! X7 r; j! X* S+ O

5 c0 r" o) s# C) ~7 W3 s   3 K7 W2 i1 R* M$ ~

( t% f' A1 V4 v2 @% D5 v( y

9 p6 ]& B$ F: p; a! K android签名的数字证书的一般都是采用 X.509的国际标准。 ! q+ t, |8 k# d6 y( @* z

$ Z3 c' v6 x+ m

$ T* p& D" U0 ?$ @; j- \" o X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 ?. R3 X3 }$ \8 g

! m2 f: G7 s8 Z% U: Q% O

0 S% J$ o, U3 A* f" |$ i8 J. X 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 4 l0 J- K1 A) i" r* `. |, A

8 t* T9 t/ u) n

* l$ l; w6 y$ l' l vshapes= 3 t3 g% V1 h: {' T

+ N: r' {# q7 z5 r5 y+ l5 E! _/ V

M* \8 S$ v- _6 s; a" I* ]0 l7 M   $ P% ?; R9 C# Q1 f: b/ s0 Q% M8 U

7 J n8 W. P6 N$ x- L

- |6 _' S _- S. o& }& \ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , _: E+ T0 g2 |; H8 c7 R1 ~: }/ i

( o {8 X7 N% I# k; s

; ~) O6 f+ O( Z* c4 _5 H) G y. C vshapes= % _( D* U, Y: [: U& W7 M' T

7 Z$ }! i! t9 U% m4 k& t* {1 [

" b$ R: d% w2 }5 k 0 G* y' o" v [3 ^5 K

4 c5 ~% s/ D+ K; h% L5 y$ {

% `4 \4 n. b/ ?; U. t7 R   0 M! p6 z% T# X( f# e- M

" S ] b$ m/ p, S. l' r

, a* J; ]$ U$ z6 _ 权限信息 , r' r R: o2 j. k

' m2 {0 {" f2 i8 ~% f

$ S* `. N7 W% ~. k 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' o$ b6 C3 C& k' |% E

1 t/ ?2 l; t6 F' U7 L( ~5 ^

" ~- P7 w3 ?& u: F3 ]: G android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 * b# H/ ~" N4 `+ T8 P: t

% u- w2 [ d" X6 B4 R

1 V& X; R' `+ ~7 {4 s) i8 l8 _! i vshapes= ' g7 h: q3 u& j4 I

, _0 q% a# @+ {) T5 k: N1 j6 B

9 B2 C' |$ q/ z5 l$ d" [   7 C4 S* s/ i4 ] H3 V, I

$ Y& F! Y; t5 M" N

& p7 T& t4 R* S3 g% _3 B/ y$ a4 l; e' G 下面对这个APP的所有权限进行详解下: 1 L6 P" \0 [: H: k. G

# e& i6 C* H; n2 m2 |. w& {

/ }. N7 y( z, M$ G% L4 Y: o1 S: X3 W! i android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 n+ w- Z! V+ j3 h/ \9 a0 r$ G H) r2 t

0 k- D! e" ?: p

' V+ P9 R0 r& {( C1 S @5 z android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' }. ^: B8 n9 X2 J3 _5 K

; v& c3 e9 k }* {0 |. @; U

6 Y$ O+ n* F& s android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 $ n7 {' W$ E% X1 g3 j+ _( @6 j

. I1 F& b+ L8 a4 @( ^: s3 U+ L

" S- }9 R+ a! R$ X# n$ m android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 - _9 J9 ~. l+ E# e! H

: {4 ?# O# j/ R- ~9 e

4 U3 D7 p! j# y+ p: |, o) v android.permission.WRITE_SMS:允许应用程序写短信内容 ; P9 u$ w; S) o. u4 ]# Q/ K

1 y( @' V. D% K3 v$ g4 a

0 t3 F: J0 O% R: ? android.permission.READ_SMS:允许应用程序读取短信内容 ) o/ I3 f9 t$ o% C4 P

1 t8 X, }$ b5 W" G8 Q

3 E6 f" x( Q" y5 F3 b android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' G: ` o- E; _: h( X

! y3 K8 t, Q4 Y: J# ]7 q6 ?

' s0 e3 j! |4 k# p1 J2 L2 U0 v android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ' r( T" u2 ~1 u

; z1 W6 ~" l0 ^

9 t) k8 e) H% s! X android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 / Z; j7 A( B( g; g" P- q

: S0 B8 j4 L3 X1 x' c! p

" o5 \$ o6 Y5 @/ Y l) |- \4 R android.permission.VIBRATE:允许振动 2 y% t( O$ X1 e- P) l6 t# ]4 Q

2 G9 r& e5 ~! @. D9 N- A9 `

9 M6 p/ o+ _$ ~' ~2 e. A android.permission.READ_LOGS:允许程序读取系统底层日志 5 g' m. H) P3 b) @

% J( M& Z! u; S

1 B- m: B* \8 ?3 `9 B; K android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( X+ o* N! J; g- K# }5 U8 }, r/ _

, B& r' }2 d1 w: Z1 w

+ G1 C: ~) G% y r3 P   8 B5 F2 t/ a* M$ z+ b$ H3 W

. j) [9 y, i5 B* z

# u. X0 F% t5 ?- Q4 Q% A 功能信息 8 J9 E+ Q3 f0 P& X$ d8 F9 G& J

5 f) ]3 ^; v5 O8 Q. Q

8 M2 @* z/ o$ B   2 U: k6 Y; e) O$ b$ J: T! o

# V9 p+ R) C: s) s4 W

# W& c/ Q: p. v: s: j. ^ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 - r3 u o4 E( C

5 m- a* _9 j6 o% R0 J: K$ F/ I- P

. v. {) Z' l9 y- s Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 : D+ J) x2 O( s7 \

5 v- a9 ^# Y. a3 ~4 f

( B6 m7 o# s! w# t 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 * S1 f7 u$ v# G) ~

- [5 z, z, W% M0 ]* }8 _; b, p

3 Y. c: A0 s1 i8 I) @+ Y6 e: ^ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , P% Q2 q$ d* h% T( x+ a4 d7 g

% z! o* D% c! r9 ^8 ~

% P f: ]1 X) v$ i5 |/ T# _( K vshapes= / k; S5 o8 ]. t3 o$ s

# V2 N2 z9 P) h# W/ m" R8 M

2 ^2 a) b8 v/ w' G   . ?( m6 d2 ^, x6 _" |: F

* P. o7 S- U! @ N9 B

3 ^2 O1 x" b J' c0 `( l 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 }1 y) t$ p* t% h# A/ o: c

5 D& e0 c A) n" @# }, w9 ]

/ A4 T8 M# _7 U% M# n* Q vshapes= ! q# q" s* Y1 [3 n$ b

! E {& g5 u$ y- n6 `. e+ s

) b8 m0 m) E7 p! C/ C' x4 V   4 ]+ G" l6 {) D/ ? o) o5 G$ L- L C

7 f9 R* y! h' H: _6 L

, X7 {( c2 a \& G lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ! b- r0 Y F. r

' S! j9 F! q8 J& y

; m9 l8 s" h. s+ @- R vshapes= " T4 M- ^$ t! ]0 m% i, x9 C% N

) _% y5 y# s) `

# Y3 P" n9 ]; u. G% _ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 y# v' _9 V9 c" n+ c) L1 K

2 C# k# _4 O* I: Q: N3 W/ Z

1 d5 _0 P+ c: K vshapes= 8 Z( N. d- [8 h/ L5 T" b

! j/ w. U8 C0 W. T& `

7 {- o% R1 ]# ?6 l   0 }# G3 Z; G6 ?; K$ C+ W

# [- f- q' I' A; m* _5 E

0 J" Y+ {( I/ _: w7 d! O 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 2 j& k" a1 O; R" |4 R2 A

$ ?8 t' h$ c2 [# h f1 h2 L( n

- E+ \0 B. C+ b3 }2 j2 m LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ; o( v4 K1 q6 j; m+ ~8 `+ C

7 r& K4 q: Z4 i7 i

( Y9 G' O( Z( l0 q7 G 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & s0 `0 ^: P) m: w0 B$ P

1 J4 X1 j4 R% }# N8 z6 Z* A+ [+ F' C

4 _% Z! Z1 I7 H 源的luasocket代码可以参考学习下 : Y& \7 O6 C% ^ D! Y+ I/ \

% W; }# K; h' J& Y9 |* R

6 v2 N( k" G2 `1 m8 v, q https://github.com/lunarmodules/luasocket p; p+ _9 I0 H9 a0 y- J

6 {* r( V P( S" f6 W# ^8 y: d" f

) d8 \8 Z. |6 C. V$ Q# s https://github.com/fengye/luasocket 7 Q) |4 u6 b$ N( V3 E

: Q4 ^6 J; a! F

: Q0 C. u2 y" Z0 m4 O" l   8 _, N& d' k3 K5 k* ^; Q, R( o

: t) _$ w6 R0 `! r

7 L2 B, i: e5 \( C/ y' Z$ K, S vshapes= 2 M; D3 @- |3 h; u5 b- H' P1 [/ ?

3 y/ x" w" r; V u0 {: r7 r) ?5 R

. O; v' `1 V- s$ r2 j- s$ }   . z2 `; O/ {6 X

4 j2 u' S. N% ]# e& L4 R

o6 P/ T* n1 M2 [: r1 A% e& V; v% T   * Z6 {5 E" m# R# e9 b9 a+ R

9 _: g3 \ ~3 \

4 {* \, c ]3 X& M# D 总结 # I9 X2 `8 u9 l0 H7 x/ Z f

8 z! ^1 a: f6 C% C# k

5 i' R) S Q! b3 P 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 . `5 G; ] N# Q2 O" S( r# k

3 ^, O3 x P% g1 ]3 Y- U

6 I7 V ]4 R+ b* O: C* e 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 + k. N( {, b, V- l# m) y, c# u

1 ]; i7 u' K A7 _$ t2 n* [

- Z) B( @" C" K9 t' @8 y g 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " ~" w+ T: h" F

" S0 I" Y8 O3 y* y

; w4 @/ ~; W2 |0 F 结束 + ]6 r( C6 b- d" i

) o& i6 o0 M5 n. W* s

* y- x# p7 x3 m0 Q  【推荐阅读】 , j9 H% V2 R8 R, P

: @# |9 L' Y% G( R6 X; m/ |

8 | [6 P& o p+ e6 k! @3 D 对吃鸡APP的分析 0 B9 J$ t& d# l4 V5 T6 t

8 U' y P, T! o1 \7 ?

7 c8 ]4 N# l" u9 l* @ 你需要了解的APP安全 ) ~: G0 Y* e2 u: ]% ^/ b9 [. C' A

& K: c. [( L5 t6 u& U2 u: M1 C

B% @/ w% t, i5 P6 A; X& F3 X. V 你需要了解的APP安全 ) i: |$ Q6 E" O i5 K' h

2 }2 q* }: e) ]- T! I1 O

# r9 q5 T; H" ]- U   8 |8 Y0 x' m& @3 Q2 E2 F! B( [+ H

回复

使用道具 举报

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

本版积分规则

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