中国网络渗透测试联盟

标题: 转载对小绵羊的轰炸APP逆向分析 [打印本页]

作者: admin    时间: 2022-7-8 21:25
标题: 转载对小绵羊的轰炸APP逆向分析

`7 v( y- Z/ e4 w G 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( N! p9 x/ E- ?7 q$ z* P

+ q, u7 t o% u9 K& K; v7 e, C

8 I( P+ s4 d7 _8 m8 t vshapes= * z7 W2 T, b) w" s, E7 K2 U2 h

+ ]" G1 z# @) B% k4 C) Y

8 O& I6 u5 H) O$ @- C% Y   # u9 I, D) P. z8 `2 _

, g" t8 j' J, k! C- b x

4 e2 \ q1 h/ U3 ~* K p) T 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' t, [5 i- I2 I; O- V$ ]1 u4 c5 B

) j8 n% @2 \ u* E, {7 Z( u

7 i9 N2 r; I8 O' L G   . H9 H. }' Z; ], ^! D9 Q

' j% x0 a9 t) H# g" A, F

" K/ ?$ \" P0 K8 ~ 基础信息 , S5 t9 r( Q8 V$ I! ]$ }, e

$ ~8 e4 ^2 c$ ?0 q" E7 w

8 d3 E# x! A# K. C! M. W 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ~7 W& O& c" j: f

" P% p5 b7 m; q* c

" [& `* i. F1 v' ^. p vshapes= & K3 N! E5 \( t- m" O5 H

' R0 G+ W" y1 d+ B: b2 a

) q8 v" ~+ B8 a r$ ^/ T% v   7 u. g- |# j7 r! r+ c, d

. M( P7 g& h8 g( [: }3 |/ n- D

+ Z. N1 m+ L* P8 V% O 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ( E0 W$ ?5 _8 B- r/ P- I; _

4 L& I4 e1 |5 N' D7 \

\6 J7 G# Y- o& N3 Q2 E vshapes= 4 l( `. y3 v0 K8 V* t+ H9 Y

* A" [! q( m3 K0 l5 F6 `

4 K2 ~: G' h0 T% O5 Y b: V   9 b4 e' E9 L7 f u% e9 s! W

. z/ H; z8 F' y( v2 h) p5 m2 h

" M$ i2 G+ x6 B; R/ m 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; B( w& d( ^- ~4 c

" O) i/ x6 [6 q; V

. a) t4 x* l9 \0 w# U9 i vshapes= : `: D5 B1 s3 w9 S8 a, C2 m

; V& T) z" L5 e$ D9 {; a# T

3 Y% q; S! Z3 z   9 H& p) Q, o/ Y! C

" ~3 h( Y1 Y" [. \9 o

* L! r: [4 Z1 b 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 0 r" F( ] p( ~/ w1 t# p

3 e" L7 R& h, P9 j1 W+ t7 Q) T

' H& F: J4 ?8 K vshapes= 3 r) l' N) i) P- c

: @1 G- w2 S. N' r: [

' ]; M4 a. z# q7 I, b   5 e4 P/ t, B8 c; A

/ {# V# j0 O2 [ N1 m; ]! K& t: F- v

% x8 c ?. f/ L 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 4 ^4 W2 y" w0 A9 k7 k! ~

( e. U o, E4 i0 s+ J

/ c) B; c7 x" g$ G5 y; i vshapes= 9 t) g1 S$ L: ?/ d2 a

$ @# k# k# \& i+ w" y, O- Q

3 r6 |! y R# S" H. Q" R$ |7 O   ( c5 b/ T9 N% n% n

7 ^/ G3 i6 e- n

% ]4 i4 |% f$ `5 K1 C3 u5 Q) }9 r3 x   6 O% {4 y; `/ ]& v, W& j/ K0 u

