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

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

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

4 t3 ^$ D- n1 U0 Y# W4 n. o) b" @ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 K. `0 Z& P; k3 c# C2 `5 _9 t* \; u

% z: M# n/ e- t1 a: I( @8 h- ~

3 S2 C- b4 z7 ~# j6 m. |& p vshapes= , N2 `# z+ y; d( b

: y/ ~" k8 f4 y& C J

d3 z8 r5 Z1 H& c2 V   ) Q5 h& K# y- x5 M& j

2 N" B; @0 ?! f f, a/ w5 x- w

* w/ ?; I+ ?% |; \, T, H5 g* @3 l 下面就以开发者角度进行解析下这个APP的功能的实现原理。 9 M [% ]7 b3 _% Y( Q

9 U" c c: U' g$ I

& D. ~+ J5 V0 q# s, d+ B8 t$ x$ w   ' J B' E, p7 f+ p

( u8 j; O/ H+ K5 |. ?6 I' f) T0 T

; P& O8 R2 \ n8 }- F# P 基础信息 . O( d# v& C! K; k1 {9 P) v* u

: x; n: e2 I$ o9 H2 W$ @0 q

$ J, g9 n' A: N* Y5 v2 U: z% ^ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & I% u2 |4 t: F( E* {& ~

3 m, N5 A& i8 [( \- D* c( n3 P

9 d3 \4 r( F& T4 ? vshapes= 0 t, Z5 O8 U3 ?/ D

7 ^& ?0 a1 Q& j7 c0 W7 D

. U2 V4 ~7 P% c& Q2 ~4 V   8 K% X! G0 P, ?

* D$ L% C* j; B" t; O

9 B6 M; b' B5 k8 { 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 s) E# w) I+ T4 V; W, J( Q* N

% P" [$ ^4 s6 ]' w

5 F* _5 O- m2 E0 _" B& ] vshapes= : z3 X2 H3 p, Z9 m4 b. E2 ~2 {

{% V# H' K2 ?

+ a2 c* P. D' t0 F' c) M M   ) k, X; E9 @" H1 z

0 D% o8 a. x2 o7 j

* z! ?6 v6 { w4 I; h 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 / w" i6 W, N6 R5 G3 w. a

' N$ H2 O3 [' q

4 g9 j: o+ z- [5 Q* H% m1 y vshapes= - }+ w" P& |3 B

: _: Z1 b& S# c# t5 z7 q8 q. o

4 ]2 z, P. A, Y+ U% M) J5 @6 l   5 u7 T0 n5 E1 f: K/ \

+ o4 m. U. _, H* n& l8 `

/ L0 {# V3 ?# {, J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 # k) F6 I# v% ^$ V& |9 r! t' o) F/ m

0 ?. H6 p% h9 ~$ y

/ V% m4 t, H% ]) {- F$ ] vshapes= . H5 _) y$ N$ y% j9 {6 }5 ]5 q

! F/ Y6 @7 a; J$ R

7 E% Y$ x5 S& _+ _' \9 _$ ?. R   9 z+ A3 t$ C) [4 N( x

) M- @. s% Z5 }& f$ {6 d, C

5 ?* d2 G2 j5 z- S# v% R 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , i; U" o2 X$ Q2 i1 [+ j7 e0 R

& f2 x3 v7 o! P, n3 T9 f5 S% }

& T- |# A+ H& | L8 n vshapes= 3 t( e, `) W+ C

' Z; g5 \. W& b- Z4 I2 D! g" ~1 [/ [) o) ?

. n; a6 \: v8 @2 A" [   ( Q9 F2 ]% Z5 a6 ^3 T

3 Z; q4 j9 z! y5 p( B1 @ W: d

0 ^9 a* H7 X& R- h" N9 M2 c v   ) q( W* Z$ b: }" b3 p

% x/ H2 ?: W, O. P4 X

: n2 e1 |$ F0 ] ~, F4 A# D8 r 签名信息 ( f2 B7 W9 B! m. W, R" z

6 t0 ?4 b, u* M! \* Z2 a

j- n9 d* \2 W1 z5 p 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 % @+ H4 E# w' @( a- |+ N% P

G* j6 p0 G) k: d5 s9 U

* R! d" _0 w3 C% D8 ] 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 % U' o8 x! m) P/ [8 U

! J, d! L: \# s! _

4 s, W8 g+ a+ D8 h& T7 h; h' h) F androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 , R, p6 Q) t$ l; C% A4 n, |1 w( Y

. z: ?3 ]' M8 Z7 Q+ i4 ]. R) y

