即无偿跳转机械制造

   
 目前逆向一个主次,需要把bne.w改成b,无条件跳转。由于ios逆向不像pc上,可以在od里平昔改汇编指令,这篇作品给了自我很大的相助。通过memory
write
修改后,验证可行后,再用ultraedit修改二进制文件,保存可执行程序(直接点击保存,不要另存为,否则就是个不足实践文书,这点切记,初步时浪费自己好短期)。再用scp命令拷贝到ios设备,即可。

 

 

著作出处:http://blog.chinaunix.net/uid-22915173-id-225005.html

 

机械制造 1

ARM中的常用命令含义
ADD 加指令
SUB 减指令
STR    把寄存器内容存到栈上去
LDR    把栈上内容载入一寄存器中
.W    
是一个可选的吩咐宽度表达符。它不会潜移默化为此命令的作为,它只是保证生成 32
位指令。Infocenter.arm.com的详细音讯
BL    
执行函数调用,并把使lr指向调用者(caller)的下一条指令,即函数的归来地址
lr  link register链接寄存器
BLX    同上,不过在ARM和thumb指令集间切换。
CMP    指令举办相比较六个操作数的大大小小

ADD R3,R2,R1,LSR #2   ;R3R2+R1÷4
ADD R3,R2,R1,LSR R4 ;R3R2+R1÷2R4

LDR R0,[R1]  ;R0←[R1] 将R1的值为地址的存储器中的数据传送到R0中
STR R0,[R1]  ;[R1]←R0  将R0的值传送到R1的值为地址的存储器中。

基址变址寻址
LDR R0,[R1,#4]    ;R0←[R1+4]
LDR R0,[R1,#4]!;R0← [R1+4], R1←R1+4
LDR R0,[R1] ,#4   ;R0←[R1], R1←R1+4
LDR R0,[R1,R2]    ;R0← [R1+R2]
机械制造,LDR R0,[R1,R2,LSL#2];R0← [R1+R2*4]

堆栈寻址
ARM 32位指令
STMFD   SP! {r0,r1,r3-r5} ; r0-r1,r3-r5入栈
LDMFD  SP! {r0,r1,r3-r5} ; r0-r1,r3-r5出栈
Thumb 16位指令
PUSH       {r0,r1,r3-r5} ; r0-r1,r3-r5入栈
POP        {r0,r1,r3-r5} ; r0-r1,r3-r5出栈

满递减堆栈-进栈
stmfd sp!, {r0,r1,r3-r5}
满递减堆栈-出栈
ldmfd sp!, {r0,r1,r3-r5}

跳转指令
B  跳转指令
BL 带链接的跳转指令
BLX 带链接和境况切换的跳转指令
BX 带状态切换的跳转指令

软件中断指令SWI
SWI  0x2

断点指令(BKPT)
BKPT   0xF02C 断点,用于调试

Thumb 是16-bit 指令集
代码密度高 (总代码大小约为ARM指令的65%)
行使窄总线存储器时可以大大进步性能。
是 ARM 指令集的一个子集,不是一个完好无缺的指令集(Thumb-2除外)
核存在一个履行情形 – Thumb状态
ARM和Thumb之间可通BX 指令举行切换

http://wenku.baidu.com/link?url=83-XJ-2KEt4gCIeLG1Bi2oTgQXeHqDUDAJ-zXVt8nlAf\_VOg7\_6FyXmKCJPiB2J98u-fosB0ERlnn\_53rTjnpS8dL96MdZncTzmUMpSZV7y

任何:IDA深度分析修改so文件和ARM汇编

1.我们要达到什么样目地?
我们逆向APK时,近期对此so一般来说是自然要做修改的,但是IDA修改汇编代码,不像OD可以平昔改动汇编指令,必须通过WINHEX等修改十六进制。我们只有理解00意味代码清除,90表示NOP指令,即空指令。但一味删除一行代码这样的改动肯定是满足不断需要的。我们需要深切修改一点。

2.AMD8086与ARM基础知识
AMD8086是Intel公司的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编辑器。

发表评论

电子邮件地址不会被公开。 必填项已用*标注