吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 21822|回复: 108

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

  [复制链接]
LYQingYe 发表于 2016-8-4 18:27 | 显示全部楼层 |阅读模式

[软件名称]  :  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

评分

参与人数 48威望 +1 HB +89 THX +25 收起 理由
longge188 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
sjtkxy + 1 + 1
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
24567 + 1
DDK4282 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
一路走来不容易 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
消逝的过去 + 2
禽大师 + 1
ldljlzw + 1
我是好人 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
三月十六 + 1
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
jaunic + 1
PDWORD + 1
小声点我布隆 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
boot + 2
lies + 1
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 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2016-8-4 20:01 | 显示全部楼层

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

评分

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

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Bu弃 发表于 2016-8-4 20:01 | 显示全部楼层

沙发

点评

Shark恒”点评说:
你这是伪沙发。。。我的才是真沙发  详情 回复 发表于 2016-8-4 20:08
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2016-8-4 20:08 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Bu弃 发表于 2016-8-4 20:08 | 显示全部楼层

膜拜表哥,这个算法我都没去看的。有时间一定要玩玩。看看能不能写个注册机出来。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Bu弃 发表于 2016-8-4 20:09 | 显示全部楼层

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

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

点评

Shark恒”点评说:
我靠,你不说我没注意,我还以为加入精华了,原来没有。。  详情 回复 发表于 2016-8-4 20:11
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2016-8-4 20:11 | 显示全部楼层

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

我靠,你不说我没注意,我还以为加入精华了,原来没有。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| LYQingYe 发表于 2016-8-4 20:32 | 显示全部楼层

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

注册机 可以的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
学一学丶 发表于 2016-8-4 21:02 | 显示全部楼层

膜拜会算法 的 好牛呀   
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
devilmilk 发表于 2016-8-4 21:07 | 显示全部楼层

感谢楼主分享的教程,谢谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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