前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >成熟的App会Hook自己

成熟的App会Hook自己

原创
作者头像
fenfei331
修改2021-06-11 14:30:51
8560
修改2021-06-11 14:30:51
举报
文章被收录于专栏:奋飞安全

一、目标

李老板: 奋飞呀,我都是自己了,还不是想怎么玩就怎么玩,还用Hook这么麻烦吗?

奋飞:男人要对自己狠一点。

我有一个 libtest.so,我调用它后,它会使用 android_log_print 输出一些信息,我想让它输出的内容加点私货。动手吧。

  • so hook
  • Dobby

二、步骤

先把so调用起来

loadso.png
loadso.png

把so放在cpp的同级目录 jniLibs下面。

然后跑起来,输出:

代码语言:txt
复制
2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call directly. 1
2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call from global ptr. 1
2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call from local ptr. 1
2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call from local ptr2. 1 (definitely failed when compiled with -O0)

我们的目标就是在这些输出里面加点私货。

Dobby

https://github.com/jmpews/Dobby 是一个多平台的Hook库,反正很牛就对了。

git clone下来。

dobby.png
dobby.png

整个文件夹放到 CMakeLists.txtnative-lib.cpp 同级目录下面。

然后编辑 CMakeLists.txt 文件

代码语言:txt
复制
# 这里指定静态链接,生成一个so;默认为 ON,生成两个so
set(GENERATE_SHARED OFF)
# 指定 dobby 库目录
set(DOBBY_SOURCE_DIR Dobby)
add_subdirectory(${DOBBY_SOURCE_DIR} dobby.out)
#end

......

# target_link_libraries 部分增加 dobby
target_link_libraries( # Specifies the target library.
                       native-lib
                       dobby

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

然后加上Hook代码

代码语言:txt
复制
#include <android/log.h>
#include "Dobby/include/dobby.h"

static int (*orig_log_print)(int prio, const char* tag, const char* fmt, ...);
static int my_libtest_log_print(int prio, const char* tag, const char* fmt, ...)
{
    va_list ap;
    char buf[1024];
    int r;

    snprintf(buf, sizeof(buf), "[%s] %s", (NULL == tag ? "" : tag), (NULL == fmt ? "" : fmt));

    va_start(ap, fmt);
    r = __android_log_vprint(prio, "Dobby_libtest", buf, ap);
    va_end(ap);
    return r;
}

__attribute__((constructor)) static void ctor() {
    DobbyHook((void *) DobbySymbolResolver(NULL, "__android_log_print"), (void *) my_libtest_log_print,(void **) &orig_log_print);
}

跑起来,体验一下。

代码语言:txt
复制
2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call directly. 1
2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call from global ptr. 1
2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call from local ptr. 1
2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call from local ptr2. 1 (definitely failed when compiled with -O0)

私货整进去了, mytest: 整成了 Dobby_libtest: mytest

三、总结

Hook是经久不衰的话题,除了Hook别人,Hook自己也是很有意义的。

ffshow.jpeg
ffshow.jpeg

有的东西吧,外行人看起来很厉害,但是我们内行人看起来吧,那真xxx不是一般的厉害

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、目标
  • 二、步骤
    • 先把so调用起来
      • Dobby
      • 三、总结
      相关产品与服务
      应用安全开发
      应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档