学破解论坛-软件逆向分析工程师的摇篮-懂进攻知防守!

 ★找回密码★
 ★立即注册★

QQ登录

只需一步,快速开始

查看: 3475|回复: 72

[原创逆向图文] GiliSoftVideoEditorcn 注册算法分析

  [复制链接] |关注本帖

  离线 

签到天数: 22

该用户今日未签到

马上注册,深入学习!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
[软件名称]  :  GiliSoftVideo Editor 7.4.0
[编译类型]  :  Delphi
[是否有壳]  :  无壳
[注册类型]  :  注册码注册
[作者信息]  :  LYQingYe
[FBI Warning]  :    学到东西的别忘记评分!

@Shark恒  这回我解释了关键CALL找法.

PS:再此之前已经 @Bu弃 发过爆破教程了.我再次补一补算法分析.爆破帖地址


关键CALL找法分析 , 先bp MessageBoxA
2.png

//回溯返回到
3.png

//往上翻到子程序头就是关键CALL -> Sub_004AC8CC  

//第一部分-参数校验
游客,以下内容已经设置隐藏,如果您要查看本帖隐藏内容请回复本主题(记得评分谢谢楼主呦,评分不扣你的分)
//7~13位 我认为应该是版本Key,如有错误请指正。
//最终验证 部分

10001CA3  mov eax,dword ptr ss:[ebp+0x8]
10001CA6  push eax                  ;DLL验证CALL传入的参数
10001CA7  call magicski.100040AC                   ; 从表挑选一个常量

//之所以说13~17位是版本key,是因为这个DLL验证CALL会传入一个参数, call magicski.100040AC    这个CALL就用到了这个参数,参数为 表中的索引, 传入的 为0 ,我猜 代表最新版本 .看下这个表

100040C8 mov dword ptr ss:[ebp-0x4],0xC3BC
100040D1  mov dword ptr ss:[ebp-0x4],0xC7A4
100040DA  mov dword ptr ss:[ebp-0x4],0xCB8C
100040E3  mov dword ptr ss:[ebp-0x4],0xCF74
100040EC  mov dword ptr ss:[ebp-0x4],0x138EC
100040F5  mov dword ptr ss:[ebp-0x4],0xD35C
100040FE  mov dword ptr ss:[ebp-0x4],0xD744
10004107  mov dword ptr ss:[ebp-0x4],0xDB2C
10004110  mov dword ptr ss:[ebp-0x4],0xDF14
10004119  mov dword ptr ss:[ebp-0x4],0xC3BC

