首页
社区
课程
招聘
[原创]安卓日记_AndroidStudio动调Smali
发表于: 2022-10-17 09:19 6526

[原创]安卓日记_AndroidStudio动调Smali

2022-10-17 09:19
6526

AndroidStudio动调Smali

说明

建议先简单看过全文后再操作,避免不必要的操作,纯兴趣更新!

获得Smali

这里还用第一天自己写的apk.

 

1.通过Android Killer反编译去获取

 

将它拖入到AK中进行反编译

 

选中smali右键点击属性即可进行到反编译后得到Smali所在的文件夹

 

2.通过解压apk提取dex,使用baksmali.jar d classes.dex得到Smali代码

1
java -jar baksmali.jar d classes.dex

第二种怎么看都会更方便些。

 

把Smali代码在的目录给重命名为src即可

 

另外,这里要注意下apk的package名和入口Activity

 

 

3.使用apktool工具将apk给反编译

1
2
3
4
5
6
7
8
9
10
11
12
java -jar apktool.jar d *.apk
I: Using Apktool 2.6.1 on app-debug.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\yangmutou\AppData\Local\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

反编译后会生成一个以apk文件名命名的目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
APP-DEBUG
├─.idea
├─original
│  └─META-INF
│      └─com
│          └─android
│              └─build
│                  └─gradle
├─res
│  ├─anim
│  ├─color
│  ├─color-v21
│  ├─color-v23
│  ├─drawable
│  ├─drawable-anydpi-v21
│  ├─drawable-anydpi-v24
│  ├─drawable-hdpi
│  ├─drawable-ldpi
│  ├─drawable-ldrtl-hdpi-v17
│  ├─drawable-ldrtl-mdpi-v17
│  ├─drawable-ldrtl-xhdpi-v17
│  ├─drawable-ldrtl-xxhdpi-v17
│  ├─drawable-ldrtl-xxxhdpi-v17
│  ├─drawable-mdpi
│  ├─drawable-v21
│  ├─drawable-v23
│  ├─drawable-watch-v20
│  ├─drawable-xhdpi
│  ├─drawable-xxhdpi
│  ├─drawable-xxxhdpi
│  ├─layout
│  ├─layout-v17
│  ├─layout-v21
│  ├─layout-v22
│  ├─layout-v26
│  ├─layout-watch-v20
│  ├─mipmap-anydpi-v26
│  ├─mipmap-hdpi
│  ├─mipmap-mdpi
│  ├─mipmap-xhdpi
│  ├─mipmap-xxhdpi
│  ├─mipmap-xxxhdpi
│  ├─values
│  ├─values-af
│  ├─values-am
│  ├─values-ar
│  ├─values-as
│  ├─values-az
│  ├─values-b+sr+Latn
│  ├─values-be
│  ├─values-bg
│  ├─values-bn
│  ├─values-bs
│  ├─values-ca
│  ├─values-cs
│  ├─values-da
│  ├─values-de
│  ├─values-el
│  ├─values-en-rAU
│  ├─values-en-rCA
│  ├─values-en-rGB
│  ├─values-en-rIN
│  ├─values-en-rXC
│  ├─values-es
│  ├─values-es-rUS
│  ├─values-et
│  ├─values-eu
│  ├─values-fa
│  ├─values-fi
│  ├─values-fr
│  ├─values-fr-rCA
│  ├─values-gl
│  ├─values-gu
│  ├─values-h720dp
│  ├─values-hdpi
│  ├─values-hi
│  ├─values-hr
│  ├─values-hu
│  ├─values-hy
│  ├─values-in
│  ├─values-is
│  ├─values-it
│  ├─values-iw
│  ├─values-ja
│  ├─values-ka
│  ├─values-kk
│  ├─values-km
│  ├─values-kn
│  ├─values-ko
│  ├─values-ky
│  ├─values-land
│  ├─values-large
│  ├─values-ldltr-v21
│  ├─values-lo
│  ├─values-lt
│  ├─values-lv
│  ├─values-mk
│  ├─values-ml
│  ├─values-mn
│  ├─values-mr
│  ├─values-ms
│  ├─values-my
│  ├─values-nb
│  ├─values-ne
│  ├─values-night
│  ├─values-nl
│  ├─values-or
│  ├─values-pa
│  ├─values-pl
│  ├─values-port
│  ├─values-pt
│  ├─values-pt-rBR
│  ├─values-pt-rPT
│  ├─values-ro
│  ├─values-ru
│  ├─values-si
│  ├─values-sk
│  ├─values-sl
│  ├─values-sq
│  ├─values-sr
│  ├─values-sv
│  ├─values-sw
│  ├─values-sw600dp
│  ├─values-ta
│  ├─values-te
│  ├─values-th
│  ├─values-tl
│  ├─values-tr
│  ├─values-uk
│  ├─values-ur
│  ├─values-uz
│  ├─values-v17
│  ├─values-v18
│  ├─values-v21
│  ├─values-v22
│  ├─values-v23
│  ├─values-v24
│  ├─values-v25
│  ├─values-v26
│  ├─values-v28
│  ├─values-vi
│  ├─values-watch-v20
│  ├─values-watch-v21
│  ├─values-xlarge
│  ├─values-zh-rCN
│  ├─values-zh-rHK
│  ├─values-zh-rTW
│  ├─values-zu
│  └─xml
└─smali
    ├─android
    │  ├─arch
    │  │  ├─core
    │  │  │  ├─executor
    │  │  │  ├─internal
    │  │  │  └─util
    │  │  └─lifecycle
    │  │      ├─livedata
    │  │      │  └─core
    │  │      └─viewmodel
    │  └─support
    │      ├─annotation
    │      ├─asynclayoutinflater
    │      ├─compat
    │      ├─constraint
    │      │  ├─helper
    │      │  ├─motion
    │      │  │  └─utils
    │      │  ├─solver
    │      │  │  ├─state
    │      │  │  │  └─helpers
    │      │  │  └─widgets
    │      │  │      └─analyzer
    │      │  └─utils
    │      ├─coordinatorlayout
    │      ├─coreui
    │      ├─coreutils
    │      ├─cursoradapter
    │      ├─customview
    │      ├─design
    │      │  └─widget
    │      ├─documentfile
    │      ├─drawerlayout
    │      ├─fragment
    │      ├─graphics
    │      │  └─drawable
    │      ├─interpolator
    │      ├─loader
    │      ├─localbroadcastmanager
    │      ├─print
    │      ├─slidingpanelayout
    │      ├─swiperefreshlayout
    │      ├─v13
    │      │  └─view
    │      │      └─inputmethod
    │      ├─v4
    │      │  ├─accessibilityservice
    │      │  ├─app
    │      │  ├─content
    │      │  │  ├─pm
    │      │  │  └─res
    │      │  ├─database
    │      │  │  └─sqlite
    │      │  ├─graphics
    │      │  │  └─drawable
    │      │  ├─hardware
    │      │  │  ├─display
    │      │  │  └─fingerprint
    │      │  ├─internal
    │      │  │  └─view
    │      │  ├─math
    │      │  ├─net
    │      │  ├─os
    │      │  ├─print
    │      │  ├─provider
    │      │  ├─text
    │      │  │  └─util
    │      │  ├─util
    │      │  ├─view
    │      │  │  ├─accessibility
    │      │  │  └─animation
    │      │  └─widget
    │      └─v7
    │          ├─app
    │          ├─appcompat
    │          ├─content
    │          │  └─res
    │          ├─graphics
    │          │  └─drawable
    │          ├─text
    │          ├─view
    │          │  └─menu
    │          ├─viewpager
    │          └─widget
    ├─androidx
    │  ├─core
    │  │  ├─graphics
    │  │  │  └─drawable
    │  │  └─internal
    │  └─versionedparcelable
    └─com
        └─example
            └─ni0822

