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: /
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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)