吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10153|回复: 6
收起左侧

[C&C++ 转载] 利用编译器实现汇编代码转换机器码/shellcode

[复制链接]
迷雾 发表于 2018-2-17 12:34
来52那么久了,一直潜水。。第一次发贴。。

先上效果图
1.jpg
原理就是
利用把汇编代码插入到cpp源文件种利用vc编译器生成目标程序,再从相应的位置种读取我们的机器码就行了,是不是很简单。。
代码送上
窗口为了方便直接易语言写了
注意:代码中中文部分请自行更改,不要copy  直接f5
[C++] 纯文本查看 复制代码
#include "windows.h"
/* 特征码搜索 */

union MyUnion
{
	CHAR code2[4];
	int code;
};
int main()
{
 
 
	/* 读入到内存 */
	DWORD dwFileSize = 文件_获取文件大小(TEXT("c:\\C.exe"));
	if (INVALID_FILE_SIZE == dwFileSize) { cout << "获取文件大小失败"; return 0; }

	/* 分配大小并读入 */
	 wstring strpath = 文件_取程序执行目录() + wstring(TEXT("\\c.exe"));
	 CHAR *pFilrBuff = new char[dwFileSize];
	 文件_读入文件((WCHAR*)strpath.data(), pFilrBuff);

	/* 特征码定位 */
	 CHAR *startCode = pFilrBuff + 0x1002;
     CHAR *endCode;
	/* 结尾需要搜索下 */
	/*此处代表结尾
	.text:00401003 59                                      pop     ecx
	.text:00401004 5B                                      pop     ebx
	.text:00401005 58                                      pop     eax
	.text:00401006 C3                                      retn
	*/
	MyUnion code;
	code.code2[0] = 0x59;
	code.code2[1] = 0x5b;
	code.code2[2] = 0x58;
	code.code2[3] = 0xc3;
	for (int n = 0; n <= 1000;n++)//搜索1000次找不到就算了
	{
		if (*((int*)(startCode + n)) == code.code)//找到
		{
			endCode = (startCode + n);
			break;
		}
	}
	/* 找到后输出两指针中间的数据即为机器码 */
	/* 例如  startCode此时指向51那个地方  endCode指向59
	.text:00401000 50                                      push    eax
	.text:00401001 53                                      push    ebx
	.text:00401002 51                                      push    ecx
	.text:00401003 B8 01 00 00 00                          mov     eax, 1
	.text:00401008 BB 02 00 00 00                          mov     ebx, 2
	.text:0040100D 59                                      pop     ecx
	.text:0040100E 5B                                      pop     ebx
	.text:0040100F 58                                      pop     eax
	.text:00401010 C3                                      retn
	*///输出机器码
	cout << "The shellcode is:";
	while (++startCode != endCode)
	{
		cout << hex << (int)((unsigned char)*startCode)<<" ";
	}

	/* 删除 */
	delete []pFilrBuff;
	MessageBoxA(NULL, "生成完毕!", NULL, MB_OK);
	return 0;
}


易语言部分更简单了
.版本 2

.子程序 _按钮1_被单击

' 生成cpp源文件
写到文件 (“C.CPP”, 到字节集 (#常量1 + #换行符 + 编辑框1.内容 + #换行符 + #常量2))
' 调用vc编译器生成程序
运行 (“编译.bat”, 假, )
运行 (“Main.exe”, 假, )

编译.bat 会用vc编译器编译C.CPP  
然后Main.exe 从编译的文件种读取机器码

完。。。

如果你觉得有用的,,记得点个赞再走 。。

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
Honey丶Linux + 2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 迷雾 发表于 2018-2-17 12:36
自顶。。。评论多的话打包全部附件。。
 楼主| 迷雾 发表于 2018-2-17 15:23
Anonymous、 发表于 2018-9-17 13:24
Anonymous、 发表于 2018-9-17 13:41
不错,是个好帖子!
 楼主| 迷雾 发表于 2018-9-17 22:37
源码放在老家电脑硬盘了,可能国庆回家带过来
LjeA 发表于 2019-8-22 10:01
原来是这样做出来的,最近一直在好奇什么是特征码,原来就是汇编变成机器代码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 13:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表