发新帖我要提问
12
返回列表
打印
[51单片机]

keil**的问题

[复制链接]
楼主: Cjy_JDxy
手机看帖
扫描二维码
随时随地手机跟帖
21
Cjy_JDxy|  楼主 | 2020-3-9 13:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
ddllxxrr 发表于 2020-3-9 11:28
楼主怎么**到2033年地

注册机,新的。

使用特权

评论回复
22
strang| | 2020-3-10 08:29 | 只看该作者
新的不是到2032年嘛?

使用特权

评论回复
23
ddllxxrr| | 2020-3-10 11:32 | 只看该作者
楼主用的是不是WIN10,我觉得WIN10不稳定,我现在把我的系统统统装到WIN7

使用特权

评论回复
24
Cjy_JDxy|  楼主 | 2020-3-10 13:06 | 只看该作者
strang 发表于 2020-3-10 08:29
新的不是到2032年嘛?

是啊,我也很奇怪

使用特权

评论回复
25
Cjy_JDxy|  楼主 | 2020-3-10 13:09 | 只看该作者
ddllxxrr 发表于 2020-3-10 11:32
楼主用的是不是WIN10,我觉得WIN10不稳定,我现在把我的系统统统装到WIN7

WIN10

使用特权

评论回复
26
m564522634| | 2020-3-10 15:45 | 只看该作者
没有**

使用特权

评论回复
27
William1994| | 2020-3-15 12:22 | 只看该作者
分析了一下,是Keil的一个bug。
keil的序列号是0~9和A-Z拼成的36进制,但是把O去掉了,变成的35进制,使用strtol取数。你界面上输入含有O的序列号的时候,自动按O变为0进行兼容。
而注册机在计算的时候,后面的随机数处理的时候去掉了O但是没有把后面的减去1(这个和keil的算法一致)。
所以序列号解压缩后的年的那一位如果为Z(35+1988=2033),则会有这个现象。
这个bug的概率是1/36=3%左右。
点一下重新生成序列号,就好了。
EDGE大侠做这个注册机的时候没有做详细测试,或者它的测试以界面显示为基准的。
@Cjy_JDxy  你换回keil5吧,同一个电脑,同一个序列号就可以了。
@叶春勇
@airwill  你的说法是对的。

另外看了一下computer ID的生成算法,百度了一下GUID的函数发现竟然是为了支持win95下获取MAC地址,膜拜中。
注册后写注册表的错误信息没有报出来,只保存到自己的日志里,差评。没有管理员权限等情况下都不知道为什么,加个提示信息多么友好啊。

使用特权

评论回复
28
Cjy_JDxy|  楼主 | 2020-3-15 13:05 | 只看该作者
William1994 发表于 2020-3-15 12:22
分析了一下,是Keil的一个bug。
keil的序列号是0~9和A-Z拼成的36进制,但是把O去掉了,变成的35进制,使用s ...

谢谢,我ARM用的keil5,51用keil4,可以了。

使用特权

评论回复
29
airwill| | 2020-3-18 07:08 | 只看该作者
William1994 发表于 2020-3-15 12:22
分析了一下,是Keil的一个bug。
keil的序列号是0~9和A-Z拼成的36进制,但是把O去掉了,变成的35进制,使用s ...

楼主研究得够深入,  点赞支持一下.

使用特权

评论回复
30
叶春勇| | 2020-3-18 08:00 | 只看该作者
楼主用Ollydbg,动态分析,还是反汇编静态分析的?

使用特权

评论回复
31
Cjy_JDxy|  楼主 | 2020-3-18 08:23 | 只看该作者
叶春勇 发表于 2020-3-18 08:00
楼主用Ollydbg,动态分析,还是反汇编静态分析的?

你们说的楼主是谁啊?我才是楼主

使用特权

评论回复
32
叶春勇| | 2020-3-18 08:58 | 只看该作者
William1994 发表于 2020-3-15 12:22
分析了一下,是Keil的一个bug。
keil的序列号是0~9和A-Z拼成的36进制,但是把O去掉了,变成的35进制,使用s ...

William1994用Ollydbg,动态分析,还是反汇编静态分析的?

使用特权

评论回复
33
William1994| | 2020-3-18 12:15 | 只看该作者
叶春勇 发表于 2020-3-18 08:58
William1994用Ollydbg,动态分析,还是反汇编静态分析的?

