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 *****我们注册下测试
我认为算法分析要比爆破更好玩,更有意思。但是需要大量的时间去跟踪分析。。 沙发{:6_224:} Bu弃 发表于 2016-8-4 20:01
沙发
你这是伪沙发。。。我的才是真沙发 膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。{:6_224:} Shark恒 发表于 2016-8-4 20:08
你这是伪沙发。。。我的才是真沙发
一定是网络的原因。我进来的时候,没人回复,所以就认为自己是沙发。没想到,还是慢了恒大一步。这种帖子,就得加精啊。恒大 Bu弃 发表于 2016-8-4 20:09
一定是网络的原因。我进来的时候,没人回复,所以就认为自己是沙发。没想到,还是慢了恒大一步。这种帖子 ...
我靠,你不说我没注意,我还以为加入精华了,原来没有。。 Bu弃 发表于 2016-8-4 20:08
膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。
{:5_121:} 注册机 可以的 膜拜会算法 的 好牛呀 感谢楼主分享的教程,谢谢