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,然后和一个常量做比较,是否正确。而这个常量在运行过程经过一些列的变化,因此我们不需要关心变化的过程。有两个方法:

  1. 输入任意长度为39的内容,然后dump整个程序的内存,这个时候在dump内容中寻找,(因为我们知道这个常量特定方式SSCTF{*****)
  2. 使用IDA动态调试,在比较的地方下断点,得到此时常量的内容。这篇文章我们使用第二种方法实现

0x02 IDA动态调试SO

关于IDA动态调试步骤,首先你的手机需要ROOT。

  1. 把ida目录下的android_server文件放到手机的目录,adb pull android_server /data/local/tmp
  2. 给与android_server 777 权限, chmod 777 android_server
  3. 端口的转发 adb forward tcp:23946 tcp:23946
  4. 打开ddms
  5. 运行android_server ./android_server
  6. 将要调试的apk文件以调试的方式运行 adb shell am start -D -n com.ssctf.seclreg/.Seclreg   包名/.类名
  7. 这个时候手机显示等到调试连接模式,打开ida,debugger-attach-remote android server 
  8. 选择ok,并且F9运行,这个时候,jdb附加程序,jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
  9. 这样程序就可以动态调试了,我们根据SO基址和函数的偏址找到调试时候函数的地址,然后F2 下断点,

这个时候在APK输入,然后程序运行到我们设置断点的地方,

然后我们在数据窗口里查看数据,得到FLAG:)

原文地址: https://www.ijiza.cn/2016/03/03/android%E4%B8%ADso%E6%96%87%E4%BB%B6%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF%95/

android中SO文件动态调试相关推荐

  1. 020 Android之so文件动态调试

    文章目录 ELF文件格式查看工具 so文件加载时的函数执行顺序 so文件动态调试 so文件调试技巧 使用ida动态调试的那些坑 进程显示不全 illegal segment bitness more ...

  2. Android中R文件ID值

    Android中R文件ID值 文章目录 Android中R文件ID值 前言 知识回顾 在代码中访问资源 语法 R文件 Lib库的R文件 AAR中的R文件 依赖库R文件的生成 R文件的数量 后续疑问 官 ...

  3. android 读写文件 简书,Android 中的文件操作

    Android 文件操作 概述 Android 中的文件操作主要涉及到两个部分,一个是内部存储的读写,一个是外部存储的读写两者的主要区别如下表: 内部存储 外部存储 始终可用 它并非始终可用,因为用户 ...

  4. java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)

    相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web中又如何实现DLL/SO文件的动态加载方法呢.今天就给大家带来一篇JAVA Web项目中DLL/SO ...

  5. 修改Android中的文件权限

    在Android中有一个精简版的linux系统,因为是linux系统,那么有时候在写Android应用程序的时候会遇到权限问题.我们都知道在shell中可以通过chmod命令来修改权限,所以就希望通过 ...

  6. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

  7. Android中Assets文件路径

    Android中Assets文件绝对路径是不存在的 一般Assets文件夹里放些网页文件html.css.js 在网页文件中引用assets里的文件可以使用file:///android_asset/ ...

  8. Android中的文件读写操作

    在android开发中文件操作使用的其实还是比较高频的,之前我遇到这种需求都随便写写,对此没有一个比较全面的认识,所以想借这篇文章来梳理一遍. 由于需要读写文件,这包含了读写外部sd card的文件, ...

  9. linux程序卸载动态库,Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载...

    在 IBM Bluemix 云平台上开发并部署您的下一个应用. 相信读者已经看过了 Intel平台下Linux中ELF文件动态链接的加载.解析及实例分析(一): 加载的内容了,了解了ELF文件被加载的 ...

最新文章

  1. 浅谈java内存分配和回收策略
  2. Linux下实现apache代理tomcat
  3. Java线程详解(2)-创建与启动
  4. 元气森林唐彬森:十万块就能爆发团队创造力
  5. android lottie字体json,lottie-android
  6. replaced element / non-replaced element : 内容决定
  7. Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析
  8. 阿里云Tech Insight 企业迁云实战专场强势来袭!
  9. 2016年第七届蓝桥杯C/C++B组省赛题目解析
  10. Spring Boot技术之异步任务执行
  11. sed mysql配置文件_linux下mysql配置文件my.cnf最详细解释
  12. oauth2 token为空拦截_OAuth2 Token 一定要放在请求头中吗?
  13. Apache服务器+Tomcat服务器配置
  14. 开热点给电脑消耗大吗_电脑用手机热点上网耗流量多不多
  15. 给大家推荐几个程序员必备网站
  16. Mycat 使用navicat连接 报: no datanode found please check tables defined is schema:test
  17. 地表温度反演LST 自存步骤
  18. RPA 软件技术是什么意思
  19. CVE的提交与Github写入技巧
  20. 初来乍到,先测试一下

热门文章

  1. 施密特出售Google股票套现3.27亿美元
  2. Deep Learning(深度学习)学习笔记整理系列之LeNet-5卷积参数个人理解
  3. ubuntu查看网关
  4. [云炬创业管理笔记]第一章讨论2
  5. 科大星云诗社动态20210522
  6. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170322
  7. c++求矩阵的秩_线性代数复习(被玩坏的矩阵)
  8. VTK修炼之道57:图形基本操作进阶_点云配准技术(LandMark标记点算法和坐标系显示方法)
  9. delphi查找对话框
  10. cmake的使用--变量使用超详细详解