软件逆向之反汇编

article/2025/7/15 20:16:22

微信公众号:计算机与网络安全

1. 逆向工程

逆向工程(RE,Reverse Engineering)是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在不能轻易获得必要的生产信息下,直接从成品的分析,推导出产品的设计原理。

2. 基本概念

机器码(Machine Code):电脑CPU可直接解读的数据,也被称为原生码(Native Code),与运行平台有关。

汇编语言(Assembly Language):用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址,方便程序员编写代码。汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。主流的有ARM汇编和x86汇编。

CPU寄存器:用来暂时存储指令、数据和地址,包括通用寄存器、专用寄存器和控制寄存器。逆向分析时需要注意特殊寄存器的变化。

WinAPI:Windows 操作系统中可用的内核应用程序编程接口,在 Windows 平台研究学习逆向工程需要了解一些WinAPI编程。

3. 反汇编

反汇编是把目标代码转化为汇编代码、将低级代码转化为高级代码的过程。

以最著名的HelloWorld为例,先在Visual Studio中新建一个HelloWorld项目如下所示。

//HelloWorld.cpp: 定义控制台应用程序的入口点。

#include"stdafx.h"

#include<stdio.h>

int_tmain(int argc,_TCHAR*argv[])

{

printf("HelloWorld\n");

return 0;

}

在生成→配置管理器→活动解决方案配置选择Release。选择Release模式生成可执行文件,程序代码会更简洁,方便调试,如图1所示。

图1 Release模式

此时生成的是HelloWorld.exe的可执行文件,已经不能直接看到程序的源码。通过该可执行文件还原出汇编代码的过程就是反汇编。我们用OllyDbg加载该程序可以轻松地看到反汇编代码,如图2所示。

图2 反汇编代码

4. 常见的工具

OllyDbg是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,已代替SoftICE成为当今最为流行的调试解密工具。同时还支持插件扩展功能,是目前最强大的调试工具。运行界面如图3所示。

图3 OllyDbg运行界面

IDA Pro 32/64:IDA Pro简称IDA(Interactive Disassembler),是一个世界顶级的交互式反汇编工具,有两种可用版本。标准版(Standard)支持20多种处理器,高级版(Advanced)支持50多种处理器,运行界面如图4所示。

图4 IDA Pro运行界面

SoftIce:SoftIce是Compuware NuMega公司的产品,是Windows2000及之前的内核级调试工具,兼容性和稳定性极好,可在源代码级调试各种应用程序和设备驱动程序,也可使用TCP/IP连接进行远程调试。但目前微软的Windbg方便性、可靠性及可用性远远超出SoftICE,且免费使用。所以SoftIce并没有推后续版本。

WinDbg:WinDbg 是在 Windows 平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比Visual Studio更为强大。它的另外一个用途是可以用来分析Dump数据,程序运行如图5所示。

图5 WinDbg运行界面

5. 分类识别工具

在第一次拿到一个文件时,我们需要确定这是一个什么类型的文件。通常可以通过文件扩展名确定。有时候文件扩展名并没有什么实际意义,所以不能通过扩展名来确定文件类型。

(1)file

在大多数 Linux 系统中都带有这个实用工具。file 通过检查某些特定字段来确定文件类型,如下。

root@kail:~/Desktop# file HelloWorld.exe

HelloWorld.exe: PE32 executable for MS Windows(console)Intel 80386 32-bit

root@kali:~/Desktop# file a

a:ASCII text

常见命令:file[-bchikLnNprsvz][-f namefile][-F separator][-mmagicfiles]file。命令参数及描述如表1所示。

表1 file命令参数及描述

(2)PE tools

PE tools用于分析Windows系统中正在运行的进程和可执行文件,主界面如图6所示,列出了所有活动进程和每个进程调用的动态链接库。

图6 PE tools主界面

(3)PEiD

PEiD 是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名,运行界面如图7所示。

图7 PEiD运行界面

6. 摘要工具

一般情况下,我们可以获得的都是二进制程序文件,所有也只能对二进制程序进行逆向。在对文件有了初步的了解和分类后,需要对特定的文件格式进行解析。

(1)nm

nm是names的缩写。nm命令主要是用来列出某些文件中的符号,如一些函数和全局变量。在Linux下面重新编译生成了Helloworld,用nm命令分别查看效果,命令:nm Helloworld,运行如下。

root@kali:~/Desktop# nm Helloworld

00000000006008e8 B __bss_start

