
逆向
云袖er
这个作者很懒,什么都没留下…
展开
-
Debug Blocker
Debug BlockerDebug Blocker技术是进程以调试模式运行自身或其他可执行文件的技术。DebugMe4程序应用了该技术,父进程原创 2020-09-15 10:56:41 · 487 阅读 · 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 · 1018 阅读 · 0 评论 -
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 · 1974 阅读 · 0 评论 -
TLS回调函数
练习:HelloTls.exe运行练习程序,弹出一个消息框,单击确定按钮后,程序终止运行。在OllyDbg调试器中打开并运行HelloTls.exe文件。消息对话框中显示的内容于程序运行时显示的内容不同,单击确定按钮,HelloTls.exe进程随机终止。原因在于,程序运行EP代码前先调用了TLS回调函数,而该回调函数中含有反调试代码,使程序在被调试时弹出“Debugger Detected!“消息对话框。TLSTLS是各线程的独立的数据存储空间,使用TLS技术可在线程内部独立使用或原创 2020-09-03 15:25:32 · 1842 阅读 · 0 评论 -
内核6中的会话
会话会话指的是登陆后的用户环境,大部分OS允许多个用户同时登录,并为每个登录的用户提供独立的用户环境。在Process Explorer的View菜单中选择“Select Columns-Session”后,即可显示当前运行进程所属的会话。系统进程与服务进程都在ID为0的会话(系统会话)中运行。从Windows内核版本6开始,为进一步增强系统安全性,第一个登录系统的用户会话ID被设为1,使之与系统会话区分,分离系统会话与用户会话就取消了它们之间的相互作用,采用这种机制虽然可能引起向下兼容的问题原创 2020-09-02 13:32:44 · 210 阅读 · 0 评论 -
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 · 2514 阅读 · 0 评论 -
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 · 1304 阅读 · 0 评论 -
计算器显示中文数字
通过向计算器进程插入用户的DLL文件,钩取IAT的user32.SetWindowTextW() API地址,负责向计算器显示文本的SetWindowTextW() API被钩取之后,计算器中显示出的将是中文数字,而不是原来的阿拉伯数字。只需先将要钩取的API在用户的DLL中重定义,然后再注入目标进程即可,缺点是,如果想钩取的API不在目标进程的IAT中,那么就无法使用该技术进行钩取操作,换言之,如果要钩取的API是由程序代码动态加载DLL文件而使用的,那么我们将无法使用这项技术钩取它。选定目标AP.原创 2020-08-26 19:48:26 · 2805 阅读 · 0 评论 -
基本的WriteFile()API钩取
该技术借助调试钩取,所以能够进行与用户更具交互性的钩取操作,也就是说,这种技术会向用户提供简单的接口,使用户能够控制目标进程的运行,并且可以自由使用进程内存。关于调试器的说明术语调试器:进行调试的程序。被调试者:被调试的程序。调试器的功能调试器用来确认被调试器者是否正确运行,发现程序错误,调试器能够逐一执行被调试者的指令,拥有对寄存器与内存的所有访问权限。调试器工作原理调试进程经过注册后,每当被调试者发生调试事件时,OS就会暂停其运行,并向调试器报告相应事件,调试器.原创 2020-08-26 14:19:47 · 610 阅读 · 0 评论 -
API钩取
代码逆向分析中,钩取是一种截取信息、更改程序执行流向、添加新功能的技术。使用反汇编器/调试器把我程序的结构与工作原理。开发需要的钩子代码,拥有修改Bug、改善程序功能。灵活操作可执行文件与进程内存,设置钩子代码钩取技术多种多样,其中钩取Win32 API的技术被称为API钩取,它与消息钩取共同广泛应用于用户模式。APIAPI(Application Programming Interface,应用程序编程接口)。Windows OS中,用户程序要使用系统资源(内存、文件、网络、视.原创 2020-08-25 19:53:30 · 695 阅读 · 0 评论 -
使用汇编语言编写注入代码
使用汇编语言能够生成比C语言更自由、更灵活的代码,然后将纯汇编语言编写的ThreadProc()函数注入notepad.exe进程。OllyDbg的汇编命令使用OllyDbg打开asmtest.exe示例文件。在OllyDbg的代码窗口中移动光标到401000地址处,在鼠标右键菜单中选择New origin here菜单命令,执行过后EIP变为401000.在401000地址处执行汇编命令(空格),将弹出输入汇编命令的窗口。编写ThreadProc()函数下面使用汇编语言编写Th.原创 2020-08-25 16:53:27 · 1622 阅读 · 0 评论 -
代码注入
代码注入是一种向目标进程插入独立运行代码并使之运行的技术,它一般调用CreateRomoteThread() API以远程线程形式运行插入的代码,所以也被称为线程注入。首先向目标进程target.exe插入代码与数据,在此过程中,代码以线程过程(Thread Procedure)形式插入,而代码中使用的数据则以线程参数的形式传入,也就是说,代码与数据是分别注入的。DLL注入与代码注入下面这段代码用来弹出Windows消息框:DWORD WINAPI ThreadProc(LPVOID lP.原创 2020-08-25 14:11:01 · 2407 阅读 · 0 评论 -
PE Tools
PE Tools:一款功能强大的PE文件编辑工具,具有进程内存转储、PE文件头编辑、PE重建等丰富多样的功能,并且支持插件。下载地址PE Tools工具可用获取系统中正在运行的所有进程的列表,并将之显示在主窗口中。进程内存转储转储:将内存中的内容转存到文件,这种转储技术主要用来查看正在运行的进程内存中的内容,文件时运行时解压缩文件时,其只有在内存中才以解压缩形态存在,此时借助转储技术可用轻松查看与源文件类似的代码与数据。程序主窗口分为上下两部分,上半部分显示的时正在运行的进程,下半部分显示.原创 2020-08-25 09:03:33 · 5052 阅读 · 0 评论 -
通过修改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 · 1470 阅读 · 0 评论 -
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 · 1708 阅读 · 0 评论 -
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 · 2252 阅读 · 0 评论 -
Windows消息钩取
为了偷看或截取来往信息而在中间设置岗哨的行为称为挂钩,实际上,偷看或操作信息的行为就是人们常说的钩取。消息钩子Windows操作用户向用户提供GUI,它以事件驱动方式工作,在操作系统中借助键盘、鼠标、选择菜单、按钮以及鼠标移动、改变窗口大小与位置等都是事件,发生这样的事件时,OS会把是西安定义好的消息发送给相应的应用程序,应用程序分析收到的信息后执行相应的动作。常规Windows消息流:发生键盘输入事件时,WM_KEYDOWN消息被添加到[OS message queue].OS判断时哪.原创 2020-08-21 18:21:53 · 455 阅读 · 0 评论 -
内嵌补丁练习
内嵌补丁内嵌补丁时内嵌代码补丁的简称,难以直接修改指定代码时,插入并运行被称为洞穴代码的补丁代码后,对程序打补丁。常用于对象程序经过运行时压缩而难以修改的情况。左图描述的是典型的运行时压缩代码,EP代码先将加密的OEP代码解密,然后再跳转到OEP代码处,若要打补丁的代码存在于经过加密的OEP区域是何难打补丁的,因为解码过程中可能会解出完全不同的结果。解决问题的办法是,在文件中另外设置被称为“洞穴代码”的“补丁代码”,EP代码解密后修改JMP指令,运行洞穴代码,再洞穴代码执行补丁代码后(因原创 2020-08-21 15:56:31 · 212 阅读 · 0 评论 -
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 · 376 阅读 · 0 评论 -
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 · 660 阅读 · 0 评论 -
从可执行文件中删除.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 · 818 阅读 · 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 · 638 阅读 · 0 评论 -
调式UPX压缩的notepad程序
notepad.exe的EP代码在010073B2地址处调用了GetModuleHandleA()API,获取notepad.exe程序的ImageBase,然后在010073B4与010073C0地址处比较MZ与PE签名。打开notepad_upx.exe的代码调试器判断该文件为压缩文件,点击是,继续调试。EP地址为01015330,该处即为第二个节区的末端部分,实际压缩的notepad源代码存在于EP地址(01015330)上方。首先使用PUSHAD命令将EAX~EDX寄.原创 2020-08-14 14:12:25 · 217 阅读 · 0 评论 -
运行时压缩
数据压缩经过压缩的文件若能100%恢复,则称该压缩为"无损压缩",若不能恢复原状,则称该压缩为有损压缩。无损压缩用来缩减文件的大小,压缩后的文件更易保管、移动,使用经过压缩的文件之前,需要先对文件解压缩。有损压缩允许压缩文件时损失一定信息,以此换取高压缩率,压缩多媒体文件时,大部分都是用这种有损压缩方式,从压缩特性来看,有损压缩的数据压缩后不能完全恢复原始数据,人类的肉眼与听觉几乎无法觉察到这些多媒体文件在压缩时中损失的数据。运行时压缩器运行时压缩器是针对可执行文件而言的,可执行文件内部还有原创 2020-08-12 16:00:51 · 485 阅读 · 0 评论 -
PE文件格式
PE文件是Windows操作系统下使用的可执行文件格式,它是微软在UNIX平台的COFF基础上制作而成的。PE文件是指32为的可执行文件,也成为PE32,64位的可执行文件称为PE+或PE32+。PE文件格式PE文件种类下图是notepad.exe文件的起始部分,也是PE文件的头部分(PE header),notepad.exe文件运行需要的所有信息都存储在这个PE头中,如何加载到内存、从何处开始执行、运行中需要的DLL有哪些、需要多大的栈/堆内存,大量信息以结构体形式存储在PE头中。.原创 2020-08-12 15:01:35 · 3411 阅读 · 0 评论 -
Example 2
运行运行要破解的程序。消息框显示两条信息:删除所有Nags查找registration code蓝色文字要求使用SmartCheck注册。分析第一个目标使去掉Nag消息框,要去除消息框,只要操作调用消息框的函数部分即可,Visual Basic中调用消息框的函数为MSVBVM50.rtcMsgBox。点击鼠标右键,Search for - All intermodular calls命令,将会列出程序中调用的API目录,选择Destination栏目,根据函数名称排原创 2020-08-10 11:00:54 · 442 阅读 · 0 评论 -
Process Explorer&函数调用方式
Process ExplorerProcess Explorer是Windows操作系统下最优秀的进程管理工具,画面左上侧Parent/Child树结构显示当前运行的进程,右侧显示个进程的PID、CPU占有率、注册信息等,画面下方显示的是加载到所选进程的DLL信息,或者当前选中进程的所有对象句柄。优点:Parent/Child进程树结构。以不同颜色显示进程运行/终止。进程的Suspend/Resume功能。进程终止功能。检索DLL/Handle。函数调用约定栈就是定义在进程中的原创 2020-08-10 09:54:24 · 456 阅读 · 0 评论 -
crackme 2
运行程序这个程序要求我们找出程序的序列号,从单独输入Name来看,生成Serrial时才会用到Name字符串,输入合适的Name与Serial,按Check按钮,才会通过检查。Visual Basic文件的特征VB专用引擎。VB文件使用名为MSVBVM60.dll的VB专用引擎。Ex:显示消息框时,VB代码中要调用MsgBox()函数,其实,VB编辑器真正调用的时MSVBVM60.dll里的rtcMsgBox()函数,在该函数内部通过调用user32.dll里的MessageBoxW(原创 2020-08-09 15:59:15 · 661 阅读 · 0 评论 -
StackFrame
栈帧栈帧就是利用EBP寄存器访问栈内局部变量、参数、函数返回地址等的手段。栈帧对应汇编代码PUSH EBPMOV EBP,ESP...MOV ESP,EBPPOP EBPRETN调试示例:stack frame.exeStack Frame.cpp#include "stdio.h"long add(long a, long b){ long x = a, y = b; return (x + y);}int main(int argc, cha原创 2020-08-09 10:56:19 · 1210 阅读 · 0 评论 -
Example 1
运行abex’ crackme运行点击确定按钮程序弹出Error按钮就终止运行了,下面直接调试分析它。用Olldbg调试EP代码非常短,与我们前面分析的HelloWorld有非常大的不同,这是因为abex’ crackme程序是使用汇编语言编写出来的可执行文件。函数调用顺序.MessageBox(“Make me think your HD is a CD-Rom.”)->GetDriveType(“C:\”)->MessageBox(“Nah… This is n原创 2020-08-10 09:55:17 · 383 阅读 · 0 评论 -
栈
栈在内存中的作用暂时保存函数内的局部变量。调用函数时传递参数保存函数返回后的地址。栈其实是一种数据结构,它按照后进显出的原则存储数据。栈的特征一个进程中,栈顶指针(ESP)初始状态指向栈底端,执行PUSH命令将数据压入栈,栈顶指针就会上移到栈顶端,执行POP命令从栈中弹出数据时,若栈为空,则栈顶指针移动到栈低端。栈是一种由高地址向地址拓展的数据结构。用Olldbg打开stack.exe程序。...原创 2020-08-08 18:48:20 · 398 阅读 · 0 评论 -
IA-32寄存器
什么是寄存器寄存器是CPU内部用来存放数据的一些小型存储区域,与RAM不同,寄存器集成在CPU内部,拥有非常高的读写速度。基本程序运行寄存器通用寄存器就是一种通用型寄存器,用于传送和暂存数据,也可以参与算术逻辑运算,并保存运算结果,I-32中每个通用寄存器的大小都是32位,即4个字节,主要用来保存常量与地址,由特定汇编指令来操作特定寄存器。为了实现对低16位的兼容,个寄存器又可以分为高、低几个独立的寄存器,以EAX为例讲解:EAX:(0~31)32位。AX: (0~15)EAX的低1原创 2020-08-08 17:39:33 · 1121 阅读 · 0 评论 -
大端与小端序
字节序是多字节数据在计算机内存中存储或网络传输时个字节的存储顺序,主要分为两大类,一类时小端序,另一类是大端序。一个示例:BYTE b = 0x12;WORD w = 0x1234;DWORD dw = 0x12345678;char str[] = "abcde";同一个数据的不同字节序保存时有何不同:数据类型为字节型,其长度为一个字节,保存这样的数据时,无论采用大端序还是小端序,字节顺序都是一样的。采用.原创 2020-08-08 16:47:23 · 369 阅读 · 1 评论 -
逆向工程核心原理源代码
链接:https://pan.baidu.com/s/1qvXbeE9AIZyTpVTKIIyuGA提取码:zofw原创 2020-08-08 16:15:44 · 2456 阅读 · 7 评论 -
反汇编修改Hello World程序
编写HelloWorld.exe程序#include "windows.h"#include "tchar.h"int _tmain(int argc, TCHAR *argv[]){ MessageBox(NULL, L"Hello World!", L"www.reversecore.com", MB_OK); return 0;}原创 2020-08-08 16:11:49 · 1547 阅读 · 0 评论