吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 41508|回复: 20
收起左侧

[Android 原创] IDA深度解析修改so文件和ARM汇编.txt

  [复制链接]
xiaoxin520 发表于 2015-8-11 09:32
本文作者:七少月
1.我们要达到什么目地?
我们逆向APK时,如今对于so一般来说是肯定要做修改的,然而IDA修改汇编代码,不像OD可以直接修改汇编指令,必须通过WINHEX等修改十六进制。我们仅仅知道00表示代码清除,90表示NOP指令,即空指令。但仅仅删除一行代码这样的修改肯定是满足不了需要的。我们需要深入修改一点。


2.Intel8086与ARM基础知识
Intel8086是英特尔公司的16位处理器,ARM是ARM公司的32位处理器。每个处理器都对应自己的一套汇编语言,所以两个处理器分别对应于8086汇编和ARM汇编。由于处理器的位数,所以8086汇编指令的机器码是16位,而ARM汇编指令的机器码就是32位。机器码可以看作是二进制指令,其实所谓的HEX即称为十六进制操作码或十六进制机器码,也是二进制指令,只是把二进制的数值用十六进制去展示。


3.ARM汇编非常重要
ARM汇编可以做的事情在我看来比8086汇编多得多,如果你会了ARM,就会了主流的嵌入式开发,然后就是硬件编程,然后就是机器人或机械制造。所以,ARM真的非常重要,希望可以去认真学习,不仅是ARM指令集,还有ARM的机器码的原理,以及ELF文件在linux下的objdump反编译。下面只能简单讲解。


4.ARM的机器码简单讲解
ARM机器码为32位,我们以跳转指令BL和BEQ为例讲解。其实我们只需要关注最高的8位,也就是24-31位。首先来看,28-31这四位,不同条件这四位有什么不同。然后在27-24这四位里,BL和BEQ都是1010.所以BL指令的二进制是11101010,即十六进制的EA;相同BEQ的十六进制就是0A。


5.SO里面的情况
当我们把SO里的汇编语言放到工具中去转换为HEX时,会发现和IDA中的HEX有时是完全不同的,这是因为IDA中有时反编译SO使用的不是ARM,而是16位的ARM,也就是Thumb指令,但有时却是ARM的32位指令。


6.修改汇编跳转指令
这种情况一般是Thumb指令,一般而言一行代码对应是2个HEX码。
例子:bne指令修改为beq指令
通过工具,我们发现bne跳转指令对应的HEX机器码是D1,beq对应的HEX机器码是D0,然后用WINHEX修改,再用IDA检测。


7.修改数据
这种情况一般是ARM指令,一般而言一行代码对应是4个HEX码。
例子:修改小黄人快跑中初始化金币量
so里面原来ARM代码:mov R1,#0x49C8
最大可改为0XFFFF,也就是65535,修改后的代码应为:mov R1,#0xFFFF
原本的代码对应的HEX:C8 19 04 E3,为什么是这个样子,这和8086汇编有类似之处,就是十六进制和汇编代码是大体颠倒的。最后的E3是MOV这个汇编指令。我们做一个正确的颠倒:E3 01 49 C8。这下就懂了吧!所以,我们改为FF 1F 0F E3。
当然,为了方便,可以直接使用工具,不过这样的分析能够极大增强大家ARM分析的能力。不过不要寄太多希望于工具,因为很多时候,工具会发生错误或者和IDA中的HEX-VIEW情况不一致,也不利于我们学习的。所以工具只是辅助,主要还是动脑子。


8.修改字符串
这种情况比较简单,字符串就是字符串,修改字符串的HEX码就是利用ASCII转HEX的工具就可以,我们可以对比两个so来看看。当然最简单修改办法,是用WINHEX直接在右边修改字符串。其实,这和修改文本是一样的,记事本,notepad都可以。手机端的MT,HEXEDITOR,十六进制编辑器等等也都可以修改SO的字符串,推荐使用默小坑兄弟的ADK编辑器。



视频下载地址:http://pan.baidu.com/s/1qWMJF4K

免费评分

参与人数 5威望 +1 吾爱币 +1 热心值 +5 收起 理由
会飞的丑小鸭 + 1 + 1 我很赞同!
Ruibo + 1 谢谢@Thanks!
刀锋之影 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
统列 + 1 adk编辑器 可以修改so?
qtfreet00 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xiaoxin520 发表于 2015-8-13 02:30
不好意思,我承认个错误,文章确实有纰漏之处,第一段,应改为“像intel8086一样,可以用00,或NOP90的空指令”,需要声明,在ARM里,NOP指令的机器码不是90,只是列举在8086中的情况来类比,当然,只要你能让so正常运行,又想删除你不想要的那行代码,你改为00,90还是其他指令都是可以的,而ARM中,00是删除,但空指令NOP的HEX机器码绝不是90.不好意思!!
爱似浮梦 发表于 2015-8-11 11:28
stefankuok 发表于 2015-8-11 14:00 来自手机
统列 发表于 2015-8-11 15:38
adk编辑器 可以修改so?
水流花谢 发表于 2015-8-11 16:43
支持一下,现在关于smali的文章比较多,但是涉及到so的还比较少一些
 楼主| xiaoxin520 发表于 2015-8-11 17:40
统列 发表于 2015-8-11 15:38
adk编辑器 可以修改so?

可以的,小坑写的
 楼主| xiaoxin520 发表于 2015-8-13 02:30
统列 发表于 2015-8-11 15:38
adk编辑器 可以修改so?

可以呢,最近在改之理3.3那个贴,不好意思回晚了
athlan20 发表于 2016-2-16 09:52
必须顶啊
CAIMIII 发表于 2016-3-25 17:31
想问哪里能找到汇编的指令机器码汇总,安卓的应该是ARM吧?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 05:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表