网络上广泛流传的EDGE大侠老版本的,18k的那个,是加壳的,用OD脱的。
下载新版本那个大的exe是没有壳的(壳的二进制还在),不需要动态分析,除了声音视频相关的函数(大概前六七个函数),剩下总共几个函数,都很短,而且基本是一个函数最多调用两个有用的,四五级调用就结束了。
因为脱壳后运行地址还是0x007F0000偏移0x00015526。 正确地址应该修正为0x00800000+0x00005526; 这样exe能直接小64k;换句话说exe还是带着壳和解压后的真正exe的,只是OEP改为了真正的startup,然后运行main,然后winmain,然后消息循环。消息循环里只有四五个控件的处理,掉函数的基本就那一个。所以这个大exe不是EDGE大侠直接发出来的,是有人脱壳的,而且脱壳后没有收缩。
新版本的这个上百k的是别人脱壳修改的版本和18k的那个版本不是一个版本。里面月份从随机数改成了固定的'D' 也就是12月。还有就是产生随机数的代码发生了变化,我替换为math.h的C51版本和ARM版本测试了一下,生成的序列号不能用的概率还是相同的。其它代码二进制一模一样。因为keil的uv4.dll中没有此随机数的代码,所以不知道EDGE大侠为什么修改了随机数的算法。随机数是用的69069作为被乘数。因为不是汇编级修改的,是C级别修改的,所以应该是EDGE大侠原版就改成了固定12月和新随机数的。
整个注册机代码在C51下编译通过,并且执行正确的情况下,大小为6.4k;而在STM32F103的情况下编译通过并且执行正确的情况下为6.2k,里面的整数运算我已经尽量的位数短了。看来在32数**算和大量移位的场合,51比ARM还是有一些差距。
18k的版本我脱壳后可以运行,不收缩的版本,不报毒。收缩的版本就报病毒了。所有代码我都看了,确认是没有病毒功能。不知道360怎么还判断出病毒的类型是特洛伊的。
另外,虽然注册机使用了随机数,但是这个注册机生成的序列号仍然有规律,我感觉如果想封,不和服务器通讯的情况下也是能做到的。

另外声明一下,我不用盗版的,抵制盗版,人人有责。
研究仅供学习。keil是一个伟大的公司,EDGE大侠我不认识,不便评价。


使用特权

评论回复
34
叶春勇| | 2020-3-18 12:46 | 只看该作者
我自己脱了下,发现c51.exe cx51.exe 好像没壳。你破 + 解ide干什么,ide好像没限制的,编译器有限制。

我的脱壳器太老了?

使用特权

评论回复
35
William1994| | 2020-3-18 15:45 | 只看该作者
叶春勇 发表于 2020-3-18 12:46
我自己脱了下,发现c51.exe cx51.exe 好像没壳。你破 + 解ide干什么,ide好像没限制的,编译器有限制。

我 ...

keil官方的都没有壳啊,包括AD、IAR、Labview等等设计软件都是没有壳的。有壳的是EDGE大侠的和谐工具,见 https://bbs.21ic.com/icview-2874114-1-2.html 这个是别人脱壳过的,原始的我没有找到。我网上找到的是2020年随机月份的那个(随机数为均匀分布,非正态分布),18KB,有壳。
和编辑器是调用的是uv4.dll不同,C51.exe是调用的L51.dll。我什么都没有**。
C51.exe里面的代码,如果不是科班出身,编译原理不行的话,是看不懂的。词法分析部分是c代码写的,还好;包括宏展开的功能等导致0xFE开头的什么显示有问题等都能很简单的发现原因,还有词法分析器按照C90标准不支持汉字的变量函数名等。语法分析部分是用的表,而且抽象语法树的共用体如果没有自制的工具,基本就看不下去了。再往后抽象语法树转成44字节的中间文件以及后续的优化等等非常非常复杂,没有做过编译器的人士就别去看了。
C51.exe调用的L51.dll,L51.dll 负责的license相关的所有东西。不像C51等是C做的,L51是C++做的基于COM的。总共只调用了几次,都在那只有不到二三十行的main函数里调用的,分别传的参数不一样,但是返回值都必须是0。C51.exe编译的时候也就是优化等级和序列号有些关系,主要是链接器,它有hex大小限制。

使用特权

评论回复
36
叶春勇| | 2020-3-18 16:00 | 只看该作者
William1994 发表于 2020-3-18 15:45
keil官方的都没有壳啊,包括AD、IAR、Labview等等设计软件都是没有壳的。有壳的是EDGE大侠的和谐工具,见 ...

我照着分析下。多谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则