使用VC自己动手编写加壳程序
- 格式:doc
- 大小:547.00 KB
- 文档页数:26
第一部分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加壳脱壳程序源码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等。
这些工具可以方便地对可执行文件进行加壳和脱壳操作,但也容易被黑客用来破解软件。
总结:软件加壳技术是一种常用的软件保护手段,通过加密和封装原始可执行文件,增加软件的安全性和防破解能力。
加壳脱壳工具能够方便地实现对可执行文件的加壳和脱壳操作,但需要注意合理的加密算法和技术选型,以提高软件的安全性。
主题: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++ 语言实现加壳原理,需要考虑以下几个步骤:
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 是一款功能强大的集成开发环境,可以帮助开发者进行C/C++ 程序的开发。
本文将介绍 VC 的基本使用方法,帮助初学者快速上手。
1. 安装 VC。
首先,你需要从官方网站下载 VC 的安装包,并按照提示进行安装。
安装完成后,打开 VC,你将看到一个简洁的界面,包括菜单栏、工具栏、编辑区和输出区。
2. 创建新项目。
在 VC 中,你可以创建新项目来进行开发。
点击菜单栏中的“文件”选项,选择“新建”,然后选择“项目”。
在弹出的对话框中,选择项目类型(如控制台应用程序、Windows 桌面应用程序等),填写项目名称,点击“确定”即可创建新项目。
3. 编写代码。
在创建新项目后,你可以在编辑区编写代码。
VC 提供了丰富的代码编辑功能,包括代码高亮、自动补全、代码折叠等,可以大大提高编码效率。
4. 调试程序。
在编写完代码后,你可以点击工具栏中的“调试”按钮来进行程序调试。
VC 提供了强大的调试功能,可以帮助你快速定位和解决程序中的 bug。
5. 构建和运行程序。
当程序编写完成并通过调试后,你可以点击工具栏中的“生成”按钮来构建程序。
构建完成后,你可以点击“运行”按钮来运行程序,查看程序的运行效果。
6. 其他功能。
除了上述基本功能外,VC 还提供了许多其他功能,如版本控制、性能分析、代码重构等,可以帮助你更好地进行程序开发和维护。
总结。
通过本文的介绍,相信你已经对 VC 的基本使用方法有了一定的了解。
当然,VC 还有很多其他功能和技巧等待你去探索和学习。
希望本文能够帮助你快速上手 VC,并顺利进行 C/C++ 程序的开发工作。
祝你编程愉快!。
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]<<" ";}}指针:指针变量是存放内存地址的变量。