引言

本文是老本行系列,Android相关的文章(以前的藏文),以后不定期地会发出老本行系列。

IDA pro简介

IDA pro全名为交互式反汇编器专业版(Interactive Disassembler Professional),简称为IDA。就本质而言,IDA是一种递归下降反汇编器。为了克服递归下降的缺点,IDA在区分数据与代码的同时,还设法确定这些数据的类型。通过IDA pro对dll、so等文件进行反编译后,用户通常看到的是经过数据类型区分的汇编语言形式的代码。IDA pro还有一个亮点,就是类似C语言的“中间语言”,汇编语言的阅读是需要一些学习成本的,类C的“中间语言”有助于用户更好地查看实现逻辑。

NDK开发流程

The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages.

上段是Android官网对NDK的定义,简单明了,就是在开发App的过程中,通过NDK使用C或C++实现一些类库,实现复用。

那么,为什么使用NDK进行开发呢?

1、 代码的保护

2、 易于重用现有成熟的开源库(OpenCV、OpenGL等)

3、 提高性能

4、 便于移植复用so库

从事Android开发的同学们应该对NDK很熟悉,为了更好地理解SO库是什么,还是提供一张图说明下。

反汇编

反汇编,即把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思。因为C/C++、Pascal等高级语言编译后会生成计算机语言,而不像Java的虚拟机指令集。所以,我们只能够对计算机语言进行逆向,即反汇编。

so文件生成

在开始反汇编之前,我们必须要有一个目标,即so文件,生成过程这里不再赘述。

笔者使用的是自己写的demo,代码如下所示。

IDA pro打开so文件

接下来,就是重头戏,使用IDA pro打开这个so文件!!!

打开IDA pro后,弹出选择打开方式界面,如下图所示。so文件选择ELF for ARM选项,点击OK!

打开后就会进入到IDA pro的主界面,界面中间显示的是汇编文件的具体信息(用户license、so源文件信息等),左边部分展示的是so文件反汇编生成的汇编方法名,上边部分展示汇编文件按照数据类型的分类情况。IDA pro还提供了6种视图,来帮助用户更好地分析so文件,如下图所示。

由于JNI函数都是“Java + 包名”开始的,我们可以在方法名显示部分左击并输入“Java”就会找到so文件里的JNI函数,如下图所示。

双击该方法就可以看到“IDA View”,即JNI函数的汇编语言,如果对汇编语言不熟悉,可以按“F5”使用IDA pro提供的插件,将该汇编语言转换为Pseudocode,即类C中间语言的格式。如下图所示。

这样就完成了so文件的反汇编,可以看出,NDK对代码的保护是有效果的,反汇编后的攻击成本比Java高了不少。

尝试使用IDA pro修改so文件

接下来,可以尝试使用IDA pro修改so文件的内容,我们希望将so文件JNI函数定义的字符串内容进行改动,我们可以先找IamSoSecurity1514的地址。双击Pseudocode View中的IamSoSecurity1514,就会转换到IDA View,可以看到IamSoSecurity1514所在地址为“000165E7”,如下图所示。

选中“000165E7”地址,再转换到Hex View-A,即切换到16进制的视图。发现该地址上的16进制值如下图所示。提供ASCII码与16进制对照表,可以对照一下发现,真是IamSoSecurity1514!

选中该地址上的值,点击鼠标右键,选择“Edit”,将So改成No表示我们反汇编成功的喜悦吧,So是53 6F,No是4E 6F。再次点击“Apply Changes”保存变化,如下图所示。

总结

很可惜的告诉大家,这种方式的修改之后并不会更新原始程序文件,即不会生成有效的so文件,修改的只是IDA pro中的项目文件。所以IDA pro中只适合做一些验证性的修改,确保正确后再使用其他工具修改原始程序文件。可以使用UltraEdit(www.ultraedit.com/)寻找到“000165E7”,进行上述修改保存,替换原有so文件。

so文件提高了代码的安全性。 IDA pro 反汇编需要学习成本。 IDA pro只能做一些验证性的修改。

参考文献

