使用IDA反编译.so文件并修改

简述

之前一直在做应用层的开发很少接触底层,总感觉底层是一个很神秘的地方。最近各种原因之下有一些逆向的工作,但是好多应用的核心逻辑都是利用jni在c/c++层去实现的,这就给我们的逆向工作带来了很大的困难,所以了解底层知识还是比较重要的。逆向过程中java层面的逆向还是比较简单的,今天主要介绍一下如何逆向.so文件。

例子是我最近分析的一个项目,项目中数据是从.so库处理发出的。但是.so文件对手机的串号做了校验,也就是说只有固定的几部手机才能使用。

所以这篇博客最终的效果就是通过反编译.so文件,找到记录串号的Hex码修改为自己的串号,就可以绕过.so的串号校验了。

利用IDA反编译.so文件

IDA。是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器。IDA功能及其复杂,今天只是简单的介绍一些基本功能。

IDA的安装略过不讲,安装好之后打开IDA(Version 7.0.170914 Windows x64)第一次使用,选择直接选择Go即可,进入界面后左上角File—>Open选择要打开的so文件,我选择的是一个

armeabi-v7a指令集的.so文件。打开之后如下图设置,然后点击OK

1.png

打开后如下图

2.png

在左侧的function name中寻找main入口函数。找到后现在IDA View中显示的反编译出来的汇编语言看起来比较费劲,可以按F5转成伪代码

3.png

到这就可以看到逻辑是调用sub_32E4位置的方法然后执行死循环打印日志qcd err ......,这正是我启动失败logcat上显示的日志。现在基本能断定关键逻辑在sub_32E4方法中。

sub_32E4值得应该是方法的Hex码的起始位置是32E4,不过在IDA中可以直接鼠标双击该方法直接进入,如图

4.png

大致逻辑就是现获取手机的imei码然后和一个常量数组off_9D24里的已有串码进行比对,如果对不上就跳出,也就是执行了main方法里的打印错误日志的死循环。

所以关键的串号数组也就知道了,双击off_9D24找到数组位置,选中数组中某个条目,按 Q 就可以显示Hex码的位置,然后记住这个位置。

5.png

使用010 Editor修改.so文件

.so文件本质上已经编译成了二进制文件,使用010 Editor可以更方便的修改。

现在已经知道了需要修改的数组的位置,用010 Editor打开刚才分析的.so文件。

6.png

根据左侧的行号找到63F0这一行,这个时候就可以看到63F0这一行的第6个Hex码是38正好对应ASCII码的8,根据右侧的ASCII码对照表,正好是设备码数组的第二个元素的第一个字符。

找到了位置就可以把数组里的数据修改成任何你想要的设备码了,修改Hex码不太方便可以直接修改ASCII对照码表里的ASCII码。

7.png

现在我将8改成了9(当然设备码国内应该是86开头,这只是做个示范),Hex码也自动改成了39。

好了现在就可以挑数组里的一个条目完全改成你自己的设备码,然后ctrl+S保存,将新的.so包放到工程里重新打包或者直接用adb放到手机的/data/user/0/com.xxx.xxx/lib下重启应用即可。经过尝试果然绕过了设备码限制,成功拿到数据。

后记

这次只是简单尝试,受困于不太熟悉汇编语言,只能修改静态资源值,如果熟悉汇编语言的话可以直接修改流程,比如修改if判断条件恒为true,或者置为相反条件即数组里的设备反而都不能用等,这是今后需要继续学习的地方

