- 博客(20)
- 资源 (2)
- 收藏
- 关注
原创 2、LoadClass类加载过程
1、前言上一篇说道,DexClassLoader加载一个dex文件的过程,DexClassLoade加载dex文件过程,我们加载一个自定义类或者dex文件的时候,下面是一个典型的例子DexClassLoader dexClassLoader = new DexClassLoader("/sdcard/Dex.dex",optfile.getAbsolutePath(), libfile.getAbsolutePath(), MainActivity.class.getClassLoader());Cl
2021-06-16 23:20:52
478
原创 1、DexClassLoader的初始化过程
前言:最近在研究安卓的加壳和脱壳,发现遇到知识盲区,是以前的windows研究的时候好多没遇到的,为了更好的研究安卓逆向,要从底层开始研究安卓的源代码1、前言我们使用安卓加载一个类的时候,经常使用DexClassLoader来加载一个特定目录的dex文件,这个过程是什么样的下面是使用的例子DexClassLoader dexClassLoader = new DexClassLoader("/sdcard/Dex.dex",optfile.getAbsolutePath(), libfile.getA
2021-06-16 20:21:58
365
原创 32位windows的全局hook
1、思路:整理以前的代码,顺便写个帖子。该方法是利用驱动构建调用门和中断门,然后利用调用门修改页相关dll的页属性,再利用中断门来hook相关的函数。当然也有更简单的方法,此方法是利用调用门和中断门的使用,当然64位下是行不通的,会触发pg。64需要切换gs,(x86是fs寄存器只想teb和kprcb)2、驱动#include <ntifs.h>#include <ntddk.h>#include <stdio.h>#define DEVICENAME L"\
2021-03-07 22:40:30
715
原创 C++进阶教程之继承得本质:单继承(一)
单继承到底发生了什么托更了C++得高级教程好久了,今天有空先来更新一章C++得单继承。通过汇编来了解一下C++得继承得本质到底是什么,为啥说子类可以访问父类得非私有成员,而父类却不能访问子类得成员。首先让我们看一下结构体和类到底有什么区别。大家都知道C语言中有结构体,C++有类,通过前面两章,大家应该知道了类和结构体没有什么本质得区别。可以说类就是被编译器限制了权限得结构体,那么单继承发生了什么呢。1、首先让我们看一个结构father*其反汇编大家应该很清楚,就是在内存中依次存下了1,2,3。
2020-11-30 20:46:38
287
原创 一个PE注入,加壳的小工具
本人最近无聊,写了一个入门级的PE的小工具,包括PE解析,最简单的软件加壳功能,代码注入等功能。供学习交流1、加壳功能2、代码注入PE查看源码自取哦:链接:https://pan.baidu.com/s/1XSE1qQ6jKw9BRwJCOP_Sbg提取码:9niy...
2020-09-08 16:51:13
1192
原创 C++进阶教程之this指针的本质(二)
1、this指针?**摘抄自百度百科:**一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。其中难点: (1)一个对象的this指针并不是对象本身的一部分,为啥this指针不是对象的一部分。(2)不会影响sizeof(对象)的结果,为啥对象里都有this指针了,按理说会占用4个字节(32位程序),却不占用空间。(3)this作用域是在类内
2020-08-24 22:13:42
276
原创 C++进阶教程之类的本质(一)
1、C语言Struct结构体与Class存储结构#include <iostream>struct A { int a = 1; int b = 2; char c = 3;};class B { int a = 1; int b = 2; char c = 3;};int main(){ A structA; B ClassA; printf("%x, %x", &structA, &am
2020-08-23 22:02:47
238
原创 PE 之导入表解析和注入
1、导入表导入表是在可选PE头得数据目录项得第二项其结构如下其中name是一个RVA,是DLL的名字OriginalFirstThunk指向INT表,为 IMAGE_THUNK_DATA32的结构。这个结构的值中如果最高位为1 ,那么除去最高位的值函数的导出序号,否则为指向IMAGE_IMPORT_BY_NAME的RVA其结构如下其中Hint值无关紧要。** FirstThunk** 指向的是IAT表,其内容结构与OriginalFirstThunk指向的INT表一模一样2、程序启动
2020-08-19 17:24:05
710
原创 PE之移动导出表
1、移动各种表的目的(1)在程序启动时,系统会根据导入导出表等进行初始化工作。为了保护程序,一般会对exe程序的二进制进行加密等工作,但是一旦将这些表也进行了加密,那么系统在初始化的时候没办法找到这些表,也无法启动程序。(2)在对程序加密之前,需要对一些关键的表进行移动后,再对原来的数据进行加密,这样才不能破坏原来的程序。(3)学会移动各种表,是对程序加密/破解的基础。2、如何移动导出表上一篇文章,提到了如何对导出表进行解析,导出表的结构如图下。导出表的位置是在可选PE头的第一项,如图,我们可
2020-08-18 15:16:46
703
原创 PE重定位表解析
1、重定位表的作用在模块被加载到内存中,如果该模块没有装载到期待的位置,里面以固定形式而不是以偏移形式硬编码的地址就需要修正,这样程序才能被正确加载。例如:CALL 401203。这个在编译器编译的时候将CALL后面的函数地址以硬编码的形式固定住,那么一旦模块不是被加载到40000的基址,而是被加载到100000,则这条函数调用指令就不能正确找到函数,这时候就需要修正这个401203为1001203才可以。这就需要重定位表了2、重定位表的位置可选PE头中数据目录项的第6个结构就是重定位表。注意:
2020-08-17 20:57:37
1025
原创 PE文件导出表解析
1、导出表的结构导出表是option可选PE头的数据目录项的第一个,数据目录项的结构如下其中VirtualAddress 在内存中的偏移,Size为大小。可以通过数据目录项找到RVA(内存偏移),然后转换到FOA(文件偏移),来定位导出表2、函数地址定位过程其中需要注意的点是:1、AddressofName 为函数名称表的RVA,需要转为FOA,每个表存的为名字的RVA地址,也需要转为FOA。2、通过名称定位函数地址的过程如下:通过名字在名称表找到Ordinals表下标,然后通过下标在Or
2020-08-16 14:35:11
1028
原创 PE中增加节,并插入自己代码
PE文件的基础知识大家可以自行百度。1、在PE中末尾添加一个节在PE末尾中添加一个节,需要注意:(1)RVA和FOA的转换(2)需要修改SizeofImage的大小(3)需要修改PE头中节的数量(4)如果现有的节表后面添加的空间不足,可以移动NT头和节表(5)新增加节表的属性根据自己的需要修改(6)新增节的RVA 需要注意计算,需要计算上一个节RVA对齐后的尺寸计算公式如下: //计算内存中对齐的大小 DWORD VirtulaSize = NULL; if (secti
2020-08-15 15:47:08
1493
原创 PE代码注入
PE文件入口地址EntryPoint指向了PE文件开始执行的位置,关于PE文件的具体格式,大家可以自行百度。本代码主要实现了在32位可执行程序中注入了一个弹窗 。其主要原理是修改EntryPoint地址处的内容,指向自己代码的地方,然后执行完毕后,再跳转到原入口的地址。其中值得注意的几点:(1)需要关闭PE的地址随机化功能,可以通过修改OptionHeader头中的DllCharacteristics = 0x8100,来绕过地址随机化。(2)计算E8和E9的时候,CALL 偏移:跳转地址 = 当前
2020-08-15 09:40:33
1474
原创 window完整服务程序
windows服务控制程序#include <iostream>#include <Windows.h>BOOL DeleteSampleService(SC_HANDLE scSCManager, LPCWSTR szNameOfService);DWORD StopService(SC_HANDLE scSCManager, LPCWSTR ServiceName, BOOL fStopDependencies, DWORD dwTimeout);/*********
2020-07-31 15:03:54
345
IDA7.0 vc签名文件
2021-04-07
向日葵远程控制软件,ubuntu64位ARM版本
2020-12-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人