zhuotong / Android_InlineHook

Android内联hook框架

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OPPO 手机 Android 10 demo hook成功了 回调origin的时候崩溃

bufferoverflowexception opened this issue · comments

11706-11706/com.zhuotong.myihk E/zhuo: dlopen=0x777878a014
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: dump_replace
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: HookArm()
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE1
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: pstInlineHook->szbyBackupOpcodes is at 0x76896c3828
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Arm64 Opcode to fix 0 : a9bf7bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm : a9bf7bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fix length : 4
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : a9bf7bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Arm64 Opcode to fix 1 : 910003fd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm : 910003fd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fix length : 4
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : 910003fd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Arm64 Opcode to fix 2 : aa1e03e2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm : aa1e03e2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fix length : 12
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : aa1e03e2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Arm64 Opcode to fix 3 : 94000078
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm : 94000078
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fix length : 4
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : 94000078
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk E/zhuo: is BL_ARM64
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Arm64 Opcode to fix 4 : a8c17bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm : a8c17bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fix length : 4
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : a8c17bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Arm64 Opcode to fix 5 : d65f03c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm : d65f03c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fix length : 4
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : d65f03c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk E/zhuo: BuildStub_replace
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk E/zhuo: sShellCodeLength=704
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk E/zhuo: pNewShellCode=0x768989a000
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk E/zhuo: start=0x768989a000, end=0x768989b000, size=0x1000
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.1
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.3
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.4
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: 0x768989a2c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: Fixing Arm !!!!!!!
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: sizeof(uint8_t) : 1
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: currentOpcode is a9bf7bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: new_entry_addr : 8989a2c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: THE ARM64 OPCODE IS a9bf7bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : a9bf7bfd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: OTHER_ARM
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: ONE FINISH
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: currentOpcode is 910003fd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: new_entry_addr : 8989a2c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: THE ARM64 OPCODE IS 910003fd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : 910003fd
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: OTHER_ARM
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: ONE FINISH
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: currentOpcode is aa1e03e2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: new_entry_addr : 8989a2c0
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: THE ARM64 OPCODE IS aa1e03e2
2022-04-23 17:53:34.764 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : aa1e03e2
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: OTHER_ARM
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: ONE FINISH
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: currentOpcode is 94000078
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: new_entry_addr : 8989a2c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: THE ARM64 OPCODE IS 94000078
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : 94000078
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: is BL_ARM64
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: OTHER_ARM
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: ONE FINISH
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: currentOpcode is a8c17bfd
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: new_entry_addr : 8989a2c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: THE ARM64 OPCODE IS a8c17bfd
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : a8c17bfd
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: OTHER_ARM
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: ONE FINISH
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: currentOpcode is d65f03c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: new_entry_addr : 8989a2c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: THE ARM64 OPCODE IS d65f03c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: getTypeInArm64 : d65f03c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: OTHER_ARM
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: pstInlineHook->backUpLength : 24
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: backUpPos : 24
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: fixPos : 24
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: Fix finish !
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: start=0x768989a000, end=0x768989b000, size=0x1000
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.5
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.6
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.1
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.2
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.3
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.4
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.5
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.6
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.7
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.7
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.8
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE3.9
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.1
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.2
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: start=0x777878a000, end=0x777878b000, size=0x1000
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.1
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.2
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.3
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.4
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.5
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.6
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.3.7
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.4
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE4.5
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE5
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk I/zhuo: LIVE6
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: HK_INFO=0x76896c37c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: add=0x768989a2c0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: handler=0x0
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: lr pre_callback
2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk E/zhuo: hk: dlopen(libEGL_adreno.so, 2)

--------- beginning of crash

2022-04-23 17:53:34.765 11706-11706/com.zhuotong.myihk A/libc: Fatal signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0x768989a4ac in tid 11706 (.zhuotong.myihk), pid 11706 (.zhuotong.myihk)

看起来hook是成功了 但是回调origin dlopen的时候崩溃了

同一台手机test_replace的调用时成功的 没崩溃

同一台手机test_replace的调用时成功的 没崩溃

