首页
社区
课程
招聘
[原创]Arm汇编层面理解inlinehook
发表于: 2020-9-5 07:56 16041

[原创]Arm汇编层面理解inlinehook

2020-9-5 07:56
16041

执行hook之前

执行hook之后

函数进入

新函数分析

C函数调用其实和正常的没啥区别,着重看他调用原函数
(这里我就直接定位0xCE3CE448)

定位0xCE3CE448

接着进去R2看他做了什么事情
(简单来说就是修改了进入之前已经压栈的LR,这样老函数退出的时候才能返回新函数调用老函数的下一条指令)

调用原函数
这里涉及到的静态值是inlinehook onhook时候做的事情,这个debug区域都是动态生成的,这里这涉及已经形成的代码逻辑分析,怎么算的还请看源码

老函数调用返回位置修改

新函数返回位置

函数退出

 
 
 
 
jstring new_Func1(JNIEnv *env, jobject *jobject) {
  LOGD("Called new_Func1");
  jstring ret = (jstring) old_fuc_1(env, jobject);
  const char *str_stc = env->GetStringUTFChars(ret, NULL);
  LOGD("修改前的ret = %s", str_stc);
  jclass jMainAct=env->FindClass("com/lzy/inlinehook/MainActivity");
  jmethodID jm_makeText=env->GetStaticMethodID(jMainAct,"show","()V");
  env->CallStaticVoidMethod(jMainAct,jm_makeText,NULL);
  return env->NewStringUTF("Hook this return value");
}
jstring new_Func1(JNIEnv *env, jobject *jobject) {
  LOGD("Called new_Func1");
  jstring ret = (jstring) old_fuc_1(env, jobject);
  const char *str_stc = env->GetStringUTFChars(ret, NULL);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-10-8 10:17 被唱过阡陌编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
图片丢失,麻烦重新帖一下。
2020-9-5 09:52
0
雪    币: 1441
活跃值: (5660)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
kanxue 图片丢失,麻烦重新帖一下。
ok ~ 
2020-9-5 10:27
0
游客
登录 | 注册 方可回帖
返回
//