吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 82257|回复: 227
收起左侧

[Android 原创] 《教我兄弟学Android逆向04 动态调试smali代码 》

    [复制链接]
会飞的丑小鸭 发表于 2017-11-7 00:04
本帖最后由 会飞的丑小鸭 于 2018-7-23 14:11 编辑

上一篇《教我兄弟学逆向03 破解第一个Android游戏》我带你用另一种方式破解了切水果游戏 我布置的课后作业你也完成了 并且自己又独立破解了另外几款游戏  很不错 在这里表扬一下-威 ! 希望其他同学都能向威同学学习  努力提高自己的逆向技术!   

要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学!    --致选择

在开始本节课之前我有个问题 为什么要学习动态调试smali 也就是为什么要学习本节课?

答: 因为我在招聘网站上面看到很多招逆向的公司都要求要会动态调试smali代码 因为《教我兄弟学逆向》系列课程就是为找工作而生的 并且有些东西通过静态分析是分析不出来的 要动静结合分析出来的东西才能更加全面。

那么本节课要教你的是用AndroidStudio动态调试smali 下面开始今天的教程

既然这节课我要教你的是用AndroidStudio动态调试smali 那么在开始动态调试smali之前 首先要把要调试的apk反编译成smali文件然后导入到用AndroidStudio中 对不对?
那么把怎么把这个apk反编译成smali文件呢?

你回答:我以前都是直接把apk拉到AndroidKiller这个软件中 然后AndroidKiller自动就会把apk反编译成smali文件了

回答正确 可以啊兄弟! 用现在流行的一句话说 给你打call !

那么我现在给你演示这种方式

一.用AndroidKiller把apk反编译成smali文件

apk链接:https://pan.baidu.com/s/1smNIrST 密码:uzsa

1. 首先把apk拉到AndroidKiller中 点工程管理器 点smali目录右键 打开方式-打开文件路径

01.png

2.在E盘新建一个jwx02文件夹 然后把打开文件路径目录里的smali文件夹复制到E盘并改名为src 然后就可以用AndroidStudio导入src了

02.png
二  要用AndroidStudio动态调试smali代码 首先要安装ideasmali插件
1.打开AndroidStudio
2. 安装ideasmali插件,File->Settings->Plugins,下载安装ideasmali插件。

ideasmali下载链接:
链接:https://pan.baidu.com/s/1htl26qS 密码:0pre

03.png

04.png
三. 打开Android Device Monitor

05.png

06.png

四. 找到要调试APK的包名和入口的Activity

1.用AndroidKiller打开要调试的APK 这里是jwx02.apk

2.记住包名hfdcxy.com.myapplication 和入口的Activity名 hfdcxy.com.myapplication.MainActivity

07.png

3.这里要注意一下 在application标签里面要有 android:debuggable="true" 这句代码,没有是不能调试apk的  现在调试的这个例子默认是有这句代码的 有的apk中没有这句代码要自行添加上

08.png
五 把自己要调试的APK安装到手机中 并用数据线连接手机 打开USB调试模式

六 打开命令行 输入命令 adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity  对apk进行动态调试 这条命令运行后手机屏幕将会进入到调试界面(如果手机屏幕没有进入到调试界面说明USB没有连接好手机 或者USB调试模式 没有打开 或者其他原因)
09.png

七.查看Android Device Monitor 记住下图圈起来的两个值 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败)

10.png
八.打开命令行窗口 输入命令 adb forward tcp:8700 jdwp:19509    转发8700 端口 (这里 jdwp是自己Android Device Monitor中要调试app的Online值 )
11.png


九. 导入jwx02文件
1.用AndroidStudio导入jwx02
12.png
13.png

14.png

2.然后一路Next 最后点Finsh
15.png

十 点击Android选择Project 对之前反编译的 jwx02/src文件夹右键-->Make Directory As --->Source Root
16.png

17.png

十一 配置远程调试的选项,选择Run-->Edit Configurations 并增加一个Remote调试的调试选项,端口选择:8700
18.png

19.png

20.png

十二 选择File-->Project Structure 配置JDK
21.png

22.png

十三 在Smali中下好断点 断点的意思是程序运行到下断点的那行代码就会断下来
23.png

