LYQingYe 发表于 2016-8-4 18:27

GiliSoftVideoEditorcn 注册算法分析

[软件名称]:GiliSoftVideo Editor 7.4.0
[编译类型]:Delphi
[是否有壳]:无壳
[注册类型]:注册码注册
[作者信息]:LYQingYe:    学到东西的别忘记评分!
@Shark恒{:5_188:}这回我解释了关键CALL找法.
PS:再此之前已经 @Bu弃 发过爆破教程了.我再次补一补算法分析.爆破帖地址https://www.52hb.com/thread-26281-1-1.html

关键CALL找法分析 , 先bp MessageBoxA
//回溯返回到
//往上翻到子程序头就是关键CALL了 -> Sub_004AC8CC
//第一部分-参数校验**** Hidden Message *****//7~13位 我认为应该是版本Key,如有错误请指正。//最终验证 部分
10001CA3mov eax,dword ptr ss:10001CA6push eax                  ;DLL验证CALL传入的参数10001CA7call magicski.100040AC                   ; 从表挑选一个常量
//之所以说13~17位是版本key,是因为这个DLL验证CALL会传入一个参数, call magicski.100040AC    这个CALL就用到了这个参数,参数为 表中的索引, 传入的 为0 ,我猜 代表最新版本 .看下这个表
100040C8 mov dword ptr ss:,0xC3BC100040D1mov dword ptr ss:,0xC7A4100040DAmov dword ptr ss:,0xCB8C100040E3mov dword ptr ss:,0xCF74100040ECmov dword ptr ss:,0x138EC100040F5mov dword ptr ss:,0xD35C100040FEmov dword ptr ss:,0xD74410004107mov dword ptr ss:,0xDB2C10004110mov dword ptr ss:,0xDF1410004119mov dword ptr ss:,0xC3BC
//因为索引为0 ,所以获得常量 “0xC3BC” 我们将它命名为 local,这个常量值校验的时候用到10001CA7call magicski.100040AC                   ; 从表挑选一个常量
10001CACadd esp,0x4
10001CAFmov dword ptr ss:,eax                ;常量给 ebp-0x28
10001CB2mov eax,dword ptr ss:                ;EAX ->Key 7~11位的整数值,
10001CB5add eax,dword ptr ss:                ; 7~11位 + local
10001CB8xor edx,edx
10001CBAmov ecx,0x1869F                              ; Ecx = 0x1869f (99999)
10001CBFdiv ecx                                  ; 余数 = (7~11 + local) % 0x1869f
10001CC1cmp dword ptr ss:,edx                ;将key 19~23位 与 余数比较,一定要相等,否则失败
10001CC4jnz short magicski.10001CDA
10001CC6mov eax,dword ptr ss:                ; eax-> Key 1~5位
10001CC9add eax,dword ptr ss:                ; 1~5 + local
10001CCCxor edx,edx      
10001CCEmov ecx,0x1869F                              ; ECX = 0X1869F
10001CD3div ecx                                  ; 余数 = (1~5 + local) % 0x1869f
10001CD5cmp dword ptr ss:,edx                ;将key 25~29位与余数比较,一定要相等,否则失败
10001CD8je short magicski.10001CF6


//上面的校验也很简单,首先根据版本 (猜测)->从 表中 获取一个常量值local然后,取key 7~11位 和 key 1~5位做运算,最后拿key19~23位和 25~29位做校验,一定要相等,在这 我们就得到了 19~23的和25~29的来源(7~11+ local) % 0x1869f = 19~23 (1~5+ local) % 0x1869f = 25~29
//知道了,校验过程,下面来手动算码.初始化假码格式 应该为这样, 78888-67890-12345-12345-12345-12345。78888和 67890 是随便写的,因为(1~5 + local) 要取 99999(0x1869f)的余数,所以数字得大一点根据第一次校验 13~17位应该为 常量 “21851”,所以注册码变为78888-67890-21851-12345-12345-12345根据DLL校验部分(7~11+ local) % 0x1869f = 19~23 (1~5+ local) % 0x1869f = 25~29//得到(0x10932+ 0xc3bc) % 0x1869f = 0x464F (17999)(7~11bit+ local) % 0x1869F = 19~23bit (17999)
(0x13428+ 0xc3bc) % 0x1869f = 0x7145 (28997)(1~5bit+ local) % 0x1869f = 25~29bit (28997)
//所以最终的注册码应该是**** Hidden Message *****我们注册下测试

Shark恒 发表于 2016-8-4 20:01

我认为算法分析要比爆破更好玩,更有意思。但是需要大量的时间去跟踪分析。。

Bu弃 发表于 2016-8-4 20:01

沙发{:6_224:}

Shark恒 发表于 2016-8-4 20:08

Bu弃 发表于 2016-8-4 20:01
沙发

你这是伪沙发。。。我的才是真沙发

Bu弃 发表于 2016-8-4 20:08

膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。{:6_224:}

Bu弃 发表于 2016-8-4 20:09

Shark恒 发表于 2016-8-4 20:08
你这是伪沙发。。。我的才是真沙发

一定是网络的原因。我进来的时候,没人回复,所以就认为自己是沙发。没想到,还是慢了恒大一步。这种帖子,就得加精啊。恒大

Shark恒 发表于 2016-8-4 20:11

Bu弃 发表于 2016-8-4 20:09
一定是网络的原因。我进来的时候,没人回复,所以就认为自己是沙发。没想到,还是慢了恒大一步。这种帖子 ...

我靠,你不说我没注意,我还以为加入精华了,原来没有。。

LYQingYe 发表于 2016-8-4 20:32

Bu弃 发表于 2016-8-4 20:08
膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。

{:5_121:} 注册机 可以的

学一学丶 发表于 2016-8-4 21:02

膜拜会算法 的 好牛呀   

devilmilk 发表于 2016-8-4 21:07

感谢楼主分享的教程,谢谢
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: GiliSoftVideoEditorcn 注册算法分析