后面导入的时候直接导入这个目录就可。

AS安装ideasmali插件

打开File-Settings-Plugins搜索idesmali发现并没有该插件

我们进行本地install,首先下载该插件

 

插件官网下载地址

 

https://bitbucket.org/JesusFreke/smali/downloads/smalidea-0.05.zip

 

然后再箭头处导入刚下载的插件

 


这里有安装第三方插件的提示,

 

 

Accept就好,然后就能在installed里面看到了

 

 

建议重启下AS(习惯了).

 

这里坑到我了,我后面导入Smali代码后里面的一些代码一直爆红色,是因为这个插件重启后没有安装加载成功。搜了搜,看到了这个链接

1
https://blog.51cto.com/lilongsy/5456865

 

虽然我有安装InteliJ IDEA,但我懒得换,于是又发现了这个

 

(30条消息) AndroidStudio4.2.1 安装 Smalidea-0.6_Sheep懒的博客-CSDN博客_smalidea安装

 

即下载更高版本的Smalidea,应该是新版本的AS不支持加载老版本的Smalidea的原因吧(仅猜测)

 

然后同样的操作,导入成功。

开始动态

动调之前,需要有个前提条件看AndroidManifest.xml中的application中的android:debuggable要为true,如果为flase或者不存在的话,要修改添加后才能调试.

 

 

首先将apk安装到手机上面(真机真香)

 

导入反编译后的目录

 

AS如果有打开的项目给关闭掉回到初始界面

 

 

点击open选择apktool反编译后的目录

 

然后点击smali目录右键->Mark Directory->Source Root(我这里是设置过后才有青色的背景的,没设置之前是白色背景)

 

 

因为插件idesmali成功加载了所以打开Smali代码是可以成功解析的,不会爆红。

 

 

配置SDK

 

 

 

通过adb以debug的模式开启该apk入口的Activity

1
2
3
>adb shell am start -D com.example.ni0822/com.example.ni0822.MainActivity
 
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.ni0822/.MainActivity }

然后手机会是这个样子

 

进shell获得对应的进程号,根据包名

1
2
taimen:/ # ps -A | grep "ni0822"
u0_a91       11036   737 4307812  34300 futex_wait_queue_me 78f5d6a4b0 S com.example.ni0822

端口转发

1
adb forward tcp:5005 jdwp:6204

配置远程,点击Run-Edit Configurations

 

配置5005端口(和端口转发时的要一致,然后点击Apply)

 

 

下断点,点击行数右侧即可

 

 

开启Debug,点击左侧按钮或者Run->Debug 'test'

 

 

但报错

1
Error running 'test': Unable to open debugger port (localhost:5005): java.io.IOException "handshake failed - connection prematurally closed"

 

但没解决掉这个报错问题,不过新版本的AS调式Smali代码根本不用这么麻烦的。

 

只需要

 

1.安装apk,并运行它

 

2.adb连接到手机

 

3.Run-Attach to Process

 

 

点击箭头指向的位置

 

选择进程的包名

 

 

4.成功连接

 

 

5.下断点,点击行数右侧即可

 

 

然后输入用户名和密码点击登录

发现调试成功

 


表示新版本真好用。

参考

【新提醒】《教我兄弟学Android逆向04 动态调试smali代码 》 - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 310
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本人菜鸡一枚,欢迎大佬们陆续加入到QQ群 801022487 一起交流学习
2022-10-17 09:23
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
用新版的就是方便啊
2024-10-23 16:54
0
游客
登录 | 注册 方可回帖
返回
//