吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5030|回复: 17
收起左侧

[C&C++ 转载] C++调用易语言VMP加密SDK标记的思路之一

[复制链接]
bester 发表于 2019-12-7 19:21
不想导入lib库以及导入vmp.h,就是懒,然后就有了下面这个方法,加密方式,其实就两步,第一步复制粘贴asm,第二步拖到替换工具
易语言程序内置VMP加密标记的方法:
VMProtect.易的SDK
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP保护开始标志
'关键代码
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP保护结束标志


翻译成16进制则:

EB 10 56 4D 50 72 6F 74 65 63 74 20 62 65 67 69 6E 00   size:18 "VMProtect begin"

EB 0E 56 4D 50 72 6F 74 65 63 74 20 65 6E 64 00  16 size:16 "VMProtect end"

那么C++由于没有置入代码功能,所以我们得另想方式将这18+16个字节的机器猫写入到函数内,首先将C++的随机基质给关闭掉,然后用asm写18+16个NOP,代码如下

[C++] 纯文本查看 复制代码
int main()
{
	_asm
	{
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		
    }
	MessageBox(NULL, LPCWSTR(L"C++调用E的SDK"), LPCWSTR(L"C++调用E的SDK"), NULL);
	_asm
	{
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;
		nop;


	}
}


最后的话就是在OD中将18+16个字节,用vmp加密标记修改一下即可,如果说是批量的话,那也很简单,用易语言读入文件,搜索18个NOP的位置,替换之,再搜索16个NOP的位置,再替换
如果算法有难度,可以将NOP改成无意义汇编语句,如:mov eax,eax等等,搜索字节集就好

效果图:
[Q{}}L[8TL8C7YXB7Y(WG]T.png

X]`~EXC7}K3MB{1_3PSCZ_3.png


OHNWV2OWA$N29N}[M8Y}OWI.png

然后希望大家集思广益,能提供一下更简便的方法,主要是不想调用lib和头文件,想直接用机器码解决问题!

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
乄落日乀 + 1 + 1 热心回复!

查看全部评分

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

limlibgiag 发表于 2019-12-7 20:05
[C++] 纯文本查看 复制代码
#include <iostream>
#include <Windows.h>

int main()
{
	_asm
	{
		_emit 0xEB
		_emit 0x10
		_emit 0x56
		_emit 0x4D
		_emit 0x50
		_emit 0x72
		_emit 0x6F 
		_emit 0x74
		_emit 0x65
		_emit 0x63
		_emit 0x74
		_emit 0x20
		_emit 0x62
		_emit 0x65
		_emit 0x67
		_emit 0x69
		_emit 0x6E
		_emit 0x00
	}
	MessageBox(NULL, LPCWSTR(L"C++调用E的SDK"), LPCWSTR(L"C++调用E的SDK"), NULL);
	_asm
	{
		_emit 0xEB
		_emit 0x0E
		_emit 0x56
		_emit 0x4D
		_emit 0x50
		_emit 0x72
		_emit 0x6F
		_emit 0x74
		_emit 0x65
		_emit 0x63
		_emit 0x74
		_emit 0x20
		_emit 0x65
		_emit 0x6E
		_emit 0x64
		_emit 0x00
	}
}
gunxsword 发表于 2019-12-7 21:19
bester 发表于 2019-12-7 21:11
不懂asm,没办法的呀,我就知道asm可以添加汇编指令,其他的不会玩呀哥

这个写法,百度一下就有的,很老的东西啦,老版本的VMP,就是这么标记的,只是新版本,也支持!
具体的原理,上面的这些人,已经说的比较清楚了,这个就是第一个回贴的人的方法的简化版本!其实意思都一样!VMP就是搜索这个标志来处理这些函数,不过还是用头文件和LIB好一点,因为他还提供了很多其它的功能!不只是标记函数!一起交流!互相学习!
头像被屏蔽
加油 发表于 2019-12-7 20:13
gunxsword 发表于 2019-12-7 20:52
__asm  {db 0xEB,0x10,'VMProtect begin',0};//标记开始
__asm  {db 0xEB,0x0E,'VMProtect end',0};//标记结束

最后想吐槽一句,楼主的方法....不知道比引入LIB和加个头文件...要麻烦多少!!!!
wangyujie96 发表于 2019-12-7 20:55
EB字节码转换汇编就是jmp,EB 10就是jmp到0x10字节后。。。。。。。。
 楼主| bester 发表于 2019-12-7 21:02
wangyujie96 发表于 2019-12-7 20:55
EB字节码转换汇编就是jmp,EB 10就是jmp到0x10字节后。。。。。。。。

剩下的这串ascii 字符串怎么在C++的asm表达出来呢?
 楼主| bester 发表于 2019-12-7 21:11
本帖最后由 bester 于 2019-12-7 21:13 编辑
gunxsword 发表于 2019-12-7 20:52
__asm  {db 0xEB,0x10,'VMProtect begin',0};//标记开始
__asm  {db 0xEB,0x0E,'VMProtect end',0};//标记 ...

不懂asm,没办法的呀,我就知道asm可以添加汇编指令,其他的不会玩呀哥
 楼主| bester 发表于 2019-12-7 21:19
gunxsword 发表于 2019-12-7 20:52
__asm  {db 0xEB,0x10,'VMProtect begin',0};//标记开始
__asm  {db 0xEB,0x0E,'VMProtect end',0};//标记 ...

然后我还有一个问题,如果这个字符串是unicode 不是ascii 代码该怎么改啊?
 楼主| bester 发表于 2019-12-7 21:21
gunxsword 发表于 2019-12-7 21:19
这个写法,百度一下就有的,很老的东西啦,老版本的VMP,就是这么标记的,只是新版本,也支持!
具体的原理,上 ...

老哥,unicode的字符串怎么置入?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-29 21:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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