手工加壳

Oyst3r 于 2023-12-29 发布

前言

如题,就是往程序里面注代码,然后实现一些小功能,拿最简单 MessageBox 做个示例

预热

正式加壳之前,记录一些需要掌握的知识

MessageBox()

功能:用于在 Windows 操作系统中弹出一个标准的对话框,显示信息、警告、错误提示等内容。

int MessageBox( HWND hWnd,LPCTSTR lpText, LPCTSTR lpCaption = NULL, UINT nType = MB_OK );

四个参数说明:

hWnd:表示窗口句柄,指定该对话框的所有者窗口;如果该参数为空(0/NULL),则该对话框不属于任何窗口
lpText:字符串,指显示在对话框中的内容
lpCaption:字符串,指对话框的标题;如果此参数为空,则默认使用“错误”作为标题
nType:指定显示按钮的数目及形式,表名使用的图标样式、缺省按钮是什么、以及消息框的强制回应等

注意的点:

call 与 jmp 指令的硬编码

由于 call 指令和 jmp 指令后面跟着的是想要去调用的函数地址或者跳转的地址,那 E8 和 E9 后面跟的 4 个字节是不是就是这个地址本身呢?不是!E8 和 E9 后面跟的地址数据是需要转换得到的,下面举例说明:

#include "stdafx.h"
void Function(int a,int b,int c,int d){
}
int main(int argc,char* argv[]){
    Function(1,2,3,4);
    return 0;
}