Android之使用IDA Pro静态分析so文件

   安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发。关于NDK的开发知识点,请看这篇博客:Android之NDK开发。

        关于NDK环境搭建的知识点,请看这篇博客:Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)

        使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件,我们是无法直接分析so文件的,所以这里需要用到一个反编译工具IDA Pro。IDA Pro能够对so文件进行反汇编,从而将二进制代码转化为汇编语言,利用IDA Pro神奇的F5功能还能将汇编语言反编译成c/c++程序。这里使用的IDA Pro的版本为6.5版本。下面就介绍一下如何利用IDA Pro静态分析so文件的步骤:

        (0) 打开IDA Pro,将libTestJniSo.so直接拖入到IDA Pro中,在弹出的”load a new file”窗口中,

       选择”ELF for ARM(Shared object)[elf.ldw]”选项,然后再点击ok按钮。如图1所示:




      等待一段时间后,我们就能看到反汇编libTestJniSo.so文件所得到的汇编代码了。

    (1) 这里我们主要介绍几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。

例如我们想要查看Java_com_example_testjniso_MainActivity_helloFromJni函数的汇编代码,

只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函数再双击即可。如图2所示:


       如果想要查看某条指令的16进制代码,只需要单击该指令,再切换到Hex View-A窗口即可。
    (2)如果IDA Pro带有F5插件,那么我们可以按键盘上的F5,就可以将汇编代码转换为C代码。例如我们想要查看forTest0函数的C代码,我们只需要定位到forTest0函数的汇编代码后,再按F5就会生成一个Pseudocode窗口,该窗口就会显示forTest0函数的C代码,如图3所示:



     (3)我们一般是在Text View模式中查看汇编代码,这样很难看出程序的设计流程。另外IDA Pro还提供了一个Graph View,能够帮助我们更好地查看代码的设计流程。只需要在对应的函数处右击再点击”Graph View”即可切换到Graph View模式,forTest0函数的Graph View如图4所示:


      等待一段时间后,我们就能看到反汇编libTestJniSo.so文件所得到的汇编代码了。

    (1) 这里我们主要介绍几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。

例如我们想要查看Java_com_example_testjniso_MainActivity_helloFromJni函数的汇编代码,

只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函数再双击即可。如图2所示:


       如果想要查看某条指令的16进制代码,只需要单击该指令,再切换到Hex View-A窗口即可。
    (2)如果IDA Pro带有F5插件,那么我们可以按键盘上的F5,就可以将汇编代码转换为C代码。例如我们想要查看forTest0函数的C代码,我们只需要定位到forTest0函数的汇编代码后,再按F5就会生成一个Pseudocode窗口,该窗口就会显示forTest0函数的C代码,如图3所示:

   从图4可以看出,BLE loc_E42这条语句后面跟了两个箭头,其中绿色箭头表示当 BLE loc_E42 条件成立后所跳转到的地方,红色箭头表示当条件不成立后所跳转到的地方。如果想要切换到Text View模式,则只需在对应函数处右击再点击“Text View”即可。

       本文简单介绍了如何通过IDA Pro静态分析so文件,从而查看对应的汇编代码。另外需要注意的是IDA Pro只能查看汇编代码,不能修改汇编指令对应的机器码。如果想要修改so文件,需要使用UltraEdit等二进制编辑软件。逆向分析so文件,需要熟练掌握ARM汇编语言。这里有一篇介绍ARM汇编语言的博客ARM汇编编程基础(一) -- ARM CPU寄存器,有兴趣的同学可以看看。
       本文资源下载地址:安卓逆向学习笔记(3)


      等待一段时间后,我们就能看到反汇编libTestJniSo.so文件所得到的汇编代码了。

    (1) 这里我们主要介绍几个主要窗口,其中IDA View-A窗口显示汇编代码;Hex View-A窗口显示机器码(16进制格式);Function window窗口中保存着各个函数的名字,找到对应函数名字,再双击即可定位到对应函数的汇编代码。

例如我们想要查看Java_com_example_testjniso_MainActivity_helloFromJni函数的汇编代码,

只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函数再双击即可。如图2所示:

       如果想要查看某条指令的16进制代码,只需要单击该指令,再切换到Hex View-A窗口即可。
    (2)如果IDA Pro带有F5插件,那么我们可以按键盘上的F5,就可以将汇编代码转换为C代码。例如我们想要查看forTest0函数的C代码,我们只需要定位到forTest0函数的汇编代码后,再按F5就会生成一个Pseudocode窗口,该窗口就会显示forTest0函数的C代码,如图3所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 6 中的 Logging Source Generator

.NET 6 中的 Logging Source GeneratorIntroLogging source generator 是 .NET 6 引入的一个新功能,借助 Source Generator 来实现,因为要用到 C# 9 中的分部方法(partial method),C# 语言需要使用 9 及以上版本,具有更好的性能以…

电脑内部录音教程Virtual Audio Cable使用教程

1:下载Virtual Audio Cable2:安装Virtual Audio Cable3:设置(注意这里line1不要开启监听其他设备)3:打开声音传输通道软件C:\Program Files\Virtual Audio Cable\audiorepeater.exe点击start启动,最小化。4…