十四 下好断点之后Run-->Debug'smali',这里的smali是我们之前配置好的调试选项
24.png

十五 此时手机会进入程序 在手机上输入用户名和密码 点登陆 程序会断在我下的断点处
25.png

十六 在自己关心的语句前面下断点按F8执行下一步 F9运行程序 可以看到程序执行的逻辑 Watches窗口中可以点+按钮添加自己想看的寄存器的名字 就可以看到这个寄存器的值了
26.png

结束
本节课给你讲了用Android动态调试smali代码
当然教程讲的并没有这么详细 破解过程中遇到不懂得自己去百度 再不懂的就来问我 学习逆向就是这样 学不会就会感觉迷茫 但是不用怕 记住多迷茫几次就都学会了 本节课的例子一定要多练习 多跟着课程做几遍 自己多下断点看程序的执行逻辑 每节课布置的课后作业一定要完成 课后作业都不做的话 那我的帖子你也不用继续跟了 学而不思则罔,思而不学则殆 ,不仅要完成还要能理解 那么本节课教程到此结束 下节课我将教你在smali中代码中插入log 。

课后作业:
把本节课的例子动态调试三遍 尝试在不同位置下断点 多下断点 多看寄存器的值 分析程序执行的逻辑



下一篇 《教我兄弟学Android逆向05 在smali代码中插入log


免费评分

参与人数 58威望 +2 吾爱币 +74 热心值 +56 收起 理由
筠溪 + 1 + 1 谢谢@Thanks!
科技技能 + 1 + 1 用心讨论,共获提升!
邓啸宇 + 1 + 1 谢谢@Thanks!
a449774181 + 1 + 1 谢谢@Thanks!
shock-c + 1 + 1 谢谢@Thanks!
hqucsx + 1 谢谢@Thanks!
CZ水星 + 1 + 1 谢谢@Thanks!
tjx199802 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wsygodpplike + 1 + 1 我很赞同!
humixiao + 1 谢谢@Thanks!
zhang53000 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
HarryPeter + 1 + 1 谢谢@Thanks!
CrazyDoraemon + 1 + 1 谢谢@Thanks!
zys645 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
编草鞋的蚂蚱 + 1 + 1 谢谢@Thanks!
在路上的人 + 1 + 1 用心讨论,共获提升!
xxzj990 + 1 + 1 不错
52lxw + 1 + 1 我很赞同!
deva + 1 + 1 谢谢@Thanks!
民以玩为天 + 1 + 1 用心讨论,共获提升!
安卓逆向一切 + 1 + 1 已答复!
debug_cat + 1 + 1 新手学到很多东西,希望楼主继续出下去。分享好技术
LowerAI + 1 + 1 谢谢@Thanks!
szweifj + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
黑宝宝 + 1 + 1 我很赞同!
gpedit + 1 + 1 谢谢@Thanks!
xiaoxi2011 + 1 + 1 谢谢@Thanks!
云幻灭 + 1 + 1 谢谢@Thanks!
xsnxxpxzx520 + 1 + 1 谢谢@Thanks!
李小木 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yanyu + 1 + 1 热心回复!
拂晓天涯 + 1 + 1 已答复!
95535916 + 1 + 1 谢谢@Thanks!
黑夜无情 + 1 + 1 谢谢@Thanks!
shanhuyi + 1 + 1 值得看
hzlazjp + 1 + 1 谢谢@Thanks!
tong_wen2504 + 1 谢谢@Thanks!
丿void + 1 + 1 谢谢@Thanks!
再睡一夏丶 + 1 + 1 谢谢@Thanks!每天侯更
zouxm2008 + 1 + 1 热心回复!
退役单身 + 1 + 1 谢谢@Thanks!
sunnylds7 + 1 + 1 谢谢@Thanks!
xaoxao + 1 谢谢@Thanks!
夏雨微凉 + 2 + 1 谢谢@Thanks!
凹凸曼。 + 2 + 1 谢谢@Thanks!
superzhangxue + 1 + 1 继续学习
alexkaer + 1 + 1 谢谢@Thanks!
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
164738777 + 1 + 1 谢谢@Thanks!
刘妖孽 + 1 + 1 谢谢@Thanks!
Hmily + 1 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xjun + 1 + 1 良心教程,真兄弟
明月相照 + 1 + 1 谢谢@Thanks!
myqqq + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
真爱贤 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
peter_king + 1 谢谢@Thanks!
ckeo66 + 1 + 1 值得看看滴哟
firefly007 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

