IDA Pro > IDA Pro教程 > 技术问题 > 对 D-Link 后门进行逆向工程

对 D-Link 后门进行逆向工程

发布时间:2022-10-09 17: 01: 45

D-Link是常用于各种网络环境中的硬件品牌,今天我们对它进行后门逆向分析。

一时兴起,我为Dir-100 Reva下载了固件v1.13。Binwalk迅速找到并提取了Squashfs文件系统,很快我将固件的Web服务器(/bin/web)加载到IDA中:

/bin/webs中的字符串

基于上述字符串列表,/bin/web二进制是THTTPD的修改版本,为路由器提供管理界面。它似乎已通过Alphanetworks(D-Link的衍生)进行了修改。他们甚至足够深思,可以用字符串的“alpha”来准备许多自定义功能名称:

Alphanetworks的自定义功能

 

alpha_auth_check函数听起来很有趣!

 

此功能是从几个不同的位置调用的,最著名的是来自alpha_httpd_parse_request:

对alpha_auth_check的函数调用

 

我们可以看到alpha_auth_check传递了一个参数(无论存储在寄存器$s2中的什么);如果alpha_auth_check返回-1(0xFFFFFFFF),代码跳转到alpha_httpd_parse_request,否则继续处理请求。

 

之前对寄存器$s2的使用进行了进一步检查,alpha_auth_check表明它是一个指向数据结构的指针,其中包含指向接收到的HTTP请求的各个部分的char*指针,例如HTTP标头和请求的URL:

$s2是指向数据结构的指针

 

我们现在可以为alpha_auth_check并开始枚举数据结构的元素:

 

结构http_request_t

 {

 字符未知[0xB8];

 字符*url;//在数据结构的偏移量0xB8

 };

int alpha_auth_check(struct http_request_t*request);

 

alpha_auth_check本身是一个相当简单的函数。它针对http_request_t结构中的一些指针执行一些strstr和strcmp,然后调用check_login,这实际上是进行身份验证检查。如果调用任何strstr's/strcmp's或check_login成功,则返回1;否则,它将浏览器重定向到登录页面并返回-1:

alpha_auth_check代码片段

 

那些strstr看起来很有趣。他们获取请求的URL(在http_request_t数据结构的偏移量0xB8处,如前所述)并检查它是否包含字符串“graphic/”或“public/”。这些是设备web目录下的子目录,如果请求的URL包含这些字符串之一,则无需身份验证即可允许请求。

 

然而,它是最终的strcmp,它被证明更有说服力:

alpha_auth_check中一个有趣的字符串比较

 

之间执行strcmp http_request_t结构内偏移0xD0处的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”如果字符串匹配,check_login函数调用并且alpha_auth_check返回1(身份验证OK)。

 

在谷歌上快速搜索“xmlset_roodkcableoj28840ybtide”字符串,几年前只找到一篇俄罗斯论坛的帖子,其中指出这是/bin/webs二进制文件中的一条“有趣的线”。我不得不同意。

 

那么,这个神秘的字符串与之相比是什么呢?如果我们回顾调用树,我们会看到http_request_t结构指针由几个函数传递:

事实证明,http_request_t结构中偏移量0xD0处的指针由httpd_parse_request函数填充:

检查用户代理HTTP标头

使用指向User-Agent标头字符串的指针填充http_request_t+0xD0

 

这段代码实际上是:

 

 if(strstr(header,"User-Agent:")!=NULL)

 {

 http_request_t->0xD0=header+strlen("User-Agent:")+strspn(header,"\t");

 }

 

知道http_request_t中的偏移量0xD0包含指向User-Agent标头的指针,我们现在可以重新构造alpha_auth_check函数:

 

  #define AUTH_OK 1

 #define AUTH_FAIL-1

 int alpha_auth_check(struct http_request_t*request)

 {

 if(strstr(request->url,"graphic/")||

 strstr(request->url,"public/")||

 strcmp(request->user_agent,"xmlset_roodkcableoj28840ybtide")==0)

 {

 return AUTH_OK;

 }

 else

 {

 //These arguments are probably user/pass or session info

 if(check_login(request->0xC,request->0xE0)!=0)

 {

 return AUTH_OK;

 }

 }

 return AUTH_FAIL;

 }

 

换句话说,如果浏览器的用户代理字符串为“xmlset_roodkcableoj28840ybtide”(无引号),则无需任何身份验证即可访问web界面并查看/更改设备设置(显示了DI-524UP,因为我没有DIR-100,而DI-524BUP使用相同的固件):

访问DI-524UP的管理页面

 

根据HTML页面的源代码和一些Shodan搜索结果,可以合理得出以下D-Link设备可能受到影响:

●DIR-100

●DI-624S

●DI-524UP

●DI-604S

●DI-604UP

●DI-604+

●TM-G5240

 

此外,几个Planex路由器似乎也使用相同的固件:

●BRL-04UR

●BRL-04CW

 

原文地址:https://lcx.cc/post/3950/

展开阅读全文

标签:IDA

读者也访问过这里:
邀请您进入交流群 点击扫码
400-8765-888 kefu@makeding.com