( H% |/ y" K; C2 }

/ X( f+ [* z' H. ]( x 签名信息 8 c' b2 s- E) B% I* U

& E( L) L U' D2 A' r+ e

+ G$ P" j4 m/ D( F/ R$ b u 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 . c5 Z4 H: d- R) X5 J9 i

- s2 C/ Y; W0 v% D1 H+ z7 W

* B3 Q/ N0 M9 ?0 U2 P! a 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 / b/ |* k9 W% x L) b9 U

7 y# A. c$ F, U2 k

d& S/ S" L0 K: C androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) Y3 h8 P% h6 z6 s8 C. v* ~6 G

$ D/ m' n8 Q/ M" G, K- Q. Y6 z, O

d! P; g+ @! T; @) V' X0 Z, g vshapes= 5 j7 L! u! }5 r1 v& S5 L! P

( w( \& x# w% x! K" d% ~1 W

& b9 l: q Q) \7 M( U, z   7 @' e2 T u; t$ w7 N

( v! d0 ^+ E$ X6 v

9 r6 I' N" Z1 w! w android签名的数字证书的一般都是采用 X.509的国际标准。 ) Y; C+ [2 ^3 u* d8 Y2 C- A

8 D$ K1 }) |* [' ~

: r& L" E0 X# w6 Z2 h, x" c( o1 {' H X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 b, S, S( C& t" z

! y, o1 s( l+ C3 ?2 h

; ]9 x' O5 ^/ U4 N8 A( I8 F2 N 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 + c3 i3 F9 x" b0 y

$ f$ v+ I5 j: `" f& C: ]

: |9 D& n x1 a1 K, ^ vshapes= 0 W" q; o5 [ ?" G- W& H

5 C) x- E1 c% M# B' C3 c# W$ {7 x

4 e' l! S+ a: W- |. @! @; n+ `   7 l( `+ [$ I# N( {

) Q5 @' C/ G# m# v7 L8 Y# d

! [7 N9 @1 I3 o7 ? 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( b. g4 ]0 l/ e& S7 w

6 G- m, S3 o, z- T7 ^

& T8 `5 H+ O& c c( I vshapes= ) [) a& e: b& B$ ]$ T/ Z

Q! ~ u9 A% Y+ w! x3 A4 Q4 N

" z9 f' q/ L9 ^1 |" T! I& | 2 n: A8 _% b; \ H% X* L7 i+ L

. C1 ]. G/ |/ a8 O. Q W

9 n3 @; }. X. r5 f   $ y0 L* ]- O, Z- b2 B3 y8 [( a

# h+ ~, n3 `+ v3 x2 T( W& ]1 z

' `* v, B9 M- y' x9 V 权限信息 8 N6 _2 w" |# N3 E+ k9 X* h

$ g9 @/ B$ Z7 r( v, c7 r8 K: q, Q

6 z3 c( `( S6 V, @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 _' m' p; i, r" q" S

! [7 ^, ~! V/ N1 K# X: y% [

) C2 A4 ^7 f/ v android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 m! A% B f- U8 M* `

. U. q h% K: ?+ C

3 @1 G5 s& b( `4 i vshapes= / w# y9 g L! K* Y, A" z1 Y

" j4 p3 C' Q/ v

8 m& M3 ~4 p0 \& }2 Z2 O e   0 X' j3 C( ?! m; ?0 I

* g, _2 _3 n2 u& w# j

; P) H" L! \3 s/ ?4 N1 |! C 下面对这个APP的所有权限进行详解下: 6 ~! Q8 |% ^& {0 Z

$ }: u( ?- e' {. D/ h

9 z" W% k1 |) p* p7 I android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ E# p% X. m4 v5 {* r- z3 `

9 q( p4 }/ b7 N6 D7 p

! _0 x) ?8 ?5 [8 j+ p6 t( m android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 % z7 S4 y! q ~- C* L* k% T

" I% u% K+ t4 V$ r& J( Z

5 d/ B9 S y' u+ p* |$ @; m android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 3 v# f, z& y+ K, @; i, H% W; e

, l# `0 L( D9 v/ j

% f( }$ L$ Y# Z* o1 j android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 % A; W9 A: G6 u* G& L* {" r

' a$ k8 F. L! v0 P

z5 O* b7 r5 o: |2 _- q3 m android.permission.WRITE_SMS:允许应用程序写短信内容 ) Y8 a+ v1 N0 _( e$ e1 G

" M* o T! T0 n

. q; d+ R' ?) m4 ]; Z android.permission.READ_SMS:允许应用程序读取短信内容 1 p6 I. H, g r/ J

1 L F& m+ q+ D% h( i9 A

6 K- ^: B, }! ]- s& O/ z$ J android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 p9 A* @' S% n. V

& ~3 V: L; @" k) k

( R$ W/ P5 h" P. A- d android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : I2 R* p- H9 H

8 @8 R- b- k& Y; u- J$ y

3 w* g9 z, T) u3 G( { android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ) `- @4 o" j5 M

3 _& X: b& [( A y8 h+ E: I- a( w* [

" p' {% b" A6 o J: l) p3 Q android.permission.VIBRATE:允许振动 % e7 Q0 @. O5 f" ]

8 {5 G) f4 j! X% ~1 q0 C

( X3 c+ h- N _! o; { android.permission.READ_LOGS:允许程序读取系统底层日志 7 h, l- M" r7 p7 V

, ^: n& x7 r7 J3 j4 f

% C2 M# A$ u" ?2 Z$ O% M/ @- i a android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  + B% a, k# s0 C

5 @( n+ u& A& s2 p5 W

3 P. [; k9 T8 O2 R   3 Z' T" g/ `5 W, p7 B

% [+ _5 H1 f" [9 C# Z

9 y% Y2 O8 p. Y ~" {8 t5 Y3 S 功能信息 * D1 i( z6 H' a; ~7 h5 v

2 V- L8 ~; p. e) C% z

M% k4 w5 Y3 w/ b6 |   ! S5 [' ~) |' K

; ` a& H; _( L6 h! D/ |7 z

5 V7 ] x1 z) [9 ?, @ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & l" `# M5 H& j) T

: C# a/ V& C) A1 g+ a/ x; H

2 i! n; ?; a0 W L. X& O Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % ]( y a( X7 K. [$ N

+ N) v( \6 I8 W9 a6 D& @* Z4 ?

4 e. b" |0 J) R4 B' _# S- i 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : s& q- W& p0 p5 X

- A9 s( |' a/ ?

+ @7 H! J+ }3 y: h, u1 C3 { 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * Y" B% ^7 h: ]

4 s6 m! ]$ I* F) F# ~" u7 ]

. r, N# G2 [2 n( _- J; [. d vshapes= " n9 Z E" d( C) r' B

: D+ c! a3 X" t, y

& g/ P2 Y0 [( m" _8 v5 C5 ]   7 h2 F* F' G- j( z7 Y; o

2 d9 O/ u$ I& N5 v* Q

" P7 R1 @% \: h _) ] 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 # P+ R* n6 E$ X& f/ v7 n

( [& f$ {9 I5 u; a& q: Q5 k4 p

3 ?* q$ N# k! K X; j. E7 Y vshapes= ) [( I% N6 D. X$ y R2 w

- R! z9 r: T$ I+ I; ?# p; ~

; `0 C0 I; Y6 A( v1 s0 ?   $ }* \% ?2 I% s7 F, M; }0 k

" l$ ^* G+ d! q6 ~) C

' U1 e+ I1 x5 y0 u9 Y5 @+ A lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 G) s) p! Y3 F) `; F9 |+ \- e0 Q. U

) l$ a l# a: C- G- z% R

+ q) M: y5 c/ L' i, ^ vshapes= 2 }. S! `: c1 A/ n, R3 d: v! H

% x" ?% r9 r" A; O

- t% T1 T0 B! c1 U) R" j: ?$ t 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ( N7 Y: s3 i7 q% @

+ W4 \5 M, {6 T3 [) ]

/ O0 v- T+ U* w3 z! P7 P vshapes= & \4 |7 l; k. T9 l! O- b

0 j3 D9 C7 Q9 O0 M6 P# ` ]4 {% ]* e. Z

0 I5 h# m* f& u! s# Q' Z$ e   ' Z' T* T1 x5 E1 P5 @2 L

g! j e" s" \; J/ R

7 h6 C8 v/ B' z \ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - L) C2 _1 ]! p$ ~

: ~- |7 x5 ~# W3 f' Z" z: E6 s

3 q2 m! n6 B$ U3 f LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # N7 t2 X B5 t" J

. r1 r' S( ?7 } E

- O' `3 F+ w3 G, `* z 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; h0 U) P5 M$ ?/ ?7 @8 \* M

_! [4 e: ]' Q/ v7 @/ f

" s6 w- H5 g" ^3 q& G8 R% u 源的luasocket代码可以参考学习下 * ^. \" y6 m* ~. L; U

* ^' A' i* H7 G1 @+ j( ^

" U5 y' P! f( v: v https://github.com/lunarmodules/luasocket 5 D9 m1 b, K" y' l( G5 W3 Y# |, O

7 t) d f; H5 X5 w

1 p5 { d* Q7 q# `/ \ https://github.com/fengye/luasocket 7 N1 ]" o+ Q! t/ c4 @) D3 b

. V4 _3 q& k5 K v

& T. M0 k4 g. n+ W8 G8 Q   : O. o; q! M$ v& w6 n9 ~0 l

9 [4 R$ f# m3 Z! n& D3 B3 _) @

- u* Z/ u' [8 l _6 E vshapes= 8 w4 q, Y2 ^( G5 e

) Q6 C/ z: Z; v

% {4 N8 Q: P/ q( p   7 h8 j' u" U' n/ N# Z8 G

' O6 b2 @1 f5 Q7 a1 L( c5 k0 r

" B% H: i( c# ^6 e$ l5 C   $ ] Q' h( a+ I9 O$ w2 l4 c

3 U% H3 S# d) e* \6 u

8 @# `& I3 `2 b N 总结 # o- L3 h- K# o; j( I4 L) i9 p: H

/ n' D$ ]) ] B# |8 C* @

- c2 m; x/ m6 J% s$ w ]) d7 j4 X" V 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 . u. V: _% T& `! J4 r% T4 Y: f1 N8 \; S

" p* f- Z& ~; S

2 e) F: a+ x: I 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 8 ]% ~; g( O( _% J/ Y

" K' Y% [# [$ l2 j8 j

9 B" I2 e: s& t/ V. {% M 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 % |! s* k" b6 X$ I

' i8 d [: O3 h1 m u$ N% R6 \

2 _* u2 u7 G6 z5 `9 { a 结束 4 v" y2 T' Z( b$ h, v

9 s, n0 K3 K- k3 {# L/ n

n4 [2 [2 G( q3 I# r2 `  【推荐阅读】 8 c9 x9 f7 L2 V- _+ A: h

4 X' j6 L4 l" d( m/ x1 `

, m$ L- u/ K1 I$ p& G. | 对吃鸡APP的分析 8 a! W4 ]3 Y" a" z

* O! A% S! y" U" \

: r7 h: q- x& X6 u' g 你需要了解的APP安全 - s1 i, r5 H; d& u

, v' r& g- q1 H. x! j7 Q# v0 |- x

, @# S% i( i h( S, v( I' ` 你需要了解的APP安全 8 t# z, `9 C8 y% `

- H6 I2 a1 [% I2 t2 g) E8 I

3 x2 v) ?* v/ L7 M   8 m3 e' B3 p# b$ S% ^! j8 y( Y: v' u






欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2