谁了解代码混淆器?

MagiSu 2012-09-27 10:25:57
最近上头的意思是要我和一个印度阿三合作,鉴于此人有骗功劳前科,所以想项目提交的代码只保留接口,内部实现用混淆器处理掉,我个人保留清晰的源码。不知谁对这个方向有所了解?
...全文
276 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-09-28
  • 打赏
  • 举报
回复
奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
大熊猫侯佩 2012-09-28
  • 打赏
  • 举报
回复
直接加密,就是加壳即可。
mLee79 2012-09-27
  • 打赏
  • 举报
回复
我曾经打算写一个, 不过没有完工就没写了, 包含以下的部分:
1) 自身敏感依赖的加密算法内核, 包含对称加密, 随机数发生器, 散列算法, RSA , 函数的输出都
是自身二进制代码的函数, 以保证内核部分不能被修改.
2) 一个用DebugAPI(如WaitForDebugEvent, ptrace 等)方式与主程序通讯的受保护的进程( 本来做成
内核模块更好, 只是太容易蓝屏, 还是算了 ) 通讯( 通过 SIGTRAP , int 3 , DRX寄存器) , 核
心部分的代码都会注入到这个进程中运行以防止被跟踪.
3) 一个预处理器, 会对程序中一些重要的部分做混淆和加密.
3a) 对程序中出现的常量做保护
比如 uint32 magic = XSA_SECRET_CONST( 1001 );
被预处理后将会成为类似的代码:
uint32 magic = (XSA_hash( 0x12345678 ) + 0x56789abc);
从而真正的常数不会在源代码以及可执行文件中出现.

3b) 加密并在保护的进程中运行重要的核心函数, 比如, 一个重要的函数:

XSA_SECRET_FUNCTION_BEGIN( foobar )

static int func( .... )
{
}

int foobar( void* context , void* param )
{
.....
return func( .... );
}

XSA_SECRET_FUNCTION_END()

将被预处理器处理为:

int foobar( void* context , void* param )
{
// 现在的 shellCode 是明文, 实际使用中应该是用内置的加密算法加密过后的数据
static const char* shellCode =
"\x55\x57\x56\x53\x83\xec\x18\x89\x54\x24\x08\x8b\x44\x24\x08\x83"
"\xc2\x14\x89\x54\x24\x0c\x8b\x08\x85\xc9\x0f\x85\x10\x01\x00\x00"
"\x8b\x70\x14\x89\xc2\xbf\x20\x37\xef\xc6\x8b\x44\x24\x08\x83\xc2"
"\x18\x89\x54\x24\x14\x8b\x50\x18\x8b\x40\x04\x89\x04\x24\x8b\x44"
"\x24\x08\x8b\x40\x08\x89\x44\x24\x04\x8b\x44\x24\x08\x8b\x48\x0c"
"\x8b\x58\x10\x90\x8d\x74\x26\x00\x89\xf0\x89\xf5\xc1\xe0\x04\xc1"
"\xed\x05\x01\xc8\x01\xdd\x31\xe8\x8d\x2c\x37\x31\xe8\x29\xc2\x89"
"\xd0\x89\xd5\xc1\xe0\x04\xc1\xed\x05\x03\x04\x24\x03\x6c\x24\x04"
"\x31\xe8\x8d\x2c\x3a\x31\xe8\x29\xc6\x81\xc7\x47\x86\xc8\x61\x75"
"\xc7\x8b\x44\x24\x08\xbf\x20\x37\xef\xc6\x89\x50\x18\x8b\x54\x24"
"\x0c\x89\x70\x14\x8b\x44\x24\x0c\x83\xc2\x08\x89\x54\x24\x10\x8b"
"\x70\x08\x8b\x50\x0c\x8d\x76\x00\x89\xf0\x89\xf5\xc1\xe0\x04\xc1"
"\xed\x05\x01\xc8\x01\xdd\x31\xe8\x8d\x2c\x37\x31\xe8\x29\xc2\x89"
"\xd0\x89\xd5\xc1\xe0\x04\xc1\xed\x05\x03\x04\x24\x03\x6c\x24\x04"
"\x31\xe8\x8d\x2c\x3a\x31\xe8\x29\xc6\x81\xc7\x47\x86\xc8\x61\x75"
"\xc7\x8b\x44\x24\x0c\x89\x50\x0c\x8b\x54\x24\x08\x89\x70\x08\x8b"
"\x42\x14\x8b\x54\x24\x10\x29\x02\x8b\x54\x24\x08\x8b\x42\x18\x8b"
"\x54\x24\x0c\x29\x42\x0c\x8b\x44\x24\x14\x81\x2a\xb3\x46\x33\x76"
"\x81\x28\xb4\x46\x33\x76\x83\xc4\x18\x31\xc0\x5b\x5e\x5f\x5d\xc3"
"\x81\x02\xb3\x46\x33\x76\x31\xff\x8b\x54\x24\x08\x81\x40\x18\xb4"
"\x46\x33\x76\x83\xc0\x1c\x89\x44\x24\x0c\x8b\x42\x14\x8b\x54\x24"
"\x0c\x01\x02\x8b\x54\x24\x08\x8b\x42\x18\x01\x42\x20\x89\xd0\x8b"
"\x40\x04\x8b\x72\x14\x8b\x52\x18\x89\x04\x24\x8b\x44\x24\x08\x8b"
"\x40\x08\x89\x44\x24\x04\x8b\x44\x24\x08\x8b\x48\x0c\x8b\x58\x10"
"\x89\xd5\x81\xef\x47\x86\xc8\x61\xc1\xe5\x04\x03\x2c\x24\x8d\x04"
"\x17\x31\xe8\x89\xd5\xc1\xed\x05\x03\x6c\x24\x04\x31\xe8\x01\xc6"
"\x89\xf0\x89\xf5\xc1\xe0\x04\xc1\xed\x05\x01\xc8\x01\xdd\x31\xe8"
"\x8d\x2c\x3e\x31\xe8\x01\xc2\x81\xff\x20\x37\xef\xc6\x75\xc1\x8b"
"\x44\x24\x08\x31\xff\x89\x70\x14\x8b\x70\x1c\x89\x50\x18\x8b\x44"
"\x24\x0c\x8b\x50\x04\x8d\x76\x00\x89\xd5\x81\xef\x47\x86\xc8\x61"
"\xc1\xe5\x04\x03\x2c\x24\x8d\x04\x17\x31\xe8\x89\xd5\xc1\xed\x05"
"\x03\x6c\x24\x04\x31\xe8\x01\xc6\x89\xf0\x89\xf5\xc1\xe0\x04\xc1"
"\xed\x05\x01\xc8\x01\xdd\x31\xe8\x8d\x2c\x3e\x31\xe8\x01\xc2\x81"
"\xff\x20\x37\xef\xc6\x75\xc1\x8b\x44\x24\x08\x89\x70\x1c\x8b\x44"
"\x24\x0c\x89\x50\x04\x83\xc4\x18\x31\xc0\x5b\x5e\x5f\x5d\xc3\x44";

return vPLD_download_and_run( shellCode , context , param );
}




MagiSu 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

要写就直接写混乱代码
这个本事大家都有吧。
[/Quote]

这个本事是有
可是以后要修改我就没本事了。
taodm 2012-09-27
  • 打赏
  • 举报
回复
要写就直接写混乱代码
这个本事大家都有吧。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