android中SO文件动态调试
0X00 前言
为了增加APK文件的破解难度,很多比较重要的功能都是通过native实现,与反编译不同的是,java的伪代码可以很清楚的得到程序的逻辑关系,但是so文件反编译得到的是汇编代码,使用ida这样的神器可以得到c的伪代码。使用ida实现so的动态调试,可以在关键地方下断点,对于一些变换,比如有的时候输入的内容与经过一些列的变换后的结果比较,这个时候我们不需要关心中间的变换过程,在动态调试的时候,在比较的地方下个断点,然后在内存中查看此时比较的常量。正好最近做了CTF的一个re。顺便熟悉下ida的动态调试步骤。
0x01 APK逻辑的简单分析
在apk的manifest文件里,我们得到apk的入口avtivity。包括包名和主类。
通过一步步分析,得知:用户输入 用户名和 密码, 其中用户名必须是 <string name=”username”>secl-007</string> ,而密码的判断逻辑是调用了native函数(Java_com_ssctf_seclreg_Seclo0o_getpl )去判断,这个时候用ida静态分析,打开apk加载的so文件,通过分析,我们发现对于输入的密码没有进行任何处理,只是判断输入密码的长度,如果长度是39,然后和一个常量做比较,是否正确。而这个常量在运行过程经过一些列的变化,因此我们不需要关心变化的过程。有两个方法:
- 输入任意长度为39的内容,然后dump整个程序的内存,这个时候在dump内容中寻找,(因为我们知道这个常量特定方式SSCTF{*****)
- 使用IDA动态调试,在比较的地方下断点,得到此时常量的内容。这篇文章我们使用第二种方法实现
0x02 IDA动态调试SO
关于IDA动态调试步骤,首先你的手机需要ROOT。
- 把ida目录下的android_server文件放到手机的目录,adb pull android_server /data/local/tmp
- 给与android_server 777 权限, chmod 777 android_server
- 端口的转发 adb forward tcp:23946 tcp:23946
- 打开ddms
- 运行android_server ./android_server
- 将要调试的apk文件以调试的方式运行 adb shell am start -D -n com.ssctf.seclreg/.Seclreg 包名/.类名
- 这个时候手机显示等到调试连接模式,打开ida,debugger-attach-remote android server
- 选择ok,并且F9运行,这个时候,jdb附加程序,jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
- 这样程序就可以动态调试了,我们根据SO基址和函数的偏址找到调试时候函数的地址,然后F2 下断点,
这个时候在APK输入,然后程序运行到我们设置断点的地方,
然后我们在数据窗口里查看数据,得到FLAG:)
android中SO文件动态调试相关推荐
- 020 Android之so文件动态调试
文章目录 ELF文件格式查看工具 so文件加载时的函数执行顺序 so文件动态调试 so文件调试技巧 使用ida动态调试的那些坑 进程显示不全 illegal segment bitness more ...
- Android中R文件ID值
Android中R文件ID值 文章目录 Android中R文件ID值 前言 知识回顾 在代码中访问资源 语法 R文件 Lib库的R文件 AAR中的R文件 依赖库R文件的生成 R文件的数量 后续疑问 官 ...
- android 读写文件 简书,Android 中的文件操作
Android 文件操作 概述 Android 中的文件操作主要涉及到两个部分,一个是内部存储的读写,一个是外部存储的读写两者的主要区别如下表: 内部存储 外部存储 始终可用 它并非始终可用,因为用户 ...
- java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)
相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web中又如何实现DLL/SO文件的动态加载方法呢.今天就给大家带来一篇JAVA Web项目中DLL/SO ...
- 修改Android中的文件权限
在Android中有一个精简版的linux系统,因为是linux系统,那么有时候在写Android应用程序的时候会遇到权限问题.我们都知道在shell中可以通过chmod命令来修改权限,所以就希望通过 ...
- android 生成aar文件,Android 中.aar文件生成方法与用法
https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...
- Android中Assets文件路径
Android中Assets文件绝对路径是不存在的 一般Assets文件夹里放些网页文件html.css.js 在网页文件中引用assets里的文件可以使用file:///android_asset/ ...
- Android中的文件读写操作
在android开发中文件操作使用的其实还是比较高频的,之前我遇到这种需求都随便写写,对此没有一个比较全面的认识,所以想借这篇文章来梳理一遍. 由于需要读写文件,这包含了读写外部sd card的文件, ...
- linux程序卸载动态库,Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载...
在 IBM Bluemix 云平台上开发并部署您的下一个应用. 相信读者已经看过了 Intel平台下Linux中ELF文件动态链接的加载.解析及实例分析(一): 加载的内容了,了解了ELF文件被加载的 ...
最新文章
- 浅谈java内存分配和回收策略
- Linux下实现apache代理tomcat
- Java线程详解(2)-创建与启动
- 元气森林唐彬森:十万块就能爆发团队创造力
- android lottie字体json,lottie-android
- replaced element / non-replaced element : 内容决定
- Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析
- 阿里云Tech Insight 企业迁云实战专场强势来袭!
- 2016年第七届蓝桥杯C/C++B组省赛题目解析
- Spring Boot技术之异步任务执行
- sed mysql配置文件_linux下mysql配置文件my.cnf最详细解释
- oauth2 token为空拦截_OAuth2 Token 一定要放在请求头中吗?
- Apache服务器+Tomcat服务器配置
- 开热点给电脑消耗大吗_电脑用手机热点上网耗流量多不多
- 给大家推荐几个程序员必备网站
- Mycat 使用navicat连接 报: no datanode found please check tables defined is schema:test
- 地表温度反演LST 自存步骤
- RPA 软件技术是什么意思
- CVE的提交与Github写入技巧
- 初来乍到,先测试一下
热门文章
- 施密特出售Google股票套现3.27亿美元
- Deep Learning(深度学习)学习笔记整理系列之LeNet-5卷积参数个人理解
- ubuntu查看网关
- [云炬创业管理笔记]第一章讨论2
- 科大星云诗社动态20210522
- 学长毕业日记 :本科毕业论文写成博士论文的神操作20170322
- c++求矩阵的秩_线性代数复习(被玩坏的矩阵)
- VTK修炼之道57:图形基本操作进阶_点云配准技术(LandMark标记点算法和坐标系显示方法)
- delphi查找对话框
- cmake的使用--变量使用超详细详解