- 博客(40)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
转载 深入理解mmap
mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同
2017-09-03 09:58:42 899
转载 C++智能指针
智能指针:实际指行为类似于指针的类对象 ,它的一种通用实现方法是采用引用计数的方法。1.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。2.每次创建类的新对象时,初始化指针并将引用计数置为1;3.当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;4.对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,
2017-09-02 20:05:06 344
原创 Web安全常识
Domain1. 同源策略同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略。 这里要记住不遵循同源策略的标签:2. 同源策略,那些东西是同源可以获取到的Document:每个载入浏览器的 HTML 文档都会成为 Document 对象。Document 对象
2017-08-01 22:39:26 1042
原创 IDA pro脱壳实战过反调试
IDA pro脱壳实战过反调试标签(空格分隔): Apk逆向1. 前言之前总结了IDA pro脱壳的基本步骤,包括调试步骤和在libdvm.so的dvmDexFileOpenPartial函数出下断点,从内存中dump出dex文件。 这次以360一代加壳为例,试着在mmap出下断点和过一些基本的反调试技术。2. 脱壳环境搭建这里的环境搭建和上一篇博客一样http://blog.csdn.net/d
2017-07-28 22:55:33 7530
原创 Android Studio调试smali代码
Android Studio调试smali代码标签(空格分隔): APK逆向分析1. 前言经过一段时间的学习,现在总结下针对APK逆向的一些基本调试技术,以阿里移动安全比赛题目为例2. 使用Android Studio调试smali代码步骤一:下载安全Android Stuio,下载地址http://www.android-studio.org/步骤二:下载插件smalidea 地址: https
2017-07-19 08:41:52 2167
原创 Android so逆向基本知识总结
标签(空格分隔): APK逆向1. 前言对于Android平台native的逆向需要掌握的基本知识或要看的书籍总结如下:1.1 语言方面《C primer plus》《Linux C编程一站式学习》《C++Primer.Plus》1.2 体系结构方面《深入理解计算机系统》《程序员的自我修养–链接、装载与库》《深入理解Linux内核》2. Android方面Android NDK开发
2017-07-10 15:06:07 1101
原创 基于函数加密的.so加固学习笔记
标签(空格分隔): Apk逆向与保护1. 前言之前学习了简单对ELF文件中的Section进行加密实现简单暴力的加固,这个section是自定义的,一般很容易被识别出来,更好的做法是对函数进行加密。既然是对函数加密,我们就需要找到函数的地址和大小。既然是找到函数的地址,必然是基于ELF文件的转载视图来进行操作的。2. 基本思路2.1 如何找到要加密的函数基于section的加密,我们很容易根据elf
2017-07-05 20:56:30 2871 1
原创 基于section加密的.so加固学习笔记
标签(空格分隔): APK逆向与保护1. 前言APK的加固技术研究已有很多年了,有很多成熟的厂商提供相关的服务,加固的目的一方面是为了保护应用不被恶意反编译和篡改,得到应用的源代码。另一方面防止应用中为发现的漏洞被攻击者发现利用。早期的加固技术主要是基于Dex文件实现的,通过将源程序的dex文件加密,在运行的过程中由解壳程序动态加载、解密和运行。但是由于基于dex的加固技术,很容易被破解,在内存中d
2017-07-04 19:22:32 1409 2
原创 App虚拟化技术初探
Plugin Technology BackgroundApp插件开发技术或App虚拟化技术以及App热修复技术,最近几年非常火热和流行,图中列举了两种主要的需求,第一种需求是很多时候我们想在Android手机上同时登陆多个社交应用,比如QQ或者微信,在Android原生系统中肯定是无法支持的,只有登出一个账号后然后在换另外一个,因此衍生APP虚拟化技术;另外一种需求是一个大的APK文件我想分批次发
2017-06-24 10:40:54 5920 2
原创 Redis之AOF文件持久化
Redis之AOF文件持久化一、AOF持久化介绍Redis除了使用RDB文件持久化数据库外,还提供了AOF持久化功能,与RDB持久化的区别如下:(1) RDB持久化通过保存数据库中键值对来记录数据库的状态,AOF持久化是通过记录服务器所执行的命令来保存数据库的状态的(2) AOF文件的更新频率要高于RDB文件,所以如果服务器开启了AOF文件持久化功能,那么服务器会优先使用AOF文件进行还原数据库的状
2017-06-20 16:17:34 1863
原创 Redis之RDB持久化
Redis引入了RDB持久化功能,Redis中有两个命令可以生成RDB文件,一个是SAVE,另外一个是BGSAVE;SAVE命令:SAVE命令会阻塞Redis服务器进程,指导RDB文件创建完毕,在这个期间服务器进程不能处理任何来自客户端的命令请求。
2017-06-13 15:39:40 759
原创 ELF文件详解—初步认识
讲解ELF文件格式,目标文件再不同的系统或平台上具有不同的命名格式,在Unix和X86-64 Linux上称为ELF(Executable and Linkable Format, ELF)。ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器(Loader)看来它是由Program Header Table描述的一系列Segment的集合
2017-06-11 20:50:47 83444 21
原创 Redis底层数据结构之跳跃表
Redis底层数据结构之跳跃表1.引言跳跃表由 William Pugh 在1990年发明,是一种有序的数据结构,类似于平衡树、红黑树这样的数据结构,能够维护一个有序的列表,方便查找。跳跃表支持平均为O(logN)的时间复杂度查找,这与平衡树大体相当,那么为什么Redis的作者选用跳跃表来实现有序集合呢?我们从以下几点说明插入和删除:平衡树的调整操作都需要从引起不平衡的节点开始,向上调整,通过一系
2017-05-12 18:00:58 939
原创 Android的进程间通信机制之Binder初探
在了解Android的Binder通信机制之前,我们来看下Linux现有的进程间通信的方式,然后简要分析Android为什么要另起炉灶,设计一套新的通信机制Binder,以及Binder通信机制在Android这种嵌入式平台具有何种优越性等首先看Linux下的进程间通信方式,有管道、消息队列、共享内存、套接字、信号量、信号,起初我们一一回顾下这几种通信方式的实现原理和适用场景1.管道比
2017-04-19 20:52:32 922
原创 Redis底层数据结构之字典
Redis底层数据结构之字典说起字典我们应该都比较熟悉,在C++ STL或者Java集合框架中的HashMap就是一种典型的字典结构,用于保存一个键-值对,将一个键与一个值进行关联起来,其中键是不能重复的,也就是说是唯一的。字典作为一种重要的数据结构在Redis数据库中被广泛应用,底层的很多操作基本都是基于字典的。一、字典的基本数据结构一张图描述map的基本数据结构字典的数据结构定义在dict.h文
2017-04-09 20:48:09 940
翻译 Analysis of Code Heterogeneity for High-Precision Classification of Repackaged Malware
Analysis of Code Heterogeneity for High-Precision Classification of Repackaged Malware一、引言这篇文章的作者分析了已有的恶意应用检测机制的局限性,提出大多数漏报的情况是由于大量的恶意应用是通过重打包得来的,很多基于机器学习的检测技术不能很好的检测出这类样本,提出了一种结合程序分割和机器学习来检测异质代码团的思想,实
2017-04-06 22:37:48 881
原创 Android组件安全
Android组件安全做过Android开发的攻城狮都知道Android四大组件,在开发过程中打交道最多的也是这四大组件,在开发Android应用的过程中我们最基本的要求是要对这四大组件有一个清晰的认识,包括组件的功能特性、生命周期、与系统的交互模型,以及组件之间如何配合使用等等。本文内容主要是关于组件的安全模型以及如何正确的使用组件来降低应用的安全风险的一个学习笔记。一、Android四大组件简介
2017-04-05 17:05:31 850
原创 Redis底层数据结构之链表
Redis底层数据结构之链表一、Redis中链表的实现我们都知道在列表的插入与删除的操作,如果数组的中间插入一个元素,那么这个元素后的所有元素的内存地址都要往后移动。删除的话同理,只有对数据的最后一个元素进行插入删除操作时,才比较快。链表并不需要更改节点的内存地址,链表的优势在于增和删,查找时间复杂度为O(n),链表的扩展性比数组好。链表作为一种重要的数据结构广泛用于实现redis的各种功能,由于在
2017-04-01 22:25:57 865
原创 Redis底层数据结构之简单动态字符串
Redis底层数据结构之简单动态字符串我们知道在C语言中常常使用空字符’\0’作为字符串的结尾标志,也就是使用N+1的字符数组来表示长度为N的字符串,Redis没有直接使用C语言中的字符串表示,而是构建了自己的一套字符串表示抽象,称为简单动态字符串SDS(simple dynamic string),至于为什么Redis不采用C语言中的字符串表示方法,这也是我们接下来要探讨的问题,我们首先给出Red
2017-04-01 17:53:34 1206
原创 Androguard的环境搭建
Windows下Androguard的环境搭建;Ubuntu下Androguard的环境搭建一、安装python(这里以Python 2.7.3 为例)编译前在/usr/local新建一个文件夹,作为python安装路径,以免覆盖老的
2017-03-29 17:51:33 5844 4
原创 仿JDK的动态代理模式
代理模式 : 给某一对象提供代理对象,并由代理对象控制具体对象的引用.一、代理模式涉及的角色: (1)抽象主题角色:声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替.(2)真实代理对象:定义了代理角色所代表的具体对象. (3)Proxy产生代理主题角色的类,根据不同的主题接口,动态产生加载相应的RealProxy并实现主题接口所定义的抽象方法
2017-03-27 15:35:46 768
原创 初识红黑树(—)
一、前言 最近在看算法导论,关于红黑树看了许久,才有个大概的影子,关键的部分还是很多未能完全理解,这篇博客相当于学习笔记吧,后续有更好的理解或者感悟在补上,由此不得不佩服红黑树的发明者。二、红黑树性质 红黑树是很多平衡搜索树中的一种,可以保证在最坏的情况下基本的查询、插入、删除时间复杂度是O(logN),红黑树每个节点上增加一个标志位表示节点的颜色,红黑树保证没有一条从根
2017-03-27 10:42:43 826
翻译 RMQ算法详解
RMQ算法详解1. 概述RMQ(Range Minimum/Maximum Query)即区间最优查询,给定区间长度为n的数列A[],对于查询Q(A,i,j)即回答从i—j区间间的最大值或最小值,解决这个问题一般采用的方法是遍历,遍历的时间复杂度是O(N),如果区间长度够长,每次回答的查询都要遍历,显然没有必要。2. RMQ算法本节介绍了一种比较高效的在线算法(ST算法)解决这个问题。所谓在线算法,
2017-03-24 17:24:49 1758
原创 最近公共祖先(LCA)问题-在线ST算法
LCA算法详解1. 概述LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先)。对于该问题,最容易想到的解决方案是遍历,复杂度是O(n)。但当数据量非常大且查询很频繁时,该算法也许会存在问题。2. 在线ST算法解决此问题存在两种经典的算法,一种是在线ST算法,另外一种是离线的Tarj
2017-03-24 17:20:09 1116
原创 扩展KMP
扩展KMP什么是扩展KMP扩展KMP的原理扩展KMP的编程实现扩展KMP的用途参照 ++http://blog.csdn.net/dyx404514/article/details/41831947++1 什么是扩展KMP给出模板串S和T,长度分别为Slen和Tlen,要求在线性时间内,对于每个S[i](0<=i2 扩展KMP的原理记母串为S,模式串为T,next[i]表示模式串S的后缀
2017-03-24 17:16:57 1231
原创 重温KMP
KMP算法的理解KMP算法的核心思想KMP算法的实现原理KMP算法的编程实现KMP的改进KMP算法的核心思想kmp算法的核心即是计算模式串的每一个位置之前的字符串的前缀和后缀公共部分的最大长度(不包括字符串本身,否则最大长度始终是字符串本身)KMP算法的编程实现void get_next(char *T, int *next) { int k = -1; int
2017-03-24 17:15:11 1205
原创 学术文献阅读—移动安全(1)
1. Vetting Undesirable Behaviors in Android Apps with Permission Use Analysis(CCS’13)1.1 题意:审批Android应用使用权限的不良行为。1.2 内容:背景:Android系统采用权限机制来防止不信任的APP对受保护资源的访问,然而,一旦用户在安装APP的时候授予了相关权限,那么这个应用就具备了相关资源的访问能力
2017-03-01 18:49:22 1376
原创 并查集及其应用
并查集及其应用什么是并查集如何构建并查集案例分析改进有怀HDOJ-1232 HDOJ-1829 HDOJ-1213 HDOJ-3635什么是并查集?并查集是在解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,并查集是一种树型的数据结构,用于处理一些不相交集合的合并问题如何构建并查集?并查集的主要操作有: 1-合并两个不相交集合 2-判断两个元素是否属于同一个集合
2017-03-01 18:41:45 1045
转载 锁与volatile的内存语义
锁与volatile的内存语义1.锁的内存语义2.volatile内存语义3.synchronized内存语义4.Lock与synchronized的区别5.ReentrantLock源码实例分析1.锁的内存语义锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。1.1 锁释放和获取的内存语义当线程释放锁时,JMM会把该线程
2017-03-01 18:33:28 1550
原创 蚂蚱跳跃问题
蚂蚱跳跃问题题目大意: 一个蚂蚱最初位于坐标轴的原点,现在蚂蚱要跳跃到坐标轴的s点,跳跃规则是蚂蚱既可以往正方向跳跃,也可以往负方向跳跃,蚂蚱第一次跳跃1个单位,以后的跳跃步数在前一步的基础上加一。现在求蚂蚱跳跃到s点最少需要多少步数? 原题截图如下: 题意分析:首先看题目的数据最大约为10亿,意味着不可能采用搜索、暴力等一些耗时的解决办法,也不会让你在代码中开辟较大的数组,那么拿到这个问题如
2016-09-20 18:03:35 6063 3
原创 Linux下搭建大于16TB的磁盘阵列步骤
Linux下搭建大于16TB的磁盘阵列步骤最近由于项目要部署的原因,要在centos上创建大于16TB的磁盘阵列存储空间,说实话本人对Linux下的运维了解的并不多,通过上网各种查资料,简单介绍些基本的搭建步骤:Raid的简单了解Raid5的创建步骤分区格式化*挂载分区Raid的简单了解RAID是“Redundant Array of Independent Disk”的缩写,翻译过来叫做
2016-07-11 14:27:24 3097
原创 基于三层结构C#代码生成器
[size=x-large] 一、功能简介:根据数据库表的字段生成相应的Model层(数据模型)、BLL层(业务处理)、DAL(数据访问层) 二、动态代码生成器的编写过程中所涉及的数据库操作函数 [/size] [size=large]1.登陆验证 [/size] [code="C#"]#region 登陆验证 /// ...
2014-07-14 21:59:56 876
原创 通俗的神经网络
[color=red]用平常语言介绍神经网络[/color] 因为我们没有能够很好了解大脑,我们经常试图用最新的技术作为一种模型来解释它。在我童年的时候,我们都坚信大脑是一部电话 交换机。我当时还看到英国著名神经学家谢林顿把大脑的工作挺有趣地比作一部电报机。更早些时候,弗罗伊德经常把大脑比作一部水力发电机,而莱布尼茨则把它比作了一台磨粉机。我还听人说,古希腊人把大脑功能想象为一付弹...
2014-05-10 16:54:46 128
原创 二叉树的基本操作
[code="C"]#includeusing namespace std;/* 定义二叉树的数据结构 */ int MAXSIZE = 100; typedef struct Node{ char data; struct Node* lchild; struct Node* ...
2014-05-10 11:55:21 106
原创 java Socket网络编程
[size=large]要进行网络编程,必然要先了解计算机网络通讯的一些基本原理,网络通讯也是一个整体的系统。不了解整个系统是如何运转的又怎么才能很好的理解系统部分设计的合理性呢?现在的网络体系结构基本上都是基于OSI模型的,自顶向下大概分为五层,即应用层、运输层、网络层、链路层、物理层等,但在实际的应用编程中,我们往往接触的只是网络的应用层。其中应用层提供了各种应用于网络数据传...
2013-09-28 00:45:55 127
原创 习数组、队列、链表之所感
[size=xx-large][/size] 1.首先来谈谈数据在计算机世界的存储方式,数据元素在计算机中有两种不同的表示方法;一种是顺序的、一种是非顺序的。并由此得到两种不同的存储方式;既顺序存储结构、链式存储结构。 顺序存储结构主要是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,典型的数据结构就是经常用到的数组、线性表,其实线性表也是基于数组来实现的,存储方式如下:...
2013-04-20 12:11:59 103
原创 浅谈分形之美
刚开始听到分形这个词,压根不知道是做什么的,感觉也是一种很骇人的技术。自从自己尝试的画几个小图形之后,才有点体会到分形的帅气和有趣。它是一个拥有多种层次结构的整体,整体和部分又具有很强的相似性。它从美学的角度很好的结合了数学几何,是一个很好的艺术代表。有时候不得不感叹数学的强大和美。 就如说;0和1构成了数学,0和1构成了世界。现实生活中的很多图像都差不多是有规律可寻的,...
2013-03-25 22:38:15 469
原创 类的继承总结
1.为什么要使用继承? 因为子类拥有比父类更多的方法和属性 而且这些属性和方法父类是不能拥有的 提高代码的重用性 提高程序的扩展性 很大的程度上可以减少代码量 子类可以继承父类的变量和方法,同时也可以修改父类的方法和属性,并增加新的变量和方法从而可以构造更多具体的类。2.java继承的语法格式? java继承的关键字 extends...
2013-03-16 22:54:57 146
原创 基础语法总结
总结;类和对象:1. 什么叫对象?对象是面向对象的核心概念,也是理解面向对象程序设计的关键。对象是一种我们能够所见的、触摸到的具体的事物,对象具有两个重要的特征:状态和行为; 2. 什么叫类? 类是具有相同属性、行为的对象,类是对象的模板,蓝图.因此类是抽象的,对象是具体的。 3. 怎么定义一个类? Public (修饰权限...
2013-03-14 23:39:19 84
fastdfs python客户端下载文件问题
2017-04-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人