04 2023 档案

摘要:CVE-2021-26411复现,学习JavaScript之POC源码分析 概述 CVE-2021-26411,该漏洞的原因:removeAttributeNode()触发属性对象nodeValue的valueOf回调,回调期间手动调用clearAttributes(),导致nodeValue保存的 阅读全文
posted @ 2023-04-29 23:31 bonelee 阅读(626) 评论(1) 推荐(0) 编辑
摘要:vs代码生成四种模式: MT选项:链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库(LIBCMT.LIB、LIBC.LIB)集成到程序中,程序体积会变大。MTd选项:LIB的调试版。MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小, 阅读全文
posted @ 2023-04-22 14:56 bonelee 阅读(540) 评论(0) 推荐(0) 编辑
摘要:4.整数的取模 取模运算可以通过除法指令实现。一般的优化做法是将其转换成等价的位运算或者除法运算,再由除法运算进行优化。 虚函数 C++的三大核心机制是封装,继承,多态,而虚函数就是多态的一种体现。软件逆向中,难免遇到使用面向对象思想设计的软件,而虚函数就是在实际软件逆向过程中的一种还原面向对象的重 阅读全文
posted @ 2023-04-21 23:19 bonelee 阅读(67) 评论(0) 推荐(0) 编辑
摘要:数据结构 主要是对局部变量,全局变量,数组等的识别。 1.局部变量 局部变量是函数内定义的变量,存放的内存区域称之为栈区。生命周期就是从函数进入到返回释放。 函数在入口处申请了预留栈空间和局部变量空间,也就是sub rsp,30h。局部变量空间在高地址。在应用程序被编译成release版本的时候,需 阅读全文
posted @ 2023-04-21 23:18 bonelee 阅读(75) 评论(0) 推荐(0) 编辑
摘要:64位软件逆向技术 寄存器 本节讨论的x64是AMD和INTEL64的合成,是指与现有x86兼容的64位CPU。在64位系统中,内存地址为64位。 x64系统通用寄存器的名称,第一个字母从E改为R“RAX”,大小扩展到64位,数量增加8个,扩充了8个128位XMM寄存器。 函数 1.栈平衡 RSP用 阅读全文
posted @ 2023-04-21 23:16 bonelee 阅读(321) 评论(0) 推荐(0) 编辑
摘要:【逆向】x64程序逆向基础 主要区别 1. 所有地址指针都是64位。 2. 增加和扩展新的寄存器,并兼容原32位版本的通用寄存器。 3. 原指令指针寄存器EIP扩展为RIP。 寄存器 1. 64位寄存器兼容原32位寄存器。 2. 新增加8个XMM寄存器(XMM8-XMM15)。 3. 扩展原32位寄 阅读全文
posted @ 2023-04-21 19:40 bonelee 阅读(1031) 评论(0) 推荐(0) 编辑
摘要:硬编码 硬编码概述 计算机只认识0和1,也就是二进制,任何一个可执行程序最终就是0和1组成,如果非要细分的化,可以分为两个部分:数据和指令,但是对于这两个部分没有明显的界限,如果你把某个地址给到CPU的EIP寄存器,这时候这个地址就会当成指令去执行,但是指令是有自己的格式,如果你指向的地址没有按照指 阅读全文
posted @ 2023-04-17 10:51 bonelee 阅读(393) 评论(0) 推荐(0) 编辑
摘要:写在前面,助记清单 帮助记忆:1、要成为武林(50)盟主,必须拼命push,直到最后放下武器(57)!==》50~57表示push。2、58同城搞了一个集五福(5F)活动,说是邀请了上面的50盟主,要和他对着干(push--》pop)。==》58~5F表示pop。1、许仕林(40)因为鼓舞了士气(4 阅读全文
posted @ 2023-04-17 10:51 bonelee 阅读(308) 评论(0) 推荐(0) 编辑
摘要:本次实验我们将会分析lab20-1,lab20-2文件。先来看看要求解答的问题 Lab20-1需要回答的问题如下 Q1.在0x401040处的函数采用了什么参数? Q2.哪个URL被用来调用URLDownloadToFile? Q3.这个程序做了什么事情? 在实验任务一当中我们来分析lab20-1 阅读全文
posted @ 2023-04-15 22:47 bonelee 阅读(122) 评论(0) 推荐(0) 编辑
摘要:C++中的虚函数表实现机制 摘自:https://blog.twofei.com/496/ 前言 大家都应该知道C++的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个基类的指针, 其指向一个继承类, 当通过基类的指针去调用函数时, 可以在运行时决定该调用基类的函数还是继承类的函数. 虚函数是 阅读全文
posted @ 2023-04-15 19:14 bonelee 阅读(155) 评论(0) 推荐(0) 编辑
摘要:快速识别 最后那个call就是比较存的随机数和ebp异或的值是否和之前是否一样: 探究security_cookie在程序中的作用 from:https://www.kn0sky.com/?p=66 学习环境:Windows 10 20H2 + Visual Studio 2019 前言 在学习看反 阅读全文
posted @ 2023-04-15 17:01 bonelee 阅读(146) 评论(0) 推荐(0) 编辑
摘要:重构之Divergent Change(发散式变化)&Shotgun Surgery (散弹式修改) 5.Divergent Change发散式变化描述:一个类被锚定了多个变化,当这些变化中的任意一个发生时,就必须对类进行修改。解释:一个类最好只因一种变化而被修改操作:你应该找出某特定原因而造成的所 阅读全文
posted @ 2023-04-12 20:04 bonelee 阅读(228) 评论(0) 推荐(0) 编辑
摘要:8.4 搬移语句到调用者(Move Statements to Callers) 反向重构:搬移语句到函数(213) emitPhotoData(outStream, person.photo); function emitPhotoData(outStream, photo) { outStrea 阅读全文
posted @ 2023-04-12 20:02 bonelee 阅读(98) 评论(0) 推荐(0) 编辑
摘要:1. 适配器模式 1.1. 模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。 通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致 阅读全文
posted @ 2023-04-12 18:16 bonelee 阅读(32) 评论(0) 推荐(0) 编辑
摘要:UML建模之状态图(Statechart Diagram) 状态图目录: 一、状态图简介(Brief introduction) 二、状态图元素(State Diagram Elements) 1、状态(States) 2、转移(Transitions) 3、动作(State Actions) 4、 阅读全文
posted @ 2023-04-12 18:11 bonelee 阅读(417) 评论(0) 推荐(0) 编辑
摘要:条件覆盖,路径覆盖,语句覆盖,分支覆盖 转自http://hi.baidu.com/%D2%D7%B1%D8%BA%C6/blog/item/f016729f4fbeaebbc9eaf4df.html 语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标 阅读全文
posted @ 2023-04-12 17:48 bonelee 阅读(335) 评论(0) 推荐(0) 编辑
摘要:分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖 目录 1. 泛化(Generalization) 2. 实现(Realization) 3. 关联(Association) 4. 聚合(Aggregation) 5. 组合(Composition) 6. 依赖(Dependen 阅读全文
posted @ 2023-04-12 17:21 bonelee 阅读(102) 评论(0) 推荐(0) 编辑
摘要:写出python3代码: 将如下数据转为windows excel文件。 import csv data = [[1010205, '2022/11/23', 'R染 (Inception) 攻击', 'T89', '在远程系统的启动文件登录后可以自动执行恶意脚本或可执行文件。', '例:copyr 阅读全文
posted @ 2023-04-11 09:55 bonelee 阅读(30) 评论(0) 推荐(0) 编辑
摘要:友元 友元可以理解为:朋友、元素;老师认为这个友元是C++中的一个垃圾,因为友元的存在破坏了面向对象的封装性,不推荐使用,之所以有这个章节是因为有人不了解这个概念。 注意:在一些新版本的C++编译器里面已经不再提供类似于友元这样的特性了。 大家都知道在C++中对象的私有成员,外部是无法访问的,这在面 阅读全文
posted @ 2023-04-09 10:57 bonelee 阅读(163) 评论(0) 推荐(0) 编辑
摘要:对象拷贝 我们通常存储对象,都用数组、列表之类的来存储,那如下所示我们使用数组来存储对象,但是在工作中发现这个数组不够用了,就需要一个更大的数据,但我们重新创建一个数组还需要把原来的数据复制过来;在C语言中可以使用函数来进行拷贝,直接拷贝内存,在C++中实际上跟C语言要做的事情是一样的,在C++中就 阅读全文
posted @ 2023-04-09 10:56 bonelee 阅读(131) 评论(0) 推荐(0) 编辑
摘要:模版 假设有一个冒泡排序的函数: void Sort(int* arr, int nLength) { int i, k; for (i = 0; i < nLength; i++) { for (k = 0; k < nLength-1-i; k++) { if(arr[k] > arr[k+1] 阅读全文
posted @ 2023-04-09 10:51 bonelee 阅读(91) 评论(0) 推荐(0) 编辑
摘要:运算符重载 现在有一个类,其中有一个函数用于比较2个类的成员大小: #include <stdio.h> class Number { private: int x; int y; public: Number(int x, int y) { this->x = x; this->y = y; } 阅读全文
posted @ 2023-04-09 10:50 bonelee 阅读(39) 评论(0) 推荐(0) 编辑
摘要:虚表 上一章了解了多态,那么我们来了解一下多态在C++中是如何实现的。 了解本质,那就通过反汇编代码去看就行了,首先我们看下非多态的情况下的反汇编代码: 然后再来看下多态情况下的反汇编代码: 很明显这里多态的情况下会根据edx间接调用,而非多态则会直接调用。 那么我们来看下间接调用的流程是什么: e 阅读全文
posted @ 2023-04-09 10:50 bonelee 阅读(133) 评论(0) 推荐(0) 编辑
摘要:面向对象程序设计之继承与封装 之前已经学习过继承和封装了,但是要在实际开发中使用,光学语法和原理是不够的,在设计层面我们需要做一些优化。 如下代码是继承的例子: #include <stdio.h> class Person { public: int Age; int Sex; void Work 阅读全文
posted @ 2023-04-09 10:49 bonelee 阅读(110) 评论(0) 推荐(0) 编辑
摘要:void main() { int x = 1; int& ref = x; ref = 2; printf("%d \n", ref); return; } 反汇编代码: int x = 1; 00724A5F C7 45 F4 01 00 00 00 mov dword ptr [x],1 in 阅读全文
posted @ 2023-04-09 10:48 bonelee 阅读(83) 评论(0) 推荐(0) 编辑
摘要:在堆中创建对象 我们可以在什么地方创建对象? 全局变量区,在函数外面 在栈中创建对象,也就是函数内 在堆中创建对象 注意:之前一直提到的堆栈实际上是两个概念->堆、栈,我们之前所讲的就是栈,从本章开始要严格区分。 在C语言中,我们可以通过一个函数去申请一块内存,就是malloc(N);申请的这一块内 阅读全文
posted @ 2023-04-09 10:47 bonelee 阅读(64) 评论(0) 推荐(0) 编辑
摘要:类成员的访问控制 课外 → 好的编程习惯:定义与实现分开写,提升代码可读性。 如下代码,Student这个类的所有成员我们都可以调用,但是我们不想让被人调用Print1这个方法该怎么? struct Student { int age; int sex; void Print1() { printf 阅读全文
posted @ 2023-04-09 10:47 bonelee 阅读(46) 评论(0) 推荐(0) 编辑
摘要:继承 struct Person { int age; int sex; }; struct Teacher { int age; int sex; int level; int classId; }; 如上代码中可以看见,Teacher类与Person类都存在着相同的2个成员age和sex,那么这 阅读全文
posted @ 2023-04-09 10:46 bonelee 阅读(55) 评论(0) 推荐(0) 编辑
摘要:构造函数与析构函数 构造函数 struct Student { int a; int b; Student() { printf("Look."); } void Init(int a, int b) { this->a = a; this->b = b; } }; 如上代码中,我们发现了存在一个函 阅读全文
posted @ 2023-04-09 10:44 bonelee 阅读(112) 评论(0) 推荐(0) 编辑
摘要:this指针 概述 C++是对C的拓展,C原有的语法C++都支持,并在此基础上拓展了一些语法:封装、继承、多态、模板等等。C++拓展新的语法是为了让使用更加方便、高效,这样就需要编译器多做了很多事情,接下来我们就需要一一学习这些概念。 封装 之前我们学习过结构体这个概念,那么结构体可以做参数传递吗? 阅读全文
posted @ 2023-04-05 20:52 bonelee 阅读(274) 评论(0) 推荐(0) 编辑
摘要:汇编中的移位指令 1、算术移位指令 SAL(算术左移)指令的操作与《SHL指令》一节中的 SHL 指令一样。每次移动时,SAL 都将目的操作数中的每一位移动到下一个最高位上。最低位用 0 填充;最高位移入进位标志位,该标志位原来的值被丢弃: 如,二进制数 1100 1111 算术左移一位,得到 10 阅读全文
posted @ 2023-04-05 16:59 bonelee 阅读(1028) 评论(0) 推荐(0) 编辑
摘要:注意区别,hello 和 world两个字符串都是放在常量存储区的! int main(int argc, char* argv[]) { // Fun(101); char* s = "hello"; char arr[] = "world"; printf("%s\n %s\n", s, arr 阅读全文
posted @ 2023-04-04 09:55 bonelee 阅读(48) 评论(0) 推荐(0) 编辑
摘要:预处理之宏定义、条件编译与文件包含 预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。 预处理功能主要包括宏定义、文件包含、条件编译三部分。 宏定义 简单的宏:#define 标识符 字符序列 #define FALSE 0 #d 阅读全文
posted @ 2023-04-03 23:11 bonelee 阅读(161) 评论(0) 推荐(0) 编辑
摘要:指针类型 在C语言里面指针是一种数据类型,是给编译看的,也就是说指针与int、char、数组、结构体是平级的,都是一个类型。 带"*"号的变量我们称之为指针类型,例如: char* x; short* y; int* a; float* b; ... 任何类型都可以带这个符号,格式就是:类型* 名称 阅读全文
posted @ 2023-04-03 23:10 bonelee 阅读(239) 评论(0) 推荐(0) 编辑
摘要:连续值中抹去多项 CPP代码: #include "stdafx.h" void Fun(int x) { switch (x) { case 100: printf("100"); break; case 101: printf("101"); break; case 102: printf("1 阅读全文
posted @ 2023-04-03 15:55 bonelee 阅读(90) 评论(0) 推荐(0) 编辑
摘要:循环语句 循环语句的反汇编 如下图是各个循环语句的反汇编代码: 但从汇编来看我们可以看得出do...while循环语句效率是最高的,但是在日常使用来说大部分会选择使用for与while,do...while出现的较少,还是跟之前我们说的一样,这一点空间可以忽视不管,for语句是最方便书写的,也就是我 阅读全文
posted @ 2023-04-02 23:14 bonelee 阅读(48) 评论(0) 推荐(0) 编辑
摘要:数组 数组是C语言中非常重要的一个概念,学习C语言主要就是两个知识点:数组、指针,学好这两个,那么你的C语言一定也会很好。 什么是数组?或者说什么情况下我们需要使用数组,比如说我们需要定义一个人的年龄,我们可以定义一个变量来表示,但是如果我们需要定义三个人的年龄呢?那就需要三个变量来表示,这样很复杂 阅读全文
posted @ 2023-04-02 23:14 bonelee 阅读(152) 评论(0) 推荐(0) 编辑
摘要:Switch语句 Switch语句也是分支语句的一种,其语法如下: switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式: 语句; break; case 常量表达式: 语句; break; ...... default: 语句; break; } 需要注 阅读全文
posted @ 2023-04-02 23:02 bonelee 阅读(827) 评论(0) 推荐(0) 编辑
摘要:字符与字符串 在之前的课程中我们了解到变量的定义决定两个事情,第一是决定存储的数据宽度,第二是决定了存储的数据格式,那么我们来看下下面的代码: int a = 123; // 变量x,数据宽度为4个字节,里面存储的是补码(在计算机系统中,数值一律用补码来存储) int float b = 123.4 阅读全文
posted @ 2023-04-02 21:01 bonelee 阅读(202) 评论(0) 推荐(0) 编辑
摘要:课程概要 来自:https://gh0st.cn/Binary-Learning/C%E8%AF%AD%E8%A8%80.html 写得非常详细 本章课程需要具备汇编语言基础,若无汇编语言基础是无法去理解课程中所讲的一些知识点和技术细节的;同时也表示本课程是以汇编语言来理解C语言,透过本质理解高级语 阅读全文
posted @ 2023-04-02 20:46 bonelee 阅读(208) 评论(0) 推荐(0) 编辑
摘要:第六节 1、逆向CRACKME 1、OD加载CRACKME后,为啥地址停在0x00401000?--需要知道什么是PE结构。 —————— 2、出现这个框,表示程序已经执行完判断。 3、弹出窗口是WIN32 API的知识,它是API的MessageBoxA函数实现的功能。 —————— 4、如何正确 阅读全文
posted @ 2023-04-02 20:23 bonelee 阅读(139) 评论(0) 推荐(0) 编辑
摘要:第四课 IF语句的反汇编判断 第四课 练习1 int plus(int Y,int X) { int N = t; if(X<Y) t=t+Y;//t=N+yC } void main() { plus(5,4); } 第五课 IF...ELSE...语句的反汇编判断 IF…ELSE…语句的反汇编判 阅读全文
posted @ 2023-04-02 19:26 bonelee 阅读(504) 评论(0) 推荐(0) 编辑
摘要:第三节 局部变量与全局变量的区别 记住知识点: 1、全局变量,在程序生成后,内存地址是固定了,只有重新编译后,内存地址才会改变。 2、全局变量,在汇编中是内存地址的格式存储;局部变量是以[ebp-xxx]的格式存储。 局部变量与全局变量的区别 全局变量与局部变量的区别在于作用域的不同,且存在时间也可 阅读全文
posted @ 2023-04-02 18:13 bonelee 阅读(267) 评论(0) 推荐(0) 编辑
摘要:第二节 2.5数据类型与存储 浮点数这玩意自己去在线转换下就行了: http://www.styb.cn/cms/ieee_754.php 详细: 第二节 2.6浮点数的存法 记住知识点: 1、小数点左移,指数部分:指数减1的二进制数 2、小数点右移,指数部分:指数的二进制数,取反 3、符号位:正0 阅读全文
posted @ 2023-04-02 18:00 bonelee 阅读(283) 评论(0) 推荐(0) 编辑
摘要:写在前面 vc6下载地址:https://softdown01.rbread04.cn/down/VC6.0green.rar?timestamp=6429444b&auth_key=e4fc373a1342be9ce2d6802419980ade 注意:如果是win11 则记得修改msdev名字 阅读全文
posted @ 2023-04-02 17:27 bonelee 阅读(380) 评论(0) 推荐(0) 编辑
摘要:第二节 2.3找程序的入口 原文:https://www.showdoc.com.cn/fengxin1225/7054696489361869,加入了自己的理解 控制台应用程序的main函数入口 在OD中找到以上其他中的函数,然后跟着3个参数的CALL就是main 例: ————————————— 阅读全文
posted @ 2023-04-02 12:31 bonelee 阅读(520) 评论(0) 推荐(0) 编辑
摘要:第一节 1.1C语言 1、注意参数和局部变量在堆栈中的存储方式 2、参数在调用函数前就已经存入堆栈,从[EBP+8]、[EBP+C]、……开始。 3、局部变量是在调用函数后,存入缓冲区里,从[EBP-4]、[EBP-8]、……开始 4、函数运算得到的结果,通常存在EAX里。 第一节 1.2逆向汇编 阅读全文
posted @ 2023-04-01 09:28 bonelee 阅读(340) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示