自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (12)
  • 收藏
  • 关注

原创 Android 动态代码自修改原理

1.原理DexClassDef -> DexClassData -> DexMethod -> DexCode里面的 u2 insns 的值是用于存放程序实现代码的地方。程序执行时候会把整个 dex 文件加载到内存中,然后动态地解析执行 insns 中的内容。只要修改了里面的数据,就相当于修改了程序执行流程和方法。2. 内存中修改 insns主要步骤定位到 dex...

2019-11-29 11:05:14 605

原创 代码重定位技术

int g_nTest;__asm{ call Dels Dels: pop ebx lea eax, g_nTest sub eax, Dels lea edx, [ebx + eax]}...

2019-11-29 11:05:00 307

原创 Xposed的基本使用方法

1.Xposed介绍和安装Xposed 是Android 系统两大 Hook 框架之一,另一个 Cydia Substrate 主要面向 native 的 hook,而 Xposed 是面向 java 层的 hook。它的使用非常的简单,首先要在手机上安装 Xposed(手机必须先 root),本实例使用的是Xposed Installer 3.1.4官方的下载地址:http://repo....

2019-03-11 21:37:08 7300

原创 so文件混淆与修复

一、对section header进行混淆由于linker不会对section header进行加载,所以对section header进行改动,不会影响so文件正常加载到内存,因此有些程序对section header进行了混淆,导致IDA无法正常进行静态分析。混淆方法:1.将section header table中的addr、offsize等字段值清0,如果清空的是dynsym段,就...

2019-03-11 21:30:58 6738 2

原创 Android dex函数指令修改

1.原理要了解动态代码自修改原理,需要先弄懂dex文件结构,结构里面有个insns ,是用于存放程序实现代码的地方。程序执行时候会把整个 dex 文件加载到内存中,然后动态地解析执行 insns 中的内容,只要修改了里面的数据,就相当于修改了程序执行流程和方法。DEX文件可以通过以下结构找到DexCodeDexClassDef -> DexClassData -> DexMet...

2019-03-11 21:19:00 2094

原创 阿里壳2016

将壳拖入AK中分析,入口点已经修改成了StubApplication调用了方法attachBaseContext这个方法比onCreate调用的更早,很多壳会在这个方法中对原始程序进行还原除此之外还加载了mobisec.so,查看lib文件夹下的so文件可以找到这个so文件用IDA打开libmobisec后找到Jni_Onload,导入jni.h中的结构体,F5后重新注释Jni_On...

2019-03-11 09:55:51 334

原创 Eclipse中进行Jni编程

Eclipse Jni环境搭建1.在eclipse中选择Windows->Preferences->Android->NDK,设置NDK的位置。如果Android下没有NDK,需要下载个插件:链接:https://pan.baidu.com/s/1-YKXVUktq7hp_nDb1Q7dbQ,提取码:e4ks。android-ndk-r10d下载地址:链接:https:/...

2019-01-22 11:51:16 405

原创 Android Studio中进行Jni编程

1.介绍Android程序分2层,java层与native层,java层编译为dex文件,native层编译为so动态库。两者使用jni(java native interface)来进行连接。2.在Android Studio中进行Jni编程2.1 Android Studio 中Jni环境搭建Android Studio原生支持Jni编程,可以直接创建so库,不过需要修改gradle文...

2019-01-08 22:42:57 1513

原创 160个Crackme之004 ajj.1

作者:ajj难度:★★保护方式:Name/Serial(Delphi)概述运行程序程序没有确定按钮,所以直接丢到OD中分析。虽然没有确定按钮,但是有输入框,所以应该调用了GetItemTextA,可是这个程序是Delphi程序,它的API并不是GetItemTextA,所以暂时放弃这个想法。在OD中通过中文搜索引擎的智能搜索查找字符串,发现有用的字符串"恭喜恭喜!注册成功"可问...

2018-12-28 20:09:18 293

原创 160个Crackme之003 Afkayas.2

1.概述作者:Afkayas难度:★★保护方式:Nag,Name/Serial运行程序,有几秒钟的弹框,过几秒自动消失出现主窗口随意输入用户名和序列号,点击ok,弹出对话框2.算法OD加载程序,用中文搜索引擎里的智能搜索搜到字符串"You Get Wrong",跳转到代码处,向上找到函数的起始处,下断点,运行程序后,在主窗口中输入用户名和序列号点ok,程序被成功断下。第一...