so反编译为c语言,SO文件反汇编实践相关推荐

  1. s19文件反编译成c语言,S19文件反编译器使用说明.ppt

    S19文件反编译器使用说明 S19 decoder Sep 2008 lzbing Decoder Find decoder.exe in codewarrior installation direc ...

  2. 安卓反编译揭秘,伪加密APK文件如何被破坏

    2019独角兽企业重金招聘Python工程师标准>>> 1. 源码混淆 如上图,对Android APP的源码进行混淆后混淆器将代码中的所有变量.函数.类的名称加密为简短的英文字母代 ...

  3. 反编译“微软纸牌集合”资源文件

    @[TOC]反编译"微软纸牌集合"资源文件 成功反编译"微软纸牌集合"资源文件 一天时间,终于成功反编译了"微软纸牌集合(Microsoft Soli ...

  4. 反编译828D PLC的工程文件(*.ptp)

    反编译828D PLC的工程文件(*.ptp) "拉兹-胡夫"变换 PLC存储格式 CPU信息描述 打印设置 LAD/STL可编辑数据 符号表 监控数据表 SDB数据 工具命令 软 ...

  5. Python反编译pyinstaller打包的exe文件 从0开始(未加密篇)

    因为pyinstaller方便.兼容性相对较好,所以我们会经常见到一些用pyinstaller打包的Python程序,在这里我们了解一下如何对这些打包好的exe文件进行反编译(即反编译出.py文件), ...

  6. 反编译.class和原java文件的源码对比

    大家都知道,java文件编译后是.class文件,如果我们通过反编译的方式,重新反编译成java文件,此java文件和原来编译前的java文件有什么区别呢? 下面主要对比字面型常量之间.变量之间以及两 ...

  7. 反编译Unity3d 中的dll文件

    一.步骤实现 1.下载反编译工具,目前,我使用的是ILSpy,打开工具,得到如下界面 2.点击File后得到如下界面 3.单击 "打开" 按钮,选择Unity3d 安装目录下的dl ...

  8. hex反编译成c语言,IDA Hex-Rays反编译器使用的一些小技巧

    这是什么? 在我的IDA系列中,我会介绍一些我在交互式反汇编程序,IDA Pro中发现的有趣又有用的东西. 我写这篇文章出于两个原因: 大部分有价值的信息都很分散,难以找到.有时候,你不得不靠自己去找 ...

  9. 《编译与反编译技术实战》——第1章 实践的环境与工具 1.1 实践环境概述

    本节书摘来自华章计算机<编译与反编译技术实战>一书中的第1章,第1.1节,作者 刘晓楠 陶红伟 岳峰 戴超,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1 ...

  10. linux 反汇编 .so,SO文件反汇编实践

    引言 本文是老本行系列,Android相关的文章(以前的藏文),以后不定期地会发出老本行系列. IDA pro简介 IDA pro全名为交互式反汇编器专业版(Interactive Disassemb ...

最新文章

  1. 测试数据库sql声明效率
  2. Spring中的时间调度,定时任务
  3. 在参数上使用@Param(“paramName”)注解”解决了传多个参数的问题
  4. 让IE6支持图片半透明
  5. php 获取设备,PHP获取设备类型实例代码
  6. 成都SEO企业网站品牌运营推广优化及粉丝运营_成都辰星建站
  7. 利用jetson nano上自带的opencv实现多线程rtsp拉流、低延迟较稳定显示摄像头视频(c++)
  8. 【图像加密】基于matlab仿射变换数字图象置乱【含Matlab源码 1171期】
  9. iphone11主卡在上还是下
  10. MySQL 归档数据的方法你知道了吗
  11. 快速由PCI迁移到PCIe
  12. php 微信公众号关注推送欢迎语
  13. 【前端开发】代码结构及性能优化大总结
  14. 登录前的人机验证VAPTCHA
  15. LaTex(PART IV) 各级标题
  16. 鲁菜泰斗同和居 日坛新店用上便民新科技
  17. 毁掉一个孩子的几个方法 有多少家长正在这么做?
  18. c语言对一篇英文文章进行统计,C语言统计一篇英文短文中单词的个数实例代码...
  19. [C语言] [ 试题详解] 输出九九乘法表
  20. Win10安装使用Hadoop3.0.0

热门文章

  1. SCHNOKA施努卡:锂电池密封性焊接质量视觉检测
  2. 遇到安装3dmax2020版本时出现1603错误时解决方法
  3. 英特尔傲腾内存linux,英特尔一面优化傲腾可持续内存性能 一面不忘科普
  4. Vue_理解组件化开发
  5. matlab中灰色模型代码,灰色模型matlab代码
  6. html怎么设置展开li,html网页代码常用ul li列表布局标签。
  7. 手机长度px值_px和厘米怎么换算?
  8. 关于《ERP原理》的读书笔记和思考(二)_ERP原理初探
  9. CAD中PDF转DWG
  10. 国内数据资源共享平台介绍