战队口号霸气押韵8字_高考励志班级口号霸气押韵大全

【导语】高考没有什么可怕的,一定要保证心态好,就可能考出比平时更好的成绩。下面是无忧考网分享的高考励志班级口号霸气押韵大全。欢迎阅读参考!【篇一】高考励志班级口号霸气押韵1.激情澎湃,高考不败,斗志昂扬&#…

别说理科男不懂撩妹,这个老司机一生只爱两样:物理和18岁的少女

全世界只有3.14 % 的人关注了爆炸吧知识相信在很多人的眼中,科研人员都是正经和严肃的代名词。成就大,光芒大,仿佛天生圣人。但是超模君在和大家讲了这么多科学家的故事后,发现还是那句俗话说得好:科研是科研&#xff…

一条nginx命令引发的对于容器的思考

去年的时候写了一篇原创《前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)》, 我自认为这篇生产实践是对大前端、 容器化、CI/CD的得意之作。对于前后端分离的web项目,在容器启动的瞬间&…

部门树形结构,使用Treeview控件显示部门

部门树形结构。设计张部门表用于存储部门编码、名称、上级部门id,使用Treeview控件显示部门树,并实现部门增删改、移动、折叠等功能。特别提示,部门有层级关系,可用donetbar的adtree控件 代码如下 1 using System;2 using System.…

移动端 登陆 模板 html_聚会邀请函请柬模板 免费设计制作生成

制作邀请函 请关注我们聚会并非你的个人发布会和生活成果展,而在于描绘经历了风雨沧桑的那道彩虹,世事变化,聚会不是为了显示某人身居高位,也不是衣锦还乡或日过斗金、大富大贵的炫耀,重温那充满梦想的花样年华&#x…

他们是你学生时期的噩梦,但现在你可以把他们按在墙上摩擦了……

全世界只有3.14 % 的人关注了爆炸吧知识用艺术家的眼光去看科学,用人生的角度去看艺术。——尼采看过日剧的朋友都不会陌生下面的场景:日本主妇会将存放在冰箱中的东西列出清单,然后用磁贴将之贴在冰箱门上。每次购物或煮食后,她们…

推荐系统相关算法(1):SVD

假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分)。那么能预测出Zero君对M的评分吗?答案显然是能。最简单的方法就是直接将预测分定为平均分。不过这时的准确度就难…

vSphere日志分析器(vCenter Log Insight)安装、配置

很久没更新博客,最近在网上看到了1.0版本的vSphere分析器可下载并可测试,测试完后发觉以前人肉全手动分析log,看得眼前飘白雪的情况不会出现了。这里和大家分享一下。1 关于vCenter Log Insight当ESX/ESXi主机发生故障,很多用户或…

android开发将h5转换成pdf_一键将PDF转换成PPT,秒懂!

PDF因能良好的兼容各操作系统和软件版本的差异性,使得PDF文档在查阅播放的时候不影响排版变化,很多时候,我们因为工作上的需要,经常需要再次将PDF转换成PPT,那么怎样将PDF转换成PPT呢?需要下载专业的转换工…

MongoDB 权限认证

MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),因为考虑到数据安全的原因特地花了一点时间研究了一下,网上搜出来的解决方法大都是3.0以下的版本的…

推荐系统相关算法(2):k-nearest neighbor

1. kNN 1.1 基本的kNN模型 kNN(k-nearest neighbor)的思想简单来说就是,要评价一个未知的东西U,只需找k个与U相似的已知的东西,并通过k个已知的,对U进行评价。假如要预测风炎君对一部电影M的评分,根据kNN的思想&#…

看了《OCP/OCA认证考试指南全册:Oracle Database 11g(1Z0-051,...

为什么80%的码农都做不了架构师?>>> 一直对考试用书没好感,觉得里边的内容都刻板不实用。在查找Oracle书籍时,无意中看到有人在豆瓣里说,如果给他一次重新的机会,他只看OCP 052、053,Oracle编程…

.net 集合分成几个等数量集合_巧用数学游戏,帮助幼儿轻松掌握12种数量关系!...

网校在手 轻松教研线上学习灵活高效海量资源轻松获取一键搞定园本教研感知数量关系是幼儿园数学教育的核心内容,是发展幼儿数学思维的重要因素。那么,孩子在幼儿园阶段需要了解哪些数量关系呢?幼儿园有哪些数学教育内容包含着数量关系呢&…

我做的百度飞桨PaddleOCR .NET调用库

.NET Conf 2021中国我做了一次《.NET玩转计算机视觉OpenCV》的分享,其中提到了一个效果特别好的OCR识别引擎——百度飞桨PaddleOCR,后来我逐步把它封装了一下,代码全部开源(可点击查看原文跳转到Github):ht…

超棒的在线Bootstrap主题编辑工具 - lollytin

lollytin 是一款帮助制作Bootstrap3主题的在线工具,虽然现在仍旧是Beta版本,但是已经非常不错了。 主要功能: 通过拖拽来生成主题支持拖拽页头,页脚,内容,幻灯,地图,表单&#xff0c…