! v1 g* t8 H: j5 H vshapes= - a4 O1 l. B# b8 d9 Y8 j

0 w% n* x7 l) H1 q! R6 P% Z

1 c/ U3 A1 R6 }. r. w- Q5 A   : I2 U2 p' j5 J y& M% W* b6 J( l

3 X8 o; h6 A0 b

# W M1 {+ \$ V; O) B% a0 U android签名的数字证书的一般都是采用 X.509的国际标准。 5 @+ `: i* O4 G% @

. H2 O$ ?1 c3 Q S' L, F6 i

* N; N5 ?3 `/ f5 k. m X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - D9 j# O3 s+ y) h

9 a+ F) _' M y) \, R

. m$ n3 T5 |& D$ v" I- I 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 D: E2 v1 W- T6 D

9 q( Y# O: X8 } C

& ^# `4 d4 R9 b) i& X; m vshapes= % t) T; Z$ Q# o0 Z

; B5 v( B) K7 J T. F! n

5 F2 _ }4 W1 u5 g   ' Y6 C& C) [$ }# f8 D2 M2 z7 M

$ n# a1 Y- c5 R7 V8 u3 @. @9 f [; X

7 l: Y5 u y7 v, r 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ' j( u7 R& Q! S! _' ^

! F& x- q8 r1 s+ B y6 N) r

9 f J1 z3 T; F' h6 |2 z! G2 n vshapes= & K& {* P3 Q: |9 \3 b

. j' y6 K* P5 l* x# b; L! a

+ |' M0 x/ ], m) ~ I ) P/ \( l6 e) N1 g+ d6 P1 ?' ]

4 P7 }, R H S' y

! e1 }! }7 C& s/ S5 d( M: b$ g   ) C" q! m2 Q9 x

' b$ f( H1 s. a. G* z& z9 ~- P

# z: ^9 v" z$ q" K% }4 A! `0 z0 R 权限信息 / c4 O8 }+ ?; U! W) w( g! g

, M2 i7 w2 p+ Z7 J# B/ O

