分析软件,你也可以!
文章目录
- 系列文章目录
- 前言
- 一、分析即逆向分析,也称逆向工程
- 二、什么是反汇编代码
-
三、x86模式下,函数的汇编表现形式
- 1.x86模式
- 2.函数的汇编表现形式
- 3.函数的参数
- 总结
前言
提示:(比较硬核坛友,可以跳过这部份)
最近,我观看了由GeekPwn(极棒)主办的2020 国际安全极客大赛。
提一下个人感受,虽然现场很尬,比赛节奏拖拉,比赛选手操作不透明。
但是,还是体现了不少内容的。其中,关于软件安全的方面令我印象犹深。
WPS office 2019 相信大家都用过,都也存放了不少东西,有工作上的,
学习上的,生活上的······ 同时也应需要打开过不少文件。但是,现在说,
你打开一个文件,就有阔能泄露你的全部文件信息。
大概原理是选手通过分析,发现了WPS软件的格式渲染漏洞,并利用它,
在我们加载文件时,后端截取我们文件相关信息。同时,现存的杀软无法拦截其行为。
今天,我要谈一谈,这“分析”二字的内部技术,让我们也来初步认识其神秘的面貌。
一、分析即逆向分析,也称逆向工程
逆向工程就我个人而言,是通过一系列的工具和手段,
来分析一个现有的软件或程序的运行思路,及其核心算法,从而理解其实现原理,
达到优化其功能,加快其运行速度,解决其bug的目的。
好比,普通人吃一个鸡蛋,除了能判断其新不新鲜外,
什么也分析不出来。而,逆向工程,能使人吃出其产地,生产时间,生产鸡的品种,
鸡的心情(好吧!这个有点扯),大概就是这样。
因为逆向工程是很系统的,很庞大的(就相关书籍《加密与解密 提取码:zhan》就912页)
所以,鉴于鄙人才疏学浅,就谈一下,其基本的反汇编代码分析
二、什么是反汇编代码
如图(一),为ollyDbg程序的操作界面,而如 push ebp…… 就是汇编代码
图(一)
那什么称其为反汇编代码呢/p>
原因是,其汇编代码,是通过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[] 都是这个函数的形参
那么,它在反汇编是如何表示的,或是说传递的/p>
(1)利用栈传递参数
何为栈,即一种数据存储结构。其较明显的特点是,‘先进后出,后进先出’
就像是,木桶腌制咸菜,桶底下的咸菜总是最后拿出来的。
存储:
如图(四)中的参数按照c规范(_cdecl:从函数扩 右端,到左端依次传递参数)
图(五)
如图(五)栈中的参数
接收:
当_tmain()函数被调用时
依次取出参数
(2)利用寄存器传递参数
寄存器:CPU内,一种存储空间较小,但运行速度最快的存储结构
如:eax, ebx, ecx,eds, eip, ess, esp…….
原理:
从左边开始的2个不大于4个字节的参数,分别放在 ecx, edx 中
总结
同时,由于篇幅有限,所说的内容较浅,如若有兴趣可以参考《加密与解密》第4章
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!