00000000006008e8 b completed.6979

00000000006008d8 D __data_start

00000000006008d8 W data_start

0000000000400420 t deregister_tm_clones

00000000004004a0 t__do_global_dtors_aux

00000000006006c8 t__do_global_dtors_aux_fini_array_entry

00000000006008e0 D__dso_handle

00000000006006d8 d_DYNAMIC

00000000006008e8 D_edata

00000000006008f0 B_end

0000000000400574 T_fini

00000000004004c0 t frame_dummy

00000000006006c0 t__frame_dummy_init_array_entry

00000000004006b8 r__FRAME_END__

00000000006008b0 d_GLOBAL_OFFSET_TABLE_

w__gmon_start__

0000000000400590 r__GNU_EH_FRAME_HDR

0000000000400390 T_init

00000000006006c8 t__init_array_end

00000000006006c0 t__init_array_start

0000000000400580 R_IO_stdin_used

w_ITM_deregisterTMCloneTable

w_ITM_registerTMCloneTable

00000000006006d0 d__JCR_END__

00000000006006d0 d__JCR_LIST__

w_Jv_RegisterClasses

0000000000400570 T__libc_csu_fini

0000000000400500 T__libc_csu_init

U__libc_start_main@@GLIBC_2.2.5

00000000004004e6 T main

U puts@@GLIBC_2.2.5

0000000000400460 t register_tm_clones

00000000004003f0 T_start

00000000006008e8 D__TMC_END__

输出字符含义如表2所示。

表2 输出字符含义

(2)ldd

ldd(List Dynamic Dependencies)是Linux上自带的脚本,用来列出可执行文件所需的动态库。命令:ldd Helloworld。

root@kali:~/Desktop#ldd Helloworld

linux-gate.so.1=>(0xb77ef000)

libc.so.6=>/lib/tls/i686/cmov/libc.so.6(0xb7683000)

/lib/ld-linux.so.2(0xb77f0000)

(3)Objdump

Objdump 是一个十分强大的工具,可以灵活地查询文件的各种信息,有大概 30个可选项,可以通过objdump –help查询。简单查看反汇编代码使用如下:Objdump-d helloworld,运行部分如下。

root@kaili:~/Desktop# objdump-d Helloworld

HelloWorld:文件格式 elf64-x86-64

Disassembly of section.init:

0000000000400390 <_init>:

400390:48 83 ec 08 sub $0x8,%rsp

400394:48 8b 05 0d 05 20 00 mov 0x20050d(%rip),%rax #6008a8<_DYNAMIC+0x1d0>

40039b:48 85 c0 test %rax,%rax

40039e: 74 05 je 4003a5<_init+0x15>

4003a0: e8 3b 00 00 00 callq 4003e0<__libc_start_main@plt+0x10>

4003a5: 48 83 c4 08 add $0x8,%rsp

4003a9: c3 retq

Disassembly of section.plt:

00000000004003b0 <puts@plt-0x10>:

4003b0:ff 35 02 05 20 00 pushq 0x200502(%rip) # 6008b8<_GLOBAL_OFFSET_TABLE_+0x8>

4003b6:ff 25 04 05 20 00 jmpq *0x200504(%rip) # 6008c0<_GLOBAL_OFFSET_TABLE_+0x10>

4003bc: 0f 1f 40 00 nopl 0x0(%rax)

(4)Otool

可以获取OS X二进制文件的相关信息。类似objdump的实用工具。

(5)Dumpbin

微软VisualStudio工具套件里的一个命令行工具。主要用于Windows PE文件相关信息的获取。用法类似Objdump。

7. 深度检测工具

strings实用工具专门用于提取文件中的字符串内容,通常使用该工具不会受到文件格式的限制。使用strings的默认设置(至少包含4个字符的7位ASCII序列)。用strings对Helloworld进行检测,部分代码如下。

root@kaili:~/Desktop# strings Helloworld

/lib64/ld-linux-x86-64.so.2

libc.so.6

puts

__libc_start_main

__gmon_start__

GLIBC_2.2.5

AWAVA

AUATL

[]A\A]A^A_

HelloWorld


http://www.hkcw.cn/article/ZrOrHlmIsY.shtml

相关文章

高春花丨庚子时期直隶提督聂士成行实之再检讨

注:本文发表于《历史档案》2023年第1期,此为作者Word版,引用请以该刊为准。感谢高春花老师授权发布! 庚子时期直隶提督聂士成行实 之再检讨 高春花 摘要:庚子时期,直隶提督聂士成身处义和团、联军及部分官吏弹劾的交困之中,进退失据,战死于八里台。详细的梳理聂士成在庚…

