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

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

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

; N) q, i7 O# C! v. G$ o/ ^ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 % d# C7 b- R0 |6 X9 E* v% c

9 e2 P% b1 y, _$ \/ y; X: e# a+ a

( X' s! _8 t9 ~: k, m1 l% O5 L% r vshapes= " Y8 O5 r' I4 Z

$ O- A& A) \% F2 \9 g' n+ H/ r

v- l2 m5 i, S2 W9 A   ( a+ n7 _* o1 m8 B

' B* s6 {4 m9 |

. H4 l6 H3 F) ]" _ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * V& `7 W7 k+ W% ^+ A) T3 C

9 b4 r% {0 R6 Y- [# I! U. t$ P

% z# S+ n$ s! z2 V( Q5 K   ! j3 _) o0 @. o2 Z6 B

/ R8 b2 x. P; t

7 a# ^4 x3 ?* R3 T0 a4 n 基础信息 O- |$ X0 \* w* o/ `+ c

9 V. U! r9 q ?4 P8 O( Z

# W& ]' g7 ^7 e2 c" X- X" G4 O 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & Z/ n2 f, @3 y. p4 P& u

& Y) s9 J6 L& W: @1 ~: b( k

7 u$ Q( M$ u7 d7 F. ?; E vshapes= - S6 D3 y5 z0 E' Y( u* |' x

9 |( z6 u5 e) z' c$ E! ]- W

" X" \# b# D- z5 K, D   M% K$ ~5 s) U

1 E) \, r7 w, U3 u3 {2 O! y

* i4 U+ Q9 ], E% w* \ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 . r R& ?& v8 }6 z

2 p) q/ p1 I- i2 m" b1 b1 s$ T

- h2 E2 e: j8 @ vshapes= ) p+ L3 v" x) R2 |( g

# Z/ ~( Q: e% k9 T5 _

