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

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

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

$ W3 U9 ?3 @* s g1 N 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 " {0 j9 s5 L+ s4 n, o) x

0 l5 v; E( B. d$ b8 e4 z3 N

$ y% w: }4 Y* J0 }2 S; A# { vshapes= . T) A% ]9 P2 |7 `

$ t# K1 x7 @8 _! ?- d; f

( A% z' `# d: V& r/ ?% {   : K4 W9 S0 Y" d" D* ^

7 F# e% A3 d! B+ X( s3 K& c) H

* O3 _ E E, O4 I3 s4 c( M8 ]" J 下面就以开发者角度进行解析下这个APP的功能的实现原理。 3 j! g4 e3 d3 ?9 s

. o3 y7 x" ]' N: ~5 [4 u& T

! X7 U" ~) J% g; H g* N4 S   $ m+ t# I( ^8 G6 e/ H: b3 W4 u

' O( r2 Y# h4 P2 e# ^/ t2 G

2 U; R3 j/ y7 g/ f$ g2 q( @ 基础信息 4 G$ Q3 ^* I3 ]2 y0 C7 A

6 A& t6 Y$ R8 U& J: j8 l

) p) y/ G2 J( Q' v 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' r# S% x* l6 z" J; Y0 g

+ R) I# b6 }+ `/ S4 P$ k

9 _" b/ U% |, D8 m$ v vshapes= ) [7 n' x7 Q( @) F

& p5 k @$ V/ x8 s$ p; h

- j( @# ]$ Y. u% z3 t, U! D( Y. W. D   `1 X* [' R1 y l7 z

3 v1 d3 g5 H+ `3 p ^) ^! E

$ n' z& Z4 m% F) |& i% T 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ~. k( X5 d9 u% n

& T- m8 f& V8 d+ } G

4 M; t ], X- E5 P" m vshapes= * g% d! ]% I, J% U1 Z9 N. z/ C1 [

% }; c6 D) F/ f, B3 H2 U+ M, s2 r! \# [

: Q8 N1 m# [9 Q* T8 b' K% \* O9 p   ! P+ n) v0 C* w5 b+ Q. F1 U

0 w2 B3 w9 ]* i0 q; O( o

. E4 v: B$ U8 {( N# z6 F" N 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 + P3 u* ]+ c6 F0 ]% b# F

9 ^- W, E( s: E- ?

, B$ ^) g" I% e0 J/ t& a# Y vshapes= $ w# F1 J' w5 A" V, a6 S, C6 ^/ s

R, s8 t9 B) t- q

* A: d- {0 E5 R   " ^/ o+ z) X8 i" e0 c' ^0 X

& A# ?: A3 d$ _6 ~4 O2 H

# |6 I9 ?. S+ T( j8 { 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 2 Q& J/ r2 \' o% N g4 {

0 s8 h2 C8 `% R1 W! U! F D

# r" L1 b8 f$ X0 {( f vshapes= 6 I4 u* W; z* i6 q8 k1 p

+ S$ F/ u7 O/ n! V. P* ^

6 n: j8 ~- }& F8 v0 ^. A   : b2 B3 N7 V) y# t, e$ H

& q* h/ g& E$ t( P

$ H m! i/ f* q/ b. `& n 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 9 k7 s& L9 v" b: }6 g

! O: b( l# @ h, b' c3 b$ g+ p

# m( F& H- W e+ D% Y0 b8 M, R vshapes= / D+ p: k8 Z3 J- n1 u a

1 t" |2 x- j: Q& K! ?

1 z" a) X( U8 g7 a7 v6 v4 L   ( Z& O5 i( s9 t' S

2 [: r; M5 l3 Z# M+ F

& x/ R1 v0 i. M/ p/ k9 o' C4 X   % s7 f% T3 M& o, N" E' M7 I0 I

- O/ o. U! G! m$ R! }

; c- P5 H# }) k6 c 签名信息 7 j% P* E( o' p" \: x

8 t, p/ X7 m* \' s- e4 `

6 D- }* r- F Q6 e) f+ d 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ; m% X+ }; k# z; D* W, w" R