2024年北京生育津贴申领指南快来看!生育津贴与产假工资到底有啥关系?

一个生命的诞生倾注了一个家庭的时间、精力、金钱……甚至是妈妈的健康。北京孕妈群有孕妈问,北京生育津贴怎么算?计算公式是怎样的?北京生育津贴跟产假天数有什么关系?北京生育津贴多少钱?怎么申领?北京申领生育津贴要提交哪些材料?办理流程是怎样的?北京生育津贴多久…

最长断供5年!南京挂出8幅地!容积率低至1.05

8月14日,南京土地市场网发布最新市本级出让公告(2024年宁出第13号),挂牌8幅涉宅用地,其中7幅住宅用地、1幅商住混合用地,总用地面积约28.35公顷,起拍总价35.78亿元。地块位于城东仙林汇通路片区,江宁上坊青龙山新城,浦口城南中心、桥林新城、五桥片区,六合龙袍新城、…

用9090拉伸,增强髋部灵活性,缓解腰痛,改善紧张的筋膜。

髋部肌肉 髋部肌群包含着很多肌肉,如臀部肌群(臀大,中,小肌),腰肌(腰大肌,腰小肌,髂肌),而这些肌肉围绕着髋部肌群,提供着人类基本的动作模式。 因为这类肌肉的重要性,故通过对应的拉伸和强化来平衡这些肌群是有必要的。9090拉伸 9090拉伸,主要是通过一个股骨内外…

7个优质免费无版权视频素材网站,让你的作品充满创意与活力