8 m( x( S* ?* {+ m( O7 D4 T8 N+ j   # n, ?7 V, c2 K2 }; u* Q9 L; j+ l f' _

! L8 j4 m i9 L P- p; a7 n/ P

3 e3 O0 ~$ i" [8 E- _5 n 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " d& A, M/ r7 c G q6 I% h0 _. m

" `1 p5 c' f6 D5 n

5 u, E. y9 i. U! c: m8 G. p7 | vshapes= 3 c# d) ]: s2 F4 t: v" H0 s

+ W4 z* t4 p7 f7 i

( K6 I9 K5 ~: K! L$ D5 a/ f" a   / U$ E# {& I& t' a& [4 A

" f- M$ N7 O( q7 L

6 {3 `% g3 u% c6 t) z% _* \; \3 E' t 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 * H+ B6 ^5 ]! b7 f0 V

& r: Q1 J1 g: r7 a

5 F- v8 R2 [5 K9 Z9 o4 y vshapes= 6 q' s S4 T* c L9 f

. J7 w! Z6 Y" {' C& S% U% S

5 e8 @& Z6 V$ q7 P   / }5 M+ i7 h0 Z. O( Y

+ t$ x: a& Q- e5 j

; m) Y% |- V/ H; f/ z 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ) f+ u3 S# t6 ~- K2 C" }. y, D

: ~ D/ F+ g7 D3 ~2 F9 T# E

: o- w4 m4 w% ~, r vshapes= " k* l, V8 u9 b: T6 W

9 C; L: h& p6 g- k

' [, y, N# y5 W& D( L% `% a2 ~   , m1 _$ x0 N2 k! F4 q! x

) `+ |+ ~2 d: d) p+ y9 f6 d9 t

4 Z! `5 J5 k5 E3 Z   ( D+ g. u7 \0 _$ d; P

7 K0 _$ `- I) g! P

" X' M1 K2 w Y 签名信息 7 l; O; S0 z/ N! A* z2 D

& C+ b- I/ r. A. F1 A E) K; i

4 {! Z9 Y! x6 ` 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ; |! P% K6 y2 I' u5 [4 K

' S& O+ T, J4 x: P4 F' _) P) T/ U

7 Q5 o; j5 K/ x5 T9 M z, R 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 % H' z% @1 t5 s; k1 i. \

3 g% L8 c# o# s( t- C* d

+ I1 W7 y( {2 Z) r androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 T H7 u* ^) v) l

& z$ E8 ^! l. J! r& U

. c, y7 {/ i/ f vshapes= 6 w3 U r2 J+ Z: L1 Z0 S

+ g: T {$ W& K L

4 ?1 b7 g. D% e" O- ?   , Q6 n" S( ?8 P& m2 P4 I9 o0 {

6 X- p' D* X- r I

) {0 c5 s7 `0 @ android签名的数字证书的一般都是采用 X.509的国际标准。 ; `3 H, }. W+ X" C4 k

b% p1 p- M/ O- n& V0 J

) A% C9 b+ i& w6 a, |' r; p X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 % r7 K7 c( ~ v* |9 d6 ]8 C* I

/ J1 h2 }, r j" q: u8 Q5 u

?8 l" K& a9 i. ?3 Q5 O 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 E: }$ `' u" D; {0 V

* D4 G# t$ X2 _

6 G+ B K6 L8 L& Q vshapes= 7 _$ O' U, @ x# d) w# |

0 Q% ]& \6 z0 d$ @; |5 o

1 |2 z& f8 e2 @' \' Z   1 g% _) x s# S

" k8 H: Z: t2 u& h# u+ ^ p

( f8 b) `; F9 A4 v6 X# b8 j1 [& j 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 : v" Z: `% e. t! N% i

% t* o' O1 L( ]1 Z, l

+ ?1 l6 ~1 V( G! Z/ K* n vshapes= ; Z/ ?8 B1 X h1 r" Z+ k0 q, o- ?

- \6 V L# O3 R( [9 G7 k' {2 p

& B) W8 E- T _1 A * A! h ?: O& h A

' q! t$ L3 m9 [4 Q( J. F0 c3 F

' A4 h6 B! B1 F# O) H& L" Y   6 k! ^( O) W3 I, V1 }9 j

- v" M+ J$ G7 a% C& A$ l

$ ?! E' r. P* Y; H2 {% a 权限信息 0 r3 Z4 ^8 N+ ], j; N' Y5 u: x

* v" l( W$ Z* E; D1 n, C

) a+ w' x/ m$ x( @5 Y/ k 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) & e( ?& I( g3 k( [$ {, Z8 V' a. |

& y. a7 u @" e/ h# I& Z

2 w& A3 P8 b0 z2 b android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ! b% Z6 p! i$ f: z* ~7 G; h$ O, N

; m1 `0 v8 R9 P6 Q! b( Z4 p

) W6 }( o2 E" k$ \) Q vshapes= C8 ]) |- c, c8 q% A

6 R7 Q! W& E6 l! M$ S% b

! R* N& x1 R' [8 U7 W   7 r1 u" t2 ~, @7 W' p1 r G

8 q$ e' Z" }. K

& R4 D6 N/ y7 j6 s( ?/ B 下面对这个APP的所有权限进行详解下: , w! t! w; r# y y! s: x5 k1 T. Z

/ `# L) ^- s9 x

l5 ]4 b& D @1 [ android.permission.INTERNET :访问网络连接可能产生GPRS流量 . J5 a# Y* o4 Z8 J/ e

3 J. I- g+ V6 A

# F1 B" i& l5 e$ ^ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 K K6 m( Q2 _9 W k

7 k k4 l3 `7 n3 M$ {1 n( E* S

: r [ ?; V! { android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " K4 F; O- @; \6 z6 I& @

3 m- W" |7 q! k5 e. `4 k

7 z6 G7 D8 G+ E4 K android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 7 F; Q: {3 o$ T4 f9 d# _ P) f

, j3 a5 ?' c7 C: B! S

. R _- y! L& p) T! D android.permission.WRITE_SMS:允许应用程序写短信内容 8 D; z$ E) N1 q/ R. j, Y' t, O

% B; i8 O3 e9 F |7 E4 X

0 ^% w1 d4 ^$ D5 a- l android.permission.READ_SMS:允许应用程序读取短信内容 ; Y9 q, B9 \" Y4 e3 k) D

) F3 l9 `, O4 I* p6 Q( y# W* \

" L/ ^* i" A% D; V- |7 F! Q android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 4 L" t; P! ^1 F+ B, i- n2 {* N& n4 I

0 l! _2 S: a. B7 T' A6 G9 D; X

! ~, W& D+ h( c2 }. j+ h android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - j; I1 y- i! r& J( l, \) G: T

% ^4 B u2 y' h& e( f

* P' |( o# j! q0 F+ z/ t android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : m6 h/ p+ R$ g2 B

9 G* K% Y8 ]$ [

9 b' Z: Z+ q: e% {. U+ c3 c( F android.permission.VIBRATE:允许振动 7 A. q, [6 o: x# f) z4 n

6 z' D3 @' ?2 `; _

6 f" @0 O5 S2 x: m; X; h android.permission.READ_LOGS:允许程序读取系统底层日志 5 j" T( H' z/ ~8 r* [- o9 h

7 p$ f: o: \4 o) L

" l3 A0 ]2 e& `. ` L! L android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  % q! X, u( l# y2 P: m) @

3 W# J% m+ M2 Z u! x

* t7 l; I& p$ O. [* z7 U. C   1 J& M* |6 \. z. m% O

* K2 O9 g2 P& Z4 C1 u4 T9 [

: B% c. A/ H9 o$ K2 K. M3 Z 功能信息 ) T+ j* Q; x5 u, f

4 S- `! |! t. U. T) \4 L

. F& O+ H5 F( o   / t* K1 D( E9 K1 b+ ?- k$ H

: |! }5 P6 A& E, j$ n

5 M- S$ h* i" t+ N6 i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 @0 {- i# I/ v

: G. P+ [% o9 U# ^( [

' s ?5 ]" W) z6 c) Q Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ; K/ y: D" I& n: e

+ Y; ^4 N/ h7 H9 e, B. l

8 l9 ], @+ L! U% E5 l 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 1 r+ i. E ?8 l; G4 H

2 I/ n3 ~/ D3 e) b% E& `

- ]& U- s s5 g" s+ n 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - K" s L, ]9 g8 S& t8 J' T

