[Android]第一个cm调试分析
0x00:写在前面
一直想入门Android安全,当时是极客大挑战出题的时候,被cx表哥甩锅强行去学了点android的开发,之后慢慢接触,感觉还是挺有意思的。cx表哥说先从逆向分析入门吧,之后可以搞加固/漏洞方向。
这篇文章是在学习蒸米的文章七武器的一个记录。
0x01:
这次记录的是2014阿里移动挑战赛里的一个简单的cm的分析,主要是native层的调试和对简单反调试的bypass。
因为原来自用的三星放家里了,就只能使用模拟器来搞了,坑还是不少。
- 本来我是想用Genymotion的,但是这个模拟器是x86构架,IDA的调试的server并没有支持的,只能用Android Studio自带的模拟器。
- 使用模拟器调试so里的代码时有问题(后面会提到)

对于我这样的新手,我一般会把apk拖进jeb直接分析看看,这个apk的验证是在so中做的验证,所以使用IDA对so做初步的分析。
0x02:
找到验证的函数

根据以前搞pc端的经验,下一步直接起调试器,对这个函数下断点,单步跟就好了。但是这个程序在IDA attach上之后程序就退出了,需要对JNI_Onload()函数进行调试分析。
根据蒸米的文章,步骤如下
首先是上传IDA的server到模拟器中,这里我遇到了一个问题

提示只读,对应的解决方法是
root@generic:/ # umount /
root@generic:/ # mount -o remount rw /
之后再上传运行就可以啦。
然后,需要端口转发 adb forward tcp:23946 tcp:23946;一般IDA去attach的时候这个函数早就执行过了,所以需要调试JNI_Onload();因为需要用到jdb,所以需要打开ddms。
之后再使用adb以调试的模式启动程序adb shell am start -D -n com.yaotong.crackme/.MainActivity

IDA里attach

设置调试选项后F9

此时使用jdb工具恢复程序 jdb.exe -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 ;
然后对含有验证算法的so的JNI_Onload()方法下断点,F9,就断下来了。

0x03:
使用IDA调试方便在于,使用P将代码块识别成函数后,可以直接F5。单步执行到

之后,就跑飞了,应该是有反调试,F7进去看看是什么反调试。

应该是创建子进程去检测有没有调试器了。 so中的反调试策略应该和linux那些差不多,这个so中的检测方式是,打开/proc/[pid]/status文件,检测tracerpid的值是不是0。
那么对应的策略有两种,要么调试的时候动态改寄存器,或者改跳;或者一劳永逸,直接patch掉这个so。在分析了这个so反调试所在的函数后,我选择后种方案

死循环调用来检测调试,还是patch来的方便些。
在调试的时候我遇到这样一个问题,F7/F8都没法执行下去。

问了cx表哥后,表哥说这是模拟器才有的问题...在出问题的代码上下断,然后F9过去就好了。
这样的确可以解决问题,但是在调试的时候遇到好几次这样的问题,每次遇到了都要全部重新来过,太麻烦了,还是真机调试好QAQ
0x04:
patch这个so的时候,蒸米使用的那个IDA的插件我没找到,所以我选择反编译这个apk,然后修改了so文件后,重打包签名弄回去 =。=

修改0x16B8处的指令就好了,这里采用蒸米的方案,使用movs r0,r0作为NOP指令。
修改后使用apktools打包回去,再使用签名工具签名就好了。再次安装已经patch好的apk,重复之前调试的步骤,这次对Java_com_yaotong_crackme_MainActivity_securityCheck方法下断点,
回到模拟器里随便输入点什么,按下输入密码按钮,IDA里就断下来了,就可以愉快的单步调试了。

双开IDA可以辅助分析,这个地方就是加密的字符串所在的地址

点进去之后查看

再查看这个地址

aiyou,bucuoo
这应该就是flag了

0x04:
第一次调试native层的东西,还是学到了不少,也遇到了这样那样的小问题,不过还是完成了。
0x05:
[Android]第一个cm调试分析的更多相关文章
- android学习十一 高级调试分析功能
1.debug 功能列表 2.ddms功能( 内存检查,线程检查,视图层次分析) 3.跟踪代码 TraceView 4.命令行工具 adb 5.策略检查StrictMode
- Android:日常学习笔记(2)——分析第一个Android应用程序
Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...
- [转]Android逆向之动态调试总结
一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...
- Android系统自带APP分析——短信app
Android操作系统本身就是一个巨大的开源软件仓库,熟悉它既可以了解到Android系统的设计框架,也可以获得高效的应用程序编写方式.本文所分析的源码来自于Google官方的AOSP源码4.0.1_ ...
- [安卓][转]Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- Android Studio xcode单步调试 WebRTC Android & iOS
mac环境 如何在 Android Studio 里单步调试 WebRTC Android 的 native 代码. WebRTC 代码下载 depot tools 是 chromium 代码库管理工 ...
- Anroid逆向学习从编写so到静动态调试分析arm的一次总结
Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...
- Gradle之Android Gradle Plugin 主要 Task 分析(三)
[Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要 Task 分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plu ...
随机推荐
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...
- PHP实现字母数字混合验证码
一款简单的PHP实现字母数字混合验证码,支持自定义验证码.验证码图片.宽度.高度.个数.背景图片等 验证码调用地址:Application\Home\Controller\CodeController ...
- Glide优化
几乎所有的 OOM 错误都是因为宿主应用出了问题,而不是 Glide 本身. 应用里两种常见的 OOM 错误分别是: 过大的内存分配 (Excessively large allocations) 内 ...
- signalfx的中间件监控指标so cool
signalfx的中间件监控指标so cool www.jianshu.com 对于我们做运维的来说,监控是最基本的东西,不过在初创公司很多计划是跟不上项目架构变化的,项目中会不断加入各种服务和组 ...
- LintCode 547---两数组的交集
public class Solution { /** * 给出两个数组,写出一个方法求出它们的交集 * @param nums1: an integer array * @param nums2: ...
- scala 面向对象之 继承
scala 面向对象之 继承 scala 1.extends Scala中,让子类继承父类,与Java一样,也是使用extends关键字 继承就代表,子类可以从父类继承父类的field和metho ...
- easyui-datagrid 编辑模式详解——combobox
用于列表显示号了,需要改动某一列的值,而且根据每一行的数据去加载data数据,放在这个列中供别人选择 //-------------------- 代码可变区//---------- 数据定义区var ...
- Spring面试题整理
1.https://blog.csdn.net/a745233700/article/details/80959716 2.https://ifeve.com/spring-interview-que ...
- 第十章、logging模块
目录 第十章.logging模块 一.logging模块及日志框架 第十章.logging模块 一.logging模块及日志框架 导入方式 import logging 作用 写日志 模块功能 # V ...
- deep_learning_RNN序列模型
吴恩达<深度学习-序列模型>1 --循环序列模型:https://blog.csdn.net/weixin_41043240/article/details/79415134