未root手机 ida动态调试安卓so文件—— 学习实践 《教我兄弟学Android逆向09 IDA动态破解登陆验证》

参考:
https://www.52pojie.cn/thread-742686-1-1.html

https://www.pianshen.com/article/6759779793

本文基本为https://www.52pojie.cn/thread-742686-1-1.html的复述,可能带一些个人心得感悟,建议没看过原文的先看原文。
我使用的ida版本为爱盘的ida7.0,手机为小米cc9e安卓10未root,调试的应用为原文附的crackme。
手机是arm64

静态分析

因为主要是想动态调试,静态就不多做介绍了,打开apk里的libJniTest.so,左侧找到这个函数进去,f5变为c代码,可以看到有三个字符串比较,第一个是签名校验,第二个是输入的用户名对比,第三个是输入的密码对比。
如果签名不对直接退出程序。
如果输入的用户名或者密码不对都会弹出登录失败,否则弹出登录成功。
(这个ida中文字符串不显示但是我也懒得折腾了。)
在这里插入图片描述

动态分析

动态调试就是在应用运行的时候边运行边调试,想做到动态调试就要借助adb、android_sesrver将ida与手机连接起来。先安装好要调试的apk(即原文中附的crackme)

准备工作

android_server

将android_server放到手机目录下并运行。如果你有root权限那么就好说了,不过像我这种没有root的,也有办法解决——就需要用到android studio。
首先手机数据线连上电脑,手机弹出连接选项选传输文件,手机设置开发者选项开启usb调试(待会如果手机弹出是否允许调试,选一律允许就行)。
然后安装android studio并打开,点开右下角的device file explorer

在这里插入图片描述
显示的应该是根目录,找到data/data目录下调试用的apk的包名,右键-Upload,然后选择ida目录下的android_server文件在这里插入图片描述
在这里插入图片描述
正常没有root的手机是没有把文件传到根目录的权限的,但是借助android studio就可以。
为什么一定要传到待调试应用的包名下?因为adb有个命令run-as+应用包名 ,可以获取应用数据,但仅限这个应用。
run-as还有一个要求,apk的AndroidManifest.xml文件中debuggable应该为“true”,待调试的apk已经是true了无需修改,如果修改了那么签名会变,待会调试的时候记得也要给签名下断点。

adb命令

现在就来用adb运行android_server。
打开cmd,输入adb shell,连上手机。
在这里插入图片描述
输入 run-as demo2.jni.com.myapplication,获取该包名下的数据
在这里插入图片描述
输入chmod 777 android_server将文件权限改为777
输入./android_server 运行
在这里插入图片描述
新打开一个cmd,输入adb forward tcp:23946 tcp:23946
在这里插入图片描述

ida连接

新打开一个ida,选择debugger-attach-remote armlinux/android debugger
填好hostname和port,点ok
在这里插入图片描述
在这里插入图片描述
出现当前正在运行的应用的包名,这里只有待调试应用的包名,其他应用没权限获取不到。选择这个应用。
如果没有出现这个包名,说明你没有打开这个应用,关掉这个页面,打开应用之后再attach一次。
在这里插入图片描述
进入调试界面
在这里插入图片描述

开始调试

查看so内函数

刚才静态分析查看的是libJniTest.so文件里的函数,所以我们去右侧modules中ctrl f 搜索找到这个so,双击进入找到那个函数
在这里插入图片描述
在这里插入图片描述

分析,下断点

双击进入函数,f5反编译,发现strcmp没识别出来,没关系,我们记住他就行
在这里插入图片描述
回到IDA View-PC,鼠标点一下这个没识别出来的strcmp,,相同的strcmp都会变黄,然后右键text view,给变黄的函数前面加上断点
如图。上面还有一个检测签名的字符串比较,如果没动过apk那个不用下断点。
在这里插入图片描述

修改内存

