使用VC自己动手编写加壳程序
VC++6.0使用方法(精品简约)
第一部分C语言编程环境简介第1章计算机程序设计实验的一般步骤1.1 计算机程序设计实验的目的C语言程序设计是一门实践性很强的课程,该课程的学习有其自身的特点,学习者必须通过大量的编程训练,在实践中掌握程序设计语言,培养程序设计的基本能力,并逐步理解和掌握程序设计的思想和方法。
具体的说,通过上机实践,应该达到以下几点要求:1.使学习者能很好地掌握一种程序设计开发环境的基本操作方法(例如(Visual C++6.0),掌握应用程序开发的一般步骤。
2.在程序设计和调试程序的过程中,可以帮助学习者进一步理解教材中各章节的主要知识点,特别是一些语法规则的理解和运用,程序设计中的常用算法和构造及应用,也就是所谓“在编程中学习编程”。
3.通过上机实践,提高程序分析、程序设计和程序调试的能力。
程序调试是一个程序员最基本的技能,不会调试程序的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
通过不断的积累经验,摸索各种比较常用的技巧,可以提高编程的效率和程序代码的质量。
下面介绍计算机程序设计实验的一般步骤:1.2 计算机程序设计实验的准备上机前需要做好如下准备工作,以提高上机编程的效率。
(1)在计算机上安装一种程序设计开发工具,并学会基本的操作方法。
(2)复习与本次实验相关的教学内容和主要知识点。
(3)准备好编程题程序流程图和全部源程序代码,并且先进行人工检查。
(4)对程序中有疑问的地方做出标记,充分估计程序运行中可能出现的问题,以便在程序调试过程中给予关注。
(5)准备好运行和调试程序所需的数据。
1.3 计算机程序设计实验的步骤(1)运行程序设计开发工具,进入程序设计开发环境。
(2)新建一个文件,输入准备好的程序。
(3)不要立即进行编译和连接,应该首先仔细检查刚刚输入的程序,如有错误及时改正,保存文件后再进行编译和连接。
(4)如果在编译和连接的过程中发现错误,根据系统的提示找出出错语句的位置和原因,改正后再进行编译和连接。
VB加壳脱壳程序源码
VB加壳脱壳程序源码1、窗体代码Private Sub Check1_Click()Text2.SetFocusEnd SubPrivate Sub Image2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Image10.Visible = FalseEnd SubPrivate Sub Image3_Click()If Text1.Text = "" ThenMsgBox "Please Select A File First!", vbInformationElseList1.V isible = TrueList2.V isible = FalseFrame3.V isible = FalseList1.Text = " UPX 1.24 "Text2.SetFocusEnd IfEnd SubPrivate Sub Command2_Click()Dim path As String, back_path As String, file_t As String 'Dim's stringsText2.SetFocusCommonDialog1.ShowOpenText1.Text = CommonDialog1.FileNamepath = Text1.Textback_path = "Backupfile.exe"If Check1.V alue = 1 Theni = FreeFileOpen path For Binary As #ifile_t = Space(LOF(i))Get #i, , file_tClose #iOpen back_path For Binary As #iPut #i, , file_tClose #iMsgBox " A Backup of the file has been created in the same location as the original file", vbInformationEnd IfEnd SubPrivate Sub Image3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Image8.Visible = TrueEnd SubPrivate Sub Image3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Image8.Visible = FalseImage3_ClickEnd SubPrivate Sub Image4_Click()If Text1.Text = "" ThenMsgBox "Please Select A File First!", vbInformationElseText2.SetFocusList2.V isible = TrueList1.V isible = FalseFrame3.V isible = FalseList2.Text = " Krypt "End IfEnd SubPrivate Sub Image4_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Image9.Visible = TrueEnd SubPrivate Sub Image4_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Image9.Visible = FalseImage4_ClickEnd SubPrivate Sub Image5_Click()If Text1.Text = "" ThenMsgBox "Please Select A File First!", vbInformationElseText2.SetFocusList1.V isible = FalseList2.V isible = FalseFrame3.V isible = TrueFrame4.V isible = TrueEnd IfEnd SubPrivate Sub Image5_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Image7.Visible = TrueEnd SubPrivate Sub Image5_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Image7.Visible = FalseImage5_ClickEnd SubPrivate Sub Image6_Click()Text2.SetFocusFrame3.V isible = TrueList1.V isible = FalseFrame4.V isible = FalseEnd SubPrivate Sub Command7_Click()Text2.SetFocusIf Text1.Text <> "" And Text3.Text > 0 Thenfsiz = ShowFileSize(Text1.Text)PB1.V alue = 0PB1.Max = Text3.TextPB1.Visible = TrueOpen Text1.Text For Binary As #1For a = 1 To Text3.TextPut #1, fsiz - 1 + a, 0PB1.V alue = aNextCloseEnd IfPB1.Visible = FalsePB1.V alue = 0End SubFunction ShowFileSize(file)Dim fs, f, sSet fs = CreateObject("Scripting.FileSystemObject")Set f = fs.GetFile(file)ShowFileSize = f.Size's = UCase() & " uses " & f.Size & " bytes."'MsgBox s, 0, "Folder Size Info"End Function'94208Private Sub exit_Click()Unload MeEnd SubPrivate Sub Form_Load()Check1.V alue = FalseList1.AddItem " Double Click To Pack "List1.AddItem " "List1.AddItem " UPX 1.24 "List1.AddItem " FSG 1.33 "List1.AddItem " PEPack "List1.AddItem " ASPack "List1.AddItem " PECompact "List1.AddItem " PE-Diminisher "List1.AddItem " PeX v0.99 "List2.AddItem " Double Click To Protect "List2.AddItem " "List2.AddItem " Krypt "List2.AddItem " UPX Scrambler 1.05 "List2.AddItem " UPX Scrambler 1.06 "List2.AddItem " tElock "End SubPrivate Sub Image2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Image10.Visible = TrueIf Button = 1 ThenDim linklink = ShellExecute(hWnd, "Open", "/index.php", &O0, &O0, SW_NORMAL)End IfEnd SubPrivate Sub Image6_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Image2.Visible = TrueEnd SubPrivate Sub Image6_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Image2.Visible = FalseImage6_ClickEnd SubPrivate Sub Image7_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Image10.Visible = TrueEnd SubPrivate Sub Image7_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Image10.Visible = FalseEnd SubPrivate Sub Label5_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 ThenDim linklink = ShellExecute(hWnd, "Open", "/index.php", &O0, &O0, SW_NORMAL)End IfEnd SubPrivate Sub Label9_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 ThenDim linklink = ShellExecute(hWnd, "Open", "", &O0, &O0, SW_NORMAL) End IfEnd SubPrivate Sub List1_DblClick()If List1.Text = "UPX 1.24 " ThenShell App.path & "\components\packers\upx124.exe " & Chr(34) & Text1.Text & Chr(34), vbNormalFocusEnd IfIf List1.Text = "FSG 1.33 " ThenShell App.path & "\components\packers\fsg133.EXE " & Text1.Text, vbNormalFocusEnd IfIf List1.Text = "PEPack " ThenShell App.path & "\components\packers\pepack.exe "& Chr(34) & Text1.Text & Chr(34), vbNormalFocusEnd IfIf List1.Text = "ASPack " ThenShell App.path & "\components\packers\aspack.exe " & Text3.Text, vbNormalFocusEnd IfEnd SubPrivate Sub List2_DblClick()If List2.Text = "Krypt " ThenShell App.path & "\components\protectors\client.exe ", vbNormalFocusSendKeys "{TAB}"SendKeys "{ENTER}"SendKeys Text1.TextSendKeys "{ENTER}"SendKeys "{TAB}"SendKeys "{TAB}"SendKeys "{ENTER}"SendKeys App.path & "\components\protectors\stub.exe"SendKeys "{ENTER}"End IfIf List2.Text = "UPX Scrambler 1.05 " ThenShell App.path & "\components\protectors\scramble.exe " & Chr(34) & Text1.Text & Chr(34), vbNormalFocusEnd IfIf List2.Text = "UPX Scrambler 1.06 " ThenShell App.path & "\components\protectors\scramble16.exe " & Chr(34) & Text1.Text & Chr(34), vbNormalFocusEnd IfIf List2.Text = "tElock " ThenShell App.path & "\components\protectors\telock.exe " & Chr(34) & Text1.Text & Chr(34), vbNormalFocusEnd IfEnd SubPrivate Sub open_Click()CommonDialog1.ShowOpenText1.Text = CommonDialog1.FileNameEnd SubPrivate Sub Option1_Click()Text2.SetFocusEnd SubPrivate Sub Option2_Click()Text2.SetFocusEnd Sub2、模块代码Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByV al hWnd As Long, ByV al lpOperation As String, ByV al lpFile As String, ByV al lpParameters As String, ByV al lpDirectory As String, ByV al nShowCmd As Long) As LongPublic Const SW_NORMAL = 1。
加壳与脱壳应用及实现
加壳与脱壳的应用与实现一、加壳 (2)1.什么是壳 (2)2.加壳原因 (2)3.壳的加载过程 (3)4.压缩引擎 (5)5.常见的加壳工具 (6)a.常用压缩壳介绍 (6)b.加密保护壳介绍 (7)二、脱壳 (10)1.侦壳 (10)2.脱壳 (13)a.查找程序的真正入口点(OEP) (13)b.抓取内存映像文件 (15)c.输入表重建 (15)附:视频“加壳与脱壳(软件)”和“手动脱壳” (17)加壳与脱壳一、加壳1.什么是壳在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。
图1.12.加壳原因就把这样的程序称为“壳”了。
作者编好软件后,编译成exe可执行文件。
1)有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2)需要把程序搞的小一点,从而方便使用。
于是,需要用到一些软件,它们能将exe可执行文件压缩。
3)在黑客界给木马等软件加壳脱壳以躲避杀毒软件。
实现上述功能,这些软件称为加壳软件。
3.壳的加载过程1)获取壳自己所需要使用的API地址如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API 函数。
壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数2)解密原程序的各个区块(Section)的数据壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。
在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。
壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。
软件加壳技术及实现
软件加壳技术及实现软件加壳是一种常见的软件保护技术,通过将原始的可执行文件进行加密和封装,增加软件的安全性和难度,提高软件的抵抗逆向工程、防止破解的能力。
下面将介绍软件加壳技术的原理及实现方法。
1.软件加壳原理软件加壳的基本原理是将原始可执行文件进行加密处理,生成一个加密后的壳程序,再将原始可执行文件嵌入到壳程序中,并根据可执行文件的特征信息进行相应的处理和解密,最终执行原始程序。
具体的加壳流程如下:(1)加密原始可执行文件:使用对称加密算法(如AES、DES等)对原始可执行文件进行加密处理,使其不可读。
(2)生成壳程序:编写一个壳程序,包括解密原始可执行文件、加载和执行原始程序等功能。
壳程序本身一般是已经加密的,以防止被分析破解。
(3)将原始可执行文件嵌入到壳程序中:将加密后的原始可执行文件隐藏在壳程序中,一般是作为一个资源或数据块存在。
(4)运行壳程序:用户双击运行壳程序,壳程序首先进行解密处理,获取原始可执行文件,然后进行加载和执行。
2.软件加壳实现方法(1)静态加壳:在编译链接阶段对可执行文件进行加壳处理。
静态加壳可以通过修改可执行文件的文件头信息和重定位表等方式实现。
(2)动态加壳:在运行时对可执行文件进行加壳处理。
动态加壳使用的是运行时加载原始程序的方式,可以提高软件的安全性,但也会增加运行的开销。
3.加壳脱壳工具目前市面上有很多成熟的加壳脱壳工具可供使用,如UPX、ASPack、FSG等。
这些工具可以方便地对可执行文件进行加壳和脱壳操作,但也容易被黑客用来破解软件。
总结:软件加壳技术是一种常用的软件保护手段,通过加密和封装原始可执行文件,增加软件的安全性和防破解能力。
加壳脱壳工具能够方便地实现对可执行文件的加壳和脱壳操作,但需要注意合理的加密算法和技术选型,以提高软件的安全性。
使用VC6.0创建工程
使用Microsoft Visual C++ 6.0
VC6程序开发的结构:
每次开发必须有一个workspace
一个workspace可以包含多个project
porject即工程,工程可以生成可执行文件(exe), 静态链接库(lib)和动态链接库(dll)以及其他一些 类型的程序文件
一个Project可以包含多个头文件(*.h)和实现文件(*.c), 不过整个工程至多只能有一个main函数
14
使用Microsoft Visual C++ 6.0
WorkSpace Project
.h .C .C ... Project
WorkSpace Project .c
工程唯一的main函数
15
使用Microsoft Visual C++ 6.0
对于大型程序的开发,把所有的代码放入 一个c文件显然是不合适的,VC++6.0的工 程管理结构可以帮助开发人员把大型程序 分散为多个逻辑部分,以便管理
.h----- 这种文件为头文件,包含的主要是 自定义数据类型、函数等的定义和声明放 置在头文件中。 .c----- 代码实现文件。
10
在VC++6.0中
.dsw---- Developer Studio Workspace,最高级别的配置 文件,记录了整个工作空间的配置信息,是一个纯文本 的文件,在vc创建新项目的时候自动生成。 .dsp---- VC开发环境生成的工程文件,文本格式。在VC 中,应用程序是以Project的形式存在的,Project文件的 扩展名为.dsp,在Workspace文件中可以包含多个Project, 由Workspace文件对它们进行统一的协调和管理,每个 工程都对应一个dsp文件。 .opt---- VC开发环境自动生成的用来存放WorkSpace中各 种选项的文件。工程关于开发环境的参数文件。如工具 条位置信息等。 .ncb----无编译浏览文件(no compile browser), NCB为 VC++自动创建的跟踪文件,其中存放了供ClassView、 WizardBar和Component Gallery使用的信息,由VC开发 环境自动生成。无编译浏览文件。当自动完成功能出问 题时可以删除此文件。build编译工程后会自动生成。
加壳和脱壳
解密(脱壳)技术的进步促进、推动了当时的加密(加壳)技术的发展。LOCK95和 BITLOK 等所谓的“壳中带籽”加密程序纷纷出笼,真是各出奇谋,把小小的软盘也折腾的够辛苦的了。正在国内的加壳软件和脱壳软件较量得正火红的时候,国外的“壳”类软件早已经发展到像 LZEXE 之类的压缩壳了。这类软件说穿了其实就是一个标准的加壳软件,它把 EXE 文件压缩了以后,再在文件上加上一层在软件被执行的时候自动把文件解压缩的“壳”来达到压缩 EXE 文件的目的。接着,这类软件也越来越多, PKEXE、AINEXE、UCEXE 和后来被很多人认识的 WWPACK 都属于这类软件,但奇怪的是,当时我看不到一个国产的同类软件。
合为一体,很棒) 推荐language2000中文版,我的主页可下载
傻瓜式软件,运行后选取待侦测壳的软件即可(open)
3.软件常用编写语言Delphi,VisualBasic(VB)---最难破,VisualC(VC)
通过上一节,我想大家己认识了什么是壳的概念了,也是说运行加壳程序时, 用户执行的实际上是这个外壳的程序,而这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正的程序,由于一切工作都是在内存中运行,用户根本不知道也不需要知道其运行过程,只要执行起来没有变化就好。当时有些人担心这些解压缩的工作会给程序带来额外的运行时间,但实际上所有的可执行文件都要读到内存中去执行,文件小了,从计算机硬盘上读到内存的时间自然也少了,两下相抵,实际上用户并不会感觉程序慢了多少。脱壳的就是把在内存中真正还原的程序抓取下来,修正后变成可执行的文件。
过了一段时间,可能是国外淘汰了磁盘加密转向使用软件序列号的加密方法吧,保护 EXE 文件不被动态跟踪和静态反编译就显得非常重要了。所以专门实现这样功能的加壳程序便诞生了。 MESS 、CRACKSTOP、HACKSTOP、TRAP、UPS 等等都是比较有名气的本类软件代表,当然,还有到现在还是数一数二的,由台湾同胞所写的 FSE 。其实以我的观点来看,这样的软件才能算是正宗的加壳软件。
c++ 插件的创建和使用实例
主题:C++ 插件的创建和使用实例C++ 是一种被广泛应用的编程语言,它的强大和灵活性使得它成为许多软件开发人员的首选。
在实际的软件开发过程中,我们常常会遇到需要扩展已有软件功能的需求。
这时候,C++ 插件就成为了一个非常有用的工具。
本文将介绍如何创建和使用 C++ 插件,并通过一个实际的例子来展示其用法。
一、C++ 插件的创建1. 确定插件功能在创建 C++ 插件之前,我们首先需要明确插件的功能。
我们希望创建一个 C++ 插件来实现数据加密和解密的功能。
2. 创建插件项目在开始编写插件代码之前,我们需要创建一个新的 C++ 项目。
可以使用诸如 Visual Studio、Code::Blocks 等集成开发环境来创建新的C++ 项目。
3. 编写插件代码在创建了新的 C++ 项目之后,我们就可以开始编写插件的代码了。
在这个例子中,我们可以编写加密和解密函数的实现代码。
4. 将插件编译为动态信息库编写完插件代码之后,我们需要将代码编译为动态信息库(DLL)。
这可以通过编译器提供的工具来实现,比如在 Windows 评台下可以使用 Visual Studio 的编译器来生成 DLL 文件。
5. 导出插件接口为了让其他程序能够调用我们创建的插件,我们需要在代码中导出插件的接口。
这可以通过在函数前添加 `extern "C"__declspec(dllexport)` 来实现。
6. 完成插件创建经过以上步骤,我们就成功地创建了一个 C++ 插件。
这个插件可以用于在其他程序中实现数据加密和解密的功能。
二、C++ 插件的使用实例现在我们来介绍一个实际的例子,来展示如何在一个主程序中使用我们创建的 C++ 插件。
1. 创建主程序项目我们需要先创建一个新的 C++ 项目作为我们的主程序。
同样地,我们可以使用集成开发环境来创建新的项目。
2. 引入插件头文件在主程序中,我们需要引入我们创建的插件的头文件,以便在程序中调用插件的功能。
c++ 加壳原理
c++ 加壳原理
加壳原理是指在应用程序运行之前,把应用程序的代码内核打包装入一个程序,从而形成一个包含内核的壳程序,在运行壳程序的时候,壳程序完成这样一系列的工作:解压出内核,校验合法性,提供程序运行环境以及防护等等,也就是说运行加壳程序实际上是运行加壳后的程序,而不是加壳前的程序。
使用 C++ 语言实现加壳原理,需要考虑以下几个步骤:
1、把目标程序的二进制可执行代码压缩到一个文件中。
2、在加壳程序中实现解压缩,把压缩的文件保存到加壳程序的内存中。
3、实现程序的校验,确保程序内容完整。
4、实现程序的加载,以及提供程序运行环境等等。
5、实现程序的防护,避免程序被破解。
C++ 语言实现加壳原理的函数步骤如下:
int main()
{
// 1.加载壳
char *pFileData = LoadShell();
// 2.解压壳
UnzipShell(pFileData);
// 3.校验文件
bool bIsValid = VerifyShell(pFileData);
// 4.提供程序运行环境
PrepareRunEnvironment();
// 5.运行程序
RunShell(pFileData);
// 6.防护程序
ProtectShell(pFileData);
return 0;
}
以上是 C++ 语言实现加壳原理的大致步骤,需要根据实际的需要,完善的实现加壳的每个环节。
vc使用方法
vc使用方法VC 使用方法。
VC 是一款功能强大的集成开发环境,可以帮助开发者进行C/C++ 程序的开发。
本文将介绍 VC 的基本使用方法,帮助初学者快速上手。
1. 安装 VC。
首先,你需要从官方网站下载 VC 的安装包,并按照提示进行安装。
安装完成后,打开 VC,你将看到一个简洁的界面,包括菜单栏、工具栏、编辑区和输出区。
2. 创建新项目。
在 VC 中,你可以创建新项目来进行开发。
点击菜单栏中的“文件”选项,选择“新建”,然后选择“项目”。
在弹出的对话框中,选择项目类型(如控制台应用程序、Windows 桌面应用程序等),填写项目名称,点击“确定”即可创建新项目。
3. 编写代码。
在创建新项目后,你可以在编辑区编写代码。
VC 提供了丰富的代码编辑功能,包括代码高亮、自动补全、代码折叠等,可以大大提高编码效率。
4. 调试程序。
在编写完代码后,你可以点击工具栏中的“调试”按钮来进行程序调试。
VC 提供了强大的调试功能,可以帮助你快速定位和解决程序中的 bug。
5. 构建和运行程序。
当程序编写完成并通过调试后,你可以点击工具栏中的“生成”按钮来构建程序。
构建完成后,你可以点击“运行”按钮来运行程序,查看程序的运行效果。
6. 其他功能。
除了上述基本功能外,VC 还提供了许多其他功能,如版本控制、性能分析、代码重构等,可以帮助你更好地进行程序开发和维护。
总结。
通过本文的介绍,相信你已经对 VC 的基本使用方法有了一定的了解。
当然,VC 还有很多其他功能和技巧等待你去探索和学习。
希望本文能够帮助你快速上手 VC,并顺利进行 C/C++ 程序的开发工作。
祝你编程愉快!。
VC++程序实例
VC++6.0 实例教案----------------沈阳工业大学理学院VC 程序设计实例教案:一个最简单的程序:#include<iostream.h>void main(){cout<<”Hello,World!\n”;}说明:main:表示主函数(每个C++程序必须并且只有一个主函数){}:函数体所在的范围:cout:输出到屏幕《:插入符(插入到cout 中,将后面的内容输出到屏幕\n:换行符(输出“Hello World!后换行)iostream.h: 头文件#include:预处理指令:C++程序的组成:1.预处理命令(#开头,包含三类:宏定义命令、文件包含命令、条件编译命令)2.函数(可以使用库函数和自定义函数)3.语句(组成程序的基本单元)4.变量和对象(对象C++指的是类的实例)5.输入和输出6.注释:用//开头输出的格式://cout 的格式输出(P38)#include<iostream.h>void main(){int nNum=1234;double fNum=12.3456789;cout<<"1234567890"<<endl;cout.width(10);cout<<nNum<<'\n'<<endl;cout.width(10);cout<<fNum<<endl;cout<<cout.precision(4)<<endl;cout<<fNum<<endl;1VC++6.0 实例教案----------------沈阳工业大学理学院}输入流(cin)(获得键盘的输入值)(P39)#include<iostream.h>void main(){int nNum;co ut<<”Please Input a Hex integer:”;cin>>hex>>nNum;cout<<”Oct\t”<<oct<<nNum<<endl;cout<<”Dec\t”<<dec<<nNum<<endl;cout<<”Hex\t”<<hex<<nNum<<endl;}选择语句:条件语句:if 语句:形式为:if(<表达式>)<语句1>[else<语句2>]示例://两个整数大小比较(P39)#include<iostream.h>void main(){int nNum1,nNum2;cout<<"Please input two integer numbers:";cin>>nNum1;cin>>nNum2;if(nNum1!=nNum2)if(nNum1>nNum2)cout<<nNum1<<">"<<nNum2<<endl;elsecout<<nNum2<<"<"<<nNum1<<endl;elsecout<<nNum1<<"="<<nNum2<<endl;}开关语句:switch格式:switch(<表达式>){2VC++6.0 实例教案----------------沈阳工业大学理学院case<常量表达式1>:[语句1]case<常量表达式2>:[语句2]……case<常量表达式n>:[语句n][default :[语句n+1]}示例://根据成绩输出相应的分数段(P41)#include<iostream.h>void main(){char chGrade;cout<<"Please input a char:";cin>>chGrade;switch(chGrade){case'A':case'a':cout<<"90~100\n";break;case'B':case'b':cout<<"80~90\n";break;case'C':case'c':cout<<"70~80\n";break;case'D':case'd':cout<<"60~70\n";break;case'E':case'e':cout<<"<60\n";break;default:cout<<"Error"<<endl;}}循环语句:while 循环语句格式:while(<表达式>)<语句>//求整数1~50 的和,用while 语句(P42)#include<iostream.h>3VC++6.0 实例教案----------------沈阳工业大学理学院void main(){int nNum=1,nTotal=0;while(nNum<=50){nTotal+=nNum;nNum++;}cout<<"The sum from 1 to 50 is "<<nTotal<<endl;}do whilw 循环语句:格式:do<语句>while(<表达式>)//求整数1~50 的和,用d0-while 语句(P43)#include<iostream.h>void main(){int nNum=1,nTotal=0;do{nTotal+=nNum;nNum++;}while(nNum<=50);cout<<"The sum from 1 to 50 is "<<nTotal<<endl;}for 循环语句:格式:for([表达式1];[表达式2];[表达式])<语句>//用for 语句求1~50 之和(P43)#include<iostream.h>void main(){int nTotal=0;for(int nNum=1;nNum<=50;nNum++){nTotal+=nNum;}cout<<"The sum from 1 to 50 is: "<<nTotal<<endl;4VC++6.0 实例教案----------------沈阳工业大学理学院}break 和continue 语句:(跳出循环和重新开始循环)//用中断语句求0~100 之间的不能被7 整除的数(P45) #include<iostream.h>void main(){for(int nNum=1;nNum<=100;nNum++){if(nNum%7==0)continue;cout<<nNum<<" ";}}数组:格式:<类型><数组名>[<常量表达式1>][<常量表达式2>]…示例:把五个整数按从小到大顺序排列(P47)#include<iostream.h>void main(){int a[5]={-50,7,20,40,13};for(int i=0;i<5;i++){for(int j=i+1;j<5;j++){if(a[i]>a[j]){int temp=a[i];a[i]=a[j];a[j]=temp;}}cout<<a[i]<<" ";}}指针:指针变量是存放内存地址的变量。
壳,加壳,脱壳,介绍壳的一些基本常识
壳,加壳,脱壳,介绍壳的一些基本常识免杀入门 2009-08-06 16:58 阅读7 评论0 字号:大大中中小小在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。
就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。
从功能上抽象,软件的壳和自然界中的壳相差无几。
无非是保护、隐蔽壳内的东西。
而从技术的角度出发,壳是一段执行于原始程序前的代码。
原始程序的代码在加壳的过程中可能被压缩、加密……。
当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。
软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
关于“壳”以及相关软件的发展历史请参阅吴先生的《一切从“壳”开始》。
(一)壳的概念作者编好软件后,编译成exe可执行文件。
1.有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2.需要把程序搞的小一点,从而方便使用。
于是,需要用到一些软件,它们能将exe可执行文件压缩,3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。
实现上述功能,这些软件称为加壳软件。
(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK ;PETITE NEOLITE (三)侦测壳和软件所用编写语言的软件因为脱壳之前要查他的壳的类型。
1.侦测壳的软件fileinfo.exe 简称fi.exe(侦测壳的能力极强)。
2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒),推荐language2000中文版(专门检测加壳类型)。
用C++简易制作一款小软件
利用C++制作简易弹出关闭光驱软件------王圣VC++是微软公司开发,历经几十年,多个操作系统所磨练出来的程序设计工具,他的功能,他的作用可能是我们远远想象不到的,他凝聚着上百上千人的智慧,甚至还有世界首富比尔.所以请别说VC++是”没什么实用”的工具,不是他没实用,而是你不会用.下面我来利用C++制作一个简单的软件,很容易,大家也会,用此软件可以实现弹出光驱,关闭光驱.压缩包内附带我制作的这个软件.本例中使用的是VC++6.0,就是我们平时上课用的那个.其他版本有点不同,但控制函数还是一样的.1.在C++中建立工程新建工程,注意:不是像以往上课选择Win32开头,而是选择MFC AppWizard(exe),MFC程序其实就是你用电脑时用的软件,有漂亮的外观,而不是Win32下的黑白DOS界面了.剩下的设置工程名称,保存目录就不用我说了吧,点击确定进入下一步选择基本对话框,语言肯定是中文啦.然后点击完成,当然你也可以点击下一步修改相关参数,软件外观什么的.点击完成后,你就应该能看到一个类似于我们平常使用的软件界面了.我们继续…2调整界面,使软件界面更充实更美观.在界面右侧应该能看到”控件”工具条,那就是用来改变软件外观用的.比如指针拖动,缩放框架大小,以及添加软件上的按钮,文字等.将鼠标指针停留在控件相应按钮上,你就会看到att标签所显示出来的介绍内容,试着用不同工具去软件上画画写写…首先可以点选中间”TODO:在这里设置对话控制”,然后按delete键将其删除,我们这里不需要他.然后点击控件第二个按钮”图像”工具,在软件空白出画出一个方框,调节大小,以及右键,选择属性,在里面调整不同样式.然后按回车键确定.点击第六个按钮“按钮”工具.在刚建的方框里画出两个按钮,调节大小,然后鼠标右键选择属性,在常规里找到“标题”选项,将“Button1”改为“弹出光驱”,然后按回车键确定.第二个按钮改成“关闭光驱”.类推.暂时将”确定”,”取消”两个按钮移动到左下角空白出,方便我们在右侧编辑文字.点选”静态文本”工具,在右侧空白出画出一个方框,同样右键点选属性将标题改为你想要的,我现在是改成对该软件的功能介绍,输入好文本后,可以右键点击”调整为内容大小”将方框调整为和文本内容相同大小.最好,将确定取消移动在文本底下,然后调整软件边框,以达到合适大小,最后调整下各个按钮,方框,文字的大小,间隔,这样我们对于这个软件的界面工作就完成了,该给软件加如控制函数,让软件实现相应功能.3.为软件加入头文件及库,还有控制函数.光有个外观还不行,我们是学C++的,都知道要实现相应功能得为程序加入相应函数才能实现一定功能,还有头文件,以及库(我不知道我们班学到库这个东西没有,反正我没听课,不知道讲了多少,也不会做C++题…哎呀…),而我们这里加入函数可能是我们没学到的,这里是使用Windows系统为多媒体设备提供的MCI接口函数(没听过MCI? API可能听过吧,如果你以后还会继续做软件,那API会充满你的大脑.)首先:在工程目录里找到romDlg.h,用记事本编辑,在#pragma once下加入代码:(我这里是第八行)#include<mmsystem.h>#pragma comment(lib,"winmm.lib")这样,头文件以及库的添加就搞定了.下面来添加按钮的控制函数,就是你按那个”弹出光驱”,要让他能够弹出光驱,怎么实现?不是打上中文写上弹出光驱就能弹的,还是要加入MCI 控制函数才可以.回到C++界面,双击”弹出光驱”按钮,会弹出一个提示,点击OK,进入代码编辑,这时候C++会帮你自动转到这个按钮的代码,如:void CRomDlg::OnButton1(){// TODO: Add your control notification handler code here}我们就只要在{}里添加控制函数就可以了,在此添加弹出光驱的函数: mciSendString("set cdaudio door open",0,0,NULL);保存后继续按照一样的方法双击关闭光驱,添加相应代码,类同啦! mciSendString("set cdaudio door closed",0,0,NULL);保存,测试,这样,一个简易的开关光驱的软件就做好,你可以试下,感觉或许不同,你可以在软件目录下找到Debug目录,你的软件就保存在这里,是一个exe可执行文件.注:1这里可能有点小BUG,如果连续重复弹出关闭,可能会出现程序无响应的问题,不过也有可能是我电脑设置问题.2软件还有很多地方可以完善,等待大家发掘,我只是快速做下基本的而已.在此,这个教程就做完了,这不算什么,网络是个很好的资源,就像班主任说的,我们做软件的,应该是做游戏玩别人,而不是让游戏来玩我们,同样,互联网有着无限的潜力,巨大的资源只要你会利用你就是高手,IT达人.不希望在看到PS C++是无实用的工具类似的话了.人进棺材,什么都是粪土,无用.友情提示:互联网有无穷的金钱与美女,同学们多多学习去挖宝吧.做这个教程只想激起大家的兴趣,看大家学了一年的黑白界面,着实郁闷的很,现在换换,改成XP系统常用的MFC界面,或许会给大家带来点乐趣吧.以后我一有时间就会做点教程,一步一步和大家一起做点东西,编程很好玩的.(忘了,这学期C++肯定又不及格了,什么时候学校软件班的考试也考XHTML+CSS+Javascript+PHP+SQL…..?)编程…代码…函数…API…….。
软件加壳、脱壳基础介绍
软件加壳、脱壳基础介绍什么是加壳加壳的全称应该是可执⾏程序资源压缩,压缩后的程序可以直接运⾏。
加壳,顾名思义,就是给⼀个东西加上⼀个壳,只不过这⾥是程序。
就好⽐这⼤⾃然中的种⼦⼀样,为了保护⾃⼰,有⼀层壳,要想看到⾥⾯的东西,就要剥开这层壳。
加壳的另⼀种常⽤的⽅式是在⼆进制的程序中植⼊⼀段代码,在运⾏的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的⽬的是隐藏程序真正的OEP(⼊⼝点,防⽌被破解)。
⼤多数病毒就是基于此原理。
加壳的程序需要阻⽌外部程序或软件对加壳程序本⾝的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运⾏。
这种技术也常⽤来保护软件版权,防⽌软件被破解。
但对于病毒,加壳可以绕过⼀些杀毒软件的扫描,从⽽实现它作为病毒的⼀些⼊侵或破坏的⼀些特性。
加壳的⼯具分为压缩壳和加密壳:* UPX ASPCAK TELOCK PELITE NSPACK … ** ARMADILLO ASPROTECT ACPROTECT EPE SVKP …*什么是脱壳 脱壳就是将外⾯的保护程序脱掉,看到⾥⾯的程序。
对于有壳的程序,每次程序的⼊⼝点总是从壳开始,,这个⼊⼝点是EP,那么源程序的⼊⼝点是OEP,壳将真正的OEP隐藏了,我们脱壳就是修改程序的⼊⼝点。
如何脱壳 如果没有基础的汇编知识,那就查出相应的壳,⽤相应的脱壳机进⾏脱壳,那如果,脱壳机⽆法脱呢?⼿动脱壳!基础知识1.PUSHAD (压栈)代表程序的⼊⼝点,2.POPAD (出栈)代表程序的出⼝点,与PUSHAD想对应,⼀般找到这个OEP就在附近3.OEP:程序的⼊⼝点,软件加壳就是隐藏了OEP(或者⽤了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以⽴刻脱壳。
脱壳的⽅法清单⽅法⼀:单步跟踪法1.⽤OD载⼊,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。
也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下⼀句代码处按F4(或者右健单击代码,选择断点——>运⾏到所选)4.绿⾊线条表⽰跳转没实现,不⽤理会,红⾊线条表⽰跳转已经实现!5.如果刚载⼊程序,在附近就有⼀个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运⾏到某个CALL程序就运⾏的,就在这个CALL中F7进⼊7.⼀般有很⼤的跳转(⼤跨段),⽐如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的⼀般很快就会到程序的OEP。
介绍下加壳识别壳破壳的方法
介绍下加壳识别壳破壳的方法加壳是指在软件应用程序中,使用一种技术将其原始代码进行保护和加密,以防止非法复制、修改或逆向工程。
加壳技术可以对应用程序进行多种不同的保护措施,例如加密,混淆,虚拟机等,使得破解者难以破解原始代码。
然而,加壳也带来了为开发者和研究人员分析应用程序带来的困难,因此,识别和破解加壳成为了逆向工程的一个重要领域。
在识别壳并进行破壳的过程中,可以采用多种方法和技术。
下面将介绍一些常见的加壳识别与破壳方法。
1. 静态分析:静态分析主要是通过分析目标应用程序的可执行文件,以了解其结构和特征,从而确定是否使用了加壳技术。
常用的静态分析工具包括IDA Pro、OllyDbg等。
静态分析的过程中,可以查看应用程序的导入表、导出表、标题信息等,通过对这些信息的分析,可以判断是否存在加壳行为。
2. 动态调试:动态调试是指在应用程序运行的过程中,通过调试器对其进行动态分析。
动态调试可以帮助分析人员观察程序的执行过程、内存变化、寄存器状态等,从而判断是否存在加壳行为。
常用的动态调试工具包括OllyDbg、WinDbg等。
3.特征匹配:加壳工具通常会在目标应用程序中插入一些特征代码或指令,用于解密和执行加壳后的代码。
通过分析这些特征代码的存在与否,可以判断目标程序是否加壳。
例如,一些加壳工具会在代码中插入字符串或控制流混淆指令,通过检测这些特征代码的存在,可以识别加壳壳。
4.元数据检测:一些加壳工具会修改目标应用程序的元数据信息,例如PE文件头中的相关字段。
通过比较目标程序的元数据信息与原始程序的差异,可以判断是否存在加壳行为。
5.虚拟机检测:一些加壳工具使用了虚拟机技术,将原始代码转化为虚拟指令集,以增加破解难度。
通过动态执行目标应用程序,并对其执行过程进行监测和分析,可以检测虚拟机指令的存在,并进一步破解加壳。
6. Dump内存:一旦确定目标程序使用了加壳技术,可以通过Dump 内存的方式,将内存中的加壳代码和解密数据导出到磁盘上。
c++ 壳的编写
C++是一种高效、通用的编程语言,常用于开发各种软件,包括壳(Shell)。
编写C++壳需要掌握基本的C++语法和编程技巧,同时还需要了解操作系统和Shell的基本概念。
在编写C++壳时,首先需要确定壳的功能和需求,然后设计壳的架构和界面。
可以使用图形界面库或命令行接口来实现壳,具体取决于需求和目标用户。
编写C++壳的代码时,需要考虑到操作系统的API和Shell的特性,以便实现各种功能,如文件操作、进程管理、网络通信等。
同时,还需要注意代码的可读性和可维护性,以便于其他开发人员理解和修改代码。
最后,需要对壳进行测试和调试,以确保其功能正常、性能良好,并且没有安全漏洞。
测试可以使用自动化工具或手动进行,根据需求和实际情况选择适合的方法。
加壳说明1 (1)
2012-7-21
此处添加公司信息
增长最快的明星IT公司
LOGO
后端保险交易服务供应商Ebix公司
排名:第19位 连续在榜年数:3年 Ebix公司近期开展了一系列收购活动,有意成为后端保 险交易领域世界领先供应商。这家为保险业提供软件和电 子商务交易的公司(其71%的销售收入来自在线保险交易) 过去3年间始终雄踞于《财富》杂志编制的这份榜单之上, 并在2009至2010年间高居前5名。2010年,其销售收入相比 2009年增长35%,达到1.322亿美元。 但是,它一路走来并非总是坦途。Ebix公司已针对外界 攻击积极反击,其一是严正谴责所谓该公司报告涉嫌误导 的指责,其二是抨击近期一项称公司虚报账目达20万美元 的起诉。公司称,这一起诉毫无根据,同时也微不足道, 因为所涉金额相对较小。
LOGO
加壳基本说明1
增长最快的明星IT公司
LOGO
高知特信息技术公司
排名:第79位 连续在榜年数:9年 这家全球性IT公司业务无所不包,从服务器维护到贷款 程序处理再到商业流程外部服务。2003年,它首次亮相于 《财富》杂志(Fortune)“增长最快公司”榜单。此后, 它每年都会在该榜单牢牢占据一席之地。 今年,它位于榜单的末四分之一处,不像多数年份里排 位那么高了,但是2010年对它而言仍然是个好年头。公司 销售收入增长了40%,创纪录地新增120家客户,还雇佣了 25,000名员工。这家总部位于新泽西的公司多数员工远在 印度工作,印度的外包需求强劲,公司收获颇丰。
2012-7-21 此处添加公司信息
EMC——飞上枝头变凤凰
LOGO
EMC连续第二年荣膺“全球最受赞赏公司”计算机亚军, 仅次于苹果,超越HP、戴尔,它高举“云计算”和“大数 据”大旗,成为美国眼下最热门的科技公司。 不论走到哪里,你都会听到云,云已经成为IT界无人 不谈的字眼,而海量数据将变的更大,查找海量数据就像 是大海捞针。大数据和云计算的火爆甚至催生了新的行 业——数据科学家,帮助公司从销售报告、客户社交网络、 甚至语音电话等大数据中获取、分类整理并且加以应用。 《财富》杂志报道称,EMC在去年召开了首届数据科学家峰 会,此后,数据科学就变得异常火爆起来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主要内容:生成界面,完成打开文件对话框。
首先说一下写作原因。最初学习加壳技术,网上确实能找到一些源代码,但90%的没有注释,所以很多代码都看不懂。即使某个函数大体功能知道,但其中的小细节由于没有注释,也不知道作者的用途是什么,所以这一过程相当痛苦。当时对于我来说,一个简单的加壳程序也是相当复杂。有时候想修改他们的程序,但程序结构牵一发而动全身,不得不放弃。有些程序前面90%的代码都在做铺垫和打基础,而最后的10%是合并功能,往往我们在分析前面的90%中的20%就没有耐心了,因为铺垫太多,让我们感觉没有成就感,感觉不到那么多代码是干嘛的。所以本文在写作时,每一部分都会实实在在的实现一部分功能,让我们有些成就感,这样才有兴趣。写此文是给像我一样想写壳却无从下手的人一个参考。不过本人现在也是研究阶段,能力有限,文章一方面是总结一下自己,另一方面也希望和大家多多交流。
修改属性后的控件ID和标题如下:
控件类型
ID值
标题
组框
IDC_STATIC
请选择文件
组框
IDC_STATIC
文件处理信息
按钮
IDC_BUTTON_OPENFILE
选择文件
按钮
IDC_BUTTON_PACKING
开始加壳
按钮
IDC_BUTTON_ABOUT
关于本程序
编辑框
IDC_EDIT_
无
Rich编辑框
AfxInitRichEdit();
//Standardinitializationﻫ //Ifyou are notusing these features andwishtoreduce the size
//of yourfinal executable, youshould remove from thefollowing
IDC_RICHEDIT_PROCINFO
无
对话框
IDD_PEPACKER_DIALOG
PEPacker V1.0
设置好的界面如下图所示:
现在按F7编译,CTRL+F5运行一下,发现程序好没有动静。什么反应也没有,如果把RichEdit删除掉,再编译,再运行就可以。
这个问题是由于RichEidt没有初始化引起的,微软的说法是要在APP的初始化函数中加入初始化函数在加入。
在classview视图中,展开CPEPackerApp类,双击InitInstance()函数,在AfxEnableControlContainer();后面添加代码AfxInitRichEdit();,添加后的函数代码如下:
BOOL CPEPackerApp::InitInstance()ﻫ{
AfxEnableControlContainer();
然后按F7组建(编译)程序,可以从IDE的提示窗口中看到是否生成成功,按CTRL+F5程序是能够正常运行的,不过是一个什么都没有的对话框。现在我们要添加元素了。
添加两个组框、一个编辑框、三个按钮、一个Rich编辑框。现在修改其属性。
在对话框上点击右键,选择“属性”,打开属性对话框,在对话框的左上角有个像钉子一样的图标,点击一下,这样属性对话框就会像钉子一样保持可见了,我们就不需要每修改一个控件属性的时候就点一下右键选择了。
// the specificinitializationroutines you do notneed.
此时再F7编译,CTRL+F5运行,就可以看到程序正常运行了。
再修改一下对话框的属性,右键,选择“属性”后,在“样式”标签中,勾选上“最小化框[N]”,这样对话框就可以最小化了。当然你还可以选择其它属性。
现在来添加成员变量。在编辑框上点击右键,选择“建立类向导……”,打开类向导对话框,然后选择“MemberVariables”标签。
注意Project:里面是否是PEPacker,Class name:里面是否是CPEPackerDlg,然后在ControlIDs:里面找到IDC_EDIT_,双击。或者点击右边的“AddVarible...”按钮,在“AddMember Varible”对话框中添加成员变量。变量名为"m_”,Category选择"Value”,变量类型选择"CString”,然后确定。用同样的方法给控件IDC_RICHEDIT_PROCINFO添加成员变量。变量名为m_RichEditProcInfo,注意category选择Control,变量类型为CRichEditCtrl。最后确定。
//TODO: Addyourcontrol notificationhandlercodehereﻫ
}
此时在此函数中添加如下代码:代码我会作注释。
ﻫvoidCPEPackerDlg::OnButtonOpenfile()ﻫ{ﻫ//TODO:Addyourcontrol notificationhandlercode hereﻫ//设置文件过滤,默认打开哪些文件类型,最后“||”结束。
双击“选择文件”按钮,弹出添加程序函数对话框,函数名你为:OnButtonOpenfile,我们确定即可,使用默认的,当然也可以修改。此时来到了PEPackerDlg.cpp文件中,界面默认的位置是刚刚添加的函数编辑处。代码如下:
voidCPEPackerDlg::OnButtonOpenfile()ﻫ{
壳的理论我就不多说了。一开始就说一大堆理论同样会使学习失去兴趣,我就喜欢边动手边理论。开始吧。
打开VC++6.0,新建工程,工程名称“PEPacker”,选择“MFC AppWizard(exe)”,下一步,选择基于对话框的应用程序。在对话框中删除默认的“确定”、“取消”按钮,还有默认的文本信息。如下图所示:
使用VC自己动手编写加壳程序
———————————————————————————————— 作者:
———————————————————————————————— 日期:
使用VC自己动手编写加壳程序
ﻫ阅读对象:想写壳的新手。高手掠过,本文仅限于写壳入门。
基本要求:了解VC++6.0基本使用方法;了解PE格式,不熟悉的地方能够通过查阅资料弄懂;