极客大揭秘之软件分析

分析软件,你也可以!


 

文章目录

 


前言

提示:(比较硬核坛友,可以跳过这部份)

最近,我观看了由GeekPwn(极棒)主办的2020 国际安全极客大赛。

提一下个人感受,虽然现场很尬,比赛节奏拖拉,比赛选手操作不透明。

但是,还是体现了不少内容的。其中,关于软件安全的方面令我印象犹深。

 

WPS office 2019 相信大家都用过,都也存放了不少东西,有工作上的,

学习上的,生活上的······ 同时也应需要打开过不少文件。但是,现在说,

你打开一个文件,就有阔能泄露你的全部文件信息。

 

大概原理是选手通过分析,发现了WPS软件的格式渲染漏洞,并利用它,

在我们加载文件时,后端截取我们文件相关信息。同时,现存的杀软无法拦截其行为。

今天,我要谈一谈,这“分析”二字的内部技术,让我们也来初步认识其神秘的面貌。

 


一、分析即逆向分析,也称****

****就我个人而言,是通过一系列的工具和手段,

来分析一个现有的软件或程序的运行思路,及其核心算法,从而理解其实现原理,

达到优化其功能,加快其运行速度,解决其bug的目的。

 

好比,普通人吃一个鸡蛋,除了能判断其新不新鲜外,

什么也分析不出来。而,****,能使人吃出其产地,生产时间,生产鸡的品种,

鸡的心情(好吧!这个有点扯),大概就是这样。

 

因为****是很系统的,很庞大的(就相关书籍《加密与解密  提取码:zhan》就912页)

所以,鉴于鄙人才疏学浅,就谈一下,其基本的反汇编代码分析

 

二、什么是反汇编代码

如图(一),为ollyDbg程序的操作界面,而如 push ebp...... 就是汇编代码

极客大揭秘之软件分析

                                                                              图(一)

那什么称其为反汇编代码呢?

原因是,其汇编代码,是通过ollDbg这个软件,由原来的机械码反编译而来的

编过代码的都知道,在计算机内部,程序都是由0和1组成的机械码表示的

x86模式下,函数的汇编表现形式

1.x86模式

即平常我们所说的32位系统,32位程序

2.函数的汇编表现形式

有一定c语言基础的朋友都知道函数这一概念。尤其是C语言以函数为其基本单位

而函数,在一个程序中,有各种用途。同时,也包含着各种调用。之前,

我们,接触的都是,其由高级语言的表现形式 。现在,我们一起看一看,

它在反汇编中的表现形式:

极客大揭秘之软件分析

                                                                                 图(二)

如图 call 0042A198 就是一个函数的调用。

call:表示跳转到某一虚拟地址

0042A198: 表示该函数的虚拟地址

如图(三)从pushad 开始即为函数的开头, 到 retf 即为函数的结束

极客大揭秘之软件分析

                                                                               图(三)

3.函数的参数

极客大揭秘之软件分析

                                                                               图(四)

如图(四),int _tmain(int argc, TCHAR * argv[]) 中的int argc和TCHAR * argv[] 都是这个函数的形参

那么,它在反汇编是如何表示的,或是说传递的?

(1)利用栈传递参数

何为栈,即一种数据存储结构。其较明显的特点是,‘先进后出,后进先出’

就像是,木桶腌制咸菜,桶底下的咸菜总是最后拿出来的。

存储:

如图(四)中的参数按照c规范(_cdecl:从函数扩号右端,到左端依次传递参数)

极客大揭秘之软件分析

              图(五)

如图(五)栈中的参数

接收:

当_tmain()函数被调用时

依次取出参数

(2)利用寄存器传递参数

寄存器:CPU内,一种存储空间较小,但运行速度最快的存储结构

如:eax, ebx, ecx,eds, eip, ess, esp.......

原理:

从左边开始的2个不大于4个字节的参数,分别放在 ecx, edx 中

 


总结

本文中本次仅仅提到了函数,另外还有 数组,if - else选择结构,while循环结构 我将会在之后的文章中提到。

同时,由于篇幅有限,所说的内容较浅,如若有兴趣可以参考《加密与解密》第4章