& ]8 E a& u3 P4 o( u# q/ {! b1 E 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / [4 |+ T8 r; ~8 ^

; C# G! v8 R4 y z: W% X7 J2 e

4 G* I# E2 |: W* N android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 5 y5 G3 e5 X! f0 z* d* g

4 ~8 i' m9 v( H1 P- d* H! `; f

8 R, P# f+ S4 m; U. M( J. T vshapes= 3 A2 k# W+ C$ }/ E; @! j

- [0 s9 J! P6 r* {" b3 Q

+ _- ^! v( P$ B" E   # H/ w: u! ^$ Z o

, L& r0 y& @% a2 N4 h! G

* s: u( d8 H9 |: B7 ] 下面对这个APP的所有权限进行详解下: 9 ~6 N! u- g, R6 u/ `. n

( g2 T) Y1 C. c8 i% H/ S

! J, [; ]% F+ h* x% H3 k5 v6 q android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 m' p( H* ?* d3 z& w' k, M: V9 G

) p6 b# ?% n/ L, v* E" V' d9 w$ u

. l- _+ {: z6 y9 j! v; X android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 . N$ I8 ~2 u: s& b4 I& f6 l

* J5 l1 r. z: p+ y0 k( ?, F

' u$ K% P/ O1 J% s+ g- C9 r android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ! N+ H* C9 ]7 ?$ m

: T" T$ _8 N& X* [0 H! c4 y) E7 V

7 H4 ~: S3 X3 C( B" P android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 Q* s/ Q2 W+ s6 i! H

# n# J! n( ?: {0 }, L' g

, q$ i; V* S# w9 p: q android.permission.WRITE_SMS:允许应用程序写短信内容 % C7 @% H5 L$ L

2 H5 n* Z v N' ]3 X7 Q7 M# V8 W

0 d$ U8 r9 [9 n! l" J android.permission.READ_SMS:允许应用程序读取短信内容 + j7 ?. E, M# G3 b* C

6 o. Y# v7 E) V9 `( T1 y% h& v" ~$ z

: j! Q: d e: S4 J) m android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . d) T7 c. J$ k% {

6 D( u& t6 ^) z* X$ l7 f; {: E

( g, v$ V w. X4 W/ B android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : D8 q7 P& y/ P+ ^. h

) X6 s6 U8 \* [0 ~

" Z; i' ~3 H* C5 t0 D android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 - w; G1 I. x# D' m) ~6 m

' o; u4 [: v, o4 B* v; F9 K: t

; l* D5 j; @2 D android.permission.VIBRATE:允许振动 8 W4 \% S, c E* a) z7 P& e) ^

/ U! ?9 {4 [5 N

7 N: B$ o. u3 F' h& q/ f: Y android.permission.READ_LOGS:允许程序读取系统底层日志 ; H/ `/ p' g1 ^' t- j

1 S4 h$ n" H1 ^: Z+ ?8 R1 z! Q/ ~

4 O1 ~% f$ u, [/ W android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - ~! B9 z6 _- ]# ~

9 r, ], i( F9 w) Z; H3 A0 `

0 N* G9 b" C. g& Q   5 ~- n" S' o6 s3 a

4 ?" T! W6 n8 @$ x0 x; d+ ]

& s7 g |+ U4 w 功能信息 & X% L7 x& s% f( }3 ?3 E2 Y

% R/ f+ s! x2 [1 s& q, }- }

6 _& B, w6 W1 G+ R   ; `% x/ H8 p+ j) B$ r% T8 K

2 K1 Y* g; G0 |% t

5 L+ Y" z1 b4 `% }( ?9 L% n3 } 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 / ^: f, q8 T3 H ~3 g9 T" @! G/ d

' l" g! g8 w- U* o

' p9 o. K% q' F1 B) U) k+ M- H& I Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 $ x! G, z, v4 o3 y

3 M6 Y( W# D( p) ~, j

5 t& [: b9 I9 y( h- w) [ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) I) g( d- U$ ?6 U/ W

X& j$ |- v) ~, c6 _

3 _: F. [% i- `7 W7 i! m$ x; h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + y u) l1 e9 m2 _" O

8 s( A6 `; |$ t

$ B3 B% F/ E: e1 R- F& a vshapes= * {$ O. \+ C, ~; ~

/ x3 b' d7 b# l# ^6 ^

" [1 s7 [! a5 s. q* S* u' M& f   5 _* r9 W7 ?# A6 c n

+ z2 H( W# y- c# D+ j4 G" Z' a( Z

* Y: B% m6 R" H0 Z/ H% W 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( N% v( q8 \1 _0 W. X5 ~) f5 D

8 k% }9 O6 S5 T. n! U/ ]0 j

( Z4 \4 H# i4 m9 `8 t0 w vshapes= 7 e1 Y+ w5 b( l% B P

" r2 D- @: B% j5 Q1 y9 W/ s

1 m% G2 ]6 G3 l }* O8 r' `   / ], O% R2 h2 Z8 s

) V: g6 O2 }; e" y! M' ^1 l

3 ], `4 ^6 C2 }% H lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) C+ \8 B m. i- r9 i

* V# z) i$ ^# M

% d" Y9 ~9 g1 _ vshapes= 4 e5 i( |, b% [ F+ O5 {

/ p r' j. |+ E! I9 D

8 e. Z) A2 U; {/ f4 u 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 . ~ F# M% H% O5 M0 C# Q

" u, m( I# N! r7 W0 ^% N3 _, m

& B* \6 e, p3 e6 R0 {/ e" o vshapes= & O7 y0 X) i# V

: p. |8 s9 ]7 I

7 H0 P! f5 w8 v; r+ |) W9 H   1 T6 x2 K4 D D

) r- _& g! y3 I( B8 G- ]: t1 F8 y5 T

4 v1 V4 u: R( T3 K3 e% x. ?: C4 m 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 " \8 ^$ ~& n$ b

- d5 w' k/ V/ W1 g. k# w

/ T+ y6 t& r% ^$ k' Z( w( E4 _% b LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . G. r b' E" b) Z! v6 a

Y" q A; s3 Z( Z4 I7 e0 g$ N5 b

! t/ A; C$ Y x& O9 p! h2 I 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 ]7 Y" r+ q% w$ f3 l' y

, j: U5 [/ a( Y/ N T3 k- [7 O

4 A1 L* A, S% q* W9 l3 g# | 源的luasocket代码可以参考学习下 5 w7 _) y( \ S X7 Z* P3 V* V

5 n' P4 I9 g' K

! |- a4 R* ~+ s$ p: f7 B+ l7 T https://github.com/lunarmodules/luasocket ' v; A8 |- {! l' v4 h( Z

( [6 y9 i' n) l- b6 \' T/ R

! k4 \" S. u1 _0 j% b# j6 p9 a3 ? _ https://github.com/fengye/luasocket & B6 Z5 ~6 m: W- Y& N& ?% s

) Q v7 y+ W+ g+ ^

% F3 \1 l _ c* L8 \% g   " e$ B" x2 a% p4 d, F8 |

+ ]! q$ Y( p, @4 p. e7 m B, s2 ?1 _

+ C* O" `" x% V F7 y4 q3 R1 Z vshapes= ' f4 B; l) o! @" [' V7 m4 Z

9 e i/ Q1 q8 W# O! T6 U

( n0 F6 L" w3 `% L* @4 f- d   2 \& Y/ _) @9 S5 C& Q/ K

7 q2 A& ~+ z- Q$ f! w

8 Y" t+ p. n P7 h( B   ! Z" ~! e; D, H

0 R; \% C. k1 O2 e

) \8 p; [5 u ?. e- d3 w2 X* S 总结 % b( x- V% B4 x+ M5 y

. r' I; C: b4 v4 ^; c; A% ~

J# x+ t/ B# `3 @/ f9 j 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 3 t; A4 \; X. m# n. N; _; G

4 W$ x/ A( u: b8 z( A# D* s

9 z, V y1 m) | 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 - h6 e; b+ M5 v" l" K

& X4 E* M: \0 ?7 |8 [0 F& S

}3 F* i+ n; }, M. c2 D$ ` 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " i0 O- E" n% m7 t

. B3 K4 w: p+ L/ `& s) w

- z, C, _" c; w& ^- L 结束 6 ~* t' x3 w0 \- ^, \1 j$ w

5 k' [: }. E7 X" H

/ W5 R |$ u& g4 Y0 f% t% \" Y" E+ q1 z  【推荐阅读】 / L" S. C) W' C8 m* Y

4 Z( D7 l H: R3 W, U- R7 Q: A

; h. Y R0 j3 W" L) i% n5 F 对吃鸡APP的分析 ( K" n6 `. w# q) M

2 p1 D: p- m" X3 h$ F

9 S* Y3 S8 }& s$ Y$ r1 d7 L. V) A 你需要了解的APP安全 % U8 f( Q" k% C) h7 S

- {# @ a* \* }6 o9 \

9 \* F& J; J c) a: A( q& B: G# l. U0 L 你需要了解的APP安全 : u! H1 a* D) N) P

- @' K* Z6 Y% k8 E- V

6 N9 v# p& }( u) ~& d% C   + J7 C$ {4 L* G

回复

使用道具 举报

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

本版积分规则

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