Android DNS 代码分析

Android DNS 代码都在bionic/libc/netbsd中

(虽然netbsd 是个废弃的项目,但dns功能部分代码被 Android用上了)

netbsd 代码晦涩难懂,只有一边写程序,一边打log验证

照抄了一个简单程序, 在android 下面用 mmm 编译可以得到 py_getaddr 可执行文件, 用adb 登陆到 devices 再到 system/bin 下去执行

[email protected]:~/njb/getaddr$ cat py_getaddr.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s hostname\n",
argv[1]);
exit(1);
}

struct addrinfo *answer, hint, *curr;
char ipstr[16];
bzero(&hint, sizeof(hint));
hint.ai_family = AF_INET;
hint.ai_socktype = SOCK_STREAM;

int ret = getaddrinfo(argv[1], NULL, &hint, &answer);
if (ret != 0) {
fprintf(stderr,"getaddrinfo: &s\n",
gai_strerror(ret));
exit(1);
}

for (curr = answer; curr != NULL; curr = curr->ai_next) {
inet_ntop(AF_INET,
&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr),
ipstr, 16);
printf("%s\n", ipstr);
}

freeaddrinfo(answer);
exit(0);
}
cat Android.mk
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= py_getaddr.c
LOCAL_MODULE := py_getaddr
LOCAL_STATIC_LIBRARIES := libcutils libc
include $(BUILD_EXECUTABLE)

到运行 py_getadd  sohu.com 的时候, 调用过程如下

_files_getaddrinfo 是读取/system/etc/hosts 检索

_dns_getaddrinfo 是访问dns server

在访问构造 dns 访问的时候,如何找到 dns server, 原来在 __res_get_state  调用返回 __res_state  (这个复杂的结构定义在  bionic/libc/private/resolv_private.h#__res_state )

在调用过程中 __res_vinit 使用了系统设置的 8.8.8.8 nameserver (jeallybean 代码在bionic/libc/netbsd/resolv/res_init.c#339)

之后res_queryN 用 res_nmkquery 构造dns 查询,并用 res_nsend 发送查询,并得到返回结果。

运行程序和 log 的打印结果如下:

py_getaddr sohu.com

======================= _files_getaddrinfo

======================= _dns_getaddrinfo

=========== getaddrinfo cp 8.8.8.8, subf 53

================ res_searchN sohu.com

================ res_querydomainN  name sohu.com, domain (null)

================ res_queryN sohu.com

;; res_nmkquery(QUERY, sohu.com, IN, A)

================getanswer sohu.com

220.181.90.240

123.125.116.19

时间: 2024-08-29 17:40:47

Android DNS 代码分析的相关文章

Android恶意代码分析与渗透测试

这篇是计算机类的优质预售推荐>>>><Android恶意代码分析与渗透测试> 从环境构建到分析,涵盖服务体系全过程:以线上线下技巧为基础,展现虚拟环境渗透测试真方法 编辑推荐 从环境构建到分析,涵盖服务体系全过程 以线上/线下技巧为基础,展现虚拟环境渗透测试真方法 内容简介 本书由"恶意代码分析"和"移动服务诊断"两大主题组成.各章节包含了分析步骤,作者们还亲自编写了黑客大赛应用程序试题,读者可以借此复习学过的内容. Androi

[Security_Android] exploit of Ad for android app代码分析

########################################## Hacking Android Apps for Fun and Profit ########################################## #Author: G13 #Twitter: @g13net #Email: [email protected] ########################################## ##### 0x0 ToC ##### 0x1

android逆向代码分析截图

TeamTalk Android代码分析(业务流程篇)

TeamTalk Android代码分析(业务流程篇) 1.1 总体结构 1.总体结构有点类似MVC的感觉,模块结构从上向下大体是: UI层:Activity和Fragment构成,期间包括常用的一些开源控件如:imageloader,speedx,gifview等,和下层数据变更通知通过总线事件完成(EventBus) 管理层:Service(即:imservice,下文均采用此称呼)和一些按照业务划分的Manager(loginmanager,contactmanager,sessionma

如何分析android的OOM,与java静态代码分析工具

用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用. 当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具MAT. 1.下载MAT http://www.eclipse.org/mat/download

Android艺术——Bitmap高效加载和缓存代码分析(2)

Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面是一个实例: public static int calculateInSampleSize(              BitmapFactory.Options options, int reqWidth, int reqHeight) {      // Raw height and widt

新版Android代码分析,生成的代码都有什么用?

刚开始学习,新手,欢迎拍砖和鄙视. 直接入题,新版Android的主要代码分析: 1 package com.bslk.helloworld; 2 /*1.这里的导入包,会有报警告的地方,因为没有使用,已干掉了,其他不管,现在应该0Err0Warn*/ /*2.这是一些导入的包,具体的不解释,不纠结,不懂自己度娘,问了我会鄙视你的*/ 3 import android.support.v7.app.ActionBarActivity; 4 import android.support.v4.ap

android adb 流程原理代码分析(一)

由于要用到adb的知识,但是对adb啥也不了解,看了下android的代码,adb的源码在system/core/adb下面,然后网上搜下了资料,发现很多大神的源码分析,瞬间信心爆棚,把大神写的博客都浏览了一遍,然后手动运行了下adb命令,顺便跟踪了下过程,发现原来还是很好的理解,源码的各种线程创建,函数回调,对于我这种基础不咋好的,,还是看的晕晕呼呼,现在把我自己的理解给大家分享,有理解错误的还请多多指正. 一般直接上代码,可能看官都走了一大半,我们逆向的看,先看结果,再看过程,最后再看代码.

Android源码分析(十七)----init.rc文件添加脚本代码

一:init.rc文件修改 开机后运行一次: chmod 777 /system/bin/bt_config.sh service bt_config /system/bin/bt_config.sh class main user root group root oneshot 开机后等待android启动完成后再运行: service bt_config /system/bin/bt_config.sh class main user root group root disabled one