Android 逆向x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | x86 汇编语言分析 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | x86 汇编语言分析 )相关的知识,希望对你有一定的参考价值。
文章目录
一、x86 汇编语言分析
在上一篇博客 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 ) 中 , 使用 IDA 反编译 android SDK 中的 D:\\001_Develop\\001_SDK\\Sdk\\build-tools\\26.0.3\\renderscript\\lib\\intermediates\\x86\\libc.so
文件 , 并查找其中的 fork
方法 ;
本篇博客中分析该 libc.so 动态库中的 fork
方法的汇编代码 ;
分析 fork 方法的 x86 汇编代码 :
汇编代码内容 :
public fork
fork proc near
; __unwind {
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0FFFFFFF0h
sub esp, 10h
call $+5
pop ebx
add ebx, 0C75E7h
call _Z27__bionic_atfork_run_preparev ; __bionic_atfork_run_prepare(void)
mov eax, large gs:0
test eax, eax
jz short loc_161EC
将栈指针保存到 ebp 中 : 程序执行过程中 , esp 是栈的地址 , 程序执行过程中需要用到 esp 变量 , 最好不要直接修改 esp , 这里将 esp 拷贝到 ebp 中 , ebp 全程没有修改以及使用 , 函数执行完毕后 , 再将 ebp 出栈 , 还原即可 ;
push ebp
mov ebp, esp
使用完毕之后 , 会进行出栈操作 :
pop ebp
其它的寄存器变量值 , 也进行入栈 , 保护这些值 , 函数执行完毕后再出栈 , 将这些值还原 , 其中 eax 不用入栈 , eax 用于记录返回值 , 该值是肯定要进行修改的 ;
push ebx
push edi
push esi
and 与操作 , 取 esp 的低 16 16 16 位 , 然后与操作的结果 减去 10h ;
and esp, 0FFFFFFF0h
sub esp, 10h
$+5
的含义是当前指令 + 5 , 即执行下一条指令 , 每个指令的长度是
5
5
5 字节 ; 该指令可能是为了兼容 arm 代码而生成的 ; 调用 call 指令后 , 会将下一条要执行的指令放到栈中 ;
call $+5
该行指令对应的机器码如下 :
上面 call 调用后 , 会将下一条要执行的指令地址放到栈中 ;
这里使用 pop 将指令地址从栈中取出 , 放到 ebx 中 ;
从栈中取到的值实际上是 EIP , 当前位置 ;
pop ebx
将当前的地址 加上 0C75E7h
值 , 最终加法运算的结果作为传入下一个函数 __bionic_atfork_run_prepare 的参数 ;
add ebx, 0C75E7h
以上是关于Android 逆向x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | x86 汇编语言分析 )的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 )
Android 逆向x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 )
Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
Android 逆向IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
Android 逆向IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )