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

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

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

l( @0 d/ a. e# }) Q3 p1 ] { 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 c, Z1 A7 L% K2 T9 }7 I

0 H* [$ k8 L1 ]* i4 [' O

' ~1 c9 N S1 n vshapes= : p" t" c- W8 J0 L/ ~

+ E6 a5 s( V( j1 b

7 l' x; v7 C( h. w' v   8 {0 A) [7 `. P1 m

+ j. G+ h' o/ A8 c. l+ v

! E6 V0 N3 c/ p F. M1 p 下面就以开发者角度进行解析下这个APP的功能的实现原理。 % k, q6 Q' }5 w8 a8 E" p

$ {& v: {* b! `+ v& t% `

$ U8 F' c8 j: [( l% l4 C   9 ?* T& R7 C4 Y9 m

; ^( U& E) X2 Y, D$ i9 G

/ y; ]$ P0 T1 T6 ~6 m 基础信息 v* m U( p ~# r% h: b& E" u. w

N& L: W1 H3 J4 N6 R% T2 x

& _" G, ]" c# I0 g, M 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) _' w7 o8 X0 P: M3 e

' g$ Y' s. i J

8 W) B- e% [& m8 F8 O/ x vshapes= 7 a7 T- I5 P( P2 Q& l

$ O6 X$ ~0 Y* E7 K% E) N9 v( V; r

; o& B% g6 N- ^( U6 s) c- p   ( W E5 d' ^/ t T; G' L ~

% B) j3 l) W- O; n

- t9 O- L1 Q4 F4 x- w" O- g: a; v: ^/ J 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ) a; ~! p- q1 X2 k* K% x; p2 a4 @

# X! Y4 p3 w5 t" d2 H& o

- n7 G( I0 K* O3 R vshapes= . S2 c6 ^3 N- g! f! K

$ e l% a$ G3 @* R4 r

8 y7 E3 s2 Y8 d2 _$ H2 P   3 j: p% Q* B: L% q$ {

) r6 J9 A( Y5 ~6 r% O$ a

9 F( q o" H8 w7 W9 c1 X 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; }. S7 Z, y3 d& W! u4 Q* b- U

o2 l, N+ \: q* b* O

6 v* P& a: w$ A; l6 I vshapes= 9 D0 e& }: D& a# O

e2 h: U) |( G' B+ h7 |

' j7 w+ _0 x2 b( F; H   Y7 e" v3 R( `; C

; m: Z& v2 H, S9 n

* {* P: i" t+ p9 Y4 v% g: b 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 7 L& u% l0 D! c. A; z

5 J: \* l+ K6 h& |: t

; N: H# }; z6 {/ \1 m0 L vshapes= 1 f6 _3 W0 y7 f7 G

C* q! i. b/ {6 e! p

' C y' S+ e% Q5 Z! J3 F   . t9 E! q! ~3 Y( o! M! m- U

1 A$ c( y! p: {( r( D8 m6 P) W

3 _" W0 _! q e, Z9 P: H7 S 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 w! a% C9 R% e% y X9 v8 F- F

2 B2 o4 p! v5 _, ^* G

! S8 T# T1 T8 e9 z. L* Y; g" D; k vshapes= 1 Y6 J4 @! h/ D! {* M' |

) ?7 o" V( R! @

5 ~) @; n {+ {   2 g$ N2 M( Z# P L4 c @# W' Z7 @

3 C- u! c D1 b3 f

, ?: \9 q: i& S) j3 e/ r   ' H' G! ~4 v+ f2 A3 J

9 Y8 O" D* e" Z4 ~+ H( D

. {+ w% Y1 n9 ^+ Y1 d# K2 ` 签名信息 ; @* g. v2 t' D9 A0 `8 M* E; {9 t. `

9 w- x3 O+ b% w8 g8 O

* O3 p' |5 E1 y8 d! q! P" o1 U 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 " k1 }8 s; e' M

/ ?4 ^9 P; l/ P( W' b0 |

# V* ^. T ~8 m0 M- u: x 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 " h1 B: j$ I* d# @" o/ N& h- c8 _

' t/ w. ?& `# T: r. |

/ h5 Q' N2 X, ~. W. z androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 1 z: f8 t3 B" b$ w

! N$ H2 `$ P" F! r0 _" m! L

4 S' v3 G ]- C5 n. n$ Y vshapes= / T( L6 u! j8 e/ M6 m

+ |" R0 g5 U9 @* [; r

3 N! K( b' Z* E6 r. S   & d) C) ]$ I- T7 {1 [, n

) `' |! {" \8 R, w

( [8 _: a4 Q; @/ q7 N android签名的数字证书的一般都是采用 X.509的国际标准。 ! _* `% N3 g" M( s

0 s) w$ ]. L1 P0 T3 ^# W# m

6 }! c$ M4 |% R X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) c' z& O4 ~5 U8 G

' G2 b; ]; ^% j) ^" _& a7 [* X b: n

. ?0 \1 d0 ]6 g4 G% { S5 F 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , d/ e9 l9 M5 }. B2 U" n3 b

2 P* F2 J$ r2 c+ ^( l: }

! z3 z- }, g8 M8 ]9 G vshapes= 0 ?+ F, O! ^$ U

( q# O+ r3 T x z% p) m& `

2 n; m* I8 E9 k5 U, F   $ ~: g# r( X) ^7 L- l1 U6 y# s

* d- T* c) h& ^4 B1 y' @3 P" }- r

9 y) Q& g- A( c2 O H* j 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 l4 l5 c3 M/ B5 h5 m* [1 @: ~9 x

4 g' M% m; p- k* ^5 |( q0 P

/ g, @$ ~) H- l1 J" k4 T6 w vshapes= + u# h& n% \3 o6 E7 Q# G

. Q3 G; B p$ k5 E% E3 b

8 _1 k+ @( G2 t- X3 n8 r9 H0 t: F / ^# ~4 Z$ z% ^& k

]. d* p& k5 g7 w; k: [' f

5 g$ A2 t* G( M& c4 G( p   3 ]* \7 d7 S X. f8 e; }

/ G7 f F. ^0 t/ {6 P* ^

2 U: |7 O9 V- y+ e0 P 权限信息 $ _! g+ S3 W1 F! z- j- U# h. C

* `/ e. Y9 F5 u* _- k' I

( ?3 Q) X( _) ~ r# Q7 i 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' D8 o% T' }' R; Z. T5 I$ z* w5 l

" ]' C, b# m% R. |

2 I9 b% e4 ^2 W% K android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 `7 \ H& G. }4 r$ d- x: R4 C7 e

' k% c8 x! b* o9 P

7 t7 w- T% C N2 i1 X3 h) Z8 V vshapes= 9 ~! d. f8 k7 ]( l

8 |8 d( M( e. X/ w- x8 ^

. F. z1 w' W9 _ I2 @3 r   & m, ^+ A( O/ [+ A7 ]" n

5 W1 I4 r( x+ H, B* E

4 T" P2 J( }. m5 v0 S' V7 W4 ?! y 下面对这个APP的所有权限进行详解下: 4 H8 [% L; i# J

+ d/ F# d# O! w' {2 k

$ p; ~( R. W6 A5 R7 H& n; q) C android.permission.INTERNET :访问网络连接可能产生GPRS流量 5 O; K# j- v- ]9 K7 h3 l

) G' s% F0 Q X

( M9 f( {' G; I1 e2 y. s android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ E. h$ f6 e% G% P8 _8 O

6 D2 j6 D2 \, D

1 _0 z& g6 e( l9 ?& `. B/ T android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # U. z0 W3 {0 m& c

3 \+ e. N6 M* r: ? }. ~ a

0 r8 |8 J: H1 C) s* ~ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 1 t( |+ ~! R" z9 r9 [5 w1 t

; `8 [$ v8 z& ?

: D P7 x% J$ w' J android.permission.WRITE_SMS:允许应用程序写短信内容 7 r4 ]/ [$ M! O& A! Z# e. P; D

' c3 P# f- t( z5 X

! x' \( a! g" J3 K z android.permission.READ_SMS:允许应用程序读取短信内容 7 W" K* @* A+ O

/ a# v. `, _: o8 f, f9 n

7 x7 R& L6 c& P9 w" ^ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 % y; [) U& P( Q1 q2 W8 l

: X( V3 Q4 m. @' W# h+ Z+ {3 Z$ B

* S; J$ G8 L5 i2 ?" } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 " p& S1 P" l- T

9 u6 ?' [; d* h( b% @6 R6 }

8 f4 U- m0 z/ U$ e android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 % A: F* u+ d1 t' V0 w8 l

0 ]5 I, {) P& l$ F

% J8 c3 U& l' {$ |( q2 Q android.permission.VIBRATE:允许振动 ) X. ~& \1 c! d/ Z4 h1 |) Z {

/ U) [4 r/ x0 g) ]' a6 q, c Z

& k. _) @: f: Q% I8 u! c5 O android.permission.READ_LOGS:允许程序读取系统底层日志 1 |- M* Y, h5 u- { G k. P

6 i( e+ I3 [9 S6 O% S* c' F

+ M b# e+ |, }7 o4 t android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * s3 S9 z' N/ g2 M& v

" j7 I- `7 @/ h; D% {' t7 _

) m5 E7 J' x1 c) V2 q   u" O+ E- o, b D; j

0 s9 u+ h/ o; e

1 d4 p( [& E! z3 q9 N 功能信息 - F) g- t# r' U( R: e( E

7 D. d$ A9 Z4 U( n- @

6 f l4 g( x1 X# D7 R4 ]7 o n   ) @" x2 G, I6 U/ R S; f& {

* b9 k! N; u/ w5 B7 ~1 O. w

9 E, w% [5 L9 e; M 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 " Y; m4 R A3 K/ ]7 `

+ P0 L: ]: `% E

) g. a3 R3 k; y+ e Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 & Y# W5 k- G1 ]+ k% H# `9 k

( ]9 }: u, r$ J5 w$ M2 r( k

: U+ ` g- U0 w5 ~7 A9 U 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 & h; t! p) ~/ F" F; S

0 s) F1 }8 O1 u; v) Q

, c$ X, }8 ?$ h( @. K 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 Q2 q' c7 U/ P: c! @# {

3 H5 o4 ]8 Q. i

8 J% h: X1 Y4 s6 o, @4 J9 a vshapes= % } O' U* o& J9 q: N+ ^

4 n6 a& r0 s# [) z

/ I) q7 s- {1 k1 y   % r* o" R8 a7 u7 p! k6 k

- ?4 f; `7 |5 o/ x

* g3 K% s. B# [4 U+ n- h4 D/ t 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 5 N- o E# F& s: C: i

; n; h$ o" K" N& F% i2 p3 V1 c

" I, Y" Y% d& a8 m1 `4 h# n* ] vshapes= . N5 d5 m' t/ t' h+ `

. H4 B+ x; T- ?3 ^' C3 r

; i2 ^2 l; ]1 e) ^ l   " @, G! _9 ~$ n% P& l

/ ^- W3 [/ U8 h8 F

! J9 Z9 ^) W# o% I g- f1 c, ? lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 0 K/ @8 U1 F( M; _

( Z9 t( |6 x0 `3 j3 x

9 I- h# b/ C/ ~/ e! _ vshapes= 9 @- |1 r4 z R3 C L" C

i* H0 s! t* x# s, x2 B+ Q8 t7 I3 E

1 d3 Y$ n. v3 e6 b% W( e& [# A4 H 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 8 F5 t! B7 O; e. ]& b* e2 m6 B' v& N% u

u1 C5 Q" E9 S! F" n

2 |6 q! k% G7 r. h vshapes= 7 U! n" c8 N! M& \* _$ w

6 E2 ^: e, z$ i) A- O: a

: P' l, Z+ [" l* y/ |2 t: I   4 E3 E1 u- b$ o. x3 N

8 ~6 z9 O; L; x% V; U2 A" s9 z

! a% s" P3 g4 I5 y+ {) L3 ~5 V 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 0 f2 T& t r* ^9 ^& Z

/ m# Y; e, o. U( R. D, f

: N u" G% v2 r LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . c9 i0 b1 q1 G. N

' O! {1 ?6 P; o

& h* x/ ~4 X1 K6 f) c/ `9 S 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * z, c0 h: ] x" z9 t. H8 N* c

1 u! c; {( o! M' B% K

' u- u1 x2 |1 |/ d 源的luasocket代码可以参考学习下 - F$ V3 {: y, V

) H4 ]8 t" o; N7 R

% v: I# i" v2 J7 f+ {0 Y8 | https://github.com/lunarmodules/luasocket 2 Y, Q9 W2 h" I; b) \

8 v# o% G5 E8 z# O

, K5 Z9 S( n. e$ u# l https://github.com/fengye/luasocket ' U2 Z; D, a0 t7 v2 O; h! `

2 e1 k$ v0 d* i6 V

( b; u; i8 O6 k: j2 r5 c$ ^   4 k5 m# I3 Y: a: s1 C; F

* b% }- S, R" a# L& b/ U7 ^) K7 T

/ ?4 w) c9 Y$ A; D K, f vshapes= 8 Z5 f/ A3 z, z0 b5 W0 l

4 X6 W! V/ v3 f

( ]8 P' B6 B/ |% D5 g* }( F% Y- j   & H2 s; Z: v. V8 \* W

4 {( @ Q% Q) S# Y" T; A

$ \7 j- A; Q4 g4 |   # E% `: \* G4 w/ {% T; H4 @

/ e5 @2 w2 B2 A9 X( I3 L+ [& G, r

/ N) u" u! G+ k1 Y6 g2 b5 [ 总结 ( c' O; X0 S7 D4 T! Z9 K

: m$ ]) w& ]7 _: `

9 ~( Q( c" J" q- e, h8 G5 g4 @ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 2 ~! B1 `+ w" ^, X9 V @8 B

5 I: o& b+ ^! M9 b6 o

& X/ W, b8 x2 Q% v+ Z+ Y M 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 l* o$ @5 i2 k" x

4 u, a0 I1 k; A/ {4 @

G r; n6 z- x+ d 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 & S6 L1 L# _8 l' K" j

3 x, B# ^) U1 Q" n

6 i, X' R: `/ i3 [' c! N 结束 ) s9 k) ]7 Z1 q' _( K3 S/ i

& L. u1 x* ~. r$ U' S$ ~

4 p A Z2 o. ?* c  【推荐阅读】 * K1 E0 K$ A( X

+ l0 O/ w+ C/ W7 [

6 T C8 T8 E3 c 对吃鸡APP的分析 / z3 L. [1 o( z

& P2 s& S2 `0 J& l2 {$ t" B$ X

7 s/ h( x6 Y' o5 Q0 [2 U' h$ L- o 你需要了解的APP安全 - X- S& V# f- C8 A

6 @8 U1 h7 n5 ~! G% A5 t

% [8 Z4 [8 W9 N( i+ N4 R1 }7 }( c 你需要了解的APP安全 ' P7 t/ K, _* ]! R( A/ p$ T

' R7 N0 R: S) ^6 y

- {& C# e# U9 _( C! s/ L& k   $ d" F' H) v/ k: L% b/ g

回复

使用道具 举报

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

本版积分规则

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