linux so库反编译命令,使用IDA反编译.so文件并修改相关推荐

  1. mtk平台android编译命令,MTK 常见的编译命令

    1: ./mk n(r) kernel; ./mk bootimage;当修改build-in 到kernel相关代码时,要使用此命令,具体文件参考如下: alps/kernel/ alps/medi ...

  2. java编译命令带参数_java编译命令基础知识点

    我们在对计算机下达指令时,人类的语言它是不能够明白,需要通过编译的时候翻译成计算机能听懂的语言.编译过程中会调用javac命令,这点大家可能接触的不多,毕竟是是计算机程序内部运行时的操作.下面我们就编 ...

  3. 最完整VC++6.0安装教程、windows命令行cl编译命令配置、cl编译命令使用、以及整套安装所需的附件

    最近电脑出了问题,还原了系统.要重新配置包括JDK.JRE.eclipse.mysql等等各种环境和工具,其中配置cl编译命令时发现和以前配置的时候不太一样,折腾了一会儿.现在给出完整的教程. 说明: ...

  4. java反编译命令jad,java反编译小工具jad常用命令

    java反编译小工具jad常用命令 2014/6/11 19:39:24  sky52bc  程序员俱乐部  我要评论(0) 摘要:首先,看一下jad的帮助提示-a-用JVM字节格式来注解输出-af- ...

  5. linux将目录打包压缩,linux tar (打包.压缩.解压缩)命令说明 | tar如何解压文件到指定的目录?...

    linux下tar命令实用 简介 参数: -c :建立一个压缩档案的参数指令(create 的意思): -x :解开一个压缩档案的参数指令! -t :查看 tarfile 里面的档案! 特别注意,在参 ...

  6. linux lp命令,lp命令_Linux lp 命令用法详解:打印文件或修改排队的打印任务

    lp命令用于打印文件,或者修改排队的打印任务.与lpr命令类似,lp命令既支持文件输入也支持标准输入.它与lpr的不同之处在于它有一个不同(稍微复杂点)的参数选项设置. 语法lp(选项)(参数) 选项 ...

  7. android xml反编译原理,记一次resources.arsc文件hex修改原理分析

    [JavaScript] 纯文本查看 复制代码I: Loading resource table... Exception in thread "main" java.lang.N ...

  8. 【分享】终端命令工具 自动生成vue组件文件以及修改router.js

    banlg 这个玩意-- angular-cli 他是有这个功能能的--所以可能,大概,也许大家看着会很熟悉,似曾相识, 根据命令行创建(目前命令就一个,后续可以加..加..加..) -1组件文件夹 ...

  9. 【分享】终端命令工具 自动生成vue组件文件以及修改router.js 1

    banlg 这个玩意-- angular-cli 他是有这个功能能的--所以可能,大概,也许大家看着会很熟悉,似曾相识, 根据命令行创建(目前命令就一个,后续可以加..加..加..) -1组件文件夹 ...

  10. 嵌入式LINUX常见符号与常用命令

    注意:Linux是区分大小写的. Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 Ubuntu打开命令行的3种方式 1.快捷键ctrl+alt+t 2.桌面右键:Open in ...

最新文章

  1. pytorch DataLoader
  2. tomcat ssi配置及升级导致ssi include错误问题解决
  3. XML文件的生成与读取
  4. 【阿里云课程】注意力机制原理,应用与设计
  5. 企业集成模式_企业集成模式简介
  6. SpringBoot 配置文件bootstrap和application的区别
  7. Golang Post传参调用示例
  8. tone mapping简介
  9. 消融实验——Ablation experiment
  10. K8S_Google工作笔记0004---平台规划和部署方式介绍_搭建k8s集群准备
  11. post方式加载iframe
  12. 应用程序到偏好设置跳转 以及 应用程序之间的跳转
  13. 2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势
  14. 英语音标原来这么丰富,换个角度把欧洲语言作为一个体系
  15. 我珍藏的神兵利器 - 效率工具for Win[转]
  16. php运行方式isapi,PHP_WINDOWS 2000下使用ISAPI方式安装PHP,使用ISAPI方式安装PHP。 下载连 - phpStudy...
  17. C盘清理攻略--拯救你的C盘空间
  18. SRAM和DRAM详解
  19. 苹果屏蔽更新描述文件_iOS屏蔽更新文件失效,教你两个技巧暂停更新
  20. arm服务器测评_ARM:异军突起

热门文章

  1. c语言编译器好玩的代码,读懂这4个函数,528行代码,你也可以实现一个C语言编译器...
  2. 手游图片素材提取_游戏资源提取工具(ExtractData日本游戏看内涵图)V2.5.38.966官方版下载 - 下载吧...
  3. java如何使用移位运算符_JAVA移位运算符使用教程
  4. 使用lightbox插件实现图片预览功能
  5. VC2005字符集设置容易出错的问题!
  6. 微软输入法怎么最小化到托盘_Windows下的五笔输入法哪个最好用?我来推荐几款...
  7. 查找与清除线程插入式木马(转)
  8. 查询任意汉字的Unicode编码,UTF8编码,GB2312编码,GBK编码
  9. Java实现QQ、微信、新浪微博第三方登录
  10. attachEvent方法绑定事件