首页
社区
课程
招聘
[原创]Total Video Converter(3.01版)注册算法全揭密
2007-1-3 21:09 9815

[原创]Total Video Converter(3.01版)注册算法全揭密

wulje 活跃值
14
2007-1-3 21:09
9815
大约在两个月前,我发贴子请教Total Video Converter的128字节的注册码算法原理,但无人应答。当时我就指出该软件爆破十分简单但注册算法叫人头痛。找了几个算法侦测软件侦测,报告说是SHA和CRC算法。其实都不是,软件技术日新月异,那些过了时的软件都不可靠!
    Total Video Converter注册的特点是不要用户名,只要一个128字节的16进制数。跟踪它对注册码的计算(用C++写出的大数运算过程实在冗长,只需要知道它的结果在什么地方出现即可),不断地产生128位或256位数。用大数计算器抽检了一些数据,发现与模数运算(MOD)有关。后来我在“加密与解密(段钢著)”这本书上找到了答案,它是一个标准的RSA算法(应该说这以前,我对RSA算法一无所知)。我大喜,以为问题可以解决了,却不知道冰山才露出一角!
    一、破解RSA算法,需要知道“模数”,“公钥”和“检验码”
     1.确认模数:
     在众多的数据中,哪一个才是“模数”呢?大概可以这样确认:(1)代码中自带的,不是运算后生成的;(2)运算过程中使用最多的,且始终不改变的16进制数。由于计算的需要,所有的大整数在内存中都是反序排列的(汇编程序可以例外,大概目前还没有汇编写成的商业软件)。本软件的模数是:
地址:000C83E0开始的64字节长(换成ASCII码是128字节)。
模数值:(其实代码中第1字节是A4,运行后才自动换成A5)
A50E6C6C1F04CB3C1653939DC769EF6C7673C69A522F6BDD71F42D75CCD0954E058642E465EF9527CAA00B8872AFAE50DD7329BE23E40B06613B24366B5D686F
     2.确认公钥:(好在公钥一般都不大,太大了为了比较运算次数,公钥也会露出马脚)
     确认公钥大致可以用下面方法:(1)跟踪算法,看程序对注册码进行了多少次“自乘”运算,所谓自乘,不是指注册码直接平方,一般是取它关于模数的模(MOD)值,记为1次模,该值平方后再取模,记为2次模,1次模与2次模的乘积取模后记为3次模……。为了迷惑破解者,有时软件把注册码先乘上一个与注册码无关的大整数,在以后的计算中再除去该整数关于模数的模(MOD)值(关于模的算法原理,请查相关数论书籍)。如果通过3次模后就结束计算开始检验,就可以确认公钥是3。(2)跟踪别人的算法是痛苦的,还有一种方法是测试。用Bigcalc大数计算器,输入模数、假注册码、试探性的公钥3、5、7……等,如果计算出与软件中的检验码相同的数据,则该值即为公钥。
    本软件的公钥为3。
    3.检验码:
     寻找检验码应该是比较简单的。为了简化程序和迷惑破解者,本程序并不全面比较生成的检验码,程序中也没有完整的检验码。按常理生成的检验码也是64字节的大整数,程序代码中如果出现另一个64字节的大整数,任何人一猜都知道它是检验码,不管是爆破还是修改都易如反掌,RSA在这里应用也失去了它的任何优势。本软件并没有检验明码,代码中有一字串“TOTAL VC oK”与正确的检验码前几个字符相同,但它不是检验明码,它会被生成的检验码覆盖。跟踪它的检验过程才知道它抽检了16个字符,也就是说,只有16个字符是必需的,其余的字符可以任意设定(这不由使用者设定)。
    本程序生成的正确检验码是:(共64字节)
544F54414C205643206F6B**70**6F**6F6B********************************************************************************************
    “*”号表示随机16进制数,但不能全为0或1(不知是不是设计上的原因)。
    二、不知天高地厚,企图分解128字节的模数
    当我一切就绪后,查找相关资料知道,只要能将模数分解成两个素数后,私钥就可以轻松得到,那么注册码就是囊中取物了。先是找到了RSAToolv17工具,输入模数后运行就得到了警告:需要“LOT time”和“LOT memory”,我不顾它,运行!几个小时后程序死掉自行退出,再试如此!不死心(我是不是成了陈景润了?),找了一个更快的ppsiqs.exe,运行一天过去了,没结果,也不知程序是死是活!没办法,只好停下来。请教了数学专家才知道:分解大数时间是不定的,如果这个大合数是由一些不太大的素数乘积而成,那么就会很快,时间由素数的大小决定。如:
    分解大整数:80C07AFC9D25404D6555B9ACF3567CF1(32位)
    P=A554665CC62120D3(16位),Q=C75CB54BEDFA30AB(16位)       
    分解这个整数,RSAToolv17不到半分钟,ppsiqs.exe几秒钟。就算1秒,素数每增加1位,时间就增加16倍,要分解Total Video Converter中的128位模数(素数是64位),至少要16^48秒。这要多少年?算不出来,大约从太阳系诞生之日起就开始计算,至今也没有分解出来!!我现在才看到了天有多高!陈景润也太伟大了。泰坦尼克撞冰山了,还好,没沉没,我学到了很多自救知识。
    三、偷梁换柱是破解RSA注册算法的有效途径
    1.最简单的爆破方法:
上次发贴时,就指出如果将该软件中的
00407D66         E86B010600        Call 00467ED6
        改为:
00407D66         B801000000         mov eax,01
就可以了,而且是注册版。如果不是为了学习,疯了才去跟踪这个软件的算法。
    2.模数设置中的暗道机关:
    你想到了偷换模数,软件作者也想到了可能有人这样做,他也作了一些防范。软件的原模数是:(代码中第1字节是A4,运行后才自动换成A5)
A50E6C6C1F04CB3C1653939DC769EF6C7673C69A522F6BDD71F42D75CCD0954E058642E465EF9527CAA00B8872AFAE50DD7329BE23E40B06613B24366B5D686F
如果换上了其它模数,运行时程序会自动将前5个字节还原为A50E6C6C1F,而且验证结果时,还要检查模数的第1字节是不是A5。如果这些条件不满足,那么运行后的结果肯定是错的。因此,替换上去的模数前5字节应该保持为A50E6C6C1F。有了这样一个苛刻的条件,RSAToolv17模数生成器也无能为力了!
走到这里,你有两种选择:算了,退出;要么修改程序,使覆盖的A50E6C6C1F的这几个字节用你的代码替代!天啊,为了啥哟?!
    3.柳暗花明又一村:
    天下无奇不有,在网上搜寻到了一款HugeCalc大数计算器,查看它的功能后,我放置了个多月的Total Video Converter竟然起死回生了。原来该计算器能快速验证一个数是不是素数,且可以给出与它相邻的一个素数。具体操作如下:
    (1)将原程序中的模数开方得到一个开始字节为C1的64位整数,将C改为E(并非必要),用该计算器找出一个与它相邻的素数,作为RSA中的P素数;
    (2)将原模数除以P素数,得到另一个64位整数,再取它相邻的素数作为RSA中的Q素数;
    (3)将P*Q得到模数N(128位,与原模数可以达到前64位都相同);
    (4)将P、Q、N放入RSAToolv17中,如果报告公钥3与(P-1)(Q-1)不互质,则换一个与P相邻的素数重复(3)再试,一般不超过三次就搞定;
    (5)按下Calc.D就会立即得到苦苦追寻私钥了。
    我得到一组可用的数据是:
P=EB898D7872FFCBF09DC14D41B08B2777F9559C28CBCF31AB5D25968A3DE7C76B
Q=B365584AC7A7C003668F4E91C4ADA014DC6ADC4A6A6A4460C03F5BC4CC8CB8A7
N=A50E6C6C1F04CB3C1653939DC769EF6C7673C69A522F6BDD71F42D75CCD0952498D45CC2DBD337DF6A6D8EAF758A086B9FC33036A7BC21D46153D5434C0BFECD
私钥= 6E099D9D6A0332280EE262692F9BF4F2F9A28466E174F293A14D73A3DDE0636CA698F9FFC0C7C7F244134C92AAE0D5E9DC01CFD7A101C7DAD7F4974D810FA9D3
    3.生成注册码:
    (1)自己设计一个符合前面条件的检验码:(数字下没有加点的数可以更改)
544F54414C205643206F6B0070006F006F6B56524C454D99258E51656F055C33EC3F5416A722CDCC8F60D4F34E4A60ABCDEF00110011936D3533F40D12345678
    (2)用16进制编辑器打开Total Video Converter,将地址000C83E0开始的64字节换成上面的N,注意前面的A5 改成A4,存盘后就改造完成;
    (3)用BigeCalc计算器,输入N,“Store Z”中,输入私钥,“Store Y”中,输入检验码,“Store X”中,按下X^Y%Z按钮,立即得到注册码:
45A9C0824C5E054327A12E7B1DB04FD79B0B37DD40F02352EE237FB35A2718081A5AEF8CA978D7E931367A36FBD3FEFA52BBAA303894C75FA610328DF94E8331
    将注册码每8字节加上一个“-”号,输入到软件注册框中试一试,成功了。
    4.关于注册机:
    由于检验码可以有无穷多,因此注册码也可以有无穷多。但一经生成的注册码,除了加上模数N的整数倍(不能超过128位),改一个字都是通不过的。
    由于注册码由私钥生成,原程序中无可用代码移植,因此写注册机就变得相对困难了。目前我写不它出注册机,也不想去学写这个注册机,即使写成了也毫无意义。因为它没有通用性,不如直接给出注册码。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞7
打赏
分享
最新回复 (17)
雪    币: 26435
活跃值: (18467)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2007-1-3 21:24
2
0
最初由 wulje 发布
天下无奇不有,在网上搜寻到了一款HugeCalc大数计算器


将N替换是好办法,偷梁换柱,呵~
这个是RSA512,要因式分解很困难。

HugeCalc作者曾接触过,HugeCalc 现在最新版为 V6.0.0.3:
天空下载:http://www.skycn.com/soft/16254.html
华军下载:http://www.onlinedown.net/soft/29009.htm
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
cyto 31 2007-1-3 21:26
3
0
佩服.
有志者事竟成!
雪    币: 154
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
icefall 1 2007-1-3 22:04
4
0
我也是在重庆 顶一个 厉害 6篇就有3篇精
雪    币: 202
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Crem 2007-1-5 02:20
5
0
Yes, I also replaced Big N by other number when reverse this software. Very long time if analys original N.
雪    币: 449
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2007-1-5 12:59
6
0
好办法
aspr不也是被替换p5,p6,p7,然后keygen的
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhucheba 2007-1-5 13:13
7
0
将N替换是好办法
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sbsummer 2007-1-5 14:15
8
0
猛男,密切关注
雪    币: 324
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan 2007-1-5 17:32
9
0
之前玩过,看见那些字符串都不敢看算法了,只有爆了
只是爆破方法不一样,它的几个软件都是检验注册表中的一个值
雪    币: 292
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 7 2007-1-5 19:38
10
0
好文,收藏先
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gangfeng 2007-1-8 16:09
11
0
厉害,看来要多学习了哈
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
skylly 4 2007-1-8 16:47
12
0
其实算法只要不参与解码,都爆掉算了,去找什么完美破解实在是折磨自己的事情。
雪    币: 184
活跃值: (47)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wopasi 1 2007-1-9 07:36
13
0
研究软件的注册算法乃是一件很幸福也很苦闷的事,需要细心的去分析,怎么能说是“折磨自己的事情”!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gxqcn 2007-1-15 14:49
14
0
最初由 kanxue 发布
将N替换是好办法,偷梁换柱,呵~
这个是RSA512,要因式分解很困难。

HugeCalc作者曾接触过,HugeCalc 现在最新版为 V6.0.0.3:
天空下载:http://www.skycn.com/soft/16254.html
........


HugeCalc 现最新版为 V6.0.0.4

下载链接为:http://yaojialin.51.net/download/

在 HugeCalc 中,已包含一个 RASTool(含源代码),该 RSA 可自由编辑输入或随机自动生成;会自动判定状态;自动给予提示。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gxqcn 2007-1-15 14:56
15
0
最初由 gxqcn 发布
在 HugeCalc 中,已包含一个 RASTool(含源代码),该 RSA 可自由编辑输入或随机自动生成;会自动判定状态;自动给予提示。


界面如下:
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
happytown 31 2007-1-15 16:18
16
0
最初由 wulje 发布
...因此,替换上去的模数前5字节应该保持为A50E6C6C1F。有了这样一个苛刻的条件,RSAToolv17模数生成器也无能为力了!
........

呵呵,用Miracl库或者Freelip库,以及Rabin-Miller测试均可搞定。
雪    币: 305
活跃值: (10)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
wulje 14 2007-1-21 13:41
17
0
谢谢CrackMe & ReverseMe 版主

Miracl库或者Freelip库,以及Rabin-Miller均没有接触过,以后多学习。
雪    币: 238
活跃值: (12)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
cxlrb 5 2007-1-21 15:27
18
0
还是爆破来得快,不会算法。
游客
登录 | 注册 方可回帖
返回