0x1 准备工作 1.1.准备工具 IDA:交互式反汇编工具 OllyDbg:用户层调试工具 Visual Studio:微软开发工具 1.2.基础知识 C++开发 汇编语言 0x2 查找真正的main()函数 入口点开始到Main()函数之间的代码都是编译器加进去用于初始化环境用的. main()函数其实是有3个参数的,这取决于Windows系统的机制. 查找方法: 1.字符串搜索法 2.栈回溯法 3.逐步分析法 4.小例子 C源代码: 程序执行的时候会将路径保存在argv字符数组中,因此ar…
0x1 if-else分支 if-else分支4种状态 1.1 以常量为判断条件的简单if-else分支 C源代码: 单层if-else判断,常量为判断条件 int _tmain(int argc, _TCHAR* argv[]) { int nTest = 1; if (nTest>0) printf("Hello world!\r\n"); else printf("Hello everybody!\r\n"); return 0; } if-else分支…
0x01 MS-DOS头 MS-DOS头部的字段重点关注e_magic与最后一个e_lfanew是需要关注的. 第一个e_magic字段的值为4D5A,作用是可以作为判断这个文件是否是PE文件. 最后一个e_lfanew字段可以引导我们找到新的EXE文件头,从而进一步判断这个可执行文件是否为PE文件. 如果从这个文件开头用PIMAGE_DOS_HEADER解析,e_magic成员不是IMAGE_DOS_SIGNATURE,那么就不是一个PE文件. MS-DOS头结构: typedef struc…
0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeClean SizeOfOptionalHeader字段来描述扩展头的大小,恒定值为0xE0. 某些程序直接使用0xE0对PE文件进行处理,对于修改过的程序会被识别为非PE文件. 1.2 导入表移动免杀 通过修改程序里导入表ThunkValue值实现. 1)通过ThunkValue的偏移地址,找到AP…
1.免杀技巧的遏制 1.1.PE文件 入口点不在第一个区段或在最后一个区段 入口点处代码附近只有一小段代码 入口点在正常范围之外 入口点为一个无效的值,实际入口点为TLS的入口点 区段名重复或者不属于正常范围 拥有可执行属性的区段数量过多 1.2.程序行为 加载系统DLL 枚举反病毒软件进程的窗口 将自己复制到系统目录 安装SPI(控制网络通信或者另类的方法远程注入DLL文件) 远程注入线程或改写其他进程的内存 操作MBR 2.Anti Rootkit 2.1.检查SSDT钩子与IDT钩子 一般…
第3章 免杀与特征码 这一章主要讲了一些操作过程.介绍了MyCCL脚本木马免杀的操作,对于定位特征码在FreeBuf也曾发表过类似工具. VirTest5.0特征码定位器 http://www.freebuf.com/sectool/40580.html 细读一遍这一章的知识才知道自己当时使用MyCCL免杀失败的原因.因为某些反病毒软件的扫描器采用的是密码校验和技术,密码校验和指的是将一段病毒文件代码计算出特定的值,然后与病毒库的值进行比对,如果匹配到特征码则有毒,反之则无毒. 3.1 特征码免…
1.源码免杀 1.1 定位产生特征的源码 定位文件特征 1.根据MyCCL的特征码定位工具,定位出有特征的地址 2.根据VS的反汇编窗口,输入有特征的地址得到特征地址与源码的关系 3.插入MessageBox,然后定位出特征码离哪个MessageBox最近,并在附近以更高密度安插MessageBox,最终定位出产生特征码的源码位置. 定位行为特征 1.启发式检测方法:特征码定位突破 2.虚拟机检查方法:通过控制程序仅执行部分代码,在远程线程注入前插入MessageBox,起到断点作用. 3.基于…
0x1 switch-case分支 switch-case其实就是if-else语句的另一种体现形式.但大于3之后的switchc-case.编译器会对代码进行优化. 1.1 简单switch-case分支识别技巧 C源代码: int _tmain(int argc, _TCHAR* argv[]) { int nNum = 2; switch (nNum) { case 0: printf("nNum=0", nNum); break; case 1: printf("nN…
1.构建Rootkit基础环境 1.1.构建开发环境 VS2012+WDK8 1.2.构建基于VS2012的调试环境 将目标机.调试机配置在同一个工作组内 sVS2012配置->DRIVER->Test->Configure Computers,Add New computer按钮. 1.3.构建基于Windbg的调试环境 WinDBG+Vmware+VirtualKD 1.4.将Rootkit加载到系统 SCM(服务控制管理器)加载驱动 OpenSCManager():获取SCM句柄…
虚函数存在是为了克服类型域解决方案的缺陷,以使程序员可以在基类里声明一些能够在各个派生类里重新定义的函数. 1 识别简单的虚函数 代码示例: #include "stdafx.h" #include <Windows.h> class CObj { public: CObj():m_Obj_1(0xAAAAAAAA),m_Obj_2(0xBBBB) { printf("CObj() Constructor...\r\n"); } ~CObj() { pr…
<玩转Django2.0>读书笔记-Django建站基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网站的定义及组成 网站(Website)是指在因特网上根据一定规则,使用HTML(标准通用标记语言下的一个应用)等工具制作并用于展示特定内容相关网页的集合.简单地说,网站是一种沟通工具,人们可以通过网站来发布自己想要公开的咨询,或者利用网站来提供相应的网络服务,也可以通过网页浏览器来访问网站,获取自己需要的咨询或者享受网络服务. 在早期,域名,空间服务器与程序是网站的…
<Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先级(precedence) 1.5 如何运用Arrays(数组)和Vectors(向量) 1.6 指针带来弹性 指针的使用 1.1 如何撰写C++程序 返回 函数(function)是一块独立的程序代码序列(code sequence),能够执行一些运算.它包含4个部分: 返回值型别(return type)…
前言 工作之中,我们习惯了碰到任务就直接去实现其业务逻辑,但是C#真正的一些基础知识,在我们久而久之不去了解巩固的情况下,就会忽视掉.我深知自己正一步步走向只知用法却不知原理的深渊,所以工作之余,一直想找一些能深入讲解C#基础知识和底层原理的书籍,有幸在网上看到了<.net之美>一书,(--张子阳作 )开始只是简单的做了阅读,但是越往下读,发现书中所述都是自己所薄弱或者是工作中遇到但是解释不清其原理的知识点,为了加深自己的印象,故萌生出写下读书笔记的想法,也是为自己的学习有个记录,方便日后查阅…
参考:Process-oriented vs. Object-oriented 前言 软件行业在采用OO的思想后,从一开始只对编码使用OO,到现在“分析-设计-编码”全部环节使用OO,形成了OOA.OOD.OOP.作为Programmer,只知道根据设计编码,但是设计如何指导编码,设计又是怎么开来的却不十分清楚.本文试着粗略概括现实世界如何层层抽象到对象世界. 理解现实世界 这里说的现实世界,是以“人”为出发点理解的现实世界.软件的目的是服务于“人”,自己简单写的Hello World程序基本上…
一,iOS硬件/设备的类型. iPad的问世,就是在这一方向上迈出的第一步.第一代iPad使用了ARM Cortex-A8架构的CUP,它的速度大约是第一代iPhone所使用CPU速度的两倍. iPad2和iPhone4S则是另一个巨大的跨越.它们都使用了ARM Cortex-A9架构的双核处理器,就CPU运算的速度而言,要比A8架构的处理器快20%.更惊人的是,A9的GPU要比A8的快9倍. 另一方面,iPad2使用子双核处理器,它让iOS的分配程序可以全力运行.这样就对漏洞攻击的构造带来了巨…
Chap1 Shell基础 知道该使用哪种命令是依赖于经验的.----惟手熟尔. 1.1 什么是命令 其实知道这些名词好像也没什么帮助,嘻嘻 1.2 什么是Shell 不同用户不同的提示符:不同的环境,不同的shell类型,具体Shell类型可以google,就不关注历史了 Chap2 脚本基础 2.1 UNIX系统 执行$ date命令时,内核要从硬盘载入到内存,然后执行:执行结束后会保留一段时间.所以经常用的命令执行更快些. 最开始登陆时,系统会根据用户名去匹配/etc/passwd,匹配成…
先让我们来复习下小学知识 A+B=C//式中A为被加数,B为加数. A-B=C//式中A为被减数,B为减数. 再让我们来明确一个知识点:返回值为void的Windows函数意味着一定会执行成功. ------------------by wls------------------我是可爱的分割线------------------by wls------------------ 必须确保传给这系列函数的变量地址是经过对齐的,否则可能导致失败. 对齐可使用C运行库的_aligned_malloc函…
1. % type 用法,提取% type所在字段的类型 declare     myid dept.deptno % type;    myname dept.dname % type;begin    select deptno, dname into myid, myname from dept where deptno = 10;    dbms_output.put_line(myid);    dbms_output.put_line(myname);end;2. % rowtype…
一.线程开销 操作系统创建线程是有代价的,其主要开销在下面列举出来了. 内存开销 线程内核对象 拥有线程描述属性与线程上下文,线程上下文占用的内存空间为 x86 架构 占用 700 字节.x64 架构 1240 字节 .ARM 架构 350 字节. 线程环境块(TEB) TEB 消耗一个内存页,占用 4KB内存. 用户模式栈. 用户模式栈存储传递给方法的局部变量与实参,并且还存储有一个地址用于当前方法返回的时候,线程应该从哪个地方继续执行.默认 Windows 分配保留 1MB 内存. 内核模式…
1.CLR允许将对象转换为它的(实际)类型或者它的任何基类型. 2.is操作符检测对象是否兼容于指定类型,is操作符永远不抛出异常. 3.as操作符返回对同一个对象的非null引用.如果对象不兼容,as返回null.as操作符的工作方式与强制类型转换一样,只是它永远不抛出异常——相反,如果对象不能转型,结果就是null. 4.c# using指令的另一种形式允许为类型或命名空间创建别名, 如: using WintellectWidget=Wintellect.Widget; public se…
变量赋值 常用的变量赋值都是用“=”去赋值的 ; 但是如果把一个浮点数赋值给i的话,就会造成精度损失,在C++中最好使用初始化列表的方式“{}”给变量赋值,这样可以保证不会发生某些可能导致信息丢失的类型转换 #include <iostream> using namespace std; int main() { int i {2.3}; ; } 比如这样声明,编译器就会报错 <source>: In function 'int main()': 5 : <source>…
在网页中运行Java程序称为applet. 反射 这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构. 能够分析类能力的程序称为反射(reflective).反射机制的功能及其强大,在下面可以看到,反射机制可以用来: 在运行中分析类的能力 在运行中查看对象,例如,编写一个toString方法供所有类使用. 实现通过的数组操作代码 利用method对象 反射的主要使用人员是工具构造者. Class类, 在程序运行期间,java运行时系统始终未所有的对象维护一个呗称为运行时的类型…
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24662453 第一个知识点:多坐标系 基础:仅仅要选定原点和坐标轴就能在不论什么地方建立坐标系 从问题问出发:为什么要使用多坐标系.一个3D系利用其无限延伸性.就可以包括空间中全部的点,建立一个统一的世界,这样不是更简单吗? 实践中的答案:大量实践发现.在不同的环境下使用不同的坐标系更加方便(邓爷爷说过:实践是检验真理的唯一…
同步容器类 同步容器类实现线程安全的方式:将所有状态封装起来,对每个公有方法使用同步,使得每一次只有一个线程可以访问.同步容器类包含:Vector.Hashtable.Collections.synchronizedXXX等 ** 同步容器类的问题 ** 复合操作原子性需要客户端来加锁控制 每个操作都持有一个锁,容器规模较大的情况下,持有锁时间过长,锁竞争比较激烈,会降低系统吞吐量和CPU的利用率 并发容器 ConcurrentHashMap 通过粒度更细的分段锁实现数据共享 size和isEm…
创建ndarray   (1)使用array函数 接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组. import numpy as np #将一个由数值组成列表作为参数调用'array' data=[6,7.5,8,0,1] arr=np.array(data) arr #将序列包含序列转化成二维的数组 data1=[[1,2,3,4],[5,6,7,8]] arr1=np.array(data1) arr1 arr1.ndim arr1.shape arr1…
Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有一些会被杀毒软件误认为是木马或病毒:2 1.3. 一些安全领域中使用的部分安全检测产品,也会被杀毒软件误杀.2 1.4. 远程监控技术一样.2 2. 1.3 免杀的发展史2 3. 免杀技术的简单原理2 3.1. 现在的免杀主要分为3种,其中的一种便是行为免杀,也就是通过控制病毒木马的行为来达到躲过杀…
原创博客,转载请注出处! 我的公众号,正在建设中,欢迎关注: Meatsploit介绍 2018/01/03 更新 Metasploit是一款优秀的开源(!= 完全免费)渗透测试框架平台,在该平台下可以方便的实施渗透测试,Meatsploit具有繁多的接口.模块等等,甚至允许用户自己编写自己的模块使用.在Metasploit框架下可以方便的实现木马的生成.捆绑.免杀.实验楼网站存在此节课程但是是收费的,How frustrating,,,,so,,,,,:) 0X01选择攻击载荷 首先,开启终端…
2015306 白皎 <网络攻防>Exp3 免杀原理与实践 一.实践基础 免杀,故名思义,指的是一种能使病毒木马免于被杀毒软件查杀的技术. 免杀的方法有很多,比如加壳改壳.加垃圾指令.以及修改内存特征码,在本博客后面就是通过把具有特征码的代码顺序互换一下来达到免杀的目的. 二.实践内容 第一项: Msfvenom编码器生成的程序 1.直接利用上次后门实验生成的exe文件进行检测~ 可以明显的看到将近一半的杀软都可以检测出来错误,说明这个木马不行,之后我们会进行改造,尽量使文件不要被查杀出来.…
前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软件查杀,在本篇文章中将会介绍一些常用的木马免杀技巧,主要针对安全狗.护卫神.D盾进行免杀~ 查杀软件 D盾 D盾是一个专门为IIS设计的主动防御的安全性保护软件,它采用以内外防护的方式防止服务器和网站被人入侵,它秉持在正常运行各类网站的情况下,越少的功能,服务器就越安全的理念而设.它具有一句话木马查…