对AndroidInlineHook的一些研究和对抗策略
本帖最后由 LivedForward 于 2019-11-7 10:06 编辑之前有研究过MT管理器的去签名校验Hook,普通版的去签名校验Hook系统的PMS服务,增强版Hook了系统C标准函数库里的Open函数以及Java层的各种IO流函数,对这些函数都进行了重定向,这些都是Android Inline Hook.
导致无论使用Android系统APIPMS还是手动通过C层open函数以及Java层的IO读取的RSA签名公钥都是不真实的信息.对APK自身的安全性有一定的威胁.比如向服务器请求数据时,客户端的公钥信息始终是原始客户端的合法公钥信息.
最佳防Hook的方法当然是关键函数自己来实现,比如dlopen,dlsym.
如何替换系统调用:
https://blog.csdn.net/kwame211/article/details/77964897
关于替换系统服务:
https://my.oschina.net/Draymond/blog/1015187
Hook 技术:
https://www.cnblogs.com/linghu-java/p/9671230.html
Android so注入(inject)和Hook技术:
https://www.cnblogs.com/goodhacker/p/9306997.html
网上比较火热的开源Hook框架是Whale,可以跨平台,免Root,Native以及Java层都可以Hook,针对单个APP注入Hook.以及爱奇艺开源的XHook框架.
之前也有发帖检测这种Hook行为,这里我介绍直接获取真实签名信息的一种方法.有不足之处还望各位大佬海涵和多多批评指正!
检测系统API服务是否被Hook:https://www.52pojie.cn/thread-1026558-1-1.html
这里通过获取到系统内核的Open函数地址,来获取签名文件的公钥信息,这样一些Hook工具也就无效了.
这里的dlopen和dlsym也极有可能被hook,网上已经有大佬自己实现了这两个函数以及与之相关的函数,所以大家可以直接来拿稍作修改使用.
测试APP地址:
接:https://pan.baidu.com/s/13TXEkRAxOUrs0W1vETp6jQ 提取码:k6uf
部分程序代码如下:
获取内核函数地址代码如下:
(网络上已经有定制的dlopen和dlsym,可以稍作修改使用)
void* lookup_symbol(char* libraryname,char* symbolname)
{
void*imagehandle = dlopen(libraryname,RTLD_GLOBAL|RTLD_NOW);
if(imagehandle !=NULL){
void* sym = dlsym(imagehandle, symbolname);
if(sym !=NULL){
returnsym;
}
else{
LOGD("(lookup_symbol) dlsym didn‘t work");
returnNULL;
}
}
else{
LOGD("(lookup_symbol) dlerror: %s",dlerror());
returnNULL;
}
}
参数libraryname :系统库的绝对地址
参数symbolname:函数名称 我已经买了永久会员,可是不会用,我不知道我自己为什么要买他。。。。{:301_991:} dongyun0205 发表于 2019-9-28 17:35
我已经买了永久会员,可是不会用,我不知道我自己为什么要买他。。。。
这个软件买了不亏的,相对于电脑的调式工具确实有点鸡肋,但是在手机端算是一个不错的静态修改工具了 羡慕你们破解这些的,没那种思维 不明觉厉,纯支持 之前不知道后来会员涨价才知道这个软件 我表示大脑CPU不够用。运转不过来这些。很想学习,但是也无能为力。{:1_925:} 没钱买会员 dongyun0205 发表于 2019-9-28 17:35
我已经买了永久会员,可是不会用,我不知道我自己为什么要买他。。。。
羡慕。。。。。要不卖给我吧,现在永久会员买不起了 在永久会员买不起了 怎么说呢,支持正版吧,等打折入手不亏,也支持楼主的思路
页:
[1]
2