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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11655|回复: 14
收起左侧

[C&C++ 转载] 【笔记】C++ 实现 易语言到字节集

[复制链接]
s3233431 发表于 2016-11-25 19:59
本帖最后由 s3233431 于 2016-11-25 20:17 编辑


主要功能类似与易语言到字节集这个命令
应用到的知识点C++ STL的 stirng sstream 和 tmeplate
这是要包含的头文件
[C++] 纯文本查看 复制代码
//系统函数
#include <windows.h>
//字符串
#include <string>
//字符串流
#include<sstream>
using std::string;
using std::wstring;
using std::stringstream;
using std::wstringstream;



下面这两个函数是进行转换可以转换成Unicode 和Ascii字符
对应的就是char * 和 Wchar*

[C++] 纯文本查看 复制代码
template<class out_type, class in_value>
inline out_type Convert(const in_value & t)
{

        stringstream stream;

        stream << t;//向流中传值

        out_type result;//这里存储转换结果

        stream >> result;//向result中写入值
        
        return result;

}
template<class out_type, class in_value>
inline out_type ConvertW(const in_value & t)
{

        wstringstream stream;

        stream << t;//向流中传值

        out_type result;//这里存储转换结果

        stream >> result;//向result中写入值

        return result;

}



用法 :
[C++] 纯文本查看 复制代码


//可以是double类型 float类型
int i=123;
string str;
str = Convert<string>(i);
cout<<str;
//即可转把整数 i 换成  string Ascii字符串
//可以是double类型 float类型
int ii=123;
wstring str;
str = ConvertW<wstring>(i);
cout<<str;

//即可转把整数 i 换成  wstring Unicode字符串


易语言到字节集 下面代码是我自己实现的主要代码,写的有点乱,大家凑合看下,或者改进一下代码
还没有实现float类型 和double类型转换,有兴趣的朋友可以自己试试

[C++] 纯文本查看 复制代码
//T in_value 要转换成字节集的数据
//UINT &uSize 返回转换后PBYTE的大小
template<class T>
inline const PBYTE ToBit(T in_value,OUT UINT &uSize)
{

        //str把模板in_value值保存转换成string类型的字符串
        //str1保存临时文本用于交换值
        string str, str1;
        //判断类型是否为整数
        if (typeid(in_value) == typeid(int))
        {
                //保存转换16进制的文本
                char hex[10];
                //转换成16进制并强制显示8个字符长度
                sprintf_s(hex, 10, "%.8x", in_value);
                //转换成string字符串类型
                str = hex;
                //一个整数4个字节,所以申请一个str字符串大小(8)/2 的BYTE指针
                //用作返回值
                BYTE * pStr = new BYTE[str.size() / 2];
                //数据容器
                int * i = new int[str.size() / 2];
                //读取2CHAR个为单位的字符串并转换成10进制
                for (UINT ii = 0; ii < str.size() / 2; ii++)
                {
                        //接收转换成10进制的值
                        int iii;
                        //读取子字符串
                        str1 = str.substr(ii * 2, 2); //读取2个字符
                                                                                  //把str1的值转换成10进制保存给iii变量
                        sscanf_s(str1.data(), "%x", &iii);//转换成10进制
                                                                                          //i数组把转换的10进制给临时保存其数值
                        i[ii] = iii;
                }

                //把的到的数值以内存的形式倒序保存到数组中
                for (UINT ii = 0; ii < str.size() / 2; ii++)
                {
                        //[str.size() / 2 - 1 - ii] 等于取的数组最后一个索引
                        //并且把值给变量iii保存
                        int iii = i[str.size() / 2 - 1 - ii];//倒转顺序
                                                                                                 //把iii的值赋值给返回的pStr BYTE数组[ii]的值
                        pStr[ii] = iii;
                        //获取BYTE pStr[]的大小
                        uSize = uSize + 1;
                }
                //删除申请的堆栈地址防止内存溢出
                delete[]i;
                return pStr;
        }
        //判断类型是否为Ascii字符串
        if (typeid(in_value) == typeid(const char *))
        {
                //文本到字节集
                //把模板参数in_value转换成stirng字符串
                str = Convert<string>(in_value);
                //申请一个str字符串大小的BYTE指针
                //用作返回值
                BYTE * pStr = new BYTE[str.size()];
                //循环复制给pStr
                for (UINT i = 0; i < str.size(); i++)
                {
                        //把字符转换成无符号CHAR
                        pStr[i] = (BYTE)str[i];//转换成无符号字符不然出负号
                        //获取BYTE pStr[]的大小
                        uSize = uSize + 1;
                }
                return pStr;
        }


}



用法:
[C++] 纯文本查看 复制代码
int main()
{
        const UCHAR* str;
        UINT i=0;
        CSystem sm;
        str = ToBit(123456,i);
        for (UINT ii = 0; ii < i; ii++)
        {
                //打印出类似与易语言的字节集数据
                //可以进行对比易语言的 调试输出 (到字节集 (123456))
                cout << (int)str[ii] << endl;
        }


        return 0;
}



笔记做到这里,希望得到各位大神的指点




有人问肯定会问有什么用我告诉一点
可以把有些写SHELLCODE代码的,懒得转换的可以直接用这函数进行转换
还有有些人写内存搜索的时候是不是只能搜索PBYTE 想搜索整数都觉得要重新写很多代码,
有了它也可以通过这个函数转换成 PBYTE直接传入参数匹配内存
至于还有什么用,就看各位同学的挖掘了

免费评分

参与人数 1热心值 +1 收起 理由
skywolf + 1 很不错

查看全部评分

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

 楼主| s3233431 发表于 2016-11-28 00:01
那该怎么办 发表于 2016-11-27 21:12
新手求问主函数里面CSystem类的作用是什么?这里没看到对象sm用来哪里了,楼主求解惑。

哦,那个是我自己定义的一个类,这个无所谓,测试用的
 楼主| s3233431 发表于 2016-11-25 21:01
旧时光; 发表于 2016-11-25 20:44
#(滑稽) 老哥我就想问问现在三方怎么搞定

一样的啊我反正没三方啊,不行就用MD5修改器修改下你的DLL
 楼主| s3233431 发表于 2016-11-25 20:01
写了一天好辛苦的……果然没人交流真的很累
zsl01 发表于 2016-11-25 20:16
谢谢,学习看看。支持一下。
夏520 发表于 2016-11-25 20:33
谢谢,学习看看。支持一下。
lavenders 发表于 2016-11-25 20:36
谢谢了   学习C++中
旧时光; 发表于 2016-11-25 20:44
#(滑稽) 老哥我就想问问现在三方怎么搞定
tym111 发表于 2016-11-25 20:47
这个很有意思啊  C写的
Do_zh 发表于 2016-11-25 20:49
值得学习。
liyongji2016 发表于 2016-11-25 21:20 来自手机
谢谢分享。
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-6-1 09:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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