通过做题来学习android逆向是一个比较不错的方法。

虽然有投机取巧的方法解决这题,但是对这个题目的深入研究,学习到了dex的动态调试、破解加固等技术。

要感谢各位android大牛对此题的详细介绍。我只是照着做了一遍,对有些不明确的地方自己演练了一下,并对android的so调试进行了一下简单的归纳。


从零开始进行android的so代码调试:

一、工具准备:

jre――java runtime enveroment//下面的一切工具都要这个支持

jdk――java development kits//需要用到里面的jdb程序

Android SDK Manager//包括adb、ddms等各种工具,及各种SDK版本下载管理

Android AVD Manager//用来建立各种SDK版本和相应API级别的android虚拟机


为了方便,将包含以上各种实用工具的目录如sdk\platform-tools,sdk\tools等路径加入Path环境变量。

新建一个虚拟机:见我的前一篇文章

我使用的是SDK 4.0.3、API level 15。

安装apk:adb install 3.apk


二、调试

这个还是参考大牛的文章。我这里只把我参照大牛文章后自己做的截图贴出来。

wKiom1TAmG3RxlswAADncwrp7y4115.jpg

wKioL1TAmUSyyqI5AADCjMtrkHY925.jpg

wKiom1TAmG2zTvUAAAB2RE6Zrxw480.jpg

wKioL1TAmUWjWCjyAArrW7dRd58979.jpg

wKiom1TAmG6QiX3GAAIX8S10sCA805.jpg

wKioL1TAmUXxsRhlAAI9YOQRyrk117.jpg

wKiom1TAmG7DRHX0AAOeXcEYs8M922.jpg

wKioL1TAmUWSeVQzAAFrCGWrRy4504.jpg

三、分析

因为不会使用idc脚本,所以我的dump内存方法是利用Edit菜单,导出rawdata。(看来是要好好学习一下IDA的高级功能了)

导出的dex,使用dex2jar转换成jar包,jd-gui查看,没有看到完整的内容。

使用dexdecompile完整反编译出了具体的内容。这个有可能是dump出的是odex格式的,dex2jar可能只支持dex格式。

直接找addJavascriptInterface函数,发现其导出的接口对象名是加密的。

当然就这个题目来说,接口对象名可以使用wooyun的那个链接来枚举出来,或者再次利用上面的方法调试出来。或者根本不用管直接找Toast.MakeText函数里面的参数,就是答案了。(见上图)


作为一个喜欢刨根问底的人,自然那个translate.so和decrypt_native函数也要研究一番。一方面是强化一下so的调试技术,另一个方面是锻炼一下ARM指令集的逆向能力。


最后感谢共享IDA6.6的大牛,全国人民的逆向水平又可以上一个新台阶了。

更多相关文章

  1. 混合开发之ReactNative调用Android原生方法
  2. Android投屏电脑反向控制软件QtScrcpy使用方法
  3. 实现Android播放声音资源的一个简单的工具类
  4. Android中Activity全局共享方法AppContext
  5. Android的界面设计工具——DroidDraw
  6. Android程序版本控制工具类
  7. 查看Android内存的8中方法
  8. Android aapt 工具介绍
  9. Window下android 模拟器SD卡的使用方法

随机推荐

  1. 1. 写一个登录表单,要求有邮箱,密码,登录
  2. 如何通过Apache在本地配置多个虚拟主机
  3. 基于php伪静态的实现方法解析
  4. PHP Ajax跨域问题解决方案代码实例
  5. 淘宝首页商品列表块
  6. PHP+Redis事务解决高并发下商品超卖问题(
  7. PHP中->和=>的含义及使用示例解析
  8. 移动端布局基本思路,三种视口、手机页面3
  9. Fetch API的使用,npm的常用操作,node模块
  10. 简单实例:登录表单、后台架构