第一篇地址如下:
- jadx与apktool运用
- app 文件基本知识
爬虫进阶(安卓逆向)安卓基础与逆向工具(1)
https://blog.csdn.net/weixin_44238683/article/details/118371603
一、adb与夜神模拟器
adb命令,相当于手机与电脑交互的一种工具
windows下adb与夜神模拟器配置
https://blog.csdn.net/shenshenruoxi/article/details/107525902
使用案例(按照上面的链接配置好)
链接夜神模拟器,查看链接的设备
nox_adb.exe connect 127.0.0.1:62001 #【62001是夜神模拟器的端口号】
adb devices -l
安卓设备列表
adb devices
adb devices 显示device unauthorized
adb kill-server
adb start-server
进入安卓shell
adb shell
安卓日志
adb logcat
adb logcat -s keyword
把文件推送进安卓设备
adb push
打印AndroidManifest.xml
adb shell dumpsys activity top
adb shell dumpsys package packagename
adb install XXX.apk
adb uninstall packagename
拉取安卓文件到本地
adb pull android-path local-path
推送本地文件到安卓
adb push local-path android-path
adb shell pm clear package_name
网易模拟器
adb connect 127.0.0.1:755
二、smail
1、是一种文本文件
2、在拿到一个apk文件时候通过apktool反编译后会将, Dex文件
成smail文本文件
3、一个smali
文件对应一个 .java
代码,java文件名
与smail文件
名称可以知其一寻找其对应文件,smail文件
中语法.line
跟 .java
文件的代码行数对应
4、java代码不可以轻易修改,比如反编译后,通过jadx工具
发现java代码
里面里面有启动签名校验的函数,不可天真以为,
直接注释,或者删除,可以根据行数
去smail文件中注释修改,因为java代码是通过编译后的,如果直接修改,会造成无法安装启动app
三、破解安装签名校验
破解安装签名校验,在第二小节已经详细阐述,总结如下两点:
- 修改smali文件 【本文章会介绍运用】
- hook技术 【后面文章会讲到】
四、APK启动加载
1.App启动加载流程:(简要阐述)
一个APP启动,Dalvik虚拟机会加载dex文件
什么是Dalvik虚拟机
Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
什么是dex文件
,在我上一篇博客有提到
Java层Dex加载流程:
BootClassLoader ---> PathClassLoader ----> DexClassLoader
BootClassLoader
是安卓系统设备的一些函数方法,还有pathclassloader
,DexClassLoader
是经常所说脱壳
所会用到的,这些都是开发好的,不能直接在Dexclassloader
进行修改,但是可以通过hook
技术去控制函数的逻辑,“不改变原本函数逻辑,加入自己的逻辑”
大概就是hook
Native层Dex加载流程:
libdvm.so (重编译 system.img)
OpenDexFileNative
Native底层脱壳,so文件修改,so文件是系统函数包,脱壳难度大,要懂得c语言hook
,所以一般下手
还是从dex逻辑层
下手
2.APP加载流程(详解)
在上一篇博客,已经提及
一个app理论上只有一个application
androidmainfest.xml有什么用
上面这幅图就是一个app启动的流程
- 一个app有图标,当按下图标的时候 “
click event
” 触发事件 oncreate
系统函数激活(有些APP开发人员会重写此系统函数名),然后到了上图蓝色部分发出两个信号LAUNCH_ACTIVITY
,BIND_APPLICATION
,一个调BIND_APPLICATION
一个APP只有一个application,此为APP启动的第一个主函数入口,跟oncreate()
也有联系LAUNCH_ACTIVITY
既上篇博客提到的,activity
启动界面(在androidmainfest.xml中),会看到类似广告啥的跟onstart()
也有联系- 而后就是调用相关的组件功能(上图,橙色,绿色,蓝色,部分略过,没什么太大关系)
五、APP四大组件
2、3、4没有太大关系~~~
1、Activity:
一个Activity通常就是一个界面,可以参考上篇文章,androidmainfest.xml中activity中welecome什么的,类似欢迎界面
<activity android:name="">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
2、Service:
后台服务,播放音乐,数据处理等
3、Broadcase receiver
异步接收广播
4、Content provider:
内容共享
六、 绕过签名验证实例
书旗app绕过签名
链接:https://pan.baidu.com/s/19Au0tWhm7ok9iROHANW9kg
提取码:djbm
后面会用到命令
1、拖动app到夜神模拟器
可以发现安装成功,且成功进入
2、apktool反编译书旗app
apktool d shuqi.apk
3、重新打包
打包太久,截取部分
apktool b shuqi
4、重新签名,安装签名,拖动动夜神安装
进入dist目录
4.1 重新签名
keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
执行完毕,会生成一个签名文件
4.2 安装签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias
执行完,生成一个app
4.3 安装app
安装成功,但是无法打开,打开就闪退
原因:
- app做了签名校验,它本身签名是写进了代码,每次启动会校验签名,比对发现不对,会让系统退出
- 现在目标找到签名目标在什么地方
5、寻找校验签名代码在何处
5.1 分析androidmainfest.xml文件
一个APP理论上只有一个application,结合上面4.1节,以及上一篇文章知识
android:name="android.taobao.atlas.startup.AtlasBridgeApplication"
5.2 运用jadx工具定位签名代码
那么启动函数会是这个吗AtlasBridgeApplication
,前面包含了taobao,但是感觉不太对,是淘宝的东西,于是去百度
原来是偷偷替换了入口,那么打开jadx工具
,反编译源码
秉着 “一个APP理论只有一个application”
的原理,尝试去搜 application
关键字,找到原生的app入口
原来这就是app入口,在点击右下角转到此处代码:
分析代码
如何快速定位代码:
- 靠着猜,和关键词敏感度
- 签名单词,sign
- 那么一定会有 if 判断之类的逻辑
- 关键词 check、verify、password、什么的
带着以上的思路搜索也好,看也好,就能快速定位
结合4.2节 APP加载流程提到的 oncreate()
可以快速定位
也可以通过关键 sign
查找
以上知道了,checkSigAsync()
函数是启动校验的方法,并且知道了 在java中行号为138行
5.3 通过smail绕过签名验证
-
在上面已经定位到了java 的 签名验证 校验代码的行数为138行,那么如何绕过呢?
-
删除、注释,
checkSigAsync()
? -
当然是不可以改变java现有逻辑,因为涉及编译,会导致编译失败,ap无法使用等
那么在前面提到,appktool
会将dex文件
反编译成smail文件
,那么修改smail文件
即可
在前面jadx操作的时候知道,java文件为路径即名称
那么对应到smail文件
定位到.line 138
,删除关联smail代码
5.4 重新打包安装
前面因为举例,随意修改签名打包安装不上app,所以删除dist和build两个文件夹,再重新打包
打包app
apktool b shuqi
生成签名文件
keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
进入dist文件目录下再执行下面命令
为app安装签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias
重新拖动到夜神
结束!!!!!!
给个赞吧,收藏下吧,转发下吧!
下一篇将运用adb,本节没有用到,只是为了安装夜神的时候,顺带加进去了!!!