m+ ]& C4 [" y: T7 _

/ K1 t o% }7 @& y/ Z9 q f4 r7 X 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 " j9 `1 k0 {; U0 J9 G

* q' I, [) E% j# x; s$ x7 y$ H% p+ d

; {7 G5 w- J3 k# y3 d; y& A androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 4 a# m( R# { \6 e4 w& k5 k6 u

# t+ `" U# }0 l) x0 c

$ x$ T, m* }6 D: {8 Y3 P/ F. N vshapes= 5 n$ s+ U& K: r

8 |+ l- d: h% Q3 ]/ L7 h

. O2 ?: d) \5 z( B/ Z   7 {1 h. w! |) i+ k0 i# ]2 a/ L

( G4 b1 t% H+ p: e M0 o( f0 @3 [

0 v7 F8 g( i# Q8 b8 t0 S# w3 p1 A android签名的数字证书的一般都是采用 X.509的国际标准。 # j/ y) g% v2 W! `2 O h

9 z7 ?1 |5 } Z, F, S9 Y3 b6 G+ X

7 s2 u9 x+ s* a9 R X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 " i1 C+ g6 ?3 o

8 e* [' A( |3 O- }2 U6 `

9 k# c# Z5 ? s8 d3 z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 * G6 O G6 ]" ?4 Z( J- P

- [3 c0 B) ]: W. x" j' N0 i% ?. ]

0 x% `( R, i6 M3 C0 g4 Z( e$ T vshapes= - u; y, M/ r' G/ L$ m3 A

/ J; F5 w/ c7 w6 _

( w) ]! k2 f( L- E. U& S/ @0 E0 V   , A: w! ~5 m) {# x3 U g

8 @* x+ } U# J7 M

7 [, S& F1 o- J& C 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - p( C! @% t4 j3 z% o

& W1 v% i: ]8 ~4 a2 Z* x

0 ~! t6 J5 j, J* r5 u vshapes= " p7 ?% V# R1 A( u) `2 Y

: X! i1 R9 b" ^; |

/ H# Z) L9 C3 L7 ^1 q2 D - U2 V: Z2 f( N

( Y) Y2 c" v: [, ~8 L

4 V8 o# T$ t8 d   - p" Q" _. S0 p

: Q% f# W% X% ]+ T, j: ?* a7 h

# ?+ N) o5 [2 b% B/ H+ U 权限信息 . [" p3 j2 j S _

4 q' \( t4 a* Y0 K# v. d2 p& Y

9 y6 G; X3 _8 Z8 `6 a 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 7 D4 u! Q/ l' ^6 G

) \$ M1 S# q! y* @4 q. ~' l

' a* ?. v( L3 Q6 {9 ~: ~2 _) A) @, R& p android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 * s2 d+ y0 O1 a+ t, a$ P( T

0 F% f7 Q" |' Y+ v# `

$ o9 O% I3 b# Q- [4 i% U vshapes= ! @2 _! \( C4 T$ k

; u1 `$ f2 R/ k- U; n9 z( J

) }, e: [, y0 `( ^   $ _# r' t1 Z7 @ I. x8 @" }) m

, U& t B) `) B7 a3 U% N7 b3 X& h2 ]

. }, L. J$ f6 g4 a 下面对这个APP的所有权限进行详解下: ) B, ^0 `. P3 ~$ c7 d+ Z) e- u

1 t0 z2 m5 o1 ~: ~ t& m

# S% R0 H2 S! a; u android.permission.INTERNET :访问网络连接可能产生GPRS流量 % `/ T D/ ^) ~/ x( a7 f3 L

/ c4 ^9 d3 l9 ]" `7 P" I1 A, ^

; P s) S3 m' Q2 ~ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / @; s4 S: E6 a3 a0 _- a) _. Q+ |

A4 }% s9 c% U7 C. a& Q1 [1 b* b

2 r- j) R7 B! ?/ ^6 J: |6 u2 G7 X android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : y1 g- w J* O& |7 u

