杂乱的东西
文章平均质量分 72
jlu16
崇尚开源
展开
-
incaseformat样本详细分析(附样本下载)
incaseformat样本详细分析注:本文首发于我的博客:http://www.hupeiwei.comincaseformat病毒近日爆发,影响了不少主机。这么一个古老的病毒能够造成这么大的影响,令人感到意外。我从微步在线上下载了样本进行分析。需要注意的是,incaseformat有两个在野版本,详见https://www.52pojie.cn/thread-1351233-1-1.html。我分析的应该是原始版本,但是两个版本除了Sysutils::DateTimeToTimeStamp库函数所使原创 2021-01-16 11:15:51 · 4256 阅读 · 2 评论 -
程序的生成与运行
程序的生成与运行注:本文首次发布于我的博客:http://www.hupeiwei.com这篇文章里,我将介绍一个程序从源码到内存中运行的整个过程。这涉及到很多方面的知识,如有错误还请读者斧正。文章将按照如下结构进行组织:高级程序设计语言、汇编语言、机器码预处理、编译、链接、汇编预处理编译链接汇编程序的加载从反汇编看程序的运行高级程序设计语言、汇编语言、机器码在英语中有a-z这26个字母,一个孩子从最基本的字母开始学起。字母本身没有什么含义,但当它们组合起来,就成了可以描述原创 2021-01-16 11:10:58 · 715 阅读 · 0 评论 -
Reasons for failing to find target api using codeql
本文原载于我的博客 http://www.hupeiwei.comAs a new practical tool to search bugs in target programs, codeql is more and more popular among software security researchers. A crucial step using codeql is to find target api, then you can define your own violation che原创 2020-08-08 08:52:34 · 257 阅读 · 0 评论 -
Linux下软件编译常见问题指南(为什么某个源代码文件没有生成目标文件)
本文原载于我的博客 http://www.hupeiwei.com进行安全研究时,可能发现代码中的vuln.c文件存在漏洞;可在对程序编译后,却没有发现它的目标文件(如 vuln.o),影响下一步探索,这是为什么呢?在多数情况下,这是因为目标代码是程序中的插件,或者说一个模块。比如,一个程序的数据库存储可能支持sqlite、mysql,但是默认是使用mysql,那么和sqlite相关的代码可能就不被编译,这就造成了没有生成目标文件的问题。该如何使得目标代码被编译呢?Linux常见的程序编译方式有原创 2020-08-08 08:47:33 · 1324 阅读 · 0 评论 -
Linux下软件编译常见问题指南(编译过程)
本文章原载于我的博客 http://www.hupeiwei.com在Linux下使用诸如apt、pacman和yum这样的软件管理工具安装软件比较简单,往往一条命令就足够了。但是,如果想安装一个旧版本软件进行测试与研究,或者是一个比较冷门的软件,就需要用户获取源代码从头进行编译。前一段时间我积累了许多这种经验,因此本篇文章从实用的角度描述编译时可能出现的问题及解决办法。在自己开始编译源码前,首先要阅读软件给出的相关说明。它们往往在README或者INSTALL文件中,对软件所依赖的包、编译过程进行一原创 2020-08-08 08:41:37 · 688 阅读 · 0 评论 -
设计模式—抽象工厂模式
我在上一篇写到了工厂模式,那么抽象工厂模式是什么,和工厂模式的区别在哪里?在工厂模式中我以印刷机印刷分为中译本与英译本两种类型的书本为例,对书本创建一个产品接口,英译本与中译本各为它的一个具体实现类。假设这台印刷机属于某一座国际化学校中,新生开学之际,不只要印刷书本,还需要印刷学校地图,学生准则,新生导引等材料。如果按照工厂模式的思路,需要对它们中的每一种材料都定义一类工厂,这样未免太过麻...原创 2018-09-13 10:04:21 · 172 阅读 · 0 评论 -
设计模式—生成器模式(建造者模式)
生成器模式是一种创建型设计模式,它把对象的创建步骤抽象成生成器,并且可以通过指导类(director)对所有生成步骤的先后顺序进行控制。客户端使用指导类并传入相应的生成器,通过指导类的接口便可以得到相应的对象。以我的理解看,生成器模式中的生成器被用来对生成对象的每一个步骤自身进行控制,比如要产生一辆汽车(最终对象),那么玻璃是用普通玻璃还是防弹玻璃(生成最终对象的一个步骤)。而指导类主要用来设...原创 2018-09-13 11:25:23 · 9500 阅读 · 2 评论 -
方便的显示Apache日志更改后的新信息
看Apache的错误日志快看瞎我的眼睛了,因为如果直接打开看的话需要辨别如下信息:哪些行是我这次的新信息在新信息中错误/警告/提示的原因,相对应的文件名以及行数位置为了更方便浏览日志,有了下面这段简单的脚本。它比较此次运行和上次运行中日志文件的不同并以便于观察的格式列出相应信息(通过集合去除重复的提示信息,比如不同时间造成的错误信息但它们是相同的错误)。参数1->查看错误信息...原创 2018-09-23 17:57:20 · 216 阅读 · 0 评论 -
设计模式—单件模式(Singleton)
单件模式是最简单的创建型设计模式,它通过合理的权限控制使得某一个类只能拥有一个实例。使用单件模式注意三个重点部分:私有或保护的构造方法(防止实例被随意创建),类内静态的实例(也是唯一的实例),类内静态的全局访问点(用于获得该唯一实例)。为什么唯一实例和全局访问点要用静态的呢?很明显,如果使用非静态的全局访问点,要调用该方法首先要创建一个实例,然而在类外实例是无法被创建的(受到构造方法的限制),所以...原创 2018-09-20 19:59:22 · 221 阅读 · 0 评论 -
设计模式—工厂方法模式
工厂模式是一种创建型设计模式,它将对象(产品)的创建交给一个工厂(通过工厂的接口,即面向接口进行)。当需要生成另一种产品时,只需要修改工厂的具体类型即可,工厂创建产品的部分不必进行修改。下面以生产某本书的英译本或中译本为例。首先明确在这个例子中要生产的产品为书本,它分为中译本和英译本。我们采用创建型的设计模式—工厂模式,将工厂接口命名为factory_printer,工厂的具体类有fact...原创 2018-09-12 22:35:34 · 132 阅读 · 0 评论 -
设计模式—原型模式
原型模式是一种创建型的设计模式,简单的说,就是通过克隆一个已有的对象来获取想要的对象。通过这种方式,一方面使得对象的获得变得简单直接(比如不必再次设置相关属性);一方面实现了良好的封装(使用者对新对象是如何克隆出来的没必要知道);而且在一些编程语言比如Java中,通过重写Object的clone方法,可以更高效的创建新对象(此时的对象克隆生成新对象与普通生成新对象不同,它不执行构造函数,直接对内存...原创 2018-09-16 21:51:57 · 168 阅读 · 0 评论 -
从一道CTF题目看sql注入中元数据的应用
前言第一次看到元数据在sql注入的应用好像是在《web安全深度剖析》,鉴于经验缺乏,只是知道有这么个东西,不知道怎么应用。今天遇到一道和元数据相关的SQL注入题目,所以记录下来。获取元数据//获取所有的库名称:select SCHEMA_NAME from information_schema.SCHEMATA//获取某一库中所有表的名称:select TABLE_NAME ...原创 2018-06-23 10:52:18 · 683 阅读 · 0 评论 -
Java中修饰方法的 synchronized 与 static synchronized
当需要对方法进行控制以防该方法被同时调用时,往往需要使用synchronized 与 static synchronized 对方法进行修饰。如果从同步控制块的角度理解它们两个,问题会变得十分简单。synchronized void method1() { //code here}//相当于void method1() { synchronized(this) { ...原创 2018-06-05 10:53:51 · 668 阅读 · 0 评论 -
Java Comparator 与 Comparable 接口
Java中这两个常用于排序的接口我总是过一段时间就忘了,这次干脆写下来它们,并附上测试的一段例子。两者区别所属包不同:Comparable在java.lang中,而Comparator在java.util中。用于比较的方法定义不同:Comparable<T>中为public int compareTo(T object),而Comparator<T>中为publ...原创 2018-06-05 10:07:00 · 248 阅读 · 0 评论 -
Java设计模式—适配器模式(adapter pattern)
现在的手机很多都取消了3.5mm的耳机接口,只留下了一个type-c接口。但是我现在只有一个3.5mm圆孔接口的耳机,我不得不通过一个转接线使得3.5mm的耳机变成type-c接口。//Type-C插座期望Type-C插头class TypeCSocket { void connectWith(TypeCPlug plug){ plug.connectTypeC();...原创 2018-06-11 23:23:13 · 204 阅读 · 0 评论 -
设计模式—装饰器模式
当你去买手抓饼时,可以选择最基础的,也可以选择加蛋的,加肠的,或者加肠加蛋的。假如我们在编程中遇到了类似的问题:已经有了一个最基础的手抓饼类(它继承了手抓饼接口),如何修改代码使得可以创建加肠版本的手抓饼或者加蛋版本的手抓饼呢?也许最简单的直觉是再创建两个类继承手抓饼接口,但是这样还要在这两个版本中把基础手抓饼制作代码再重复一遍,然后进行加肠或加蛋;但其实我们只需要额外添加肠或者添加蛋的代码就够...原创 2018-10-11 10:35:02 · 241 阅读 · 0 评论 -
数据库(1)—关系数据库简介
也许你经常听到SQL server,Oracle,MySQL等名词,人们将它们统称为数据库。这些服务软件的完整名称其实叫做数据库管理系统(Database-Management System,DBMS),它由数据库(即一些数据的集合)与用来对数据库进行管理(比如访问、创建、删除、修改)的程序组成。基于不同的数据模型,数据库又被分为很多种。目前最常见的,被广泛实现的是关系数据库,它基于关系模型。比...原创 2018-10-02 15:47:26 · 719 阅读 · 0 评论 -
我的保研之路-哈工大计算机,中科院信工所,复旦大数据学院
托高中的福,在本科读了一个保研率还算可以的学校。在大一的时候我挺注重专业课的学习,系名次比较靠前;大二与大三我则改变策略—平日里以兴趣为指向进行和计算机有关的“瞎搞”,在考试前两周再集中时间复习。这三年的本科学习使我意识到,如果所处专业保研率还可以(不低于10%),在最后能够取得保研资格其实是一件轻而易举的事情。我也不知道这是对期末考试试卷的讽刺,还是对保研资格评定的讽刺。对于“瞎搞”,不同人有...原创 2019-10-09 12:03:06 · 3095 阅读 · 14 评论 -
bugku—INSERT INTO注入解答
本来不打算单独的ctf题目成文,但是这个题写payload快看花我的眼睛了,不写一篇记录一下代码对不住我的眼睛。error_reporting(0);function getIp(){$ip = '';if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];}else{$i...原创 2019-01-10 23:53:18 · 2216 阅读 · 1 评论 -
设计模式—职责链(Chain of Responsibility)
如果你有Web方面的经验,在JavaScript中的事件流、Java Web中的过滤器,其实都是职责链模式的体现。职责链模式可以这么来形容。A、B、C三个人去参加一个解题比赛,但是A更擅长数学问题,B更擅长理化问题,C更擅长文史问题。于是他们决定这样做:每接到一道题,A先阅读,如果是数学题A解答,否则传给B;B阅读后如果发现是理化题,则B解答,否则传给C来解答。这样A->B->C就构...原创 2018-11-07 17:01:19 · 190 阅读 · 0 评论 -
渗透小工具—对子域名爆破结果进行有效性验证和内容抽取
在渗透过程中,主站安全性往往比较好,所以要爆破子域名并试图从旁站开始下手。常用的获取子域名的工具有subDomainBrute和Layer子域名挖掘机,但是这两个工具的结果只是把域名及IP导出,并不知道是否能够连通、该子域名对应的网站内容是什么。一般的站点子域名往往能达到几十个,这时候一个一个手动去试太麻烦了,于是我写了下面这个脚本(Python3),分享给大家。#coding=utf-8"...原创 2018-10-21 10:18:09 · 1399 阅读 · 1 评论 -
Web安全中的业务安全问题
今天下午看完了《业务安全实战指南》,是一本2018年的新书。这本书包含的业务安全内容感觉挺全的,不过编排并不好,很多地方都有重复;应该是不同作者写了不同章节,但是事先没有分的太清楚。我将结合以往知识与这本书的内容总结一下Web安全中的业务安全问题。业务安全问题给我的最大感觉就是:漏洞本身技术含量并不高,关键是处理逻辑是否足够严密。我想大致可以将导致业务漏洞的原因分为以下两类:1.过于信赖客户端...原创 2018-10-15 21:35:23 · 1832 阅读 · 1 评论 -
设计模式—享元模式
享元模式(Flyweight)是一种结构型设计模式,它的出现是为了在使用大量细粒度对象时节省空间。在使用大量细粒度对象时,它们彼此之间往往有所相同,又有所不同。比如在一个PPT文档中,可能多处出现了“A”这个字母。它们之间的共同处是字形一样,都是A;不同是颜色不同,有的地方字体颜色为黑,有的地方为灰。我们把这些对象之间相同的地方抽象出来称为“内蕴状态”,不同的地方称为“外蕴状态”。在使用享元模式...原创 2018-10-14 11:23:27 · 178 阅读 · 0 评论 -
设计模式—门面模式
门面模式(Facade)是结构型设计模式,它的作用是为客户端提供一个简单易用的接口,统一执行一些功能;当然,客户端也可以不使用它,自己去对这些功能进行细致的操作与控制。比如我们现在的手机照相,通常有一个自动(Auto)模式,适合于不太会设置光圈对比度之类东西的用户使用,但是它的手动模式则适合高级用户使用,用户可以自己细致操作每一个步骤,代价是使用更繁琐。这里的自动模式就是一个门面。又比如在公司...原创 2018-10-14 10:39:36 · 148 阅读 · 0 评论 -
设计模式—组合模式(Composite)
组合模式是一种结构型设计模式,它适合来描述递归组合的对象结构。这到底是什么样的结构?举个例子,有如下计算式:3×(1+2×4),它由数字3和计算式(1+2×4)组成,而(1+2×4)又由数字1和计算式2×4组成,2×4由数字2和4组成。又比如一个文件夹,里面可以同时包含文件和文件夹,而这个文件夹里又可以包含文件和文件夹,一直递归下去。其实对于这些结构可以用树结构来表示:那些可以再递归下去的...原创 2018-09-28 23:02:56 · 215 阅读 · 0 评论 -
解决 MySQL 的 ERROR 1698 (28000): Access denied for user 'root'@'localhost'
相信很多刚刚在Linux上装MySQL的用户都会遇到这个问题,到底该怎么解决呢?我在stackoverflow上查找到了答案(我使用了方法1并且十分有效),搬运过来顺便翻译成中文。原文地址:https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost问题大致...原创 2018-09-22 09:21:29 · 27184 阅读 · 13 评论 -
Java设计模式—策略模式(strategy pattern)
所谓策略模式,即创建一个根据所传递参数对象的不同具有不同行为的方法,这主要是依据多态实现的。将基类作为参数定义某方法,而实际传入不同的子类对象,也就通过后期绑定调用了不同的方法,即采取了不同的策略。abstract class PersonComing { abstract void process(Person person);}class FriendComing exte...原创 2018-06-11 12:13:29 · 215 阅读 · 0 评论 -
Java设计模式—代理模式(porxy pattern)
在看《Java编程思想》中复用类时,书中提到了代理模式。代理模式与继承,组合同为复用类的方式。组合:在新的类中使用现有类的对象(使用现有类功能而非其接口)。继承:按照现有类的类型来创建新类(使用现有类的一个特殊版本,如轿车是汽车的一个特殊版本)。代理:将现有类置于对象中,同时在新类中暴露该对象的方法。其实代理分为静态代理与动态代理,这里所说的是静态代理。动态代理的知识推荐这篇文章:...原创 2018-06-11 11:32:55 · 305 阅读 · 0 评论 -
分析 Java Compile-time Constant(编译时常量)
前言最近被这个概念迷惑住了,翻看中文博客大多没有讲的太清楚,最后多方查阅终于搞清楚,特此记录,希望对别人有帮助。编译时常量定义是否一定需要static修饰?如果你看别人写的编译时常量例子,很多人都会这样定义:public static final int variale = 1;那么这里的static是否为必需的呢?其实,final为必需,static为非必需。如果你懂得了编译器对编译时常量的处理,原创 2018-05-10 08:02:27 · 1820 阅读 · 0 评论 -
CSS语法基础
一.CSS基本语法规则1.CSS语句的组成规则每个CSS语句都由选择符,样式属性,属性值组成:selector {property:value;......}/*注意:value不要加引号*/2.CSS的继承性父标签的特性会被子标签继承。/*CSS*/p{color:red;}<!--HTML--><p>hello<b>world</b></p><!--这里的 world 将会显示为红色,因为原创 2017-07-10 09:53:05 · 263 阅读 · 0 评论 -
在css中用列表设置导航条时block在a标签中的作用
前段时间学习用列表制作导航条时有一个在a标签中display:block;的设置不太理解,今天终于想通了。要理解这一个,首先要知道float的特性之一,包裹性。对于块级元素,默认的宽度为100%。例如在div中有一个img标签,那么无论img实际的宽度如何,div占据的宽度始终是100%。但是当div被设置为float:left;时,便具有了包裹性,即根据内部的内容自动修改宽度。如图:(来自:htt原创 2017-07-29 21:58:18 · 1463 阅读 · 0 评论 -
PHP Notice: Undefined variable: HTTP_POST_FILES Undefined variable: HTTP_POST_VARS
在一些比较旧的书中的例子中,在讲解PHP的文件操作时会用到HTTP_POST_FILES 或者 HTTP_POST_VARS之类的变量。但是,这些变量使用的要求是php配置文件中的register_globals选项开启。而在新版的PHP中: 其实在新版的PHP中是有代替它们的变量的,例如$_POST代替了$HTTP_POST_VARS,$_FILES代替了$HTTP_POST_FILES。你可以原创 2017-08-04 17:20:22 · 989 阅读 · 0 评论 -
如何解决Mysql中中文乱码的问题
在实践过程中遇到了MySQL存储中文乱码的问题,翻阅相关书籍并进行网上查询后,对此问题有了一定的了解,记录下来希望能够对别人有所帮助。一.字符集与字符序mysql出现中文乱码的原因是字符集的转换过程出了问题,首先介绍一下字符集与字符序。字符集 就是字符与某一编码的对应关系组成的集合。例如,在ascii中 65(编码)对应 A(字符),很多这种对应组合起来构成了ascii字符集。正是由于不同的字符以及原创 2017-08-16 00:07:07 · 737 阅读 · 0 评论 -
body中font-size:62.5%,但是用em设置input尺寸偏大是什么原因
在设计弹性布局时,有这样一种用法,设置body { font-size: 62.5%;}这样 1em 大约对应 10px,便于进行布局。但是我在用 em 单位设置input框的尺寸时,发现在无缩放的情况下input框的尺寸要大于本该对应的px。通过对 input 的value 设置值可以明显看出输入框中的默认字体大小大于body设置的字号。可以看出,input 并没有继承body设置的字号原创 2017-08-22 23:21:52 · 1033 阅读 · 0 评论 -
CSS中的圣杯布局与双飞翼布局
圣杯布局和双飞翼布局也是实现二&三列布局的有效方式,我将在本文中记录它们的原理和实现。圣杯布局原理:圣杯布局在所有列的最外层增加了一个含有padding的wrapper,通过定位,负边距将两个侧边栏移动至wrapper的padding处,实现三列布局。实现步骤:进行wrapper的padding设置,使其大于等于对应边栏的宽度,用来容纳边栏。对两个侧边栏设置左浮动,使其紧贴主栏下面的左侧。(在HT原创 2017-10-31 10:48:06 · 278 阅读 · 0 评论 -
CSS的单列布局与二&三列布局
这里介绍CSS常用的单列布局与二&三列布局,作为记录,希望自己的基本功能够更扎实。单列布局常见的单列布局有两种: header,content和footer等宽的单列布局 header与footer等宽,content略窄的单列布局对于前者: 通过对header,content,footer统一设置width(max-width)即可得到。<div class="header">原创 2017-10-31 09:09:38 · 2421 阅读 · 0 评论 -
C++中static关键字在类中常见问题分析
一.static变量的初始化问题static变量是和类绑定的变量,和一般变量和对象绑定不同。它在类实例化(创建对象)之前就分配空间,而非static变量是在创建对象时进行空间分配。那么该在哪里对static变量进行初始化呢?1.能否在构造函数里进行static变量的初始化?由前面的叙述可知,static变量在对象创建前就要进行空间分配。而构造函数是在创建对象时进行的调用。因此,原创 2017-05-28 17:46:48 · 1212 阅读 · 0 评论 -
C++中const限定符常见问题分析
一.const变量初始化1.const变量不在类中时:const变量必须在定义的同时进行初始化。这是因为const限定符使变量“成为”常量,无法进行赋值操作。2.const变量在类中时:const变量要在构造函数的初始化列表中进行初始化或在定义处进行初始化。3.一个特殊情况:类中的const static/static const变量。static变量不允许在类中初始化原创 2017-05-30 07:31:22 · 1319 阅读 · 0 评论 -
python函数中的*args与**kwargs
*args在函数的参数列表中,接受任何多个无名参数。**kwargs在函数参数列表中,接受类似于a=1这样的参数形成字典{‘a’:1}注意在传参数时*args要接受的参数必须在**kwargs要接受的参数之前一个例子def func(*args,**kwargs): print('args is :',args) print('kwargs is :',kwargs)if __n原创 2017-06-21 12:07:46 · 356 阅读 · 0 评论 -
Effective Python 第二章(一)
第十四条尽量用异常来表示特殊情况,而不要返回None 由于在python中有通过:if output: ...else: ...来判断输出的习惯。 那么,例如在求解除法运算时,倘若在分母为0时(计算异常)返回了None,和分子为0时(计算正常)返回的0在判断条件时(if output)会有相同的结果,就有可能引发错误。 因此,在函数遇到特殊情况时,应该抛出异常,而不要返回Non原创 2017-06-22 20:26:22 · 302 阅读 · 0 评论