到目前为止,手机上的应用应该是卡住的。点击debugger中的continue process就可以正常运行了。然后输入用户名,密码,点击登录。
点击登录之后应该会卡住,然后看我们的ida,停在strcmp这一步
在这里插入图片描述
按f8单步执行,到下一步ldr,我们可以看到再下一步就是cbz,cbz R0, loc_C31B7F40百度一下就知道是R0寄存器为0的时候跳转。
还是转换到graphic view看吧
在这里插入图片描述
图中可以很明显看出,如果跳转的话,会跳到左边,进行密码的比较,那么右侧的就应该是显示登陆失败了。
所以我们是希望它跳转的,也就是希望R0寄存器为0.
那么现在r0是多少呢,在ida右上角General registers查看寄存器R0的值,可以看到是1。右键r0,点zero value,将其强制置为0.
在这里插入图片描述
再按f8单步执行,可以看到已经跳转到左侧。
在这里插入图片描述
按f9执行到下一个断点,再f8下一步,看到是cbnz,这个就是不为0才跳转。
虽然中文字符串没显示出来,但是也能看到刚才如果用户名比较不对,会跳到右侧,右侧函数连着下面的右侧,也就是下面右侧是显示 登录失败,那么也就是说我们这次不希望它跳转,希望r0还是0.
在这里插入图片描述
再看一下r0,还是1,那么再zero value一下,然后按f9继续往下执行,这时候看看手机上的应用,就会弹出登录成功的提示。在这里插入图片描述
结束=-=

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
推荐,超全的移动安全资料精编合集,共43份. Android安全安全技术: Emulator模拟器的配置和ROOT(终极版) 移动安全: MobSF-v3.0源代码分析【长文巨献】 移动安全: 我设计的Java代码混淆解决方案 Android安全安全技术: Android系统安全(上) Android安全安全技术: Android系统安全(下) Android安全安全技术: ARM汇编语言 Android安全安全技术: Small汇编语言 Android安全安全技术: 基础文件格式解析 Android安全安全技术: Android应用安全防护技术 Android安全安全技术: 其他Android安全知识总结 Android安全开发基础: 开发基础常识 Android安全开发基础: 四大组件之活动(Activity) Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全开发基础: 四大组件之内容提供器(Content Provider) Android安全开发基础: 进程间通信机制(IPC) Android安全开发基础: JVM Dalvik ART虚拟机 Android安全开发基础: Java本地接口(JNI) Android安全开发基础: Android系统的启动过程分析 Android安全开发基础: 图形界面(UI)和碎片(Fragment)(上) Android安全开发基础: 图形界面(UI)和碎片(Fragment)(下) Android安全开发基础: 持久化技术 Android安全开发基础: 多媒体 Android安全开发基础: 其他理论知识 Android安全开发基础: 应用程序配置文件详解(AndroidManifest.xml) Android安全逆向工程: 逆向工程知识技能补充篇 Android安全软件壳: 说说Android软件壳 Android安全应用逆向: 反编译classes.dex文件 Android安全应用逆向: 使用Apktool解包并打包 Android安全应用逆向: 使用IDA静态分析so文件 Android安全应用逆向: 动态调试Smali源码 Android安全应用逆向: 使用IDA动态调试.so文件 Android安全应用逆向: 在JNI_onload函数处下断点避开针对IDA的反调试 Android安全应用逆向: Small注入 Android安全应用逆向: 破解java层的签名校验 Android安全应用逆向: 破解NDK层的签名校验 Android安全应用逆向: 使用IDA Pro进行脱壳 Android安全应用逆向: 加密算法基础 Android安全Hook: Hook技术简介 Android安全Hook: Xposed源码分析(一) Android安全Hook: Xposed源码分析(二) Android安全Hook: Xposed源码分析(三) Android安全Hook: Xposed源码分析(四)
### 回答1: 学习Android逆向PDF这个过程需要一定的时间和专业知识。首先,你的兄弟需要了解Android开发和Java编程语言。他可以通过学习相关的材、在线课程或者参加培训班来掌握Android开发的基本知识。 接下来,他需要了解PDF的相关知识,包括PDF的结构和格式,以及如何解析和操作PDF文件。可以推荐他阅读一些专业的书籍或者参考一些在线程。 在学习Android逆向方面,他需要了解Android的工作原理、应用程序分析的基本流程和相关工具的使用。可以推荐他使用一些逆向工具,例如apktool、DEX2Jar、jadx等,这些工具可以帮助他分析和反编译Android应用程序。 此外,了解逆向工程的基本知识也是很重要的,包括逆向分析的步骤、常用的逆向技术和工具等。他可以通过阅读一些专业的逆向工程书籍或者参加一些逆向工程的培训班来学习这方面的知识。 最后,学习Android逆向PDF需要不断的实践和实验。他可以选择一些简单的Android应用程序进行分析和修改,然后逐渐深入研究更复杂的应用程序。 总之,学习Android逆向PDF需要充分的准备和学习,希望以上的建议可以对你兄弟有所帮助。 ### 回答2: 学习Android逆向PDF是一项复杂的任务,需要具备一定的编程和计算机知识。下面是一个简单的步骤,以帮助你的兄弟开始学习Android逆向PDF。 首先,他需要掌握基本的编程知识,特别是Java语言。因为Android开发主要使用Java编程,了解Java语法和面向对象编程的概念对于理解和编写逆向代码很重要。 接下来,他需要学习Android的基础知识,包括如何创建和设置应用程序、布局和UI设计、活动和片段的使用等等。这将有助于他了解Android应用程序的结构和功能,从而更好地进行逆向分析和修改。 在掌握了Java和Android基础知识之后,他可以开始学习关于逆向工程的知识。逆向工程主要涉及反编译、调试和分析应用程序的代码和逻辑。他可以学习使用工具如JD-GUI、APKTool和IDA Pro等对应用程序进行反编译,以获取代码和资源文件。 接下来,他需要学习如何使用调试器来分析逆向的应用程序。调试器可以帮助他理解应用程序的工作原理和关键功能。他可以使用工具如Xposed框架或Frida来对应用程序进行hook,以便在运行时获取和修改数据。 最后,他需要不断实践和尝试。逆向工程是一个复杂的过程,需要不断的尝试和解决问题。通过参与逆向工程项目、阅读相关文档和论坛,以及与其他逆向工程师交流,他将能够提升他的技能和知识。 综上所述,要学习Android逆向PDF,你的兄弟需要学习编程和Android开发的基础知识,掌握逆向工程相关的工具和技术,并不断实践和尝试。这是一个长期的过程,需要耐心和持续的学习。 ### 回答3: 学习安卓逆向PDF需要一些基本的知识和技能。以下是我给你兄弟的一些建议和步骤: 首先,要学习安卓逆向工具和技术,他可以从学习Java编程语言开始。Java是Android开发的基础,了解Java可以帮助他更好地理解Android逆向过程。他还需学习如何使用反编译工具,例如dex2jar、Apktool和JADX等。 其次,他需要了解Android应用程序的结构和工作原理。阅读有关Android应用程序开发和框架的书籍或程,这将帮助他更好地理解Android逆向工程。 接下来,建议他学习Android逆向工具的使用。这些工具通常用于分析和修改APK文件,例如获取源代码、查看资源文件和修改应用程序的行为。他应该熟悉逆向工具的基本操作,例如反编译APK文件、分析Smali代码和调试应用程序。 此外,他应该参加相关的培训课程或工作坊,或者参考网上的程和指南。这些资源可以帮助他了解更多关于安卓逆向的技术和最佳实践。 最后,我鼓励他通过实践来巩固所知识。他可以选择一些开源的安卓应用程序进行逆向分析,并尝试修改应用程序的行为。通过实际操作,他将更好地理解逆向工程的流程和技巧。 需要注意的是,逆向工程需要遵守法律和道德准则,所以请确保他将技能用于合法和道德的目的,并尊重开发者的知识产权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值