在创作视觉化作品时,高质量的图片和视频素材往往能带来意想不到的效果。然而,寻找合适的素材并不容易,尤其是要找到那些可以免费使用的无版权素材。今天,我们将为你介绍7个优质的免费无版权视频素材网站,让你的作品充满创意与活力。 一、Unsplash(https://unsplash.com/)…

文献综述:苏糖核酸(TNA)作为原始遗传聚合物和当代分子工具简介

苏糖核酸(threose nucleic acid,TNA)是一种化学结构更简单的人工核酸。TNA可以与互补的DNA、RNA或TNA链,按照碱基配对的原则,形成稳定的双螺旋结构。这个性质为信息在不同遗传系统(例如TNA和RNA)之间传递提供了可能。因此,TNA是一种可能的前RNA遗传物质。除了天然的DNA…

原创欧洲杯历史上最令人期待的对决:德国VS意大利

2024年欧洲杯已经落下帷幕,西班牙如愿以偿地夺得冠军。在7月15日那天,西班牙球迷无疑是世界上最幸福的人。他们见证了一届近乎完美的欧洲杯。然而,完美与遗憾常常并存。西班牙在这场赛事中战胜了多个强敌,最终登顶,但这个辉煌背后也铺满了竞争对手的失利。尽管有一些球队因…

原创香港最丑女星:19岁为豪门生6胎被弃,全脸毁容50年反被宠上天?

文/蘑菇妞 在娱乐圈中,有这样一位传奇女星: 小三 上位成为生子机器,晚年毁容吓坏全香港,80岁时给自己办葬礼,如此奇葩还能收获真爱。 她就是和邵音音齐名的“香港丑妇”——黄夏蕙。黄夏蕙的影视作品虽然不多,但却是媒体每年都会争相报道的对象。 这是因为她的事迹真的太…

苹果笔记本MacBook游玩英雄联盟外服教程

很多朋友使用的设备是苹果笔记本,今天小编就通过图文教程告诉大家如何在苹果笔记本上下载游玩英雄联盟外服北美服~ 首先找到英雄联盟league of legends的官网点击页面中间的“PLAY FOR FREE”这时候会弹出登录账号的界面,有拳头游戏账号的朋友可以直接点击“SIGN IN”登录自己…

浅析61850协议网关在电力系统中的作用

61850协议网关是一种专门用于实现IEC 61850协议与其他通信协议之间转换的设备。IEC 61850是电力系统自动化领域的重要通信标准,它定义了变电站内智能电子设备(IED)之间的通信模型和通信服务。61850网关在电力系统中扮演着重要的角色,能够实现不同厂家、不同协议设备之间的互…

女生考完数学喊话:明年考难一点 学霸的自信与期待

2025年高考数学考试结束后,考生们对试题难度的反馈各异。有人认为题目符合预期,但也有人觉得难度较大。不过,高分考生依然存在,这体现了高考命题的选拔性原则。在河南洛阳的一个考场外,一位男生自信地表示今年的高考数学并不难,但大题中设有一些陷阱。河南省使用的是新课…

从水乡到都市:方志与地图告诉你,上海是怎样“长大”的?

志书,是一座城市发展积淀下的密码。 上海的城市空间有一条不断成长的主线,从小小上海浦到浩浩黄浦江,水系发育带动着上海逐渐发展成今日的国际大都市。土地的成陆、城镇的建置、工业的崛起……这些痕迹被记录在志书年鉴中,尤其是地图,直观呈现上海“长大”的历史。 2022年…

9张色彩心理学插画:破解你最爱颜色的玄机!

本文转载自:设计赛圈 🌈 嘿,你有没有发现, 颜色其实能说很多话? 它们不只是让世界看起来更漂亮, 还能透露出你的个性和情感。 想知道你喜欢的颜色在悄悄告诉你什么吗? 让我们一起探索颜色心理学, 看看它们如何影响你的行为和情绪 ,以及它们对他人的印象。 💖 1. 红…

高考第一天结束 家长如何稳住孩子心态

6月7日下午,高考首日的考试科目结束。校门口,家长们踮脚张望的眼神里藏着忐忑,心里想问孩子们考得如何,但又怕影响孩子接下来的考试。国家二级心理咨询师、成都市妇女儿童中心医院心理治疗师向新菊为考生家长提供了一些建议。她提醒,高考首日的“下半场”非常重要,若疏忽…

原创台湾限制级伦理片《艳客临门》:人鬼情缘,人性闪光与欲望反思

今日,我们走进一部名为《艳客临门》的电影,这部由冯家伟执导、莫非编剧的作品,以其独特的剧情设定与人物塑造,为我们描绘了一段跨越生死的人鬼情缘。它不仅在同类题材中独树一帜,更在探讨人性、欲望与爱情的交织中,赋予观众深深的触动与反思。接下来,让我们一同揭开《艳…

深圳中行金融赋能高质量发展 助力先行示范展新篇

中国式现代化是在改革开放中不断推进的,也必将在改革开放中开辟广阔前景。2019年8月,《中共中央国务院关于支持深圳建设中国特色社会主义先行示范区的意见》发布以来,深圳勇担时代赋予的使命任务,通过深化改革开放、扩大先行先试,扎实推进粤港澳大湾区建设,先行示范取得重…

63岁吴廷烨近况:与好友吃火锅喝茅台,老态十足至今仍单身一人

文 | 招财小羊 编辑 | 招财小羊 当年《国际刑警1977》中的那个玩世不恭的“大飞哥”如今怎么老成这个样子了?1月25日,香港演员卢惠光在社交平台上晒出了与好友们的聚会照片,其中有很多我们曾经熟悉的面孔。 比如“乌鸦哥”张耀扬,“流氓大亨”吴启华等,而一边的吴廷烨却差…

南京旅游攻略:打卡南京超全攻略,一次总结精华景点!看完这篇记得收藏

南京,一座融合了古今繁华的六朝古都,承载着千年的风华与传说。这里既有历尽沧桑的古老印记,又有现代化都市的活力四射。当你踏上这片土地,时光仿佛变得柔软,每一步都是故事,每一眼皆为风景。小梁:18667020633(长按可以复制同号)一、历史文化之旅 1.中山陵——位于钟山…

0分考生徐孟南:数学很不友好 从叛逆到求稳的转变

最近安徽蒙城发生了一件新鲜事,35岁的徐孟南第四次走进高考考场。这个曾经在答题卡上故意暴露自己姓名及考号,想要考0分的叛逆少年,如今却老老实实刷题备考,目标是公费师范生。17年前,19岁的徐孟南在高考考场上演了一出行为艺术。别人奋笔疾书算数学题,他在答题卡上写教育…

滇藏铁路丽香段开通在即!昆明到香格里拉仅需约5小时!

好消息! 滇藏铁路丽江至香格里拉段 近期即将开通运营 通车后 迪庆藏族自治州将结束不通铁路的历史滇藏铁路丽香段位于云南省西北部 连通丽江市与迪庆藏族自治州 是我国中长期铁路网规划中 滇藏铁路的重要组成部分 全长139.7公里 设计行车时速为140公里 全线设丽江、拉市海、 小…