//因为索引为0 ,所以获得常量 “0xC3BC” 我们将它命名为 local,这个常量值校验的时候用到
[Asm] 纯文本查看 复制代码
004AC8CC  />push ebp
004AC8CD  |>mov ebp,esp
004AC8CF  |>mov ecx,0x11
004AC8D4  |>/push 0x0
004AC8D6  |>|push 0x0
004AC8D8  |>|dec ecx                                 ;  ntdll.7C93005D
004AC8D9  |>\jnz short videoedi.004AC8D4
004AC8DB  |>push ecx                                 ;  ntdll.7C93005D
004AC8DC  |>push ebx
004AC8DD  |>push esi                                 ;  videoedi.004BD70C
004AC8DE  |>mov ebx,eax
004AC8E0  |>mov esi,dword ptr ds:[0x4B97B8]          ;  videoedi.004BD70C
004AC8E6  |>xor eax,eax
004AC8E8  |>push ebp
004AC8E9  |>push videoedi.004ACF56
004AC8EE  |>push dword ptr fs:[eax]
004AC8F1  |>mov dword ptr fs:[eax],esp
004AC8F4  |>lea edx,[local.6]
004AC8F7  |>mov eax,dword ptr ds:[ebx+0x374]
004AC8FD  |>call videoedi.00449AB4                   ;  GetEmailAddress获取输入输入的Email 地址
004AC902  |>mov eax,[local.6]                        ;  Eax-> Email
004AC905  |>lea edx,[local.2]                        ;  Edx - >NewBuffer
004AC908  |>call videoedi.00409160                          ;  Trim(const S: string): string; overload; 从给定字串中去除首尾空格和控制符
004AC90D  |>cmp [local.2],0x0                                  ;  判断是新字符串地址是否合法,若非法则提示NoName
004AC911  |>jnz short videoedi.004AC963              ;  Check New Str Point Invalid
004AC913  |>push 0x40
004AC915  |>lea edx,[local.7]
004AC918  |>mov eax,dword ptr ds:[0x4B9638]          ;  凑K
004AC91D  |>mov eax,dword ptr ds:[eax]
004AC91F  |>call videoedi.00466464
004AC924  |>mov eax,[local.7]
004AC927  |>call videoedi.00404E70
004AC92C  |>push eax
004AC92D  |>lea eax,[local.8]
004AC930  |>push eax
004AC931  |>mov eax,dword ptr ds:[0x4B93C0]
004AC936  |>mov eax,dword ptr ds:[eax]
004AC938  |>mov ecx,videoedi.004ACF6C                ;  strNoName
004AC93D  |>mov edx,dword ptr ds:[ebx+0x3C4]
004AC943  |>call videoedi.004A52F4
004AC948  |>mov eax,[local.8]
004AC94B  |>call videoedi.00404E70
004AC950  |>push eax
004AC951  |>mov eax,ebx
004AC953  |>call videoedi.004515EC
004AC958  |>push eax                                 ; |hOwner = 00000001
004AC959  |>call <jmp.&user32.MessageBoxA>           ; \MessageBoxA
004AC95E  |>jmp videoedi.004ACF01
004AC963  |>cmp dword ptr ds:[esi],0x4
004AC966  |>je short videoedi.004AC9C4
004AC968  |>mov eax,[local.2]                        ;  EAX ->Email
004AC96B  |>call videoedi.004A4D10
004AC970  |>test eax,eax                                
004AC972  |>jnz short videoedi.004AC9C4                  ;若输入的Email非法则提示strErrorEmail
004AC974  |>push 0x40
004AC976  |>lea edx,[local.9]
004AC979  |>mov eax,dword ptr ds:[0x4B9638]          ;  凑K
004AC97E  |>mov eax,dword ptr ds:[eax]
004AC980  |>call videoedi.00466464
004AC985  |>mov eax,[local.9]
004AC988  |>call videoedi.00404E70
004AC98D  |>push eax
004AC98E  |>lea eax,[local.10]
004AC991  |>push eax
004AC992  |>mov eax,dword ptr ds:[0x4B93C0]
004AC997  |>mov eax,dword ptr ds:[eax]
004AC999  |>mov ecx,videoedi.004ACF80                ;  strErrorEmail
004AC99E  |>mov edx,dword ptr ds:[ebx+0x3C4]
004AC9A4  |>call videoedi.004A52F4
004AC9A9  |>mov eax,[local.10]
004AC9AC  |>call videoedi.00404E70
004AC9B1  |>push eax
004AC9B2  |>mov eax,ebx
004AC9B4  |>call videoedi.004515EC
004AC9B9  |>push eax                                 ; |hOwner = 00000001
004AC9BA  |>call <jmp.&user32.MessageBoxA>           ; \MessageBoxA
004AC9BF  |>jmp videoedi.004ACF01
004AC9C4  |>lea edx,[local.11]
004AC9C7  |>mov eax,dword ptr ds:[ebx+0x370]
004AC9CD  |>call videoedi.00449AB4                   ;  GetKey , 获取我们输入的Key
004AC9D2  |>mov eax,[local.11]                       ;  Eax ->Key
004AC9D5  |>lea edx,[local.1]                        ;  Edx ->NewBuffer
004AC9D8  |>call videoedi.00409160                          ; Trim(const S: string): string; overload; 从给定字串中去除首尾空格和控制符。        
004AC9DD  |>cmp [local.1],0x0                        ;  Check New Str Key Point Invalid
004AC9E1  |>jnz short videoedi.004ACA33                  ;  若 指针非法则提示 ‘strNoKey’
004AC9E3  |>push 0x40
004AC9E5  |>lea edx,[local.12]
004AC9E8  |>mov eax,dword ptr ds:[0x4B9638]          ;  凑K
004AC9ED  |>mov eax,dword ptr ds:[eax]
004AC9EF  |>call videoedi.00466464
004AC9F4  |>mov eax,[local.12]
004AC9F7  |>call videoedi.00404E70
004AC9FC  |>push eax
004AC9FD  |>lea eax,[local.13]
004ACA00  |>push eax
004ACA01  |>mov eax,dword ptr ds:[0x4B93C0]
004ACA06  |>mov eax,dword ptr ds:[eax]
004ACA08  |>mov ecx,videoedi.004ACF98                ;  strNoKey
004ACA0D  |>mov edx,dword ptr ds:[ebx+0x3C4]
004ACA13  |>call videoedi.004A52F4
004ACA18  |>mov eax,[local.13]
004ACA1B  |>call videoedi.00404E70
004ACA20  |>push eax
004ACA21  |>mov eax,ebx
004ACA23  |>call videoedi.004515EC
004ACA28  |>push eax                                 ; |hOwner = 00000001
004ACA29  |>call <jmp.&user32.MessageBoxA>           ; \MessageBoxA
004ACA2E  |>jmp videoedi.004ACF01
004ACA33  |>cmp dword ptr ds:[esi],0x4
004ACA36  |>jnz short videoedi.004ACA45
004ACA38  |>lea eax,[local.1]
004ACA3B  |>mov edx,videoedi.004ACFAC                ;  -11111
004ACA40  |>call videoedi.00404C78
004ACA45  |>mov eax,[local.1]                        ;  Eax - >Key
004ACA48  |>test eax,eax
004ACA4A  |>je short videoedi.004ACA51               ;  判断指针是否合法
004ACA4C  |>sub eax,0x4                              ;  Eax = Eax - 4 -> KeyLength 
004ACA4F  |>mov eax,dword ptr ds:[eax]               ;  Eax = KeyLength ,获取Key的长度
004ACA51  |>cmp eax,0x23                             ;  Check Key length == 0X23 (35)
004ACA54  |>je short videoedi.004ACAA6               ;  Key的长度要为 35 ,否则失败


