分类: 破解调试 |

修改PE中的函数为导出函数

1、前言:为什么要这么做
  很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。

2、技术基础:已经了解PE结构

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8260

壳的介绍以及脱壳常用思路

一、概论

壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种
UPX ASPCAK TELOCK PELITE NSPACK ...
ARMADILLO ASPROTECT ACPROTECT EPE SVKP ...

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 6404

进程PEB结构的修改实现

作者:Gxter

关于进程PEB结构前辈们给出了几篇比较详细的文章。
例如:
《JIURL玩玩Win2k进程线程篇 PEB》

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 9243
我相信大家在用OD的过程中也早已发现,如果不使用Create_SUSPENDED,初始化线程在跑到入口点后,其ebx同样指向PEB结构。 

显然,我们必须进入Win32系统新进程创建的过程来找这个真相。由于我们知道初始化线程被创建后(尚未Resume)ebx就已经指向PEB了,所以要不然就是在NtCreateThread过程中,要不然就是在它前面。同时也应该在NtCreatePeb之后。因此我就在这个范围内找寻。 

应该说这里我犯了个错误,就是没有详细看CreateProcess的流程,而是使劲往NtCreateThread的内核代码看去,N多函数调用关系看得我眼花,虽然这些内核函数对线程的Context有诸多操作,但是均并不涉及其Ebx。 

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8086

fs寄存器及kernel32.dll地址的获取

[b]FS寄存器[/b]指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8269

XDE反汇编引擎源代码

网上流传的一个代码,能看懂的自己看吧。主要用到一下几个文件。
、、、、、

文件名:xde.c

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 29233

手工加载exe到内存(loadEXE.cpp)

//*******************************************************************************************************
// [b]loadEXE[/b].cpp : Defines the entry point for the console application.
//
// Proof-Of-Concept Code
// Copyright (c) 2004

查看更多...

Tags: 代码 文件 pe 格式 添加

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 9588

Rootkit技术之内核钩子原理


总是离不开系统内核所提供的服务,比如它要使用内存的时候,只要跟操作系统申请就行了,而不用自己操心哪里有空闲的内存空间等问题,实际上,这些问题是由操作系统的内核来代劳的。站在黑客的角度讲,如果能够控制内核,实际上就是控制了内核之上的各 
一、系统调用表 

系统调用表又称系统服务表或者服务描述符表,是Windows 内核在进行各种系统操作时所需的一个函数指针表。也就是说,这个表中存放的是提供系统服务的各种函数的地址。当然,该表所指向的都是系统自身的一些函数,但是,如果我们对它做了手脚后,就可以让它指向我们自己的函数。这正是本文要讲解的重点。 

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 7113

不用驱动进入内核模式

不用驱动进入内核模式并且利用APIC得到中断的信息
说明:原文地址 http://www.codeproject.com/system/soviet_kernel_hack.asp
转载请说明译者:WH  QQ: 19552451,  QQ Group: 5497193
介绍:
尽管使user-mode的应用程序进入kernel绝对是一件令人激动的体验,但是这已经不是什么新鲜事了/还有很多事情我们从未听说过。Matt Pietrek是第一个完成这件事的人(许多年前他在windows95上做过了)。他的技术后来被Prasad Dabak, Sandeep Phadke和 MilindBorate修改了一下用到了windows NT上。为了从一个应用程序进入kernel,其中一个方法是去调用全局描述表(Global Descriptor Table(GDT))中的门调用描述符(call gate descriptor),所以一个应用程序能够通过门调用进入kernel。然而一旦 user-mode代码不允许进入GDT,上面作者使用的kernel-mode 驱动就是为了去调用一个描述门。那么,有个很合乎逻辑的问题会被提出,如果你始终需要用一个驱动来起作用那么离开驱动来实现这个功能其最关键的是什么?毕竟,用驱动的方法仅仅是达到了这个目的,难道你不认为吗?

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8743

进程创建和映像装入 windows

关于Windows的进程创建和映像装入的过程,“Microsoft Windows Internals 4e”一书的第六章中有颇为详细的说明。本文就以此为依据,夹译、夹叙、夹议地作一介绍。书中说,创建进程的过程分成六个阶段,发生于操作系统的三个部分中,那就是:Windows客户端即某个应用进程的包括Kernel32.dll在内的动态连接库,Windows的“执行体”、即内核(确切地说是内核的上层),以及Windows子系统的服务进程Csrss中。这六个阶段是:
    1. 打开目标映像文件。
    2. 创建Windows的“执行体进程对象”,也就是内核中的“进程控制块”数据结构。
    3. 创建该进程的初始(第一个)线程,包括其堆栈、上下文、以及“执行体线程对象”,即内核中的“线程控制块”数据结构。
    4. 将新建进程通知Windows子系统。

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8237

进程控制块pcb

进程控制块(Process Control Block)存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。


在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一样,通常PCB应包含如下一些信息。

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8138

存储管理的基本原理

1 内存管理方法
内存管理主要包括内存分配和回收、地址变换、内存扩充、内存共享和保护等功能。

