使用OllyDbg快速脱壳
使用OllyDbg快速脱壳
破解教程★★使用OllyDbg快速脱壳★★使用OllyDbg快速脱壳dOSKEY lEE目标:采用ASPACK、UPX加壳的NOTEPAD.EXE工具:OllyDbg 1.09英文版、DUMP插件、PEditor系统:Win98SE关键词:脱壳、OllyDbg、OD、DUMP、PUSHAD、POPAD预备知识大多数壳都有一个共同的特点。
在壳准备开始解压时都要执行PUSHAD,当壳解压完时都要调用POPAD。
到底PUSHAD和POPAD是什么干什么用的呢?其实PUSHAD是用来将所有普通寄存器顺序进栈的指令,POPAD是所有普通寄存器顺序出栈指令。
POPAD的出栈顺序和PUSHAD相反。
壳为了保护寄存器,便在解压前将所有寄存器进栈保护起来,当解压完成后又将寄存器出栈,恢复其原貌,并将IP设置为原程序的OEP。
这样我们就可以通过这个特点快速脱掉多种软件的壳。
ASPACK篇先用ASPACK将NOTEPAD.EXE加壳。
用OllyDbg(以下简称OD)载入。
看见光标停在壳的入口处。
0040D001 > 60 PUSHAD ;壳的入口。
准备开始解压,保护寄存器0040D002 E8 03000000 CALL NOTEPAD.0040D00A……我们不管它,直接向下翻页找POPAD指令。
在40D3AF处找到POPAD……0040D3AF 61 POPAD ;解压完成,恢复寄存器0040D3B0 75 08 JNZ SHORT NOTEPAD.0040D3BA0040D3B2 B8 01000000 MOV EAX, 10040D3B7 C2 0C00 RETN 0C0040D3BA 68 CC104000 PUSH NOTEPAD.004010CC ;返回到原程序OEP处0040D3BF C3 RETN……选定40D3AF这一行,F4运行到此处。
在这里说明壳已经完成解压工作。
并且返回到原程序的入口处。
常见的脱壳方法范文
常见的脱壳方法范文脱壳是指将一个已经加密或保护的程序反编译或解密成原始的可执行文件或源代码的过程。
常见的脱壳方法主要包括静态脱壳和动态脱壳两种方法。
1.静态脱壳方法静态脱壳是指将已经加密或保护的程序文件保存到硬盘,然后通过一些工具进行反编译或解密。
常见的静态脱壳方法有:(1) IDA Pro:IDA Pro是一种功能强大的交互式反汇编软件,可以将二进制文件转换成可读的汇编代码,从而方便进行分析和修改。
(2) OllyDbg:OllyDbg是一种强大的动态调试工具,可以在运行时跟踪程序的执行过程,并在关键处设置断点和查看内存状态,从而找到程序解密和脱壳的关键函数。
(3)PEiD:PEiD是一种可携带的工具,能够识别和解析PE文件,包括可执行文件、动态链接库和驱动程序。
PEiD可以检测程序中使用的加密算法和保护措施,并提供脱壳插件。
2.动态脱壳方法动态脱壳是指通过调试程序的运行过程,找到加密和解密函数的位置和参数,从而在运行过程中直接提取出原始可执行文件或源代码。
常见的动态脱壳方法有:(1) API hooking:API hooking是指通过拦截和替换程序使用的API 函数,来修改程序的行为。
通过在API函数前插入脱壳代码,可以截获加密和解密过程中的数据和密钥,从而得到原始的可执行文件或源代码。
(2)内存转储:内存转储是指将程序在运行时的内存状态保存到文件中,然后利用其他工具对内存进行分析。
通过分析内存中的数据和代码,可以找到加密和解密函数的位置和参数,从而得到原始的可执行文件或源代码。
(3)运行时调试:运行时调试是指通过调试工具在程序运行过程中设置断点、查看内存和寄存器状态,来跟踪程序的执行过程。
通过查看程序的执行流程和数据变化,可以找到加密和解密函数的位置和参数,从而得到原始的可执行文件或源代码。
总结:脱壳方法主要包括静态脱壳和动态脱壳两种方法。
静态脱壳是将已经加密或保护的程序保存到硬盘,然后通过反编译或解密工具进行分析或修改。
脱壳方法总结
脱壳方法总结1. 引言在软件开发和逆向分析领域,脱壳(Unpacking)是指将一个已经被加密或保护的可执行文件还原到其原始状态的过程。
通过脱壳,分析人员可以获取被加密或保护的文件的源代码、算法、关键函数等信息,从而进行后续的逆向工程分析。
本文将总结几种常见的脱壳方法,并介绍它们的原理和使用场景。
2. 静态脱壳方法静态脱壳方法是指在不运行程序的情况下,通过对加密或保护的文件进行静态分析,还原出原始的可执行文件。
2.1. 字节码分析字节码分析是通过对加密或保护的文件进行二进制分析,识别出不同的加密算法或保护机制,从而还原出原始文件。
常见的字节码分析工具有IDA Pro、Radare2等。
2.1.1. IDA ProIDA Pro是一款功能强大的反汇编工具,可以用于对二进制文件进行逆向分析。
通过加载被加密或保护的文件,IDA Pro可以在图形界面下显示程序的反汇编代码。
通过对代码进行分析,可以识别出不同的加密算法或保护机制,从而编写相应的解密脚本。
2.1.2. Radare2Radare2是另一款强大的反汇编工具,它以命令行形式提供了一系列功能,可以对二进制文件进行静态分析。
通过使用Radare2的命令,可以查看程序的反汇编代码,识别出加密或保护机制,并编写相应的解密脚本。
2.2. 调试器调试器是一种用于运行和调试程序的工具,通过对加密或保护的文件进行动态分析,可以观察程序的行为,从而还原出原始文件。
常见的调试器有OllyDbg、GDB等。
2.2.1. OllyDbgOllyDbg是一款运行在Windows平台上的调试器,它可以用于对可执行文件进行动态分析。
通过加载被加密或保护的文件,OllyDbg可以以汇编代码的形式显示程序的执行过程。
通过逐步执行程序,并观察寄存器、堆栈等信息的变化,可以找到解密过程中使用的关键函数和算法。
2.2.2. GDBGDB是一款开源的调试器,可以运行在多种平台上,如Linux、macOS等。
怎样使用脱壳软件
怎样使用脱壳软件使用脱壳软件是指将一个已经加壳和加密的程序进行去壳操作,以便分析其内部机制和功能。
脱壳操作可以帮助安全研究人员和逆向工程师了解加壳程序的运行方式,分析其潜在的恶意行为和风险,并可能发现潜在的漏洞和安全问题。
下面将介绍一般的脱壳过程和常用的脱壳软件。
一、脱壳软件使用的一般过程:2. 选择适合的脱壳软件:根据目标程序的特征和加壳方式选择合适的脱壳工具。
常见的脱壳软件有OllyDbg、x64dbg、IDA Pro等。
3.加载加壳程序到脱壳软件中:将获取到的加壳程序文件加载到所选的脱壳软件中,通常通过点击软件的“打开”或“载入”按钮来实现。
4.设置断点:在脱壳软件中设置断点,断点可以是程序入口点、解密函数等位置,以便在程序执行过程中暂停执行,并进行相应的分析。
5.运行加壳程序:运行被加载的加壳程序,让其开始执行。
通常,加壳程序在运行时会进行解密、反调试等处理,因此需要在适当的时机暂停执行。
6.分析解密过程:当加壳程序暂停时,可以通过逆向工程和调试工具分析解密过程。
可以查看内存中解密后的内容以及解密算法的具体实现,并将其保存下来。
7.脱壳并验证:经过分析和调试,获取到解密后的内容后,可以将其保存并进行验证。
验证过程可以是检查解密后的内容和原程序的差异、运行解密后的程序以验证其功能等。
8.分析被脱壳程序:对脱壳的程序进行进一步分析,可能需要使用其他反汇编工具、动态分析工具和调试工具等进行代码阅读、数据流分析、函数调用跟踪等操作。
9.编写报告和总结:根据脱壳过程和分析结果,编写报告和总结,记录分析过程中发现的问题、风险和建议。
二、常用的脱壳软件:1. OllyDbg:这是一款非常流行的反汇编和调试工具,适用于Windows系统,可用于脱壳加壳的程序、病毒、逆向等操作。
2. x64dbg:这是一款免费的32位和64位反汇编和调试工具,提供了易于使用的界面和强大的功能,适用于Windows系统。
3. IDA Pro:这是一款高级的静态反汇编工具,可用于对加密代码进行分析和逆向工程,支持多种CPU架构和文件格式。
最新使用OllyDbg从零开始Cracking第三十四章-手脱UPX,修复IAT
第三十四章-手脱UPX,修复IA T我们在上一章中给大家介绍了IT(导入表),IA T(输入函数地址表)的相关概念以及原理。
有的人可能会认为,我们只是想修复IA T呀,并不需要知道IA T的具体原理以及它是如何被填充的吧?不是有现成的IA T自动修复工具吗?可以很明确的告诉大家,了解操作系统是如何填充IA T的过程非常有必要的。
因为很多壳会检测这些常用的IA T修复工具,致其不能正常运行,在这种情况下,我们就需要自己进行相应的手工修复。
本章我们还是用最简单的CRACKME U PX作为例子,我们将对其进行脱壳以及修复IA T,让其能正常运行。
首先第一步我们来定位OEP,我们用OD加载CRACKME UPX。
这里我们用ESP定律来定位OEP,现在我们停在了入口点处,单击F7键执行PUSHAD。
在ESP寄存器值上面单击鼠标右键选择-Follow in Dump。
就可以在数据窗口中定位到刚刚PUSHAD指令保存到堆栈中的寄存器环境了,我们选中前4个字节,我们通过单击鼠标右键选择Breakpoint-Hardware,on access-Dword给这4个字节设置硬件访问断点。
运行起来,马上就断在了JMP OEP指令处。
我们直接按F7键单步到OEP处。
好了,现在我们处于OEP处,原程序区段已经解密完毕,我们现在可以进行dump了。
前面已经提到过,有很多dump的工具,OD有一个款插件OllyDump的dump效果也不错。
上一章中我们使用LordPE来进行dump 的,这里我们来使用另外一个工具PE TOOLS来进行dump。
我们用PE-TOOLS定位到CRACKME U PX所在的进程。
这里这个crackme.exe就是,因为我忘了把那个重命名的CRACKME UPX放到哪里去了,所以我又重新弄了一个新的,忘了改名字,直接命名为原来的名字crackme.exe了,当前这个crackme.exe进程停在了OEP处。
普通壳的脱壳方法和脱壳技巧
普通壳的脱壳方法和脱壳技巧脱壳是指将一个已经打包的可执行文件(通常是二进制文件)恢复为原始的、可以读取和修改的形式。
这在软件逆向工程、安全审计和病毒分析等领域都是非常常见的操作。
下面我将为你介绍普通壳的脱壳方法和脱壳技巧。
一、普通壳的脱壳方法1.静态脱壳静态脱壳是指对目标文件进行分析,找到壳的解密和载入代码,然后将其解密出来,恢复原始的可执行文件。
- 调试器脱壳:使用调试器(如OllyDbg、IDA Pro等)来单步执行目标程序,找到壳的解密代码,并通过调试器的内存分析功能来寻找待解密的数据。
一旦找到解密的算法和密钥,就可以将目标文件完全解密出来。
- 静态分析脱壳:通过静态分析工具(如IDA Pro、Hopper等)来逆向目标文件,找到壳的解密算法和密钥,然后将其解密出来。
2.动态脱壳动态脱壳是指在目标程序运行时,通过对程序的运行过程进行监控和分析,找到壳的解密和载入代码,并将其解密出来,恢复原始的可执行文件。
-API钩取脱壳:通过使用一个DLL注入到目标程序的地址空间中,然后使用API钩子来监控API函数的调用,找到壳解密代码的入口点。
一旦找到壳解密代码的起始地址,就可以通过调试器执行目标程序,并在合适的时机将解密出来的代码或数据导出。
- 内存转储脱壳:通过在目标程序的执行过程中,使用内存转储工具(如winhex、ollydump等)将目标程序的内存转储出来,然后使用静态脱壳的方法对内存转储文件进行分析。
二、普通壳的脱壳技巧1.加载器分析在进行脱壳之前,首先要分析目标文件中的加载器。
加载器是壳程序的一部分,用于解压和载入真正的可执行文件。
通过分析加载器,可以确定载入代码和解密算法的位置,并推导出解密算法的密钥。
2.寻找壳代码的入口点在进行脱壳时,需要找到壳代码的入口点,即壳程序开始执行的位置。
可以通过调试器或者静态分析工具来寻找入口点,并标记下来以备后续使用。
3.内存和断点设置通过内存和断点设置,在目标程序运行过程中定位到关键的内存位置。
Armadillo标准加壳的程序的脱壳和引入表修复方案
Armadillo标准加壳的程序的脱壳和引入表修复方案作者:jwh51 来源:看雪论坛加入时间:2003-6-14用过ARMADILLO的人都知道,用它加壳有两种方式,一是使用COPY MEMII,一是标准加壳.用COPY MEMII 的一般可用DILLODUMP脱(当然也有时脱不了),而用标准加壳用DILLODUMP是脱不了的,这是DILLODUMP中的说明,我们来看看:NOTE: This only really works on programs that are at least protected to some extent.For example, it will not work on "Standard Protection" aramadillo files, which isn'ta big deal, because for those you do not need to have any "advanced" tools to dump. I planon released a "lite" version to support those files soon..本人E文很菜,只能了解大意,是说标准加壳的脱壳比较简单,不需用工具.但是对我等菜来说,还是要用工具的好,不过既然现在还没有,还是手脱吧.脱壳目标:SoundEdit pro v1.30.634,5月29日更新.下载:/getit.asp?pid=6&server=/programs/sep13.exe加壳程序:Armadillo v3.00a工具:OLLYDBG,LOADPE,importRECSoundEdit是一个声音编辑软件(国外的),采用了ARMADILLO的KEY加密,启动要你输入KEY,否则要等N 秒才能让你启动,还有30天试用期,所以,如果脱了壳,上述现象都将没有了.现在开始脱壳历程.!!第一步,DUMP出程序:用OLLYDBG载入程序.在调试选项中忽略所有异常,这样可以少按SHIFT+F9BP V irtualProtect,F9运行,这时会有异常,用SHIFT+F9过程序会断下来,这时你不停按F9,一般在第5次会出现注册框,OK后再次中断,这时你要注意堆棧开始记下F9的次数了.我这第20下时在堆棧出现如下信息: 0012F214 7342F406 /CALL to V irtualProtect from MSVBVM60.7342F400说明程序,已经运行了.(VB是先运行MSVBVM60.DLL的,在其中也用调用V irtualProtect,如果是DELPHI等程序,可一直F9到程序运行为止)现在重新载入程序,到出现这个信息的前一次中断停下来,然后按几次CTRL+F9到程序中(也就是地址较低的地方,一般都是004*****,005*****,本程序在这:004DA060 83C4 04 ADD ESP, 4004DA063 8945 FC MOV DWORD PTR SS:[EBP-4], EAX004DA066 837D B8 00 CMP DWORD PTR SS:[EBP-48], 0004DA06A 74 0A JE SHORT SoundEdi.004DA076004DA06C 8B45 B8 MOV EAX, DWORD PTR SS:[EBP-48]004DA06F 50 PUSH EAX004DA070 FF15 E8615000 CALL DWORD PTR DS:[<&USER32.DestroyWi>; USER32.DestroyWindow 004DA076 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]004DA079 8BE5 MOV ESP, EBP004DA07B 5D POP EBP004DA07C C3 RETN这时小心地用F8,因为有一堆的JMP,JNZ,JO等,不过也用不了多久的,大概20多次就可来到这:004DB483 61 POP AD004DB484 6A 00 PUSH 0004DB486 E8 6E000000 CALL SoundEdi.004DB4F9004DB48B 83C4 04 ADD ESP, 4004DB48E 6A 00 PUSH 0004DB490 E8 46830000 CALL SoundEdi.004E37DB004DB495 83C4 04 ADD ESP, 4004DB498 837D E4 01 CMP DWORD PTR SS:[EBP-1C], 1004DB49C 75 11 JNZ SHOR T SoundEdi.004DB4AF004DB49E 68 E8965000 PUSH SoundEdi.005096E8004DB4A3 FF15 0C975000 CALL DWORD PTR DS:[50970C] ,这个CALL用F7跟进004DB4A9 83C4 04 ADD ESP, 4004DB4AC 8945 E4 MOV DWORD PTR SS:[EBP-1C], EAX004DB4AF 68 0C9E4D00 PUSH SoundEdi.004D9E0C在4db4a3这个CALL用f7跟进,然后继续F8,几次后就来到这:00D0B5E0 /75 29 JNZ SHOR T 00D0B60B00D0B5E2 |E8 A05AFFFF CALL 00D0108700D0B5E7 |FF76 04 PUSH DWORD PTR DS:[ESI+4]00D0B5EA |8BF8 MOV EDI, EAX00D0B5EC |A1 CCEED100 MOV EAX, DWORD PTR DS:[D1EECC]00D0B5F1 |FF76 08 PUSH DWORD PTR DS:[ESI+8]00D0B5F4 |8B48 70 MOV ECX, DWORD PTR DS:[EAX+70]00D0B5F7 |3348 50 XOR ECX, DWORD PTR DS:[EAX+50]00D0B5FA |6A 00 PUSH 000D0B5FC |3348 34 XOR ECX, DWORD PTR DS:[EAX+34]00D0B5FF |03F9 ADD EDI, ECX00D0B601 |E8 815AFFFF CALL 00D0108700D0B606 |50 PUSH EAX00D0B607 |FFD7 CALL EDI ; SoundEdi.004059B0看到最后这个CALL EDI吗,004059B0就是程序的OEP了,我们F7跟进:00405996 - FF25 3C114000 JMP DWORD PTR DS:[40113C]0040599C - FF25 8C104000 JMP DWORD PTR DS:[40108C]004059A2 - FF25 B0104000 JMP DWORD PTR DS:[4010B0]004059A8 - FF25 E8114000 JMP DWORD PTR DS:[4011E8]004059AE 0000 ADD BYTE PTR DS:[EAX], AL004059B0 68 787D4000 PUSH SoundEdi.00407D78 ,这是OEP了,004059B5 E8 EEFFFFFF CALL SoundEdi.004059A8呵,典型的VB代码.拿出LOADPE,快快DUMP吧.我们把DUMP的程序保存为DUMPED.EXE第二步,引入表的修复以前总以为它的修复很难,但实际上只要修改程序流程,完全可得到正确的引入表的.1.可先用importREC试试,有一个指针无效,如果CUT程序退出时会出错,所以要修复它.通过它我们可看到iat 的rva为1000,错误指针为1030,(如果很多指针无效,只要记住一个无效的RV A就可以了)2.重新载入程序,BP V irtualProtect,断下后f9,注意堆棧的变化,当出现如下信息时要注意了:0012DB28 00D0887E /CALL to V irtualProtect from 00D088780012DB2C 00401000 |Address = SoundEdi.004010000012DB30 000CB000 |Size = CB000 (831488.)0012DB34 00000004 |NewProtect = PAGE_READWRITE0012DB38 0012F034 \pOldProtect = 0012F034它将往401000也就是IAT所在的地方写入信息:这是再按一下F9,又停下来,D 401000,我们可看到,IA T所在的位置已经写入了东西,还不是dll的地址,还记得那个无效指针的地址吗:401030,我们清掉断点,然后在在内存定位到401030处,"右键-->breakpoint-->hardware on write-->dword",然后按F9运行,程序停了下来:00D0942F 8B85 5CFBFFFF MOV EAX, DWORD PTR SS:[EBP-4A4]00D09435 8B8D 48F9FFFF MOV ECX, DWORD PTR SS:[EBP-6B8]00D0943B 8908 MOV DWORD PTR DS:[EAX], ECX00D0943D 8B85 5CFBFFFF MOV EAX, DWORD PTR SS:[EBP-4A4] ; 停在这00D09443 83C0 04 ADD EAX, 400D09446 8985 5CFBFFFF MOV DWORD PTR SS:[EBP-4A4], EAX00D0944C ^ E9 78FEFFFF JMP 00D092C9看到上述二行:MOV ECX,DWORD PRT [EBP-6B8],我们再往上找几行可看到这个语句:00D093E3 E8 F8C0FEFF CALL 00CF54E000D093E8 8985 48F9FFFF MOV DWORD PTR SS:[EBP-6B8], EAX00D093EE 83BD 48F9FFFF 0>CMP DWORD PTR SS:[EBP-6B8], 000D093F5 75 38 JNZ SHORT 00D0942F在第二行也有个[EBP-6B8],注意前面这个CALL,我们去看一看00CF54E0 55 PUSH EBP00CF54E1 8BEC MOV EBP, ESP00CF54E3 53 PUSH EBX00CF54E4 56 PUSH ESI00CF54E5 57 PUSH EDI00CF54E6 33FF XOR EDI, EDI00CF54E8 33DB XOR EBX, EBX00CF54EA 66:F745 0E FFFF TEST WORD PTR SS:[EBP+E], 0FFFF00CF54F0 75 03 JNZ SHORT 00CF54F500CF54F2 8B5D 0C MOV EBX, DWORD PTR SS:[EBP+C]00CF54F5 57 PUSH EDI00CF54F6 FF15 A430D100 CALL DWORD PTR DS:[D130A4] ; kernel32.GetModuleHandleA 00CF54FC 3945 08 CMP DWORD PTR SS:[EBP+8], EAX00CF54FF 75 07 JNZ SHOR T 00CF550800CF5501 BE C053D100 MOV ESI, 0D153C000CF5506 EB 60 JMP SHOR T 00CF556800CF5508 393D 9859D100 CMP DWORD PTR DS:[D15998], EDI00CF550E B9 9859D100 MOV ECX, 0D1599800CF5513 74 3C JE SHORT 00CF555100CF5515 8B35 B8B1D100 MOV ESI, DWORD PTR DS:[D1B1B8]00CF551B A1 CCEED100 MOV EAX, DWORD PTR DS:[D1EECC]00CF5520 F641 08 01 TEST BYTE PTR DS:[ECX+8], 100CF5524 74 0E JE SHORT 00CF553400CF5526 8B50 70 MOV EDX, DWORD PTR DS:[EAX+70]00CF5529 3350 60 XOR EDX, DWORD PTR DS:[EAX+60]00CF552C 3350 3C XOR EDX, DWORD PTR DS:[EAX+3C]00CF552F F6C2 80 TEST DL, 8000CF5532 75 13 JNZ SHORT 00CF554700CF5534 8B50 70 MOV EDX, DWORD PTR DS:[EAX+70]00CF5537 3350 64 XOR EDX, DWORD PTR DS:[EAX+64]00CF553A 3350 58 XOR EDX, DWORD PTR DS:[EAX+58]00CF553D 3350 20 XOR EDX, DWORD PTR DS:[EAX+20]00CF5540 3316 XOR EDX, DWORD PTR DS:[ESI]00CF5542 3955 08 CMP DWORD PTR SS:[EBP+8], EDX00CF5545 74 1E JE SHORT 00CF556500CF5547 83C1 0C ADD ECX, 0C00CF554A 83C6 04 ADD ESI, 400CF554D 3939 CMP DWORD PTR DS:[ECX], EDI00CF554F ^ 75 CF JNZ SHORT 00CF552000CF5551 FF75 0C PUSH DWORD PTR SS:[EBP+C]这里面有几个跳转,其中最后一个CF554F是往上跳的.我们看一个就可发现:00CF5513 74 3C JE SHORT 00CF5551,这个跳正好可跳出这个循环.只要改这个跳,就不会破坏引入表了.再次重新载入,BP V irtualProtect,出现注册框后OK,程序再断下来,这时清除断点(包括硬件断点),CTRL+F9回程序领空,把CF5513的74 3c改成eb 3c,按F9运行,程序运行后打开importREC,选中程序,入口填入59b0,-->IA T自动搜索-->获得输入信息",如果还有无效的大可放心的cut,因为它们本来就不是有用指针了(也可能是importREC把IA T的大小判断错了),.然后修复脱壳后的文件.OK,大功告成.测试了下脱壳后的程序,运行正常,那个烦人的注册框没有,时间限制也注册了,别说30天,就是30年都没问题.。
脱壳基础知识入门
脱壳基础知识入门现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。
越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。
除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。
壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。
另外,论坛现在两极分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档,为了鼓励更多新人加入脱壳的行列,很有必要将壳有关知识总结一下。
主页提供的教学确实有点过时了,己到非更新不可了。
相对于密码学算法,脱壳并不难,只要肯花时间,短期内还是比较容易取得成绩的。
第一课 PE格式要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。
Microsoft Visual C++提供的WINNT.H里有PE数据结构的完整定义。
推荐文档:ah007翻译的“PE文件格式”1.9版qduwg翻译的PE文件格式Iczelion's 的PE文件格式PE结构各字段偏移参考学习PE格式的方法是自己先准备一个十六进制工具,如HexWorkshop,WinHex,用这些工具打开一个EXE文件对照着学。
强烈推荐你用Stud_PE v.2.2.0.5这款工具辅助学习PE格式。
PE格式学习的重点是在输入表(Import Table)这块。
Stud_PE工具界面:PE结构图:第二课 SEH技术结构化异常处理(Structured Exception Handling,SEH)是Windows操作系统处理程序错误或异常的技术。
SEH是Windows操作系统的一种系统机制,与特定的程序设计语言无关。
OllyDBG破解工具入门教程
OllyDBG破解工具入门教程一、OllyDBG 的安装与配置OllyDBG 1.10 版的发布版本是个 ZIP 压缩包,只要解压到一个目录下,运行 OllyDBG.exe 就可以了。
汉化版的发布版本是个 RAR 压缩包,同样只需解压到一个目录下运行 OllyDBG.exe 即可:OllyDBG 中各个窗口的功能如上图。
简单解释一下各个窗口的功能,更详细的内容可以参考 TT 小组翻译的中文帮助:反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标或显示标题 来进行切换是否显示。
用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口:显示当前所选线程的 CPU 寄存器内容。
同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
数据窗口:显示内存或文件的内容。
右键菜单可用于切换显示方式。
堆栈窗口:显示当前线程的堆栈。
要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。
启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的 选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签:因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。
还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。
上图中其它的选项可以保留为默认,若有需要也可以自己修改。
修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。
在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。
有人可能知道插件的作用,但对那个 UDD 目录不清楚。
使用OllyDbg从零开始Cracking 第三十一章-脱壳简介
第三十一章-脱壳简介原定本章是要介绍P-CODE的Part3,然后再介绍脱壳的。
但是很多朋友跟我说P-CODE,WKT的教程有很多,并且现在P-CODE的应用程序已经很少了,没有必要过多的介绍P-CODE,希望我能够多讲讲壳,提高大家脱壳的能力。
所以说本章我们开始讨论壳,首先要给大家明确一点,壳的种类繁多(PS:这里说种类繁多,并不准确,种类也就那么几种,压缩壳,加密壳,虚拟机壳,所以说应该是数量多,之前发过一篇帖子收集了T4社区的各种脱壳脚本,充斥着各种各样的壳,大家可以看看),所以接下来的章节,我不会介绍所有的壳,只会给大家介绍壳的基本概念以及原理,还有几个具体壳的实例,大家不要指望看完本教程将能搞定所有壳,本教程的目的在于帮助大家理解壳的原理,锻炼大家解决未知壳的能力,大家要学会举一反三,触类旁通。
本章我们将介绍壳的基本概念,这对我们后面脱壳是大有裨益的,大家不要因为简单,就忽视它,后面章节,我们会介绍一些手工脱壳的实例。
首先大家可能会问为什么要给程序加壳?(PS:其实地球人都知道,嘿嘿)我们知道一个未加壳或者脱过壳的程序修改起来很方便,但是如果一个加过壳或者自修改的程序,要想修改它就比较困难了,我们在入口点(PS:这里指的入口点是壳的入口点)处修改程序是不起作用的,只有当壳把原程序区段解密完成后修改才能起作用。
加过壳的程序,原程序代码段通常是被加密过的,我们想修改它就不那么容易了。
加壳程序给目标程序加壳的原理通常是加密/压缩原程序各个区段,并且给目标程序添加一个或者多个区段作为原程序的引导代码(壳代码),然后将原程序入口点修改为外壳程序的入口点。
如果我们将加过壳的程序用OllyDbg加载的话,OllyDbg会停在壳的解密例程的入口点处,由此开始执行。
壳的解密例程(外壳程序)首先会定位加密/压缩过的原程序的各个区段,将其解密/解压,然后跳转至OEP(程序未加壳时的入口点)处开始执行。
现在我们来看一个最简单的壳,UPX壳,大家可以去下面网址中下载一个GUI版,名称为GUiPeX_Setup。
Ollydbg破解教学之万能断点篇
Ollydbg破解教学之万能断点篇(图)安全中国 更新时间:2008-9-6 0:30:57 责任编辑:流火热点:终于有一点时间总结一下OD破解的经验,有许多大侠们都认为OD不能下万能断点,可是有些软件的破解需要用到万能断点,以前一直没有这方面的资料,有的只是OD不能下万能断点的断言,一时心恢之极,可是我原来用TRW和SICE用的挺好,谁知系统又跟我闹矛盾,一用TRW和SICE就死机,没办法我现在只能用OD,我写的一些破解文章都是用OD破的,反复试验,我终于发现OD也能下万能断点,在我以前写的一些文章中好象有一篇简单提到过,但没有说的很详细,这次静下心,想写一点东西,送给我心爱的组织DFCG吧,我的破解是从DFCG组织起步的,很感谢DFCG的高手们的帮助,在此说声谢谢!为了更明确,这次破解所使用的调试器OD是从看雪论坛临时下载的OD1.09的汉化版,没有使用我自己手头经过改造的OD,在此也感谢看雪论坛,这里真的有很多高手,在这个论坛我也学到了很多.这次破解的对象是超级XX王,为保护国产软件我隐去了软件相关信息,我不想给自己带来麻烦,现在工作很忙,能少一点麻烦就尽量少一点吧.破解作者yzez[DFCG]破解工具ollydbg1.09汉化版,看雪论坛下载.破解目的本不为破解而破解,只因为技术而破解破解环境WINDOWS XP,这个我已经在98和XP下各做了两次,贴图和我这篇文章是在XP系统下完成的.破解过程1.检查了一下,该程序无壳,C++编译,用W32DSM反汇编一堆乱码,我倒!那就动态调试吧!用ollydbg1.09载入程序,这次我将教你们如何用OD下万能断点,过程我尽可能详细一点,下面请看.载入程序选OD菜单栏上的插件-----命令行(快捷键是ALT+F1),在弹出的窗口中输入万能断点命令:bpx hmemcpy,按ENTER键,结果又出现一个对话框:Intermodular calls00401164 CALL DWORD PTR DS:[<&USER32.GetWindowRect>] USER32.GetWindowRect0040118F CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect00401279 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect004013E1 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect0040190A CALL DWORD PTR DS:[<&KERNEL32.GetThreadLocale>] kernel32.GetThreadLocale0040191C CALL DWORD PTR DS:[<&KERNEL32.GetLocaleInfoA>] kernel32.GetLocaleInfoA还有很多,我就省略了,在这个框里右键单击,出现一个对话框,选中在每个命令中设置断点(热键是S),单击,你看每一行都变成了红色吧,这表示全部设下断点了,后面的过程很烦燥,你要一边按F9,边按F2把一些无用的断点去掉,有一点耐心吧,当然也可以不这样做,但遇到断点跳不过的时候,你就得按F2把这个断点去掉.感觉在这一点上OD比不上TRW和SICE,到出现注册信息框后,你要输入注册信息,然后按确定,程序被断下来,我的序列号是:GK342QZ0C6RE03L,我输入试验码:123456789098765.程序中断在下面:00471F71 CALL DWORD PTR DS:[<&USER32.GetWindowTex>****按确定后回到OD程序中断在此,按F8走,在此还没有到关键处!*****************************************************注意这里会循环两次,分别处理序列号和试验码,按F8走00471F77 LEA ECX,DWORD PTR DS:[EAX+1]00471F7A PUSH ECX00471F7B MOV ECX,DWORD PTR SS:[EBP+10]00471F7E PUSH EAX00471F7F CALL SuperPIM.0043E15D00471F84 PUSH EAX00471F85 PUSH ESI00471F86 CALL DWORD PTR DS:[<&USER32.GetWindowTex>00471F8C MOV ECX,DWORD PTR SS:[EBP+10]00471F8F PUSH -100471F91 CALL SuperPIM.00401D6A00471F96 JMP SHORT SuperPIM.00471FA300471F98 MOV EAX,DWORD PTR SS:[EBP+10]00471F9B PUSH DWORD PTR DS:[EAX]00471F9D PUSH ESI00471F9E CALL SuperPIM.00470B6100471FA4 POP ESI00471FA5 POP EBP00471FA6 RETN 0C*************************************程序第二次循环后最后会返回到0040FE99下面看代码:----------------------------------------------------------------------------------------------------------0040FE99 LEA EAX,DWORD PTR SS:[EBP-14]****第二次循环后会返回到这里,注意这就是我们要找的关键地方,按F8往下!0040FE9C PUSH EAX0040FE9D CALL SuperPIM.00433D92***********这就是关键CALL,按F7追进,一定要进,因为算法就在这里面!0040FEA2 POP ECX0040FEA3 AND DWORD PTR SS:[EBP-4],00040FEA7 LEA ESI,DWORD PTR DS:[EDI+74]0040FEAA MOV EAX,DWORD PTR DS:[ESI]******试验码入EAX0040FEAC CMP DWORD PTR DS:[EAX-C],0******比较试验码输入了吗?0040FEB0 JE SHORT SuperPIM.0040FF2F******没有输入就跳走,一跳就失败!0040FEB2 PUSH 280040FEB4 LEA EAX,DWORD PTR SS:[EBP-18]0040FEB7 PUSH ESI0040FEB8 PUSH EAX0040FEB9 CALL SuperPIM.0042CEC8**********此CALL对输入的注册码进行处理,得到一个40位的长字符串,有兴趣自己跟,******************************************我已是头晕的很,不想跟进!0040FEBE LEA ECX,DWORD PTR SS:[EBP-14]0040FEC1 PUSH ECX0040FEC2 PUSH EAX0040FEC3 CALL SuperPIM.0040F9B7**********此CALL对序列号处理,也是得到一个40位的长字符串0040FEC8 MOV ECX,DWORD PTR SS:[EBP-18]0040FECB ADD ESP,140040FECE ADD ECX,-100040FED1 MOV BYTE PTR SS:[EBP-D],AL0040FED4 CALL SuperPIM.00401B5D**********此CALL进行比较,注册码不对,值为00040FED9 CMP BYTE PTR SS:[EBP-D],0*******比较是0吗?0040FEDD JE SHORT SuperPIM.0040FF2F******相等就跳,跳就失败,所以一定不能跳!0040FEDF PUSH 0**************************不跳往下你就成功了!下面代码省略!...............................................................省略若干代码!.........................=============================================================================================================************************************关键CALL的代码!*******************************************************00433D92 MOV EAX, SuperPIM.0049844E****追进关键CALL后我们来到这里!00433D97 CALL SuperPIM.0045090000433D9C PUSH ECX00433D9D PUSH ECX00433D9E AND [LOCAL.5], 000433DA2 LEA EAX, [LOCAL.5]00433DA5 PUSH EAX00433DA6 CALL SuperPIM.00433CA9********此CALL根据电脑硬件信息得到你的序列号,有兴趣跟吧!我是没有兴趣!00433DAB AND [LOCAL.1], 000433DAF PUSH 1400433DB1 LEA EAX, [LOCAL.5]00433DB4 PUSH EAX00433DB5 LEA EAX, [LOCAL.4]00433DB8 PUSH EAX00433DB9 CALL SuperPIM.0042CEC8*******算法CALL(1),按F7跟进!00433DBE PUSH 2800433DC0 LEA EAX, [LOCAL.4]00433DC3 PUSH EAX00433DC4 PUSH [ARG.1]00433DC7 MOV BYTE PTR SS:[EBP-4], 100433DCB CALL SuperPIM.0042CEC800433DD0 MOV ECX, [LOCAL.4]00433DD3 ADD ESP, 1C00433DD6 ADD ECX, -10*****************************省略N行代码!********************************************************0043454B RETN===========================================================================================================***********************************算法CALL!*********************************************************0042CEC8 MOV EAX, SuperPIM.00497B52********追进算法CALL我们在这里!0042CECD CALL SuperPIM.004509000042CED2 SUB ESP, 140042CED5 PUSH EBX0042CED6 PUSH ESI0042CED7 XOR EBX, EBX0042CED9 PUSH EDI0042CEDA MOV [LOCAL.8], EBX0042CEDD CALL SuperPIM.004639B50042CEE2 MOV EDX, DWORD PTR DS:[EAX]0042CEE4 MOV ECX, EAX0042CEE6 CALL DWORD PTR DS:[EDX+C]0042CEE9 LEA EDI, DWORD PTR DS:[EAX+10]0042CEEC MOV [LOCAL.4], EDI0042CEEF MOV EAX, [ARG.2]0042CEF2 MOV EAX, DWORD PTR DS:[EAX]*******序列号:GK342QZ0C6RE03L 移入EAX0042CEF4 MOV ESI, DWORD PTR DS:[EAX-C]*****序列号的位数15(十六进制值是F)送入ESI0042CEF7 CMP ESI, EBX**********************比较ESI和EBX,ESI的值是F即序列号位数,EBX的初始值是00042CEF9 MOV [LOCAL.1], EBX0042CEFC MOV [LOCAL.8], ESI0042CEFF JE SuperPIM.0042CFB2*************相等就跳,这里当然不相等,所以就不会跳!0042CF05 MOV EAX, [ARG.3]******************常数14(十进制值是20)送入EAX0042CF08 CMP EAX, ESI**********************比较EAX和ESI,即14和F 比较!0042CF0A MOV [LOCAL.6], EAX0042CF0D JG SHORT SuperPIM.0042CF12*******大于就跳!0042CF0F MOV [LOCAL.6], ESI0042CF12 CMP [LOCAL.6], EBX****************跳到这里!比较14和0 0042CF15 JLE SuperPIM.0042CFB2*************小于就跳,这里当然不会小!所以不跳!0042CF1B MOV EAX, EBX**********************0移入EAX0042CF1D CDQ***********************************EDX清0,准备计算!0042CF1E IDIV ESI***************************除,EAX/ESI ,EAX的值是0,ESI的值存放序列号的位数F0042CF20 MOV EAX, [ARG.2]******************赋EAX地址值0042CF23 MOV EAX, DWORD PTR DS:[EAX]*******序列号:GK342QZ0C6RE03L 移入EAX0042CF25 PUSH EBX***************************EBX入栈0042CF26 MOV AL, BYTE PTR DS:[EDX+EAX]*****序列号的第一位G(ASCII码值47)入AL0042CF29 MOV BYTE PTR SS:[EBP-1C], AL******保存值470042CF2C PUSH [LOCAL.7]0042CF2F CALL SuperPIM.0042CD8E***************************算法CALL(2)*****************************************************0042CD8E PUSH EBP0042CD8F MOV EBP, ESP0042CD91 PUSH ECX*************************G的ASCII码值47入ECX 0042CD92 MOVZX EAX, BYTE PTR SS:[EBP+8]****扩展成000000470042CD96 MOV ECX, [ARG.2]****************赋ECX的初始值为00042CD99 MOV [LOCAL.1], EAX0042CD9C MOV EAX, ECX********************ECX的值移入EAX0042CD9E IMUL EAX, ECX********************EAX=EAX*ECX=0*00042CDA1 LEA EAX, DWORD PTR DS:[EAX+EAX*2+7]**EAX+EAX*2+7的值7给EAX0042CDA5 IMUL EAX, ECX********************EAX=EAX*ECX=7*00042CDA8 ADD EAX, 0D*********************EAX=EAX+0D=D0042CDAB IMUL EAX, ECX********************EAX=EAX*ECX=D*0=00042CDAE PUSH ESI*************************序列号位数F入栈!0042CDAF LEA ESI, DWORD PTR DS:[ECX+5]0042CDB2 PUSH ESI0042CDB3 MOV [ARG.1], EAX0042CDB6 LEA EAX, [ARG.1]0042CDB9 PUSH 40042CDBB PUSH EAX0042CDBC CALL SuperPIM.0042CD2E***********这个CALL也在计算,我实在不想跟进!0042CDC1 PUSH ESI0042CDC2 LEA EAX, [LOCAL.1]0042CDC5 PUSH 40042CDC7 PUSH EAX0042CDC8 CALL SuperPIM.0042CD5E**********这个CALL也是计算CALL,烦!不跟了!0042CDCD MOV EAX, [ARG.1]0042CDD0 ADD ESP, 180042CDD3 XOR EAX, [LOCAL.1]*************这里赋EAX的值38000002 0042CDD6 POP ESI0042CDD7 LEAVE0042CDD8 RETN======================================================================= ==算法CALL(2)结束==================0042CF34 POP ECX0042CF35 POP ECX0042CF36 PUSH 2B***************************常数2B入栈!0042CF38 XOR EDX, EDX0042CF3A POP ECX**************************把常数2B赋给ECX0042CF3B DIV ECX**************************除,EAX/ECX=38000002/2B=014D6535,余数1B入EDX0042CF3D MOV ECX, EDX*********************结果1B入ECX0042CF3F ADD CL, 30***********************CL=CL+30=1B+30=4B(对应的字符串是K)0042CF42 CMP CL, 39***********************比较是不是数字90042CF45 MOV BYTE PTR SS:[EBP-14], CL*****保存字符串K0042CF48 JLE SHORT SuperPIM.0042CF55******小于就跳走!0042CF4A CMP CL, 41***********************比较是不是A0042CF4D JGE SHORT SuperPIM.0042CF55******大于就跳走0042CF4F ADD CL, 0F60042CF52 MOV BYTE PTR SS:[EBP-14], CL0042CF55 CMP EBX, [ARG.3]*****************跳到这里!比较0和140042CF58 JGE SHORT SuperPIM.0042CF67******大于等于就跳走!0042CF5A PUSH [LOCAL.5]0042CF5D LEA ECX, [LOCAL.4]0042CF60 CALL SuperPIM.00417EAF0042CF65 JMP SHORT SuperPIM.0042CFA5******无条件跳0042CF67 MOV EAX, EBX0042CF69 CDQ0042CF6A IDIV [ARG.3]0042CF6D MOVSX ECX, CL0042CF70 PUSH 2B0042CF72 MOV ESI, EDX0042CF74 MOVSX EAX, BYTE PTR DS:[ESI+EDI]0042CF78 LEA EAX, DWORD PTR DS:[EAX+ECX-60]0042CF7C CDQ0042CF7D POP ECX0042CF7E IDIV ECX0042CF80 ADD DL, 300042CF83 CMP DL, 390042CF86 MOV BYTE PTR SS:[EBP-14], DL0042CF89 JLE SHORT SuperPIM.0042CF960042CF8B CMP DL, 410042CF8E JGE SHORT SuperPIM.0042CF960042CF90 ADD DL, 0F60042CF93 MOV BYTE PTR SS:[EBP-14], DL0042CF96 PUSH [LOCAL.5]0042CF99 LEA ECX, [LOCAL.4]0042CF9C PUSH ESI0042CF9D CALL SuperPIM.0042CE4B0042CFA2 MOV ESI, [LOCAL.8]0042CFA5 MOV EDI, [LOCAL.4]***************上面跳到这里!0042CFA8 INC EBX*************************EBX加10042CFA9 CMP EBX, [LOCAL.6]**************比较1和14 0042CFAC JL SuperPIM.0042CF1B***********小于就跳,循环,序列号只有15位,这里循环20次,取完后又从第一位取出!************************************循环结束后得到的值是:K3L2LPBDW1F2H4B8S0UY这就是我们要的注册码!0042CFB2 MOV ECX, [ARG.1]0042CFB5 LEA EAX, [LOCAL.4]0042CFB8 PUSH EAX0042CFB9 CALL SuperPIM.00401F360042CFBE LEA ECX, DWORD PTR DS:[EDI-10]0042CFC1 CALL SuperPIM.00401B5D0042CFC6 MOV ECX, [LOCAL.3]0042CFC9 MOV EAX, [ARG.1]0042CFCC POP EDI0042CFCD POP ESI0042CFCE POP EBX0042CFCF MOV DWORD PTR FS:[0], ECX0042CFD6 LEAVE0042CFD7 RETN写这篇文章的目的是想说明如何在OD下万能断点,算法过程太烦琐,就不想多跟了!希望能对大家有点启发,如果觉得这篇破文还行帮我顶一下吧!也是希望有更多的人能看到,对更多的人有益,我也是一只菜鸟,请大家多多指点!我的序列号:GK342QZ0C6RE03L注册码:K3L2LPBDW1F2H4B8S0UYWinXP 关于POINT-H万能断点的教程________________________________________标题: 【翻译】WinXP 关于POINT-H万能断点的教程作者: nba2005时间: 2008-04-01,17:26:46链接: /showthread.php?t=62346WinXP 关于POINT-H万能断点的教程【文章标题】: WinXP 关于POINT-H万能断点的教程【文章译者】: NBA2005【作者邮箱】: stockfox1699@【作者QQ号】: 382309369创作《算法分析实战篇和应用篇之提高(一)我的常用断点系统》,顺手对该文进行了翻译,前后共三个小时。
脱壳教程_精品文档
脱壳教程标题:脱壳教程引言:脱壳是指将软件或应用程序的包装层(也称为保护壳或加密层)移除,以便对其进行更深入的分析、修改或逆向工程。
脱壳过程可以帮助软件开发人员或安全研究人员理解程序的内部运行机制,发现其中的漏洞或者进行优化改进。
本文将介绍脱壳过程的基本原理和几种常见的脱壳工具以及其使用方法。
一、脱壳的基本原理脱壳的基本原理是通过破解或绕过软件的保护机制来移除保护壳。
保护机制通常包括各种检测和防御技术,如代码混淆、加壳、逆向工程等。
常见的保护壳有UPX、ASProtect、Enigma等。
脱壳的过程涉及对程序进行调试、分析和修改。
二、脱壳工具介绍及使用方法1. OllyDbgOllyDbg是一款著名的逆向工程和调试工具,也是脱壳过程中经常使用的工具之一。
它具有强大的调试和反汇编功能,可以帮助分析程序的执行流程、内存变化等。
使用OllyDbg进行脱壳时,首先需要加载待脱壳的程序,然后设置断点,跟踪程序执行,找到关键的保护机制的位置,最终移除保护壳。
2. IDA ProIDA Pro是一款功能强大的反汇编和逆向工程工具。
它可以将程序转换为易读的汇编代码,并提供强大的导航和分析功能。
脱壳时可以使用IDA Pro来分析和修改程序的内存和代码。
它可以帮助找到程序的入口点、解密过程等,从而移除保护壳。
3. x64dbgx64dbg是一款开源的调试器工具,适用于32位和64位的Windows系统。
它具有用户友好的界面和丰富的调试功能,并支持脱壳过程中的动态调试和反调试技术。
使用x64dbg进行脱壳时,可以跟踪程序的执行流程、查看内存变化,找到关键代码并进行修改。
三、脱壳过程示例以某款加壳的软件为例,介绍基本的脱壳过程。
1. 加载待脱壳的程序到脱壳工具中,并设置断点。
2. 运行程序,在断点处停下来,观察程序的状态和执行流程。
3. 跟踪程序的执行,查找关键的保护机制位置,例如解密函数、保护壳的入口等。
4. 分析并修改程序的内存和代码,移除保护壳。
关于ASPack2.12加壳软件的脱壳方法[图文]
关于ASPack2.12加壳软件的脱壳方法[图文]其实ASPack 2.12是比较简单的东西,可以说,很大程度上,它可以对程序的大小进行压缩,方便发布其实ASPack 2.12是比较简单的东西,可以说,很大程度上,它可以对程序的大小进行压缩,方便发布。
今天从实际的例子来说说如何进行手脱ASPack 2.12 壳。
当然,所谓的手脱,不是说完全靠手工,我们还需要一定的工具,首先是PEiD,大家可以在脚本之家上下载到,主要用于查壳的一种小工具。
第二个就是动态调试工具OD(ollydbg),这个工具同样可以自己再网络上找到下载。
我们以一个ascii转换的小工具为例子。
因为刚刚好是用aspack 加的壳。
所以我们就拿它开刀。
阴纯长痘痘视频教程棋牌游戏赚钱上图是软件的界面,这个时候的软件大小是846 KB (866,816 字节)是不是感觉很小呢?我们用peid进行查看壳。
可以清晰的看到是aspack的壳吧。
而且还有版本,我们使用OD 打开它。
对于是否继续分析,我们点否就可以。
然后我们就可以看到下面类似的代码。
我们可以看到入口是停止了pushad,也就是寄存器压统一入栈操作。
那么我们就可以轻松的使用所谓的ESP定律来搞定了。
按一下F7,到下一行,看寄存器窗口。
里面的ESP的值。
视频教程教程看到ESP寄存器是红色的了。
我们copy对应的0012FFA4,到我们的命令行窗口下硬件断点。
硬件断点就是hr ,然后加上我们刚刚copy的地址,然后回车,这个时候我们可以再菜单的。
调试》硬件断点中看到我们设置的硬件断点了。
设置好断点后,我们直接按F9运行程序,它会在断点处停下来。
大致的位置看截图好,我们可以高兴的看到,发生了jnz,就是不等于0就跳转,而且是红色的方向向下跳转。
红色代表跳转已经实现,方向是向下,就是到了地址为006AF3BA的地方,然后这个地方push压入一个地址,通过retn方式返回。
我们这个时候删除硬件断点。
大智慧主程序脱壳全记录(图文)第1集
大智慧主程序脱壳全记录(图文)第四集今天用大智慧主程序为例进行脱壳操作一、ESP定律手脱法第一步,查壳,“ASPack 2.12 -> Alexey Solodovnikov”第二步,启动OD,加载主程序,来到下图画面所示地址。
进入“选项”-“调试选项”-“异常”,全部钩选(可做也可不做。
普通压缩壳Od调试时候没有异常,加密壳全部有反跟踪代码,会有许多SEH陷阱使OD调试时产生异常。
)用F8进行单步跟踪,在右边窗口寄存器(FUP)中的“ESP”突现“0012FFA4”时停下,用鼠标点选该句,打开右键菜单,如下图所示操作。
(或在左下角“命令”栏中输入“DD 0012FFA4”回车)点选左下角“0012FFA4”语句,打开菜单,选择“断点”-“硬件访问”-“Word”,F9运行如下图所示,在F8单步跟踪,实现大跳转用鼠标右键打开菜单,选择“用OllyDump脱壳调试进程”点击“脱壳”按钮,进行存盘,记住OEP地址为“2F68B5”(在进行输入表修复时要用到的地址)千万记住:要删除先前设置的“断点”,否则,原版主程序运行时会出现异常(按下图所示操作)“调试”-“硬件断点”――――――“删除”===================================================重新载入已脱壳的主程序,可以阅读程序流程(下图)第三步,检验。
启动已脱壳的主程序,如果正常,则不需要修复输入表,否则,还得用前面的方法进行修复操作二、内存镜像法第一步,查壳,“ASPack 2.12 -> Alexey Solodovnikov”(略)第二步,启动OD,加载主程序,来到下图画面所示地址“CTRL+M”调出“Memory Map”,选择“。
rsrc”,用鼠标右键菜单“设置访问中断F2”,F9运行来到下图地址,在“Memory Map”中选择“。
text”,同样用鼠标右键菜单“设置访问中断F2”,F9运行程序停在这里,那就是真正的入口点用鼠标右键打开菜单,选择“用OllyDump脱壳调试进程”点击“脱壳”按钮,进行存盘,记住OEP地址为“2F68B5”(在进行输入表修复时要用到的地址)其余操作同上。
特定码——用OllyDBG手脱Enigma Protector V1.12加壳的试炼品
特定码——用OllyDBG手脱Enigma Protector V1.12加壳的试炼品减小字体增大字体作者:佚名来源:不详发布时间:2009-11-3 4:59:37收藏到网摘:合作洽谈破解下载: /viewthread.php?tid=3806软件大小: 1.21 M软件简介: Enigma Protector serves for software protection of applications. It defending your work fro m program crackers with state-of-the-art encryption, data compression, and other security features. Enigma Protector provides creation trial and registered applications, with possibility of the checki ng mode parameters with help internal Enigma API functions. It allows you to design and add a co mplete software protection and registration-key system to your existing programs. It works with a ny language which produce Windows PE files. Enigma works with Win PE 32 executables (*.exe) , screen savers (*.scr), dynamic libraryes (*.dll, *.ocx).【作者声明】:只是感兴趣,没有其他目的。
失误之处敬请诸位大侠赐教【调试环境】:WinXP、OllyDBD、PEiD、LordPE、ImportREC—————————————————————————————————【脱壳过程】:ENIGMA Protector是俄罗斯新出的一款保护壳,有发展为猛壳的潜质。
新版ASProtect的脱壳教程
新版ASProtect的脱壳教程国内还不多,脱壳后索性再整理一篇吧。
Thanks: VolX、stephenteh、jingulong
—————————————————————————————————
一、壳代码解压
00B9957D 8D85 A4314400 lea eax,dword ptr ss:[ebp+4431A4]
00B99583 50 push eax
00B99584 57 push edi
00B99554 8B9D 4D294400 mov ebx,dword ptr ss:[ebp+44294D]
00B9955A 8B7B 3C mov edi,dword ptr ds:[ebx+3C]
00B9955D 8B7C3B 78 mov edi,dword ptr ds:[ebx+edi+78]
设置Ollydbg忽略所有的异常选项。老规矩:用IsDebug V1.4插件去掉Ollydbg的调试器标志。
00401000 68 01F05A00 push mTrace.005AF001
//进入OD后停在这
00401005 E8 01000000 call mTrace.0040100B
00B9959A 8946 10 mov dword ptr ds:[esi+10],eax
00B9959D 83C6 14 add esi,14
00B995A0 8B95 D8304400 mov edx,dword ptr ss:[ebp+4430D8]
00B9956E 5F pop edi
00B9956F EB 16 jmp short 00B99587
使用OllyDbg从零开始Cracking 第三十五章-手脱ASPack
第三十五章-手脱ASPack V2.12本章我们继续介绍脱壳,稍微增加一点难度。
我们要脱的壳是ASPack,比UPX稍微复杂那么一点点,拿UnPackMe_ASPack2.12.exe作为实验对象,这个程序我们在第三十二章介绍OEP的时候遇到过,大家应该还记得吧。
Dump的话我们用OD的插件OllyDump来完成,大家将其放到OD的插件目录下。
将OD的反反调试插件配置好,然后加载。
OD提示该程序入口点位于代码段之外,对于大部分加壳程序OD都会弹出此警告窗口,大家不必大惊小怪。
我们可以看到第一条指令是PUSHAD,按F7键执行PUSHAD。
在ESP寄存器值上面单击鼠标右键选择-Follow in Dump,就可以在数据窗口中定位到刚刚通过PUSHAD指令保存的寄存器环境了,选中前4个字节,单击鼠标右键选择-Breakpoint-Hardware,on access-Dword,这样就可以给这4个字节设置硬件访问断点了。
按F9键运行起来。
断在了POPAD指令的下一行,我们直接按F7键单步跟踪到OEP处。
这里我们到了OEP处,OD这里解析有误,将代码解析为数据了,我们在反汇编窗口中单击鼠标右键选择-Analysis-Remove analysis from module,删除掉OD的分析结果,这样就能正常解析了。
我们可以看到虽然已经被解析成代码了,但是解析的还不够完整,我们还需要解析一次,继续单击鼠标右键选择-Analysis-Analyse code。
现在我们可以对该进程进行dump了,在菜单栏中找到OllyDump插件。
该插件的窗口的弹了出来,有一些选项可供我们修改,我们可以对Base of Code进行修改,这里Base of Code = 4000(RV A),该选项相当于对代码段进行了指定,不需要像上一章那样在数据窗口中的PE头中去修改。
我们应该还记得ASPack加壳程序的原程序代码段并不是第一个区段,而是第三个区段,4000(RV A),即404000(V A),OEP也是404000,刚好在代码段中,所以Base of Code这一项我们不需要修改。
用Ollydbg手脱HASP Protection V1X加壳的EXE和DLL
用Ollydbg手脱HASP Protection V1.X加壳的EXE和DLLUnPacKed By : fly软件下载: /Store/MTB14_StandardSetup.exe软件下载:ftp:///pub/hasp/hl/windows/installed/VendorTools/HASP_HL_Envelope .zip驱动下载:ftp:///pub/hasp/hl/windows/installed/redistribute/drivers/HASP_HL _driver_setup.zip软件简介: HASP HL protection and licensing software tools make up the Vendor Center program suite. HASP HL Envelope is one of the three programs included in the Vendor Center. The HASP HL Envelope is a tool that wraps your applications within a protective shield. The tool offers advanced protection features to enhance the overall level of security of your software. Implementing HASP HL Envelope protection is the fastest way to secure your software, and does not require you to alter any source code. You simply use the HASP HL Envelope graphical interface to apply protection parameters to an executable file. In addition, you can modify all protection parameters and customize messages displayed to end-users running the protected applications.【作者声明】:只是感兴趣,没有其他目的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
后记
用上面说的方法,很多种壳都可以快速的手动脱掉。如果你没有OD的DUMP插件,
可以到新论坛的下载区找。如果实在没有,也可以直接停在OEP处用PEDump来DUMP。很
久没有写东西了。这一篇是写给初学者练手的。其实壳也是软件,再怎么复杂都有可
程序的入口处。F8单步到4010CC,这里便是原程序的OEP。用DUMP插件直接DUMP出来就
可以了(在DUMP时注意将入口点改为10CC,即4010CC-400000=10CC,400000是映象基
地址)。文件大小是77059字节,用PEditor重建PE头便可以了。未压缩的文件大小是
系统:Win98SE
关键词: 脱壳、OllyDbg、OD、DUMP、PUSHAD、POPAD
预备知识
大多数壳都有一个共同的特点。在壳准备开始解压时都要执行PUSHAD,当壳解压
完时都要调用POPAD。到底PUSHAD和POPAD是什么干什么用的呢?其实PUSHAD是用来将
0040D002 E8 03000000 CALL NOTEPAD.0040D00A
……
我们不管它,直接向下翻页找POPAD指令。在40D3AF处找到POPAD
……
0040D3AF 61 POPAD ;解压完成,恢复寄存器
53248字节,脱壳后的文件大小是60930字节。
UPX篇
用UPX将NOTEPAD.EXE加壳,然后用OD载入。停在PUSHAD处,用脱ASPACK同样的方
法,向下翻页找POPAD。
……
0040E9FE 61 POPAD
ASPACK篇
先用ASPACK将NOTEPAD.EXE加壳。用OllyDbg(以下简称OD)载入。看见光标停在
壳的入口处。
0040D001 > 60 PUSHAD ;壳的入口。准备开始解压,保护寄存器
0040D3BA 68 CC104000 PUSH NOTEPAD.004010CC ;返回到原程序OEP处
0040D3BF C3 RETN
……
选定40D3AF这一行,F4运行到此处。在这里说明壳已经完成解压工作。并且返回到原
0040E9FF - E9 C826FFFF JMP NOTEPAD.004010CC
……
下面的JMP就是跳转到程序的OEP处。F4到40E9FF处,F8单步一下,来到OEP处,DUMP出
来。DUMP文件的大小是65536字节,直接就可以运行。为了完美,用PEditor重建PE头。
破解教程★★ 使用OllyDbg快速脱壳 ★★
使用OllyDbg快速脱壳
dOSKEY lEE
目标:采用ASPACK、UPX加壳的NOTEPAD.EXE
工具:OllyDbg 1.09英文版、DUMP插件、PEditor
能被脱下来。祝你好运。
另外,转载时请保持本文的完整。
***坎坷亦乐园 版权所有***
【关闭窗口】
0040D3B0 75 08 JNZ SHORT NOTEPAD.0040D3BA
0040D3B2 B8 01000000 MOV EAX, 1
0040D3B7 C2 0C00 RETN 0C
ห้องสมุดไป่ตู้有普通寄存器顺序进栈的指令,POPAD是所有普通寄存器顺序出栈指令。POPAD的出
栈顺序和PUSHAD相反。壳为了保护寄存器,便在解压前将所有寄存器进栈保护起来,
当解压完成后又将寄存器出栈,恢复其原貌,并将IP设置为原程序的OEP。这样我们就
可以通过这个特点快速脱掉多种软件的壳。