//上面的校验也很简单,首先根据版本 (猜测)->从 表中 获取一个常量值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)

//所以最终的注册码应该是
游客,以下内容已经设置隐藏,如果您要查看本帖隐藏内容请回复本主题(记得评分谢谢楼主呦,评分不扣你的分)
我们注册下测试

QQ截图20160804181719.png

评分

参与人数 27威望 +1 HB +72 THX +18 收起 理由
yunq + 1 [快捷评语] - 分享精神,是最值得尊敬的!
aaron9185 + 1 [快捷评语] - 2017,让我们17学破解!
zhy1994 + 1 评分=感恩!简单却充满爱!感谢您的作品!
pinsy + 1 吃水不忘打井人,给个评分懂感恩!
yllgq + 1 分享精神,是最值得尊敬的!
爱阴湿毯 + 1 + 1 眼睛疼 咋整?
学一学丶 + 1 + 1 分享精神,是最值得尊敬的!
DiskGenius + 1 吃水不忘打井人,给个评分懂感恩!
lable + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
没没没没没 + 1 吃水不忘打井人,给个评分懂感恩!
hyeh612 + 1 + 1 吃水不忘打井人,给个评分懂感恩!
tianzhiya + 1 吃水不忘打井人,给个评分懂感恩!
hemingjun + 1 吃水不忘打井人,给个评分懂感恩!
cqr2287 + 1 终于有分析算法的了
victor520 + 5 + 1 分享精神,是最值得尊敬的!
小时候可帅 + 1 + 1 分享精神,是最值得尊敬的!
菜鸟中的菜鸟 + 6 + 1 待我学成之日,必是高手之时。
zlyqwe456 + 1 + 1 分享精神,是最值得尊敬的!
蓝色贝雷帽 + 1 + 1 吃水不忘打井人,给个评分懂感恩!
泪落尘埃 + 1 + 1 吃水不忘打井人,给个评分懂感恩!
液絡朦涳 + 1 + 1 吃水不忘打井人,给个评分懂感恩!
rgbwcwmd + 2 + 1 吃水不忘打井人,给个评分懂感恩!
笔尖下的日子 + 1 + 1 分享精神,是最值得尊敬的!
yanshifei888 + 1 + 1 分享精神,是最值得尊敬的!
wswwj + 2 + 1 吃水不忘打井人,给个评分懂感恩!
Bu弃 + 5 + 1 表哥真6 ,搞得我也重新下载了下,玩玩算法
Shark恒 + 1 + 30 + 1 评分=感恩!简单却充满爱!感谢您的作品!

还有更多人参与评分,点击查看全部!

学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!

  离线 

签到天数: 290

该用户今日未签到

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

评分

参与人数 3HB +3 收起 理由
爱阴湿毯 + 1 本站任何内容出于学习研究的目的,禁止用于任何非法途径,否则一切后果请用户自负!
职业伸手Dan_i + 1 被选中“最佳答案”荣耀+1,感谢你的热心解答!同时也感谢其他热心人!
cqr2287 + 1 前排

还有更多人参与评分,点击查看全部!

学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 3

该用户今日未签到

沙发

点评

你这是伪沙发。。。我的才是真沙发  详情 回复 发表于 2016-8-4 20:08
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 290

该用户今日未签到


你这是伪沙发。。。我的才是真沙发
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 3

该用户今日未签到

膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 3

该用户今日未签到

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

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

点评

我靠,你不说我没注意,我还以为加入精华了,原来没有。。  详情 回复 发表于 2016-8-4 20:11
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 290

该用户今日未签到

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

我靠,你不说我没注意,我还以为加入精华了,原来没有。。
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 22

该用户今日未签到

 楼主| 发表于 2016-8-4 20:32 | 显示全部楼层 |取消关注该作者的回复
Bu弃 发表于 2016-8-4 20:08
膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。

注册机 可以的
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

该用户从未签到

膜拜会算法 的 好牛呀   
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 44

该用户今日未签到

感谢楼主分享的教程,谢谢
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识,所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者其他任何非法用途!否则,一切后果请用户自负!


站长微信号:SharkHeng|联系Email|鲨鱼逆向|手机版|小黑屋|FAQ|Vip破解教程|学破解论坛 ( 京公网安备 11011502002737号 | 京ICP备14042738号 ) 

GMT+8, 2017-11-20 01:46

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