: w) e5 \! Q2 X5 ~

! |( }* m; s7 B3 J: s vshapes= . ?2 G4 u8 j x! i* K7 d) P' p

( `' l, D, ~# E" O" G

! r4 V1 S+ A- c* u! m r+ e   ; L) X; f5 Q* l3 p$ z+ T

5 F$ i7 p. w% t& ~0 w! `- Z

; E! u0 i0 Y5 y& z 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 , }+ R- B1 m4 }4 f7 E Z( D# B+ S

- e, \9 A) q, o% K8 }

- C* J( H) K* Q vshapes= ; S. R7 B0 o& ~' U6 g9 o l* ?

5 V( }; @, ]. H+ L2 n

* K# S1 q5 B1 b2 H, X7 `   ; T, b( }/ [! M9 Z# \- Z

; k0 k) Y X6 J% a" S% p: ?- {

! U$ y* f7 K+ k6 L+ Z. z lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 4 E6 K+ q/ g9 p; T' s# x$ \

7 B6 g$ y8 v. a2 L

% n" ^$ C3 }! `: K, D vshapes= 2 h6 f3 \+ ?- ~$ N

6 X1 i) S* P. I/ _ {( e9 y

7 w7 n; F4 _3 a/ c6 c 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 # u3 x9 C# O s; P- C4 b+ a

! {: y4 |% {, ~5 Z" u$ |+ Y

% \$ x' s* P0 G% G+ \( Q4 u vshapes= * {% g8 |7 j- o

. e' L, ^ C- o6 Z; {( x

/ i% ~/ @* S- \: a' K, W9 D   " o0 _5 p2 _2 q2 e: p

# F- ~, J: z: k8 G

A E9 |; y1 O7 l" V( \ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 3 w7 }5 g, @% S# p8 R' [/ D5 R Q

3 a7 @$ t3 l) C. ?. O

; L: ^% R% g" S8 \6 X# I LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 % k" L, i% S% L* C1 F

# ] S: G8 z, O

* h; C* d# ^( e8 c 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 + M6 ] L) B2 y$ T/ z4 D6 }. p

5 h; t' m4 ?7 z6 g$ P! \5 Z

! x s" S }" `# y4 S- M$ J" i5 u 源的luasocket代码可以参考学习下 + y. E0 j! C7 n/ i+ l

1 }2 C! f0 ?: y+ A9 m

, N& E- G* P. _) s https://github.com/lunarmodules/luasocket 6 ?3 d! Q) C! k- B

* \0 m. d6 B4 j8 }2 `, t5 R% C

: k: s- h5 J% J2 ^* V) D https://github.com/fengye/luasocket & S' K C* G2 W) F: W

& d9 W* l1 o. t; `9 H. Y3 E! f

& x2 g# c% A% M) b6 R: s6 e0 H   ! G+ U# V4 l3 y& ~

8 }$ S. z2 ^: U* F `

7 w4 N- P1 X: k1 s, c vshapes= 9 P! o' ]3 u4 o* Q2 u

' r& y. \7 w3 I( T

7 a9 J( h6 ? {, D/ K   , F' F) x6 P \% ~

. _6 W( T" y |. @

+ F6 R6 t. X/ z/ \$ t7 q' h   # C; j3 T3 Q" r- v& p9 N+ j5 h* d( A

* @2 p$ A' S1 ^ J/ a/ v1 e

! k- W j1 _4 I. P& X/ L5 h ~- @0 |' Y 总结 ( U# l4 n* N: U+ ^3 h/ q

7 {: f4 M9 y5 W- e

8 k1 }" U5 L9 k 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # [( N' \7 V4 P0 \

' |- \* l0 @: R) H

t/ G3 Q! u& I, \( d% U 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 / a% ]+ j9 ?3 Z8 S3 B3 w6 n

, Y M. `2 T9 R9 n1 q- V% h

: g- A9 f% ^9 x/ ? 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ e/ \4 f+ x. W9 v

9 F# r% `0 G( o6 D

V& C: a( V- R g- Q% k 结束 3 A3 V+ N" C; g% t& ~

p, F3 E% ^& p1 ?

# }/ N, X/ e& P* \/ |6 t  【推荐阅读】 7 W5 r4 `0 e( R9 ^/ ]1 m

$ G8 p9 [2 [; c

. M f* r: f( V$ n$ b0 k, h 对吃鸡APP的分析 . y$ ~: N" O" }

$ T$ X r- I; A% I! q

- t$ U+ V. p5 m: A; ?; d7 {3 d6 K 你需要了解的APP安全 * _' B6 o1 S" {1 O

6 v9 A) F4 E/ R E O0 w) i

9 L; s# @3 q; {2 S1 J 你需要了解的APP安全 ]: V9 C% J, |1 j0 ?

( N0 h) u2 a7 h' r

W( ^) _& O" c9 ~   - s3 K; i# y- _1 X

回复

使用道具 举报

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

本版积分规则

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