2018-12-28 13:37:42 336

原创 160个Crackme之002 Afkayas.1

1.概述作者:Afkayas难度:★保护方式:Name/Serial(VB5)运行程序输入用户名tutucoo,序列号12345678,弹出对话框2. 分析首先查找字符串,跳转到字符串代码,向上查找到函数起始位置,下断点,运行程序,输入name和serial后点击OK,程序断下。F8分析汇编,发现算法:用户名长度*0x17cfb+用户名首字母ASCII,最后转十进制最后将十...

2018-12-27 00:40:14 183

原创 160个Crackme之001 Acid_burn

1.概述运行Acid burn.exe,启动界面如下:![hello you have to kill me! Welcorne to this Newbies Crackrne nude by ACiD BuRN Crac:KerWoRlD1要将上面的对话框去掉点击按钮Serial/Name,进去要求输入用户名和序列号:点击按钮Serial,进去要求输入序列号:2.Seri...

2018-12-26 22:32:37 545

原创 detours钩子库的简单使用

detours是微软的钩子库,以下是简单的使用#include "pch.h"#include <Windows.h>#include "detours.h"#include <stdio.h>#pragma comment(lib,"detours.lib")static int(WINAPI* OLD_MessageBoxW)(HWND hWnd, LP...

2018-12-24 16:37:43 4350

原创 Google C++ 命名约定

通用命名规则函数命名, 变量命名, 文件命名要有描述性; 少用缩写.int price_count_reader; // 无缩写int num_errors; // "num" 是一个常见的写法int num_dns_connections; // 人人都知道 "DNS" 是什么int n; // 毫无意义.int...

2018-12-20 14:14:05 251

原创 Vcpkg使用方法

概观Vcpkg可帮助您管理Windows,Linux和MacOS上的C和C ++库。这个工具和生态系统在不断发展; 您的参与对其成功至关重要!开始使用管理员身份打开powershell后,依次执行以下指令git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg.\bootstrap-vcpkg.bat.\vcpkg integr...

2018-12-18 14:37:04 8849

原创 代码重定位技术

代码重定位技术一般用于远程线程注入和病毒感染技术当中,当注入和感染的代码使用了全局变量,全局变局的地址就需要进行重定位,否则代码无法正常执行。这是因为,代码注入其他进程空间以后,注入的位置跟原来程序中的位置不一样,而全局变量在汇编层其实就是一个偏移,因此无法再通过原来的偏移找到全局变量了。既然如此,我们只要找到注入位置的差值,我们就能一直准确定位到我们想要的全局变量了。所以写入到目标进程的代码...

2018-12-14 17:16:31 377

原创 一种简单的PE压缩算法(Win32汇编)

这种算法的核心逻辑是:在对PE进行压缩的时候,如果碰到连续的多个0,比如说0000 0000,会将它变成0 8,0后面的8用来记录0的个数。.386.model flat,stdcalloption casemap:noneinclude windows.incinclude user32.incincludelib user32.libinclude kernel32.incin...

2018-12-12 11:23:13 1170

转载 病毒分析报告模板

基本信息报告名称:作者:报告更新日期:样本发现日期:样本类型:样本文件大小/被感染文件变化长度:样本文件MD5 校验值:样本文件SHA1 校验值:壳信息:可能受到威胁的系统:相关漏洞:已知检测名称:简介本节的主要目的是简单介绍样本的目的,类型,一两句画龙点睛即可。例如:[样本名称 ]是一个针对FTP软件用户,窃取系统及个人信息的木马。被感染系统及网络症状本节的主...

2018-12-07 00:21:10 3283

原创 Windows内核基础之KPCR

1.概述KPCR是CPU的一个结构体,它就像EPROCESS对于进程,ETHREAD对于线程,KPCR对于CPU是非常重要的,它的全称是Processor Control Region。fs:[0]在3环时指向TEB,在0环时指向KPCR,每一个CPU核心都对应着一个KPCR,KPCR存储了CPU需要使用的一些重要信息,比如GDT\IDT以及线程相关的信息2.KPCR结构体nt!_KPCR...

2018-12-07 00:12:25 1059

原创 Windows内核基础之线程

1. 线程结构体在0环,每个线程都有一个结构体ETHREAD。nt!_ETHREAD +0x000 Tcb : _KTHREAD +0x200 CreateTime : _LARGE_INTEGER +0x208 ExitTime : _LARGE_INTEGER +0x208 KeyedWaitChain : ...

2018-12-07 00:09:54 868

原创 Windows内核基础之进程

1. 进程结构体EPROCESS每个运行中的进程在Windows内核中都有一个EPROCESS的结构体,这个结构体包含了进程所有重要的信息。在WinDbg中使用指令dt _EPROCESS可以查看进程结构体的所有成员。nt!_EPROCESS +0x000 Pcb : _KPROCESS +0x098 ProcessLock : _EX_PUS...

2018-12-07 00:08:11 800

原创 Windows内核基础之控制寄存器

1. 概述控制寄存器用于控制和确定CPU的操作模式。主要有:CR0\CR1\CR2\CR3\CR42.CR0寄存器PE:启用保护模式标志,1是保护模式,0是实模式,这个位只是开始或关闭段机制,并没有启用分页机制PG:分页机制开关,在启用之前需要确保PE是开启的,否则会出现异常WP:写保护标志,禁止0环程序向3环只读页面执行写操作,也就是说当CPL<3的时候,如果WP=0,可以读写...

2018-12-04 11:37:12 762

原创 Windows保护模式下的分页机制(PART2:PAE模式)

1. 概述10-10-12分页方式最多可达4GB的物理地址,但是随着硬件的发展,4GB的物理地址无法满足要求,因此出现了2-9-9-12分页,这种分布方式又被称为PAE分页。为什么会出现2-9-9-12分页?我们知道10-10-12最后的12是物理页偏移,页的大小是4KB是不能变的,所以12是定下来了。那么要想表示更多的物理内存就必须增大物理页范围,而物理页是由PTE保存的,原来的PTE是...

2018-12-03 15:26:01 477

原创 Windows保护模式下的分页机制(PART1:10-10-12模式)

1.概述一个进程的虚拟地址空间是4GB,它的物理大小并不是真的4GB,如果真的是4GB,那运行中的所有进程都加起来占用的空间是一个天文数字,事实上系统会对这4GB的地址空间进行转换,然后映射到物理内存中。换句话说虚拟地址本身并不是真实存在的。将虚拟地址转换为物理地址依赖的规则就是分页机制。物理地址也并不是内存条地址,物理地址需要再进行一层转换才能找到真正的内存条地址。我们只要会转换到物理地...

2018-12-03 00:14:23 1197

原创 Windows保护模式下的段机制(PART2:系统段介绍)

1. 概述PART1那篇文章基本上已经把段机制交待清楚了,这一部分主要是介绍在PART1里没有介绍的系统段。我们知道段描述符里的S位为1就是代码段或数据段,如果为0就是系统段。2. 调用门2.1 调用门介绍之前介绍过长调用,想通过长调用提升CPL只能通过调用门,调用门是门描述符的一种,保存在GDT中,Windows系统虽然没有使用调用门,但是为了演示提升CPL,我们可以手动构造一个调用门...

2018-11-30 23:15:00 348

原创 Windows保护模式下的段机制(PART1:段机制介绍)

文章目录1. 前置知识1.1 CPU对存储器的读写1.2 段地址1.3 段寄存器2. 保护模式3. 段机制3.1 保护模式下的段机制3.2 32位系统的段寄存器3.3 段寄存器的读写3.4 段选择子3.5 GDT和LDT3.6 段描述符3.7 段权限检查3.8 长跳转3.9 长调用与短调用1. 前置知识在了解保护模式以及分段和分页机制之前,需要知道一些必要的知识。1.1 CPU对存储器的读写...

2018-11-29 15:33:11 715

原创 手动获取函数地址

编写病毒程序时,由于各种原因不能直接调用函数,所以需要手动获取到函数然后调用它。最常见手动获取函数地址的方法是通过获取kernel32.dll句柄,然后遍历kernel32.dll的导出表找到它的GetProcAddress()函数,再通过向这个函数传递函数名就可以获取函数的地址了,最后通过一个函数指针就可以调用获取的函数。主要步骤1.通过fs寄存器获取到TEB的地址2.通过teb+0x30...

2018-11-27 15:36:12 2894

原创 Windows内核基础之虚拟内存空间布局

32位Windows操作系统支持32位寻址,因此2的32次方就等于4GB,每个程序在运行时都会被映射进4GB空间的内存空间,这4GB空间不全是用户可以使用的,其中0x7fffffff-0xffffffff是2GB的内核空间,这部分用来保存内核的数据,用户程序是无法直接访问的。进程空间的地址是一个逻辑地址,它首先通过分段机制的段选择子和偏移地址计算出一个线性地址,再由分页机制分解线性地址,最...

2018-11-26 17:18:17 1195 1

原创 Windows内核基础之权限级别

权限级别是CPU中的一个概念,CPU中包含4个权限级别,分别是0环,1环,2环,3环,CPU设计制造商最初希望0环用于运行内核,1环和2环运行设备驱动,3环运行应用程序,但是系统设计者为了简单将驱动和内核都放在0环,应用程序放在3环,没有使用1环和2环。后来CPU设计制造商干脆也和操作系统保持一致,只保留了0环和3环两个权限级别。...

2018-11-26 16:00:15 2750

原创 Windows网络编程(九):消息选择模型

概述这种模型的使用需要在调用完socket()函数以后调用WSAAsyncSelect(),这个函数的声明如下:int WSAAsyncSelect(SOCKET s,HWND hWnd,u_int wMsg,long lEvent)s:需要使用异步模式的套接字wMsg:用户自定义的消息,这个自定义消息可以是WM_USER+ 200,通过将这个消息跟回调函数映射,可以在接...

2018-11-26 15:57:10 380 1

原创 Windows网络编程(八):非阻塞模式(异步模式)

前面几篇文章介绍的无论是TCP通信还是UDP通信都是阻塞式的,它们在执行recv或recvfrom时会在线程中等待,直到接收到信息为止,所以在应用的时候一般都需要开辟子线程,在子线程里专门做这类事情,不然它会影响主线程的运行。 系统提供三种网络模型去处理这类需求,它们都基于异步模式,在异步模式下执行recv或recvfrom时不会在线程中等待,它会接着执行下去,当接收到消息时,系...

2018-11-26 15:55:35 622

原创 Windows网络编程(七):原始套接字开发

在调用socket()函数时,如果将第二个参数填为SOCK_RAW,代表创建的是原始套接字类型,第三个参数可以选择IPPROTO_ICMP、IPPROTO_TCP、IPPROTO和IPPROTO_RAW。#include <winsock2.h>#pragma comment (lib, "ws2_32")struct icmp_header{ unsigned char...

2018-11-25 22:27:27 1792

原创 Windows网络编程(六):IP Helper

IP Helper是Windows系统与IP配置和管理的重要接口,通过IP Helper 可以获得很多跟网络配置相关的信息。比如说本机IP、网关设置、网卡数量和连接信息。#include <windows.h>#include "iphlpapi.h"/* 全局变量 */ULONG ulOutBufLen;DWORD dwRetVal;HANDLE hHeap = GetP...

2018-11-25 22:25:33 959

原创 Windows网络编程(五):多线程消息处理

对于服务端来说,调用accept()函数同意客户端连接的请求后,需要处理完与这个客户端的通信后回到accept()继续等待下一个客户端的连接,如果一个客户端请求连接时服务端并没有在accept()处等待,客户端是无法成功连上服务端的,因此并发客户端连接的服务端必然是多线程的。服务端:#include <WinSock2.h>#include <windows.h>...

2018-11-25 22:24:24 301

原创 Windows网络编程(四):建立UDP连接和收发消息

UDP消息的发送和接收需要UDP连接,所以,上面的TCP连接已经不适用了,具体的区别主要有:创建Socket时参数不同创建服务端时不需要listen和accept操作创建客户端时不需要connect操作服务器需要bind操作,客户端不需要。发送和接收UDP消息要用到sendto和recvfrom两个函数。先来看看接收消息,当执行recvfrom时,线程会进入等待,直到接收到UDP消息为止。...

2018-11-25 22:21:18 1616

原创 Windows网络编程(三):建立TCP连接和收发消息

先看服务端:// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define _WINSOCK_DEPRECATED_NO_WARNINGS //这个声明要在stdafx.h的后面,但要在其他头文件的前面#include <winsock2.h>#include <stdio...

2018-11-25 22:17:37 1790

原创 Windows网络编程(二):Socket简介

Socket简介Socket被称为套接字,描述了IP和端口等信息,是一个通信链的句柄。微软专门开发了一套支持多种网络协议的网络编程接口,叫做Winsock,Winsock是Windos SDK的一部分,全称Windows Sockets API。它对多种协议做了封装,Socket就是Winsock对TCP协议的封装。vc++是微软开发的一套开发工具,它不仅支持C和C++,还提供一套可视化编程...

2018-11-25 22:14:45 264

原创 Windows网络编程(一):TCP/IP协议

概述这个协议是一个四层协议:应用层,主要协议有HTTP、FTP等传输层,主要协议有TCP、UDP等网络层,主要协议有IP等链路层,主要协议有ICMP等下层中的协议总是为上层中的协议服务的,比如说应用层的HTTP、FTP协议都是基于TCP协议的,应用层的DNS协议基于UDP协议。网络层的IP协议中记录了网络主机的IP地址,TCP协议中记录了端口号,通过这两个数据可以定位到某台主机上的...

2018-11-25 22:11:05 725

原创 Windows程序和消息机制(三):消息与进程间通信

自定义消息与进程间通信窗口程序可以接收自定义的消息类型,前提是通信的进程声明了这种消息类型,声明的方法很简单,WM_USER加一个值就可以了,一般加的值从0x400开始,其他的值已经被系统使用了。实现一个完整的自定义消息需要进行以下步骤:1.声明自定义消息类型: WM_UMSG+0x4002.添加消息映射: BEGIN_MESSAGE_MAP(CUserWMD...

2018-11-25 22:02:48 1219

原创 Windows程序和消息机制(二):消息有关的函数

不同窗口程序可以通过消息进行交互,主要用到的函数如下:FindWindow获取一个窗口的句柄。HWND FindWindow( LPCTSTR lpClassName,// 类名 LPCTSTR lpWindowName// 窗口名 );通过在参数中传递一个类名或者窗口名就可以返回一个窗口的句柄,类名可以通过spy++获取,窗口名是指窗口的标题。SendMessag...

2018-11-25 22:00:33 191

ARM汇编指令集(带书签,完美精排)

ARM汇编指令集(带书签,完美精排)

2019-01-11

[PE变形]拓展STUB

用于演示PE变形拓展STUB的蓝本程序。

2018-12-10

Socket网络三大模型_消息选择模型示例代码

Socket网络三大模型_消息选择模型示例代码(WSAAsyncSelect)我的博客有文章讲解:《Socket框架和实践》

2018-11-17

vs2017_va_visual assists_番茄

vs2017 va插件,vs2017_va_visual assists_番茄

2018-08-17

16讲 | APP 脱壳实战

16讲 | APP 脱壳实战``````````````````````````````````

2017-11-30

带爱加密壳的示例程序

带爱加密壳的示例程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2017-11-28

ODEX格式全解析图

ODEX格式全解析图,留做存档~~~~~。。。。。。。。。。。。。。

2017-11-22

DEX文件格式完整解析全图

DEX文件格式完整解析全图~~~~~~~~.......................................

2017-11-22

dex示例文件

dex示例文件,Android可执行文件(一):dex...............

2017-11-21

macOS软件安全与逆向分析.非虫.配套源码

macOS软件安全与逆向分析.非虫.配套源码.敬请笑纳。。。。。。。。。。。。。。

2017-11-21

QT使用Opencv库及网络摄像头做的视频监控系统带人脸检测功能

QT使用Opencv库参考http://blog.sina.com.cn/s/blog_5c70dfc80100qwi3.html QT使用Opencv库打开网络摄像头请参考 http://blog.csdn.net/llh318724/article/details/7007661# 我做的这个是QT使用Opencv库及网络摄像头做的视频监控系统带人脸检测功能, 这是软件功能还不够完善,希望下载 的人将其完善后再发上来

2017-09-26

空空如也

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

TA关注的人

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