吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2505|回复: 5
收起左侧

[C&C++ 转载] 学破解第89天,《C++之分析VS2010编译器下C语言中文字符的表现形式及应用》

[复制链接]
小菜鸟一枚 发表于 2020-2-21 17:26

学破解第89天,《C++之分析VS2010编译器下C语言中文字符的表现形式及应用》

前言:
  一直对黑客充满了好奇,觉得黑客神秘,强大,无所不能,来论坛两年多了,天天看各位大佬发帖,自己只能做一个伸手党。也看了官方的入门视频教程,奈何自己基础太差,看不懂。自我反思之下,决定从今天(2019年6月17日)开始定下心来,从简单的基础教程开始学习,希望能从照抄照搬,到能独立分析,能独立破解。
  不知不觉学习了好几个月,发现自己离了教程什么都不会,不懂算法,不懂编程。随着破解学习的深入,楼主这个半吊子迷失了自我,日渐沉迷水贴装X,不能自拔。
==========申明:从第71天楼主开始水贴装X,帖子不再具有连续性,仅供参考,后续帖子为楼主YY专用贴!!!==========

立帖为证!--------记录学习的点点滴滴

0x1初识C语言中文字符

  1.自从学习C语言以来,一直有一个疑问,计算机都是以二进制01来存储数据的,我知道ASCII码表,所以能表示各种字符。来看下面一段代码:

int main()
{
        char str1[100] = "小菜鸟一枚";
        char str2[100] = "XCNYM";
        int i;
        int j;

        for(i = 0;str1[i];i++)
        {
                printf("%c",str1[i]);
        }
        cout << endl;

        for(j = 0;str2[j];j++)
        {
                printf("%c",str2[j]);
        }
        cout << endl;

        printf("小菜鸟一枚:%d\n",i);
        printf("XCNYM:%d\n",j);

        system("pause");
        return 1;
}

输出结果:
小菜鸟一枚
XCNYM
小菜鸟一枚:10
XCNYM:5
请按任意键继续

  2.看着输出貌似没什么不对,字符串是汉字,所以它输出汉字,字符串是字母,输出字母。
1)我们仔细看一下:
小菜鸟一枚的for循环执行了10次,打印了5个字???

2)打印两次打出一个字符?那第一次打印的是什么,第二次打印的又是什么???

小结:通过这串代码认识到1个中文占2字符长度。

0x2C语言中文字符的解析

  1.前面的分析我产生了疑问,那我写这样一段代码来看看:

char str1[100] = "小菜鸟一枚";
        char str2[100] = "XCNYM";

        int i = 0;
        int j = 0;

        printf("%c\n",str1[0]);//如果这里不加\n输出“小”字
        printf("%c\n",str1[1]);

输出结果:
?
?

  2.看到这里我猜测一个汉字是两个问号组成的?
1)两个问号显然不能组成汉字的
2)ASCII码表中每个字符都有一个对应的数值表示
那么我将“小“字用数字输出看看是多少!
-48
-95

        printf("%c%c\n",-48,-95);

输出结果:

  3.我再来验证一下,换成16进制看看,看代码:

char str1[100] = "小菜鸟一枚";

        int i = 0;
        int j = 0;

        for(i = 0; str1[i];i++)
        {
                printf("%X\t",str1[i]);
        }

        printf("%c%c%c%c%c%c%c%c%c%c\n",0xFFFFFFD0,0xFFFFFFA1,0xFFFFFFB2,0xFFFFFFCB,0xFFFFFFC4,0xFFFFFFF1,0xFFFFFFD2,0xFFFFFFBB,0xFFFFFFC3,0xFFFFFFB6);

        system("pause");

输出结果:
FFFFFFD0        FFFFFFA1        FFFFFFB2        FFFFFFCB        FFFFFFC4
FFFFFFF1        FFFFFFD2        FFFFFFBB        FFFFFFC3        FFFFFFB6
小菜鸟一枚
请按任意键继续. . .

小结:说明两组数字能过转化为汉字输出。

0x3汉字转数值在加解密方向的应用

  1.想想我们是不是最常见的置换算法,a,+1换成b,b+1换成c,我们汉字是不是也可以这样操作呢?

char str1[100] = "小菜鸟一枚";

        int i = 0;
        int j = 0;

        //加密
        for(i = 0; str1[i];i++)
        {
                str1[i] += 100;
                printf("%c",str1[i]);
        }
        cout << "加密完成!" << endl;

        //解密
        for(j = 0;str1[j];j++)
        {
                str1[j] -= 100;
                printf("%c",str1[j]);
        }
        cout << "解密完成!" << endl;

输出结果:
4/(U6'加密完成!
小菜鸟一枚解密完成!

  2.汉字转化为字母,转化为数字加密,因为汉字可以拆分成两个字符,所以我们可以逐个加密,只要范围在字母和数字的范围内即可。
-48
-95
例如上面两个数字分别加密成a和b,即使你还原成了这两个数字,也不一定能立马想到他是一个汉字吧。

0x4总结

  1.一直好奇那些算法能把中文文本加密成字母和数字,原来是因为中文在计算机内就是二进制表示,可以直接转化为数字表示。
  2.C语言中的数据类型是可以相互转化的。



PS:以上为我自己学破解过程中自己的总结,一字一字敲上去的,转载请注明出处,谢谢!

免费评分

参与人数 3吾爱币 +6 热心值 +3 收起 理由
宇称不守恒 + 1 谢谢@Thanks!
夏南离 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

alittlebear 发表于 2020-2-21 17:56
小菜鸟一枚 发表于 2020-2-21 17:54
没有没有,你都会汉化软件了,我还在这刚开始学点编程知识

不瞒你说,汉化全靠机翻,而且我从2018年就想学python,说到现在,只会基本的if, print,吾爱的入门教程,看了两天就不碰了。。。
狮子歌歌 发表于 2020-2-21 17:33
alittlebear 发表于 2020-2-21 17:51
666,菜鸟还在坚持呀。

比我厉害多了,看了几分钟教程就继续来水帖了
杰克-鬼蝶 发表于 2020-2-21 17:51
感谢楼主的分享!
 楼主| 小菜鸟一枚 发表于 2020-2-21 17:54
alittlebear 发表于 2020-2-21 17:51
666,菜鸟还在坚持呀。

比我厉害多了,看了几分钟教程就继续来水帖了

没有没有,你都会汉化软件了,我还在这刚开始学点编程知识
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 16:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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