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

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

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

5 U) I/ w6 [5 o. \" U1 Y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( o4 U: ^7 s3 I/ i9 n+ r8 _

+ u# [3 _1 D( s n4 p+ ~

5 D6 ^8 `9 k- Y- {* d9 o vshapes= . Y( C# y/ l4 Q% F% W

# U1 K: H7 L i* F1 ^- T

e& k' o+ A5 W* u1 P   $ c" S) ?7 v/ G3 A

) a3 r; p6 |1 A' M0 _+ P

3 n+ |1 y2 y c/ r9 y) w 下面就以开发者角度进行解析下这个APP的功能的实现原理。 & [% ^4 g6 w: A

5 ?, A E5 p+ R# L

~: x7 U' |6 \' N+ S# I   * {3 c, s Q3 b+ J7 Z# d4 A

+ A$ p* m& B, ?8 W4 D$ j

/ O" f$ N9 N, t 基础信息 # @1 F! W; R, o+ _ \* J

3 D7 U/ v2 I% q( d5 s+ ?* @

% \( ^9 E' x$ _4 p! D# R( _ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 " H- Z; k9 S. _+ \8 ~4 k

1 d7 S: S1 x0 m% ~; l5 _9 x

2 [1 k2 g& I1 ]0 W! u vshapes= 6 S7 @0 Y6 n5 ?* Y, p

' p L, R$ [9 B8 i

( {9 h1 B3 N" B p   9 L" V' s+ U6 x$ s( o

1 y6 N: s" t- u$ `& a$ p0 J1 A: `

0 F/ }- ~/ E' ]) h% T" F 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 0 E7 _, m/ y% `- p6 k

1 E& `; B' l9 x, y6 o) B& u

' Q# i1 Z# A0 ~ vshapes= 9 R5 r2 x6 h# s/ g

7 ]2 q5 n; H: `7 A% F' A

& A1 y3 P/ i; p1 P   - T' R3 t, `' u Z" B: e( d

! x% d# ]' Z# |0 H& ^! O

/ k/ \# d2 q% T 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; z. F5 i+ }# Q) c/ M8 R; z

# e A0 G# a( p% g9 n/ K

/ K7 p3 ]6 W+ J vshapes= ' Z. c+ N, b& D, u2 n, ]4 u' u) e

! [8 |7 u3 L% T. H7 H1 F

, A& p% z$ w: t `7 ~   4 S" c. l8 a$ ?: }+ ]9 E* J

' t7 [3 O# V$ x7 ]

7 X! f( h5 b; X/ g2 L' \ \( ~ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ! V% I; _4 S( F+ Q- I' T1 g

- c' w) W; E5 [5 \

6 ^0 X- i2 `# E$ n( r vshapes= , N& F0 g' j5 {& c/ X

1 q) p& w+ a! O5 N( {2 z

2 l; Z, X$ Y( ?5 O- X6 ^& e5 j   3 W+ j4 E) ~* ?$ k8 s/ S

' ]9 ]9 A. d& u4 Z

9 U" j; _# D) X, j' k4 t9 Q( T9 H 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & |% I2 U4 J8 H; k

) _/ J) O- t1 Y2 y5 r: R5 q0 |

; H" y5 p+ t# T- e6 V$ Y9 J4 { vshapes= 8 w3 d& o" q! Q) @3 @3 M( V$ _

7 ~5 ?0 S! E; ~6 U3 m

# k/ D7 z9 z: E* K   ) u3 q2 M: m( Z1 X. B

/ c5 T5 i% X P/ L1 L. ?3 V; g

: z3 B5 E" T2 \/ X! [1 }: j+ L3 P1 R0 B   * h6 j3 E% k+ w; e! L. Y2 F

6 U: U- X4 e" f- p. p6 e3 w% _

# ?. k1 ~+ @. z& X 签名信息 , q% n, k) v/ t

" b! T `9 N2 n" n

4 K# I# w$ o& V( k3 H 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 V/ V$ p& B6 p7 w

) n7 E9 Z4 p- k, n

' _4 q* P p# i9 R2 U 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 R( Q6 B7 |. V7 G6 C

( u! S+ E. G, j9 L+ [) s! g

; Z, X2 z6 l% Q; c& J- E5 D androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 9 p% `4 h. [( c6 ?

, l! v* J1 Y% P) a/ W* ~

8 t+ q7 E7 H" l, t, N vshapes= ) K8 ?3 w2 Y# {/ q* i' G- h; M

" p3 k. i& `3 o+ r9 _

9 e+ ~: `9 s+ Y   3 f; e. n7 N% l- M9 [% d( B

2 o' o5 F* n* u

# |/ I& N& ?* t0 ~/ M A1 R" g android签名的数字证书的一般都是采用 X.509的国际标准。 4 r/ P, n1 x- e+ w8 Y

! @) u8 q5 a& {5 a; P; z+ @

' x6 z: e& v2 ~: g$ ~1 |) l' ` X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ' k( t _3 ]2 L7 j0 A, m

4 Q" o/ I9 y# Q

( ?1 d( Y6 V! U. g( \ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 P. H4 i/ ~' |: s2 e; [

3 o4 ^0 c5 |5 N+ i, s9 l

( N+ f, z2 ]. B# C) w* i5 W; R vshapes= + o% T. \$ P/ H$ e

" M o" A0 v( l& b1 o0 U

3 v# l# H1 w: C1 `0 W5 a/ i   , a/ U: g; t, i

6 k" _, U+ b7 q- u% B4 t

n7 Z- Y* o4 n 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 & w8 j* R" t3 `. a& D& w/ z. p

* _; s9 `( W8 R

; _! s9 w- K: H. z4 s \ vshapes= 2 k* N$ |7 ^$ A/ W: Q

9 M2 [8 {. d; ]$ y3 O8 G. }; j

0 b Z# H& F: ?% o 8 w% Z, w' f) H

5 x9 e8 v2 F* U4 \& u0 H2 Q8 Q! r

1 \& n9 {' h3 X5 W# Y, U9 k6 z   ; v) |; x7 e- Z% N$ P! o$ i" O: z! o

; q4 f! g0 J8 }. t' h1 ]

% S K6 Y' y5 k3 t8 b# T 权限信息 # {; I: S& f7 X+ `2 l- w

9 X: `' [+ o0 B) A* D

" [3 j5 [; n# W1 ?& f 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) + V, U% |# A) G: o @

5 S( e# l# c, o f" X' p0 c

' i" t- y3 Y6 ^ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 / J: d( r5 b) ?% z+ D* D& g% {2 f

1 L+ e4 X6 y+ n- x: S

# i0 |) P, a) d3 o2 F5 D; @9 G+ Z$ V% ~- g vshapes= & M' j3 k0 a$ h8 f0 i# O

& |5 U% ], G. f! m1 G( f" ^

) ^- }& |. }8 P: r6 L; h   ) t7 b' K) T- o

& H/ D' _0 f% f9 v9 q; L/ ]# e

1 i/ ]* v$ O& k* w& t% l6 ^ 下面对这个APP的所有权限进行详解下: # K1 v) @4 z: E# O. n, U

, I D. ~) M- C) s2 A& E# N% L

+ ?% c, @0 U* } android.permission.INTERNET :访问网络连接可能产生GPRS流量 ! O7 K) I% J) G. j

+ ]) Z3 Z9 O3 R! ^9 B, y

2 s" F/ e/ l! ~# e android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 7 t# R7 u$ O5 B

, p" T9 r9 q0 ~9 T! t

* f6 o9 r* Z% E; Z6 I5 l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # j9 l/ w% m. U/ C% k& Y+ g

x! {* W, _& ~+ k" s; \( V s

- y$ a5 W% ~" f$ @9 J* ~7 n* h android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 + q! s6 x* ~9 t$ x w+ P, q

" B/ |3 ?+ N( k' ^% `; q; P3 p6 \

" q+ d, H8 K' N" o9 t/ A4 P android.permission.WRITE_SMS:允许应用程序写短信内容 " [! Y: v5 z# J' g

9 w9 N, J6 a% H' g1 X' w: d" {- J

' B1 I7 E+ p, ]) U7 c6 X% Z android.permission.READ_SMS:允许应用程序读取短信内容 4 N8 f" h( ?! C7 S

7 ]& L+ |+ K& w+ V; ^' K

5 \, D% R5 O* R" n% q' K android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 g: z( D0 p% [; K

# M4 y* ^8 T. d& h: w5 d

" R9 S* p2 N: {& c' _6 B/ e android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 , p o6 y2 W$ w2 Y: u6 u

+ ?) c, z9 I8 s* l* F+ N

& b* S7 O0 }, S; j9 x android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 6 i# Q: h7 H: m- L& y1 M! S! ?

' L0 ?/ C- N) k+ B) Z$ n

0 k) o' N& s2 g" ? android.permission.VIBRATE:允许振动 - ^/ \5 A9 B- {) t

o4 {0 {# ^! m& l! `7 K

& t" y$ }; {# u2 [. H android.permission.READ_LOGS:允许程序读取系统底层日志 ) J" Z! i. P' o$ v% Q& W

& v0 {: I' X# ^2 ]$ B A X4 w

% Z2 i" l% Y6 A; F8 z* P7 T- h android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - t0 I- w6 G3 E7 h5 e

7 Z3 i3 Q0 t1 Z9 \# _+ T

- U( ^. X; \* W) X# @: w5 l   & O- a3 Q" p, T( Y! \

! \3 }4 ^7 c% t7 G. T# T

- C$ r# G7 m8 {& r% C# s/ { 功能信息 . b0 q9 o# U. T! }/ S0 g& R+ E

7 I3 S, U( p6 y2 \

" O" c5 E6 i9 p3 o   ! Z: v9 h. i6 Z c5 r" F

8 w& r0 E0 X7 y* q7 `

- o: S% B* I S' b" q+ y; x 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! M# b% v( Y4 z6 ^

1 w) C! C! t" \! Y( M+ J( g

: P# z/ D7 A x3 Q" D/ d Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! m0 P4 H8 G! f

p* }% p8 k) d3 w& ^

3 m' |" P, ?' j4 k9 N 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + T1 _1 j3 L+ [/ m% l8 y0 ?

6 s% H- }+ f8 E' k4 [/ |5 O

[' |5 W; P0 r" C8 c9 u 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 F& [8 g; y3 ?+ z) L

7 E: W; l! l9 v' D2 `

( e/ M, X7 |( x# F$ D vshapes= ( f$ ^* u4 A/ p8 H

7 ? G- s' ^" \# y ^- o

' O- M. U! z9 q) ~2 O0 ~% g; p   - h9 C6 Q _+ w0 k4 d0 T1 K

% Q! h3 C( b4 b' j, m$ U( _

0 w1 | u+ J1 H$ I0 Q3 Z 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 . `; ]8 i9 u$ L3 d- ^- Y

7 o- J- q* }% a; r. e9 B

7 @- f6 R" j1 x2 f. K( S' M vshapes= ; Q; h3 A; N% m$ X- @3 ~

% q6 y: q9 v: Q, |7 R; t8 c! B

' c4 u, x1 D4 w* L6 \   / S& l9 f: } ?9 ~

8 K7 O9 ^) N4 S( ^/ M( {4 {9 G8 A- p

- \; F& _/ X% h: | lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + L* ?6 Q- p: U2 h7 A' Y, ^

0 L( e4 S1 C+ B+ ~3 a0 H

2 j5 _& \+ L4 D6 _ vshapes= 5 @% F2 F7 W' t4 L8 Z

" t k6 c2 _. c

* y0 [! H9 g6 ]* |+ p E& M& y 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 5 b& S' p9 Y' n5 r5 x) a

" d6 T8 O8 X1 n) x( f$ N7 {

x$ r. Q- E/ n0 U1 \" p vshapes= # \+ k7 }1 o+ j0 C+ k

4 ]9 ^0 B5 V" W* V- w- K

9 v6 H7 w+ ~+ z i' c: Z {   8 Z) b( O/ U8 b5 G/ l. M, R6 y

; ]0 P4 Z5 ^( g

: V4 p7 R; ^; D/ P 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 4 V) f8 p9 M9 X. h

4 b, @$ g- F' ` U9 G) \

& e2 d6 z: U( O LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 + P- _! M$ a7 `, e

; h# p% C$ Z7 E3 M9 H, K

3 f' e1 g- z Y! D/ L# p 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 9 D. V: j+ g; T2 r/ g9 t2 u

1 p) o, b. Z) s p

# E8 S) f! F+ ]- j 源的luasocket代码可以参考学习下 ' k8 z$ W. T: s0 N" `

3 _) F1 E5 L, s1 ~

/ T! D9 S1 t6 R% S: a https://github.com/lunarmodules/luasocket ; u2 c; X" V: Y/ H7 O

3 |% ^) E) a6 `4 L& m9 A

* e( z z* z1 M, o4 V- L6 |5 l, w https://github.com/fengye/luasocket ! I* I4 `& @7 f

" i" z y1 d( f4 R& r% @

' I+ p* a) {/ u: }- I1 h( g& o   9 ~, m( k7 o2 [" s: z( O

, U6 `& v) i* ^

8 V: J7 D# T! [1 S3 z vshapes= d+ a# D& D M" r/ S2 r6 j v

1 I) v& ]! _! x# { k" K% X4 L \

4 m6 C/ S' d( a; A9 v9 S% d1 e, `   " E4 y! @+ U4 O0 g

/ ]- ^6 `+ t I8 r4 I+ ^, D1 v3 Q! W

, `! |5 h d! B& H   3 s0 C c k1 R6 d( p

1 n9 J' m( t2 W& F

2 E+ O( l9 e1 }- e1 @ 总结 0 }4 q2 N6 Q3 O+ p8 }

) a; d" v+ p8 \. k

5 H: z& H2 n; `& i5 H 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 0 Q5 C2 t# H3 E6 V- t/ ?) D, e, v! R, M

: e7 \/ e( i: ~8 _5 K4 I

) Y3 ~: t, B$ _( a( v" k9 T 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 6 M' t+ Y) P% Y" V4 d! i

' W4 _5 R0 R8 J4 H$ ^/ Q* {8 y

2 T1 q3 c' o. r& z0 m. e 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ! H' E m& b9 |$ ~4 k

% f/ m2 r6 r5 x' N

" V8 B) ^7 k Y; W/ m) r/ q 结束 0 [3 k- D: [- Q+ n6 K: V6 R0 s! p

% w/ ?' z6 |& v" E( W/ k1 D% L

' u8 I& w: ?9 `( D3 t/ s  【推荐阅读】 ( U+ E) H! j4 O

7 a" W' u- ~! o/ ^ D

9 c1 l9 n1 ]( J9 c1 T' A3 a 对吃鸡APP的分析 ' h% W! M8 c, R- f

v0 N& M; q/ A+ D+ T! k* Q

' y, S+ m/ N+ F& @ 你需要了解的APP安全 ; x( ]1 {. ~0 W- u. f' Q

; R# x: }) W" p+ n

& G9 O, L6 D2 E 你需要了解的APP安全 4 y7 x4 l& Z0 f1 G5 Z# m9 J' M0 ]

! |/ \# G% W+ N2 Q- D8 W0 k. [+ u0 { ]

; Q' E# M! F' e& s& l   ) ^% V k6 s' v4 U& B( T. J. Z

回复

使用道具 举报

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

本版积分规则

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