test_dlopen是Android7.0以下使用的,Android10可以使用test__loader_dlopen试试,详细的原因可以看:https://blog.csdn.net/DaoDivDiFang/article/details/103802431?spm=1001.2014.3001.5501

同一台手机test_replace的调用时成功的 没崩溃

test_dlopen是Android7.0以下使用的,Android10可以使用test__loader_dlopen试试,详细的原因可以看:https://blog.csdn.net/DaoDivDiFang/article/details/103802431?spm=1001.2014.3001.5501

请教一下replace.s里面
str lr, [sp, #0x108]; //lr当作pc,覆盖栈上的x0
这行代码 为什么要偏移0x108 这个地方是什么 为什么可以直接被覆盖掉?

同一台手机test_replace的调用时成功的 没崩溃

test_dlopen是Android7.0以下使用的,Android10可以使用test__loader_dlopen试试,详细的原因可以看:https://blog.csdn.net/DaoDivDiFang/article/details/103802431?spm=1001.2014.3001.5501

请教一下replace.s里面 str lr, [sp, #0x108]; //lr当作pc,覆盖栈上的x0 这行代码 为什么要偏移0x108 这个地方是什么 为什么可以直接被覆盖掉?

保存pc寄存器,其实lr就是指向下一条blr指令。如果还是看不懂建议先补充下arm64汇编基础再看。

同一台手机test_replace的调用时成功的 没崩溃

test_dlopen是Android7.0以下使用的,Android10可以使用test__loader_dlopen试试,详细的原因可以看:https://blog.csdn.net/DaoDivDiFang/article/details/103802431?spm=1001.2014.3001.5501

请教一下replace.s里面 str lr, [sp, #0x108]; //lr当作pc,覆盖栈上的x0 这行代码 为什么要偏移0x108 这个地方是什么 为什么可以直接被覆盖掉?

保存pc寄存器,其实lr就是指向下一条blr指令。如果还是看不懂建议先补充下arm64汇编基础再看。

我看了你的代码
shellcode开始的地方先开辟了 0x20栈空间大小
sub sp, sp, #0x20; //跳板在栈上存储了x0、x1,但是未改变sp的值

接着又会申请0xf0大小的栈空间
sub sp, sp, #0xf0; //分配栈空间

属于shellcode申请的栈大小只有0xf0 + 0x20 但保存pc的时候却保存在[sp, #0x108]的位置上来 这个位置明显是超过了shellcode申请的堆栈空间范围了 这里不会覆盖到别的地方去 造成溢出吗

同一台手机test_replace的调用时成功的 没崩溃

test_dlopen是Android7.0以下使用的,Android10可以使用test__loader_dlopen试试,详细的原因可以看:https://blog.csdn.net/DaoDivDiFang/article/details/103802431?spm=1001.2014.3001.5501

请教一下replace.s里面 str lr, [sp, #0x108]; //lr当作pc,覆盖栈上的x0 这行代码 为什么要偏移0x108 这个地方是什么 为什么可以直接被覆盖掉?

保存pc寄存器,其实lr就是指向下一条blr指令。如果还是看不懂建议先补充下arm64汇编基础再看。

我看了你的代码 shellcode开始的地方先开辟了 0x20栈空间大小 sub sp, sp, #0x20; //跳板在栈上存储了x0、x1,但是未改变sp的值

接着又会申请0xf0大小的栈空间 sub sp, sp, #0xf0; //分配栈空间

属于shellcode申请的栈大小只有0xf0 + 0x20 但保存pc的时候却保存在[sp, #0x108]的位置上来 这个位置明显是超过了shellcode申请的堆栈空间范围了 这里不会覆盖到别的地方去 造成溢出吗

这样吧,你要是看不懂的话建议你使用ida动态调试吧。。。
这种代码阅读理解、汇编基础不清楚的话,我也不是三言两语说明白的,我也没时间给你录个视频解说。而且并不会溢出,只是覆盖最初跳板保存的x0,因为shellcode重新保存x0了,所以x0不需要了。