1.想通過hook gethostbyname 來獲取app中網絡請求的hostname ,結果失敗了, hook之后并沒有反應, 懷疑是IAT Hook的緣故 , 又或許是根本沒有調用的緣故
2.找到了getaddrinfo 第一個參數就是hostname , 那么hook嘗試一下
int (*orig_getaddrinfo)(const char * __restrict hostname, const char * __restrict service,
const struct addrinfo * __restrict hints,
struct addrinfo ** __restrict result);
int my_getaddrinfo(const char * __restrict hostname, const char * __restrict service,
const struct addrinfo * __restrict hints,
struct addrinfo ** __restrict result)
{
NSLog(@"*********getaddrinfo ***************");
NSLog(@"*****hostname = %s",hostname);
return orig_getaddrinfo(hostname,service,hints,result);
}
1111.png
成功 ,獲取到了想要的域名 ,可以做處理了
getaddrinfo介紹如下:(摘自百度)
函數原型
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
參數說明
hostname:
一個主機名或者地址串(IPv4的點分十進制串或者IPv6的16進制串)
service:
服務名可以是十進制的端口號,也可以是已定義的服務名稱,如ftp、http等
hints:
可以是一個空指針,也可以是一個指向某個addrinfo結構體的指針,調用者在這個結構中填入關于期望返回的信息類型的暗示。舉例來說:指定的服務既可支持TCP也可支持UDP,所以調用者可以把hints結構中的ai_socktype成員設置成SOCK_DGRAM使得返回的僅僅是適用于數據報套接口的信息。
result:
本函數通過result指針參數返回一個指向addrinfo結構體鏈表的指針。