52pojie74 发表于 2018-7-24 18:26
以前就来学习了,现在有账号,特来回复感谢。
gpedit 发表于 2017-11-7 23:55
打开命令行窗口 输入命令 adb forward tcp:8700 jdwp:8209    转发8700 端口 (我这里的app的Online值是8209 ),我这里android Device Monitor已经关闭,但输入后显示:
0022.png
javascript:;
在android studio底部的Terminal窗口中输入: netstat -aon|findstr 8209 查看,也没有看到有进程占用此端口,求教此问题如何解决??

点评

Andriod Device Monitor 查看完PID就关闭掉.要不然就出现你这样的问题  发表于 2018-12-28 22:25
小疯子online 发表于 2018-5-7 21:48
有个问题想问下楼主  就是有的apk反编译以后会出现多个dex文件  这样的话我们该怎么进行项目的导入
wlpkcheng 发表于 2018-1-13 08:13
过林黑马 发表于 2018-1-12 20:39
打开Android device monitor 找不到自己的进程啊,谁知道怎么回事。例子是楼主的demo,没有改动。

adb shell am start -D -n 包名/入口
这个命令你打了没有?  输入命令后手机会不会弹出一个对话框  意思是等待调试,如果还是不行的话,就要去   你APP下的AndroidManifest.xml  中加入android:debuggable="true"  还需要重新编译,,然后打包,安装   


一般在DDMS的devices下可以看到设备的运行进程,但是有时候连上真机之后却看不到了,或者是只能看到一两个系统进程,如果想看到自己进程的话, 可以试试在AndroidManifest.xml文件的application标签下,添加android:debuggable="true",再编译一下应该就可以了。
Eclipse自动为应用程序处理了这个修改。即当在eclipse下编译debug版本时,会自动加上debuggable=true,而如果是release版本,默认不加。按道理在eclipse下是不会遇到这个问题的。当然如果你是反编译的别人的apk,那你可以添加上之后再重新打包。
itliangren 发表于 2017-11-9 16:25
gpedit 发表于 2017-11-7 23:55
打开命令行窗口 输入命令 adb forward tcp:8700 jdwp:8209    转发8700 端口 (我这里的app的Online值是8209 ...

刚开始我的也是这种情况  后来我把我的一个Android Wifi ADB 插件停用了就好了

你可以试试是不是你的什么插件导致端口占用或者其他

或者你直接关掉studio
sunbester 发表于 2020-2-12 11:17
本帖最后由 sunbester 于 2020-2-12 11:24 编辑
gpedit 发表于 2017-11-7 23:55
打开命令行窗口 输入命令 adb forward tcp:8700 jdwp:8209    转发8700 端口 (我这里的app的Online值是8209 ...

as 3.5.2中测试可以不用关dmms 继续调试;
另外可以不用打开dmms 执行adb shell ps|findstr  hfdcxy.com.myapplication(包名)获取进程号,然后adb forward tcp:8700 jdwp:进程号
pid.png
wlpkcheng 发表于 2018-1-13 08:14
过林黑马 发表于 2018-1-12 21:08
host文件在哪里修改,小白不知道hosts文件在哪里

只能说你懒的可以,问一下度娘。。。

C:\Windows\System32\drivers\etc
不忘记你的眼睛 发表于 2017-11-7 00:18
学习了,每天学一点,积少成多
shaoyiwei 发表于 2017-11-7 00:57 来自手机
学习了,很好的教程
黑色魔方 发表于 2017-11-7 01:39
学习了,很好的教程
Donald_Gao 发表于 2017-11-7 04:38
非常感谢!
好好学习,天天向上!!!
陈新约 发表于 2017-11-7 06:59
感谢分析!
陈新约 发表于 2017-11-7 07:00
感谢分享1!
LeiSir 发表于 2017-11-7 07:08
谢谢,非常感谢
麦迪就是帅 发表于 2017-11-7 07:38
厉害,厉害!!!
真爱贤 发表于 2017-11-7 07:48
支持楼主,有图有文字,对小白帮助很大!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 16:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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