首页 > 其他分享 >【加密与解密】第四章④

【加密与解密】第四章④

时间:2023-01-16 02:44:34浏览次数:43  
标签:逆向 调用 虚表 函数 解密 析构 加密 第四章 构造函数

4.整数的取模

取模运算可以通过除法指令实现。一般的优化做法是将其转换成等价的位运算或者除法运算,再由除法运算进行优化。

虚函数

C++的三大核心机制是封装,继承,多态,而虚函数就是多态的一种体现。软件逆向中,难免遇到使用面向对象思想设计的软件,而虚函数就是在实际软件逆向过程中的一种还原面向对象的重要手段。本章探讨编译器实现虚函数的原理。

1.虚表





首先在main的入口先申请了对象实例的内存空间。先调用构造函数,调用fun1,fun2.这些成员函数调用的第一个参数就是this指针,也就是rcx=this。C++语法规定在实例化对象时会自动调用构造函数,对象作用域会自动调用析构函数。
在逆向过程中,当一个对象是在某个作用域内调用的第一个函数,就可以怀疑是构造函数,如果是最后一个,就怀疑是析构函数的调用。
构造函数中首先初始化虚表指针,然后初始化数据成员,构造函数完成,返回this指针。

然而为什么析构函数还要赋值虚表,构造函数不是赋值了吗?这是因为C++语法规定,析构函数需要调用虚函数的多态性。在分辨哪一个是构造函数哪一个是析构的时候可以看调用的顺序。
虚标中的函数成员函数声明顺序依次放入的。需要注意的是函数分布顺序在某些情况,和声明顺序不一定相同。不过顺序对逆向还原也没有影响。本例中只写了一个虚析构函数吗,却生成了两个析构函数。其中一个是普通析构函数,一个是放在虚表里的。

2.单重继承虚表






为什么main函数使用new申请对象空间。因为虚表需要8字节虚表空间和8字节的内存对齐。这里可以看出派生类和基类共享一个虚表指针。

标签:逆向,调用,虚表,函数,解密,析构,加密,第四章,构造函数
From: https://www.cnblogs.com/Corax0o0/p/17054585.html

相关文章

  • Python爬虫-第四章-1-多线程多进程并发爬取Ⅰ
    多线程多进程用的方式#DemoDescribe:多线程写法fromthreadingimportThread#线程frommultiprocessingimportProcess#进程#start--------1,多线程调用的方式一......
  • Python爬虫-第四章-1-多线程多进程并发爬取Ⅱ
    线程池使用案例:一次性开辟一些线程,用户直接给线程池提交任务,线程任务的调度交给线程池#DemoDescribe:线程池和进程池fromconcurrent.futuresimportThreadPoolExecutor,......
  • Python爬虫-第四章-1-多线程多进程并发爬取Ⅲ-爬取某菜市场批发价数据
    #DemoDescribe:爬取北京新发菜地数据importrequestsimportcsvfromconcurrent.futuresimportThreadPoolExecutorfromfake_useragentimportUserAgent'''本章内容:......
  • 玩转云端 | 天翼云数据加密,护航企业数据安全
    有交流就会产生信息,为了防止信息泄露,人们通常会采取一些特殊的措施来保护信息。很早以前,“数据加密”就出现在人类的生活中。比如:由姜子牙创造的历史上最早的密钥——阴符(兵......
  • 非对称加密算法
    非对称加密密钥是成对出现的公钥:publickey,公开给所有人,主要给别人加密使用私钥:secretkey,privatekey自己留存,必须保证其私密性特点:用公钥加密数据,只能使用与之配对......
  • 对称加密算法
    Alice-->Bob对称算法:key1=key2data--->加密(key1)--->data’--->解密(key2)--->data特性:(1) 加密key1、解密key2相同,即使用同一个密钥,效率高,易实现,适合加密大量数据,如加......
  • 凯撒加密
    凯撒加密其实就是把每个字母往后面移动3个位置,文章后面附有凯撒加解密VC6工程下载,主要代码如下:------------------------------------------------------------------------......
  • 第四章
    实验-新建用户并加入组useraddkuaiji1groupaddcaiwubuuseradd-gcaiwubukuaiji2组属于财务部,自己不建立主组useradd-Gcaiwubukuaiji3属于两个组,一个是财务部,一......
  • 【加密与解密】第四章③
    数据结构主要是对局部变量,全局变量,数组等的识别。1.局部变量局部变量是函数内定义的变量,存放的内存区域称之为栈区。生命周期就是从函数进入到返回释放。函数在入口......
  • 背包加密
    背包加密算法背包加密算法是第一个通用公钥加密算法。它是由RalphMerkle和MertinHellman于1978年开发的。由于它是公钥密码术,因此需要两个不同的密钥。一个是用于加......