下面主要介绍连续分配存储管理、覆盖与交换技术以及页式与段式存储管理等基本概念和原理。

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 7090

windows下堆溢出的几种利用方式

1.利用RtlAllocHeap 
这是ISNO提到的,看这个例子 
main (int argc char *argv[]) 

char *buf1 *buf2; 

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 7083

简析内存分页机制

其实分页机制并不复杂,无论关于cpu的技术文章还是操作系统技术的文章都会提到分页机制,这是一种虚拟存储器的实现方法。 
        虚拟存储器的思想是程序、数据和堆栈的大小都有可能超过物理内存大小,由操作系统把当前使用的放在内存,而不需要的放在磁盘。 
        而绝大部分操作系统使用的虚拟存储器技术就是分页技术。 
        在虚拟存储器中,程序所产生的地址为虚拟地址,虚拟地址构成了虚拟地址空间。(当然了在没有虚拟存储器的系统上,程序产生的地址就是物理地址。其实程序并不知道,只是操作系统和处理器知道。下面都是按照使用虚拟存储器的系统来说)这些虚拟地址通过MMU(内存管理单元)映射为物理地址。 
        采用分页机制的系统,虚拟地址空间以页面为单位进行划分,虚拟地址空间会被划分成多个等大小的页面。物理地址空间也按页面为单位进行划分每一块成为页帧,或者页框。每一虚拟页面可以随意对应到物理页框,也可以对应到磁盘的页面文件的上。 

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8742

PEB获取GetProcAddrees函数地址

1.fs寄存器指向TEB结构
2.在TEB+0x30地方指向PEB结构
3.在PEB+0x0C地方指向PEB_LDR_DATA结构
4.在PEB_LDR_DATA+0x1C地方就是一些动态连接库地址了,如第一个指向ntdll.dll,第二个就是kernel32.dll的地址。
其结构示意图如图

查看更多...

Tags: 溢出 缓冲区

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 11105

纯手工构造超小pe

最近构造了一个微型的 PE 文件,下面把构造的方法和一点心得写出来和大家交流,也算是 
对 PE 格式的一个复习吧。 

最终构造好的文件大小是 180 字节,可以在 Win2k 下运行,运行后会弹出一个消息框。 

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 10596

从内存资源中加载DLL 模拟PE加载器

一种保护应用程序的方法 模拟Windows PE加载器,从内存资源中加载DLL
1、前言
目前很多敏感和重要的DLL(Dynamic-link library) 都没有提供静态版本供编译器进行静态连接(.lib文件),即使提供了静态版本也因为兼容性问题导致无法使用,而只提供DLL版本,并且很多专业软件的授权部分的API,都是单独提供一个DLL来完成,而主模块通过调用DLL中的接口来完成授权功能。虽然这些软件一般都采用了加壳和反调试等保护,但是一旦这些功能失去作用,比如脱壳,反反调试,HOOK API或者干脆写一个仿真的授权DLL(模拟授权DLL的所有导出函数接口),然后仿真的DLL再调用授权DLL,这样所有的输入首先被仿真DLL截获再传递给授权DLL,而授权DLL的输出也首先传递给仿真DLL再传递给主程序,这样就可以轻易的监视二者之间的输入输出之间的关系,从而轻易的截获DLL中的授权信息进行修改再返回给主程序。 

2、目前隐式调用敏感DLL中可能存在的安全隐患

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 13231

pe重定位表学习手册

先定义一下用到的几个变量:
char *hModule=NULL;//映射后的基址
PIMAGE_OPTIONAL_HEADER pOptHeader;//扩展头
PIMAGE_DATA_DIRECTORY pRelocTable=NULL;//指向重定位表
PIMAGE_BASE_RELOCATION pRelocBlock;//指向重定位块

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 8484

加密pe导入表

       学习了pe结构和加载器的原理之后我们知道加载器加载可执行文件的时候会自动加载需要的dll文件和改写导入表函数地址。要是纯粹加密了导入表导致的结果就是执行文件无法被加载。而这次我要讲的就是加密导入表,而且要保证文件正常执行。怎么做呢?
      当然这只是我的一个设想,有时间我会做一下试验。
      首先要做的就是找到文件中的导入表并把他整个移动到别的地方,有必要的话也可以加密一下。,然后在原来的导入表的位置构造一个新的导入表,这个导入表里面只有kernel32.dll一个dll和LoadLibraryA,GetProcAddress两个函数,这样pe应该是可以正常加载的。
      然后我们要做的就是添加一段代码,并设置为程序的入口点。这段代码的作用就是到我们保存真正导入表的地方把导入表数据全部抄回到原来的地方,并修改每个函数的地址(地址可以用LoadliabrarA和GetProcAddress得到)。最后跳转到真正的程序入口点。

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 12077

瑞星开机杀毒实现原理

用瑞星好长时间了,用久了,就产生思考了:开机杀毒是怎么回事呢?杀毒软件是怎么实现在系统启动的时候在Blue Screen上写东西的呢?

前几天偶然在网上发现一篇文章《Inside Native Applications》,我恍然大悟。

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 10217