专业销售为您服务

欢迎添加好友,了解更多IDA优惠信息,领逆向工程学习资料礼包1份!
热门文章
exe反编译工具哪个好?反编译能力强的工具盘点
随着软件技术的发展,exe(可执行文件)已经成为了电脑、手机等多个平台上的主要软件运行格式,而对于exe文件的反编译也成为了逆向工程中不可缺少的一个步骤。本文将介绍一些常用的exe反编译工具,并评价其优缺点,帮助读者选择合适的工具。
2023-04-12
idapro怎么改为中文
IDA Pro是一款功能强大的反汇编和反编译工具,广泛应用于逆向工程和软件开发领域。在使用IDA Pro时,如果我们不习惯英文界面,可以将其改为中文界面。本文将介绍IDA Pro怎么改为中文界面。IDA Pro界面改成中文主要有两种方法,下面是详细介绍。
2023-04-19
c++反编译工具有哪些
反编译C++代码的工具一般是针对可执行文件和库文件的反汇编和逆向分析工具。本文将给大家介绍c++反编译工具有哪些的内容。市面说的c++反编译工具有很多,下面介绍几款使用认识较多的软件。
2023-04-23
ida怎么查找字符串 ida字符串窗口快捷键
在数字化时代,逆向工程作为解密软件和分析程序的关键技术,正日益受到广泛关注。在逆向分析的过程中,IDA(Interactive DisAssembler)是一款备受推崇的工具,它为逆向工程师们提供了强大的功能和灵活的操作。本文将带您深入探讨如何在IDA中查找字符串,优化字符串窗口的使用,并探讨IDA如何将变量转换成字符串,帮助您更加熟练地驾驭这一工具,为逆向分析的世界增添一抹精彩。
2023-09-27
ida如何转伪代码 ida伪代码怎么看
IDA Pro是一款常用的反汇编和反编译工具,可以帮助我们分析二进制文件的实现细节和执行过程,以便更好地理解程序的执行过程和逻辑。在进行逆向工程的过程中,我们经常需要将反汇编结果转换为伪代码,以便更好地进行分析和修改。本文将介绍如何使用IDA Pro转换为伪代码,并简单讲解ida伪代码怎么看。
2023-04-14
最新文章
IDA反编exe怎么处理入口点 IDA反编exe导入符号后仍无函数名怎么改善
exe进IDA后第一眼最容易卡住两件事:入口点跳过去像一团乱麻,不知道从哪里开始顺;导入了符号却仍然满屏sub_,看起来像没导入成功。处理这类问题不要凭感觉乱点,按固定顺序把入口点与加载口径对齐,再把符号匹配、库函数识别、函数边界恢复三条线分别处理,通常就能明显提升可读性。
2026-03-12
IDA分析dsp怎么选处理器模块 IDA分析dsp反汇编全是数据段怎么处理
用IDA分析DSP时,处理器模块选错会直接把指令当成数据,反汇编窗口看起来就像整段都是字节数组。更麻烦的是,你一旦在错误模块下做了大量标注与重命名,后面再换模块会发现视图和引用关系全变了。正确做法是先把处理器模块与装载口径选对,再让IDA完成一次稳定的自动分析,然后再进入深挖。
2026-03-12
IDA逆向教程怎么系统化学习 IDA逆向教程练习样本怎么挑不踩坑
学IDA逆向想走得稳,关键是把学习顺序排对,把练习变量控住。先用可复现的步骤建立分析习惯,再用难度合适的样本训练定位入口、还原数据结构、验证关键分支这三种能力,进步会更可见,也不容易卡在壳与反调试上消耗时间。
2026-03-12
IDA反编译c++怎么看类结构 IDA反编译c++虚函数表怎么识别
用IDA反编译C++时,类结构还原与虚函数表识别是一体两面。你先把vptr写入点和成员偏移搞清楚,伪代码里的this指针与结构体字段才会“长”出来。下面按可操作路径讲清楚,先看类结构怎么搭起来,再看虚函数表怎么定位与命名,最后给一套反推校对的方法,方便你在大型工程里快速闭环。
2026-03-11
IDA静态分析算法怎么理解 IDA静态分析算法在图视图里怎么验证判断
在IDA里说的静态分析算法,更多是指自动分析阶段对二进制做反汇编、函数识别、交叉引用与控制流建模的一整套推断流程。图视图把这种推断结果用基本块与边的形式直接展示出来,你不需要先把每条指令读完,就能先验证它的判断是否站得住,再决定哪里值得深挖。
2026-03-10
IDA逆向分析从哪里开始 IDA逆向分析如何快速定位关键逻辑
用IDA做逆向,起步阶段最容易犯的错,是一上来就盯着反汇编硬读,结果入口没找准、分析口径没统一、笔记也没体系,越看越乱。更稳的做法是先把样本信息、加载参数、自动分析结果固定下来,再用少量高信息线索把范围收敛到关键函数集合,最后再进入精读与还原,这样效率会高很多。
2026-03-09

通过微信咨询我们

欢迎添加好友,了解更多IDA优惠信息,领取逆向工程学习资料礼包1份!

读者也喜欢这些内容: