【老骥伏枥-狗年大礼包】嵌入式linux逆向工程,手把手教你作黑Q-第一讲

原文网址:http://www.nasyun.com/forum.php?mod=viewthread&tid=39736&fromuid=106494
(出处: NAS云论坛)

前言

最近坛友经常问论坛中的黑群晖版发布非常活跃。为什么为什么黑威联通像一潭死水。坛友希望我能再次为黑威联通做一个启动盘。为了答谢坛友们的厚爱,我再次出手制作了一个教学演示用的创建黑威联通启动工具盘。需要说明的是,我不是一个黑客。资源来自于威联通官网公布的系统包和发布的固件。参考文献中注明所有引用的出处。本文深入浅出地介绍了嵌入式linux逆向工程的概念,原理及实现的技术细节。并为教学实践提供了演示用的创建黑威联通启动工具母盘。此启动盘的理念和启动引导的基础架构设计均绝对是老骥伏枥本人独创,并合法利用开源项目 (Tiny Core Linux Project) [1] 开发的。 也是老骥伏枥通过 NASYUN 论坛在全球独家首发。 请坛友们遵守 GNU General Public License, 未经授权禁止用于商业用途。 该演示用工具母盘为的是进行教学, 研究和技术交流。 禁止用于任何商业目的。

 

第一讲
嵌入式linux逆向工程与常用工具简介


我们为什么要学习嵌入式linux逆向工程呢?答案很明显。利用这个手段,了解和破解提取Linux的嵌入式系统固件的内容。为什么呢?我们可以: 破解固件或将固件升级(增加功能); 审计的安全级别固件;乐趣! 和许多其他的事情!

嵌入式设备固件代码的逆向解析常常被用于破解固件或将固件升级维护及关键电子设备的功能解读和安全防护, 因此学习,研究固件代码逆向解析技术是软件工程中的一个重要领域。 在这个领域中,研究针对Linux固件的逆向解析识别框架;研究固件的一般结构和三大模块的运行机制、实现机制、存储介质相关性及其相互之间的关系等等,会涉及到使用局部特征和分布特征相结合的方法去搜索可疑模块并对模块区间进行排除性剥离,也可能会存在逆向分析过程中固件获取不完整性和固件读取出错的问题。还有就是经验的积累,工具的利用等等。对于菜鸟和小白们,我推荐一本初学者的书"逆向工程入门指南"[2] 给你们读一读。

利用工具进行逆向解析可以提高效率。接下来我介绍如下几款工具给大家,这些只是我自己喜欢用的工具,不一定是最好的工具,也不一定适合你。

一,Binwalk - 开源固件分析工具[3]
binwalk是一个固件文件的分析工具,旨在协助研究人员对固件文件进行分析,提取及逆向工程。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还重要一点的是可以轻松地扩展。在linux系统上的安装方法也是十分简单的,而在windows系统上的安装方法我就不知道了。新手百度下“binwalk工具运行支持的平台”[4] 。

二,Interactive Disassembler (IDA) -交互式反汇编工具[5]
IDA 的官方网站是 https://www.hex-rays.com/ 。在网页上可以看到 IDA 的插件、SDK 等内容。IDA 会在官网提供 Demo 版的下载。然而, Demo 版没有 IDA 最强大的反汇编功能,正版的证书费用比较贵。(专业人士还是建议买证书)。网上也有提供破解IDA Pro版的,可以用来学习。新手百度一下“破解IDA Pro版”。关于IDA的特色,我就不在这里赘述了。推荐大家一个文章:“今天开始学逆向:反汇编的利器IDA和Hopper的基本使用”[6] 。有兴趣的坛友可以读一读。

三,Snowman C/C++反编译器[7]
支持ARM,x86和x86-64体系结构。读取ELF,Mach-O和PE文件格式。重构函数,它们的名称和参数,局部和全局变量,表达式,整数,指针和结构类型,所有类型的控制流结构,包括开关。有一个很好的图形用户界面,汇编程序代码和重建程序之间的一键导航。有一个用于批处理的命令行界面。

四,SystemRescueCD 开源x86平台的Linix操作系统[7]
SystemRescueCd是x86计算机平台的操作系统,但SystemRescueCD的主要目的是在系统崩溃后修复无法启动或以其他方式损坏的计算机系统。 SystemRescueCd不打算用作永久性操作系统。 它从Live CD,USB闪存驱动器或任何类型的硬盘驱动器运行。 它由FrançoisDupoux领导的团队设计,基于Gentoo Linux发行版。我很喜欢使用这个Linix系统。 一张CD盘,不用安装直接启动,就能立即使用。并且包含各种各样的系统救援工具。
 


第二讲
手把手教破解威联通固件


作为教学实践的示范,下面我将一步一步地讲述从下载官方发布的固件开始,如何完成固件代码逆向解析的。遇到需要补充嵌入式linux系统结构和相关知识时,也会详细说明。力求通过本次的教学实践示范,让大家详细了解威联通系统。但我们的目的是教学,研究,不是黑客。禁止利用本教学示范,从事任何商业目的。

首先我们去威联通的官网,选择一个它发布的固件。我会选择比较新的4.3.3版固件。但我不会选择最新版。我破解固件,会遵守江湖上的潜规则,不会破解最新版,至少要低一个小版本号。

 威联通官网固件.txt (5.77 KB, 下载次数: 652) 

威联通官网发布的固件包是zip格式的压缩包。解压后会得到一个img文件。这个文件是什么格式,我不知道。所以就要使用Binwalk固件分析工具来查一查它。看看有什么线索。扫描的结果如下:
" lazyloaded="true" _load="1" style="word-wrap: break-word; margin: 0px; padding: 0px; text-decoration: none; font-style: normal; border: 0px; cursor: pointer;">

