自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 入侵检测

入侵者入侵者分为三类:假冒者:指未经授权就使用计算机和穿透系统的访问控制机制而冒用合法账户的人。违法者:指访问未经授权的程序,数据或资源的合法用户。秘密用户:获得了系统的超级控制权,并利用超级控制权逃脱系统的审计或访问控制。入侵者的目的是获得系统的访问控制权或者扩大系统的特权范围;攻击是利用系统或软件的漏洞,允许用户执行打开系统后门的代码。入侵检测相关定义安全入...

2020-02-09 14:27:55 3630

原创 009-线程

基本概念Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现。Thread类的特性每个线程都是通过某个特定Thread对象的run()方法来完成操作的,通常把run()方法的主体称为线程体。通过Thread对象的start()方法来调用这个线程。创建线程的两种方式继承Thread类public class TestThread extends Thread { @Override public void run() {

2021-09-27 19:44:13 236

原创 008-反射

File类

2021-09-27 14:51:10 217

原创 007-注解

注解Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理,通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。Annotataion可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数,局部变量的声明,这些信息被保存在Annotation的"name=value"对中。自定义注解使用@interface来自定义注解class TestB{ @TestAnnotatio

2021-09-24 10:41:24 256

原创 06-泛型

类型安全:让集合只能添加指定数据类型的数据。泛型类public class Test { public static void main(String[] args) { A<Integer> a = new A<>(); a.setKey(1); System.out.println(a.getKey()); }}class A<T>{ private T key; publi.

2021-09-23 21:13:08 121

原创 05-JAVA异常与集合

在捕获异常的代码块里(try{}里的代码),如果前面的代码有异常了,就不会执行后面的。getMessage()方法,用来得到有关异常时间的信息。printStackTrace()用来跟踪异常时间发生时执行堆栈的内容。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。特点:不能保证元素的排练顺序不可重复HashSet不是线程安全的。集合元素可以使用nullHashSet判断两个对象相等的条件:两个对象通过equals()方法比较想等,并且两个对象的h.

2021-09-23 16:34:32 118

原创 04-单例设计模式

单例设计模式:就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。适用地方:实例化对象的创建要消耗大量时间和资源。饿汉式:public class Single { private static Single mInstance = new Single(); private Single(){ } public static Single getInstance(){ re.

2021-09-22 10:01:07 81

原创 03-面向对象编程

信息的封装和隐藏Java中通过将数据声明为私有的(private), 再提供公共(public)方法:getXXX()和setXXX()实现对该属性的操作,以实现下述目的:隐藏一个类中不需要对外提供的实现细节;使用者只能通过事先定制号的方法来访问数据,可以方便地加入控制逻辑,限制对数显的不合理操作;便于修改,增强代码的可维护性;四种访问权限修饰符同一个Java文件中可以写多个class,但只能有一个是public的,其他的class是缺省的。默认的构造方法前面有没有访问修饰符跟定

2021-09-22 09:33:01 101

原创 03-Frida API

Java对象无论是想对so层亦或java层进行拦截,都必须编写Java.perform().Java.available()用来判断当前进程是否加载了JavaVM,Dalvik或ART虚拟机.function frida_Java(){ Java.perform(function () { if(Java.available) { console.log("hello java vm"); } e

2021-09-15 10:54:04 1018

原创 01-Java语言概述

Java语言概述面向过程与面向对象的区别1. 面向过程:从头到尾叙述一件事情,不可重用。2. 面向对象:把万物抽象成对象,可重用。垃圾回收机制:不在使用的内存空间应回收。4. C,C++,由程序员手动编写代码回收。 - 优点:能够在内存不使用时快速回收,准确,高效。 - 缺点:容易失误出现bug,例如忘记编写回收内存代码,会造成内存一直不回收。5. java,垃圾回收是自动的,开了一个系统线程自动去检测哪些内存不用了然后回收。 - 优点:自动,不会出现忘记回收的情况。 - 缺点:回收不

2021-09-14 09:34:35 107

原创 02-Frida API

Frida输出打印console输出在官方API由两种打印的方式,分别是console、send,我们先来学习非常简单的console,创建一个js文件,代码示例如下:function hello_printf() { Java.perform(function () { console.log(""); console.log("hello-log"); console.warn("hello-warn"); console.er

2021-09-13 19:57:47 441

原创 解决mac连接到远程服务器失败的方法-远程计算机上的软件似乎与此版本不兼容屏幕共享

在远程服务器上运行如下两条指令:$ gsettings set org.gnome.Vino require-encryption false$ gsettings list-recursively org.gnome.Vino | grep encrypt

2021-09-12 09:26:02 3164

原创 01-Frida的安装及使用

FridaFrida是一个动态代码执行工具包,通过Frida开源把一段Javascript代码注入到一个进程中去,或者把一个动态库加载到另一个进程中去。为什么使用 Python API,但使用 JavaScript 调试逻辑?Frida核心引擎是用C写的,并且集成了Google的Javascript引擎V8,把包含V8的代码注入到目标进程之后,通过一个专门的信息通道,目标进程就可以和这个注入进行的Javascript引擎进行通信了,这样通过Javascript代码就可以在目标进程中做很多事情,例

2021-09-09 15:54:08 963

原创 jieba分词

三中分词模式精确模式,试图将句子最精确地切开,适合文本分析全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。安装pip3 install jieba分词jieba.cut方法接受两个输入参数:(1) 第一个参数为需要分词的字符串(2)cut_all参数用来控制是否采用全模式jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合.

2021-05-18 19:53:54 397

原创 Debug Blocker

Debug BlockerDebug Blocker技术是进程以调试模式运行自身或其他可执行文件的技术。DebugMe4程序应用了该技术,父进程

2020-09-15 10:56:41 421 1

原创 SEH

SEH是Windows操作系统的异常处理基址,在程序源代码中使用__try、__except、__finally关键字来具体实现。SEH练习示例 #1示例程序seh.exe,该程序故意触发了内存非法访问异常,然后通过SEH机制来处理该异常,并且使用PEB信息向程序添加简单的反调试代码,使程序在正常运行与调试运行时表现出不同的行为动作。正常运行。使用OllyDbg调试器打开seh.exe示例程序。打开seh.exe程序后按F9键运行,发生非法访问异常后暂停调试。401019地址处添.

2020-09-04 16:46:23 942

原创 TEB

TEB指线程环境块,该结构体包含进程中运行线程的各种信息,进程中的每个线程都对应一个TEB结构体。Windows7中的TEB结构体成员。 +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID //进程的pid +0x028 ActiveRpcHandle : Ptr3.

2020-09-03 16:50:36 1857

原创 TLS回调函数

练习:HelloTls.exe运行练习程序,弹出一个消息框,单击确定按钮后,程序终止运行。在OllyDbg调试器中打开并运行HelloTls.exe文件。消息对话框中显示的内容于程序运行时显示的内容不同,单击确定按钮,HelloTls.exe进程随机终止。原因在于,程序运行EP代码前先调用了TLS回调函数,而该回调函数中含有反调试代码,使程序在被调试时弹出“Debugger Detected!“消息对话框。TLSTLS是各线程的独立的数据存储空间,使用TLS技术可在线程内部独立使用或

2020-09-03 15:25:32 1785

原创 内核6中的会话

会话会话指的是登陆后的用户环境,大部分OS允许多个用户同时登录,并为每个登录的用户提供独立的用户环境。在Process Explorer的View菜单中选择“Select Columns-Session”后,即可显示当前运行进程所属的会话。系统进程与服务进程都在ID为0的会话(系统会话)中运行。从Windows内核版本6开始,为进一步增强系统安全性,第一个登录系统的用户会话ID被设为1,使之与系统会话区分,分离系统会话与用户会话就取消了它们之间的相互作用,采用这种机制虽然可能引起向下兼容的问题

2020-09-02 13:32:44 187

原创 ASLR

ASLR是一种针对缓冲区溢出的安全保护技术,从WIndows Vista开始采用该技术。借助ASLR技术,PE文件每次加载到内存的起始地址都会随机变化,并且每次运行程序时相应进程的栈以及堆的起始地址也会随机改变。一般使用MS Visual C++ 2010创建可执行文件(PE)时,EXE文件的ImageBase默认为00400000,DLL文件的ImageBase为10000000,但编译它们,如果默认开启了VC++的/DYNAMICBASE选项,那么ASLR技术就会应用到编译的文件中。ASLR.e.

2020-09-02 10:09:56 2476

原创 64位调试

64位环境中,32位进程与64位进程彼此共存,所以在64位环境中应当能够调试PE32与PE32+这2种文件。IA-64搭载于高性能服务器,我们一般不会接触到,由于WinDbg于IDA Pro都支持x64与IA-64,所以可用正常使用它们调试IA-64.x64环境下的调试器Windows 64位OS不仅可用运行64位进程(PE32+类型),还可以同时运行32位进程。在32位OS种无法调试PE32+文件,但是使用IDA Pro可用查看PE32+文件的反汇编代码,另外,OllyDbg调试器并不支持.

2020-08-31 22:08:27 1182

原创 计算器显示中文数字

通过向计算器进程插入用户的DLL文件,钩取IAT的user32.SetWindowTextW() API地址,负责向计算器显示文本的SetWindowTextW() API被钩取之后,计算器中显示出的将是中文数字,而不是原来的阿拉伯数字。只需先将要钩取的API在用户的DLL中重定义,然后再注入目标进程即可,缺点是,如果想钩取的API不在目标进程的IAT中,那么就无法使用该技术进行钩取操作,换言之,如果要钩取的API是由程序代码动态加载DLL文件而使用的,那么我们将无法使用这项技术钩取它。选定目标AP.

2020-08-26 19:48:26 2467

原创 基本的WriteFile()API钩取

该技术借助调试钩取,所以能够进行与用户更具交互性的钩取操作,也就是说,这种技术会向用户提供简单的接口,使用户能够控制目标进程的运行,并且可以自由使用进程内存。关于调试器的说明术语调试器:进行调试的程序。被调试者:被调试的程序。调试器的功能调试器用来确认被调试器者是否正确运行,发现程序错误,调试器能够逐一执行被调试者的指令,拥有对寄存器与内存的所有访问权限。调试器工作原理调试进程经过注册后,每当被调试者发生调试事件时,OS就会暂停其运行,并向调试器报告相应事件,调试器.

2020-08-26 14:19:47 534

原创 API钩取

代码逆向分析中,钩取是一种截取信息、更改程序执行流向、添加新功能的技术。使用反汇编器/调试器把我程序的结构与工作原理。开发需要的钩子代码,拥有修改Bug、改善程序功能。灵活操作可执行文件与进程内存,设置钩子代码钩取技术多种多样,其中钩取Win32 API的技术被称为API钩取,它与消息钩取共同广泛应用于用户模式。APIAPI(Application Programming Interface,应用程序编程接口)。Windows OS中,用户程序要使用系统资源(内存、文件、网络、视.

2020-08-25 19:53:30 615

原创 使用汇编语言编写注入代码

使用汇编语言能够生成比C语言更自由、更灵活的代码,然后将纯汇编语言编写的ThreadProc()函数注入notepad.exe进程。OllyDbg的汇编命令使用OllyDbg打开asmtest.exe示例文件。在OllyDbg的代码窗口中移动光标到401000地址处,在鼠标右键菜单中选择New origin here菜单命令,执行过后EIP变为401000.在401000地址处执行汇编命令(空格),将弹出输入汇编命令的窗口。编写ThreadProc()函数下面使用汇编语言编写Th.

2020-08-25 16:53:27 1525

原创 代码注入

代码注入是一种向目标进程插入独立运行代码并使之运行的技术,它一般调用CreateRomoteThread() API以远程线程形式运行插入的代码,所以也被称为线程注入。首先向目标进程target.exe插入代码与数据,在此过程中,代码以线程过程(Thread Procedure)形式插入,而代码中使用的数据则以线程参数的形式传入,也就是说,代码与数据是分别注入的。DLL注入与代码注入下面这段代码用来弹出Windows消息框:DWORD WINAPI ThreadProc(LPVOID lP.

2020-08-25 14:11:01 2317

原创 PE Tools

PE Tools:一款功能强大的PE文件编辑工具,具有进程内存转储、PE文件头编辑、PE重建等丰富多样的功能,并且支持插件。下载地址PE Tools工具可用获取系统中正在运行的所有进程的列表,并将之显示在主窗口中。进程内存转储转储:将内存中的内容转存到文件,这种转储技术主要用来查看正在运行的进程内存中的内容,文件时运行时解压缩文件时,其只有在内存中才以解压缩形态存在,此时借助转储技术可用轻松查看与源文件类似的代码与数据。程序主窗口分为上下两部分,上半部分显示的时正在运行的进程,下半部分显示.

2020-08-25 09:03:33 4486

原创 通过修改PE加载DLL

练习文件直接修改TextView.exe文件,使其在运行时自动加载myhack3.dll文件。TextView.exe是一个非常简单的文本查看程序,只要用鼠标将要查看的文本文件(myhack3.cpp)拖动到其中,即可通过它查看文本文件的内容。使用PEView工具查看TextView.exe可执行文件的IDT(import Directory Table,导入目录表),TexeView.exe中直接导入的DLL文件为KERNEL32.dll、USER32.dll、GDI32.dll、SHELL32

2020-08-24 20:15:02 1373

原创 DLL卸载

DLL卸载是将强制插入进程的DLL弹出的一种技术,其基本工作原理与使用CreateRemoteThread API进行DLL注入的原理类似。DLL卸载工作的原理:将FreeLibrary() API的地址传递给CreateRemoteThread()的lpStartAddress参数,并把要卸载的DLL的句柄传递给lpParameter参数。每个Windows内核对象都拥有一个引用计数,代表对象被被使用的次数,调用10次LoadLibrary(“a.dll”),a.dll的引用技术就变为10,卸载a..

2020-08-24 13:48:43 1620

原创 DLL注入

DLL注入DLL注入指的是向运行中的其他进程强制插入特定的DLL文件,DLL注入命令其他进程自行调用LoadLibrary() API,加载用户指定的DLL文件。加载到notepad.exe进程中的myhack.dll与已经加载到notepad.exe进程中的DLL一样,拥有访问notepad.exe进程内存的权限。DLL被加载到进程后自动运行DllMain()函数,用户可以把想执行的代码放到DllMain()函数,每当加载DLL时,添加的代码就会自然而然得到执行,利用该特性可以修复程序Bug,或

2020-08-22 15:01:20 2166

原创 Windows消息钩取

为了偷看或截取来往信息而在中间设置岗哨的行为称为挂钩,实际上,偷看或操作信息的行为就是人们常说的钩取。消息钩子Windows操作用户向用户提供GUI,它以事件驱动方式工作,在操作系统中借助键盘、鼠标、选择菜单、按钮以及鼠标移动、改变窗口大小与位置等都是事件,发生这样的事件时,OS会把是西安定义好的消息发送给相应的应用程序,应用程序分析收到的信息后执行相应的动作。常规Windows消息流:发生键盘输入事件时,WM_KEYDOWN消息被添加到[OS message queue].OS判断时哪.

2020-08-21 18:21:53 420

原创 内嵌补丁练习

内嵌补丁内嵌补丁时内嵌代码补丁的简称,难以直接修改指定代码时,插入并运行被称为洞穴代码的补丁代码后,对程序打补丁。常用于对象程序经过运行时压缩而难以修改的情况。左图描述的是典型的运行时压缩代码,EP代码先将加密的OEP代码解密,然后再跳转到OEP代码处,若要打补丁的代码存在于经过加密的OEP区域是何难打补丁的,因为解码过程中可能会解出完全不同的结果。解决问题的办法是,在文件中另外设置被称为“洞穴代码”的“补丁代码”,EP代码解密后修改JMP指令,运行洞穴代码,再洞穴代码执行补丁代码后(因

2020-08-21 15:56:31 195

原创 UPack调试

Ollydbg运行错误由于Upack会将IMAGE_OPTIONAL_HEADER中的NumberOfRvaAndSizes值设置为A,所以使用OllyDbg打开notepad_upack.exe文件时,初始检查过程中会弹出错误消息对话框:按确认按钮关闭对话框,上面这个错误导致OllyDbg无法转到EP位置,停留在ntdll.dl区域:该现象是由OllyDbg的Bug引起的,所以需要强制设置EP,首先要查找EP位于何处,下面使用Stud_PE查找EP的虚拟地址。ImageBase为010.

2020-08-19 18:55:58 343

原创 UPack PE文件头详细分析

UPack是一款PE文件的运行时压缩器,其特点是用一种非常独特的方式对PE头进行变形,UPack会引起诸多现有的PE分析程序错误。许多恶意代码使用UPack压缩字节的恶意代码并发布,由于这样的恶意代码非常多,现在大部分杀毒软件干脆将所有UPack压缩的文件全部识别为恶意文件并删除。使用UPack压缩notepad.exe将upack.exe与notepad.exe放到同一个文件夹下,输入如下命令:C:\Users\12586\Downloads\example\02\18\bin>Up.

2020-08-19 17:01:43 581

原创 Android系统架构概述

Android系统架构如下图所示:从图中可以看出,整个Android操作系统分为五层,它们分别是:内核层:包含了Linux Kernel以及Android定制的一些改动,除此之外,Android还在Linux增加了一些定制的驱动,这些驱动通常与硬件无关,而是为了上层软件服务的,它们包括:Binder:进程间通讯(IPC)基础设施,Binder在Android系统中使用的地方非常多,几乎所有的Framework层的服务都是通过Binder的形式暴露出接口供外部使用的。Ashmem匿名共享内存.

2020-08-18 08:53:42 550 1

原创 Linux Container

Linux容器是一个轻量级的环境,你可以在容器中以接近裸机的性能运行一到几个隔离应用程序.Linux Control GroupsControl groups是一个内核特色,它限制、负责和隔离一个或多个进程对CPU、内存、磁盘或网络的使用。cgroup的主要设计目标是提供一个统一的接口来管理进程或整个操作系统级别的虚拟化,包括Linux容器或LXC,cgroups框架提供以下内容:资源限制:可以将组配置为不超过指定的内存限制或使用的处理器数量不超过期望的数量或者限制为特定的外围设备。优先.

2020-08-17 16:30:14 911

原创 init进程与Android Init Language

init进程与Init.rcinit进程的进程号为1,这个进程是系统起来的第一个进程,init进程掌握了整个系统的启动流程。Android可能运行在不同的平台上,不同的设备上,启动的逻辑是不尽相同的,为了适应各平台和设备的需求,init进程的初始化工作通过init.rc配置文件来管理,init.rc以Android init Language作为语法,配置文件的入口文件是/init.rc,这个文件会通过import关键字引入其他的配置文件,统称这些文件为init.rc。/init.rc可能impor

2020-08-15 16:37:24 140

原创 Linux namespace

chroot就是修改系统的根目录(change root directory),在使用chroot命令后,系统读取到的目录和文件将不在是旧根系统下的而是新根下的目录结构和文件,大概有3大好处:增加了系统的安全性,限制了用户的权力:在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。建立一个与原系统隔离的系统目录结构,方便用户的开发:使用 chroot 后,系.

2020-08-15 15:41:36 440

原创 从可执行文件中删除.reloc节区

.reloc节区EXE形式的PE文件中,“基址重定位表”项对运行没有什么影响,实际上,将其删除后程序仍能正常运行。VC++中生成的PE文件的重定位节区名为.reloc,删除该节区后文件照常运行,且文件大小将缩减,.reloc节区一般位于所有节区的最后。若要删除位于文件末尾的.reloc节区,需要按照以下4个步骤操作:整理.reloc节区头删除.reloc节区修改IMAGE_FILE_HEADER修改IMAGE_OPTIONAL_HEADER删除.reloc节区头可以.

2020-08-14 16:23:05 756 1

原创 基址重定位表

PE重定位向进程的虚拟内存加载PE文件(EXE/DLL/SYS)时,问价会被加载到PE头的ImageBase所指的地址处,若加载的时DLL(SYS)文件,且在ImageBase位置处已经加载了其他DLL文件,那么PE装载器就会将其加载到其他未被占用的空间,这就是PE文件的重定位。Ex:A.DLL被加载到TEST.EXE进程的10000000地址处,此后,B.DLL试图加载到相同地址(10000000)时,PE装载器将B.DLL加载到另一个尚未被占用的地址(3C000000)处。创建好进程后,EXE

2020-08-14 15:46:58 602

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除