[原创]一次简单的手动加壳
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("hello world!");
return 0;
}
世界上人那么多 可能就会有一个因为你的文章而受到启发从而信心大增。
然后我开始写了,坚持到现在。
班上其他同学近期也开始写了 嘿嘿
嗯 他们都比我厉害。-------------------------------------------
准备工具:010editor 、 od 、 vs2012 、 lordpe
自己用VS任意编个程序 以:
#include "stdafx.h"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
MessageBox(0,L"Hello World!",L"bbs,pediy.com",MB_OK);
return 0;
}
为例。
将编译好的程序拖入lordpe 点击“区段”-右键“添加区段”:

点击新添加的区段-右键“编辑区段” 更改:
- 虚拟大小:00000200
- 物理大小:00000200

保存-确定。
将文件拖入010 菜单栏点击“编辑”-“覆盖插入”-“插入字节” 由上图新添加区段得
- 起始地址:7A00
- 大小:200

ctrl+s 保存。
我们拖入od 点击E(可执行模块) 得到基址:00B30000:

可求得新添加区段首地址为00B4C000 CTRL+G -回车来到此地址处 空格修改:
jmp 00B41078(入口点)

保存命名为:“mesgbox1.exe”。
将新保存的文件拖入lordpe 更改入口点为1c000:

保存-确定。
为了确定是否修改成功请点击程序是否可以正常运行:

增加代码段“可写入”属性:

拖入010加密:
选中代码段-十六进制的操作(加减号 如图)-二进制xor:


ctrl+s保存
修改后:

防止再次基址重定位 修改dll特征:

拖入OD“解密”:
0041C000 > 60 pushad ; 保存寄存器 0041C001 B9 003C0000 mov ecx,0x3C00 ; 循环次数 0041C006 BB 00100100 mov ebx,0x11000 ; 代码段起始位置 0041C00B BA 00004000 mov edx,mesgbox1.00400000 0041C010 03DA add ebx,edx 0041C012 8033 0F xor byte ptr ds:[ebx],0xF 0041C015 43 inc ebx 0041C016 ^ E0 FA loopdne short mesgbox1.0041C012 0041C018 61 popad ; 恢复寄存器 0041C019 - E9 5A50FFFF jmp mesgbox1.00411078 ; 跳转至入口点
重命名为“mesgbox2.exe”。
点击查看是否可以运行(PS:没成功继续修改 我这里已成功
)。拖入OD:

完。
-----------------
附件.rar