扫描的结果非常令人沮丧。根据经验,这个扫描结果不能提供什么线索。

思索与分析:
固件可能是加密的。因为这是威联通官网发布的固件,既然它是为Update威联通而发布的,那么威联通的系统在Update时就一定会有解密的方法。因此需要通过研究它的固件更新机制,获取固件包的内容。这是威联通固件的第一个坑。

为了研究威联通系统的固件更新机制,只能想办法找一台威联通,正好我的一个朋友有一台威联通TS288设备。使用SSH登陆后,在/etc/init.d/update.sh的文件中发现了这样的代码:
 

  1. /sbin/PC1 d QNAPNASVERSION4 "$path_name" "${_tgz}"; \
  2. /bin/tar tzf "${_tgz}" 2>/dev/null

复制代码



根据经验,这段代码给人的直观印象是,它要将"$path_name"所指的文件解密为一个"${_tgz}"文件。为了验证我的想法,我将官网发布的固件拷贝到该设备,运行了/sbin/PC1试一试。结果出乎意料地好。我拿到了一个tgz文件。将这个tgz文件下载,再用Binwalk固件分析工具来查一查它。

扫描的结果如下:
" lazyloaded="true" _load="1" style="word-wrap: break-word; margin: 0px; padding: 0px; text-decoration: none; font-style: normal; border: 0px; cursor: pointer;">

这个结果非常振奋人心。起始地址0开始为gzip compressed data。也就是说这是一个真正的tgz文件。接下来,我需要把/sbin/PC1下载到我的机器中,进行分析。因为以后制作启动工具母盘的时候,这是一个必须的文件。

/sbin/pc1是一个ELF格式的可执行文件。一般情况下,我会用IDA Pro工具先对它做个静态分析,如果需要更近一步的话,我会再用gdb工具做动态分析。其实PC1很简单。静态分析足以。情况如下截图:
" lazyloaded="true" _load="1" style="word-wrap: break-word; margin: 0px; padding: 0px; text-decoration: none; font-style: normal; border: 0px; cursor: pointer;"> 
" lazyloaded="true" _load="1" style="word-wrap: break-word; margin: 0px; padding: 0px; text-decoration: none; font-style: normal; border: 0px; cursor: pointer;"> 
" lazyloaded="true" _load="1" style="word-wrap: break-word; margin: 0px; padding: 0px; text-decoration: none; font-style: normal; border: 0px; cursor: pointer;"> 

并无悬念它是威联通用来加密,解密官网发布固件的。密钥是“QNAPNASVERSION4”并且固定不变的。使用Snowman对他做C/C++反编译,就可以生产一个pc1.c文件。留着我以后制作启动工具母盘时重新编译使用。这第一个坑总算是迈过去了。

由于NASYUN的篇幅限制,请继续看楼下,【手把手教你破解威联通固件】, 精彩继续!

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VMware安装QNAP图文详细步骤 目录 第一步:准备工具 2 第二步:新建虚拟机 3 第三步:修改配置文件 4 第一次登陆控制台报错问题! 14 存储池爆红,提示错误。存不了文件 15 第一步:准备工具 1、VMware ESXI6.5及以上 2、配置好的QNAP1G-BOOT.vmdk文件(自己按照程做的,已配置好需要的文件,只需将老骥伏枥1G版威联通启动盘换成这个,就不需要麻烦配置了,其他步骤一样) 备注:在esxi新建虚拟机就按此程VM虚拟机软件中的说明就可以,理论上esxi6.5及以上可用,测试为esxi6.7,仅供学习交流,非原创,只是再这个基础上进行了改进。 第二步:新建虚拟机 在vmware菜单栏中,按照以下方法建虚拟机 文件>新建虚拟机>自定义高级>最高版本硬件兼容>稍后安装>客户机操系统Linux,版本是centos 7>下一步>下一步>虚拟机内存2G够了>网络使用桥接模>推荐的就行>IDE>使用现有磁盘,选择的是老骥伏枥1G版威联通启动盘>保存现有格>完成 这一步需要注意的有:网络选择桥接、硬盘选择IDE类型,其他的按照默认即可。 把启动盘接在IDE 0:1 接口的位置(primer slave),数据盘接在IDE 0:0 (primer master)接口的位置。修改硬盘位置的方法如下图所示: 第三步:修改配置文件 2、修改虚拟机网卡。 在虚拟机放置的目录里寻找  你虚拟机名字.vmx文件,以我的虚拟机为例,虚拟机名字为QNAP,就找到QNAP.vmx文件,然后使用文本编辑器打开 ,修改图中红框一行,e1000改为e1000e。 3.修改启动引导。 右击虚拟机,依次选择,电源→打开电源时进入固件。这样开机时就会进入bios,按照图中所示修改启动顺序 4、 启动虚拟机。 点击第一个 启动内核中,需要等几分钟 出现这个页面的时候就已经成功了。 这个时候用ip:8080在浏览器访问就可以了,ip就是在上面我叫你拿个记事本记住的! 之后就是漫长的安装过程。完成安装后可能会出现以下几个问题! 第一次登陆控制台报错问题! 这个在你兴高采烈进去的时候发现登陆不进去,按F12发现Console一直在报错!这个时候打开目录下面的gistfile1.txt 这个时候将里面的内容复制起来,复制到刚才控制台(就是在浏览器a按下F12后,在报错的最下面黏贴,回车就行了) 然后就可以登陆,记住第一次登陆会特别长! 时间很长后还是不行就关闭虚拟机,重新启动。再次进入,如果还不行,多试几次这样。一定可以的 存储池爆红,提示错误。存不了文件 在登录后,后台一直提示存储池错误 下面图片就是解决方法 一直下一步就行了! 好了!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值