' d5 P) L* {3 d/ A8 D- m

4 ] ]! G5 W l0 C, V( |! H android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 : m2 v9 v3 X. M- [+ s! `& D

: T. z' b0 U5 F" f

! J6 @/ L9 G8 ?/ L2 G/ n0 }, I android.permission.WRITE_SMS:允许应用程序写短信内容 % ~% y4 v5 _) ] ?9 q. H

! M: s3 C/ Y/ y2 z m$ S' v) `4 ?

2 {. @% q4 F" n: f( `5 L android.permission.READ_SMS:允许应用程序读取短信内容 4 p- D8 W( \* i

% i# T3 `% J/ Z# U2 W$ Y/ ?

8 d( @) Q7 _* ?+ M' v2 I android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 6 ^4 L2 l, m p3 W' X J: q

, J! N1 G+ p# _ W- Y) L9 F$ J9 y1 g, E

) e L! c+ b5 B: p, t; } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 v* p- y3 w2 P6 }

! W3 t& O9 W6 @) I5 t

* H- `8 X2 F" W android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 - G8 } @6 }; p1 v: v

8 A( K8 X9 B* A6 V# h* y

7 o+ c9 [1 k/ p7 _ android.permission.VIBRATE:允许振动 7 w& u& v3 Y- M' b4 J

7 m" D; ]! l7 U ^3 C, _# y

' ^2 @' T, x5 J5 B! g android.permission.READ_LOGS:允许程序读取系统底层日志 9 x2 x2 z" F3 H8 H, U3 V$ b9 s/ f

$ u" S! Q3 u, k/ K- B

: }1 a0 I+ L8 ^: f android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  2 M0 ]+ z* h4 k6 V6 P( ~* d3 S9 `

3 J& r8 N6 @6 h8 i' x

, E, X+ j- v3 ^" K r4 X% b, a2 J   3 g4 o% K- z9 m

( I7 g4 |2 w7 k/ k: h9 m# c

: J0 |2 o# Z6 b2 @, x% z4 D 功能信息 , e1 w2 O- d) L- {1 r

1 G, a$ d% w$ j8 Y

+ N6 H8 s# i3 I; A/ l& H" T" S: w   " F) S# u& V! |/ z% ~9 g, A

' O3 C* X" }( w( k

8 i0 b. k% b% @& w 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ; H2 r0 A X; h' N7 r, |

, l) [0 E2 Q# E# g7 L, i

+ r. X1 F" O8 Q3 l5 M- } Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 L9 |; S' V7 z/ L& r

: w4 ~, A! f2 z( W$ p! b. _

* S+ c9 l% U$ U) X& j, g 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 $ |' u( d; K7 Y1 [# J

/ b6 W8 o8 [; r7 w3 g

5 k" {3 K5 o; m |) P4 u 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 $ x; L6 y+ ~, Q! z; b) P

2 H! G# [( }. h& q+ b1 R

8 ]4 @1 F) k" G$ Z% d5 ` vshapes= % Z# {: p9 u, v O9 o

( I, b9 L8 J* {7 U: ~4 \# H

! T* [' K5 y1 z; X( o0 `   & D4 K2 B) | @1 T

& ^- [- Y% P8 }3 a7 T9 F$ j

5 o. G/ U7 n c4 s6 v2 P4 ^2 i; n 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 * L* l/ l5 h8 n( `3 Q* K2 f5 h1 Z

9 H' |. o* `: W4 E* T7 C

* _1 M G# }( @: Q. F vshapes= & i7 T. E- W K" Y A* L. D8 x

O6 u8 U- {/ t5 A, E

9 O& q3 L! o4 q4 s S   7 U( O3 y# Q, d! `# X

$ Q& ?" K" `- D& x) {0 x. M

- k& i! C$ O* | lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 2 T7 I. W% E; n4 W3 p7 t

) v7 S) Y. d3 m9 [/ p2 G

! \( D' B; q/ z# Q! x7 H+ d" n vshapes= % P& n6 [% n" a! W

9 K5 V! _/ M& q/ E+ Q( \

1 Z7 {# q( H* ? 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 4 x( }4 Z4 h& I

% d! T+ s8 c; x; H! e% m5 t' S

3 U; ]0 W+ t1 u R, L! y vshapes= ' m3 ~- Z! ]! e, g' t5 r! Q3 H

8 v/ ~5 g% \; B: Y U" z

, T$ _6 w$ O; J) X% A   - O1 r7 _: c( C

* j% r q! t& j/ A) L5 e

* L3 A) N9 h$ p' Y! x6 I, o+ K 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 0 i6 y3 B$ c# r) h1 r

" ]. T& R6 M+ }( Z/ a

H. B6 g- }6 {2 n. c LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 @- K1 j0 e7 Y" {% Q

/ D# h+ d1 Z8 W! M9 D6 ]! t! V

' y9 B4 U4 y# c/ V9 V/ N& \ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 F0 k- r1 q( N# m& s" r! E

7 [1 i" B7 m8 w1 x/ w- w; F

! {% R/ S& o3 y/ {1 [. Y1 Z) w$ a 源的luasocket代码可以参考学习下 / D8 [$ N/ y# Z

2 q9 R4 K# S' R& U# A$ u. q3 J8 ~

5 t& u& X: v/ ?& E https://github.com/lunarmodules/luasocket * f3 F6 J K5 e, S, I

2 a w/ U; b8 H! z& G: A

) M% U- I+ a2 _ k" S; S8 ~4 D https://github.com/fengye/luasocket ( w3 I5 b, j' S e; X7 \/ U9 \5 M1 D. `

! q v. e* `" ?

3 `/ l; y" y& [! X- U/ l0 _0 W1 }! |   & S ~3 T6 Q# a% Z

& k1 b) O) w( I7 A0 @ ]& }

! R2 I# j7 y! h7 }: O7 O( u vshapes= e& @& ? v+ d9 q& a2 ~

8 C9 r# r4 Z+ Q! T% V H

( w2 d- Z4 g; L( u% Q   1 x& k/ s" E1 L. f. L

+ s2 [9 ], ^! ?( R

}- L' y; i; l. J7 D- l |   X2 e6 v2 l2 m) l

?$ F5 n2 N; O2 ?. Q: |! x

" {# B5 X Z2 p" b0 r! T3 k W 总结 & g- a9 ~: g! a& D8 F9 Y* f3 z

5 K7 B X7 ]. s) b8 u% f, s

O9 M1 a* `# a) |) ?6 B" ^$ @ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 . t+ G* t8 F: e1 p, U' g

, B* b$ P/ |5 l" I' u

: }$ a" x3 G( N2 L" [, X 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ' O5 L" d5 f9 B3 Q

9 d! b G0 L4 T/ Z! m/ _! M1 @# X

! M: ~/ p/ l! Q# R9 p) I& @ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 : D. s3 u/ B& s9 C

7 [4 M0 C/ e) ^( l- \) ^

2 }( W" I$ S+ s; F% Q) K8 w 结束 * ?1 R/ A; p/ L" H

& l, v9 r. N6 e& w2 E' a

3 u+ B( f) X4 G' ^1 x8 p3 e  【推荐阅读】 / P* G; ^+ Y" t

( f- m6 ~% Z6 s1 M8 X, \2 W

- g4 @# d2 L! q/ J. H' r9 f# h 对吃鸡APP的分析 4 {: y. w9 m7 \( h/ T, |1 l

5 q* N9 [6 y& g7 k I' @- L6 {

' S0 m4 m- H/ Z% L( e p6 j# u/ w! D 你需要了解的APP安全 9 X- p. b% ~9 W* |8 O

% U3 x' i5 G x- I+ w2 e

1 ?, H8 m( [( L L5 m* B 你需要了解的APP安全 % b0 P X, K- T& L

: Z4 }( ], I. A9 e+ B. s* S" p

1 V/ P% `( u3 s, ]; Y8 _   3 a0 _, u$ \ }! ~; v- w

回复

使用道具 举报

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

本版积分规则

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