一个屏幕录像专家生成exe文件的密码的算法分析
【破文标题】一个屏幕录像专家生成exe文件的密码的算法分析【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】binbinbin7456.ys168.com
【破解工具】OD
【破解平台】XPsp2
【软件名称】
【软件大小】
【原版下载】https://www.chinapyg.com/viewthread.php?tid=5290&extra=page%3D2
【保护方式】
【软件简介】
【破解声明】菜鸟向高手学习!只为学习!
------------------------------------------------------------------------
【破解过程】
那个录像就在本论坛的上面那个网址 https://www.chinapyg.com/viewthread.php?tid=5290&extra=page%3D2
早上看到这个东西,然后顺便分析了下。然后就有了这篇东西。
这个录像被我证实是不能播放的。就算输入的是正确的密码,也是会出错,提示“高度无损解压缩出错”。也许是录像作者弄的。
我来分析下算法而已。
字符串查找“密码不对”可以找到下面代码:
0040E280/$55 push ebp
0040E281|.8BEC mov ebp, esp
0040E283|.83C4 AC add esp, -54
0040E286|.53 push ebx
0040E287|.56 push esi
0040E288|.57 push edi
0040E289|.8BD8 mov ebx, eax
0040E28B|.8D75 C4 lea esi, dword ptr
0040E28E|.B8 904D4800 mov eax, 00484D90
0040E293|.E8 34320500 call 004614CC
0040E298|.66:C746 10 08>mov word ptr , 8
0040E29E|.8D45 FC lea eax, dword ptr
0040E2A1|.E8 6A38FFFF call 00401B10
0040E2A6|.8BD0 mov edx, eax
0040E2A8|.FF46 1C inc dword ptr
0040E2AB|.8B83 D4020000 mov eax, dword ptr
0040E2B1|.E8 8AA20200 call 00438540
0040E2B6|.8D55 FC lea edx, dword ptr
0040E2B9|.52 push edx
0040E2BA|.BA E44C4800 mov edx, 00484CE4
0040E2BF|.8D45 F8 lea eax, dword ptr
0040E2C2|.E8 39E20500 call 0046C500
0040E2C7|.FF46 1C inc dword ptr
0040E2CA|.8D55 F8 lea edx, dword ptr
0040E2CD|.58 pop eax
0040E2CE|.E8 B5E30500 call 0046C688
0040E2D3|.50 push eax
0040E2D4|.FF4E 1C dec dword ptr
0040E2D7|.8D45 F8 lea eax, dword ptr ;(Initial CPU selection)
0040E2DA|.BA 02000000 mov edx, 2
0040E2DF|.E8 D4E20500 call 0046C5B8
0040E2E4|.FF4E 1C dec dword ptr ; |
0040E2E7|.8D45 FC lea eax, dword ptr ; |
0040E2EA|.BA 02000000 mov edx, 2 ; |
0040E2EF|.E8 C4E20500 call 0046C5B8 ; \加密录像.0046C5B8
0040E2F4|.59 pop ecx
0040E2F5|.84C9 test cl, cl
0040E2F7|.74 49 je short 0040E342
0040E2F9|.66:C746 10 14>mov word ptr , 14
0040E2FF|.BA E54C4800 mov edx, 00484CE5 ;请输入密码
0040E304|.8D45 F4 lea eax, dword ptr
0040E307|.E8 F4E10500 call 0046C500
0040E30C|.FF46 1C inc dword ptr
0040E30F|.8B00 mov eax, dword ptr
0040E311|.E8 9A510200 call 004334B0
0040E316|.FF4E 1C dec dword ptr
0040E319|.8D45 F4 lea eax, dword ptr
0040E31C|.BA 02000000 mov edx, 2
0040E321|.E8 92E20500 call 0046C5B8
0040E326|.8B83 D4020000 mov eax, dword ptr
0040E32C|.8B10 mov edx, dword ptr
0040E32E|.FF92 B0000000 call dword ptr
0040E334|.8B0E mov ecx, dword ptr
0040E336|.64:890D 00000>mov dword ptr fs:, ecx
0040E33D|.E9 39010000 jmp 0040E47B
0040E342|>6A 15 push 15 ; /Arg3 = 00000015
0040E344|.6A 00 push 0 ; |Arg2 = 00000000
0040E346|.8D45 AC lea eax, dword ptr ; |
0040E349|.50 push eax ; |Arg1
0040E34A|.E8 292E0500 call 00461178 ; \加密录像.00461178
0040E34F|.83C4 0C add esp, 0C
0040E352|.66:C746 10 20>mov word ptr , 20
0040E358|.8D45 F0 lea eax, dword ptr
0040E35B|.E8 B037FFFF call 00401B10
0040E360|.8BD0 mov edx, eax
0040E362|.FF46 1C inc dword ptr
0040E365|.8B83 D4020000 mov eax, dword ptr
0040E36B|.E8 D0A10200 call 00438540
0040E370|.8D45 F0 lea eax, dword ptr
0040E373|.E8 A068FFFF call 00404C18 ;上面那堆不知道干吗的
0040E378|.8BF8 mov edi, eax ;这里看得到输入的假码
0040E37A|.33C0 xor eax, eax
0040E37C|.56 push esi ;下面这堆也不知道干吗的
0040E37D|.83C9 FF or ecx, FFFFFFFF
0040E380|.F2:AE repne scas byte ptr es:
0040E382|.F7D1 not ecx
0040E384|.2BF9 sub edi, ecx
0040E386|.8D75 AC lea esi, dword ptr
0040E389|.87F7 xchg edi, esi
0040E38B|.8BD1 mov edx, ecx
0040E38D|.8BC7 mov eax, edi
0040E38F|.C1E9 02 shr ecx, 2
0040E392|.8D45 F0 lea eax, dword ptr
0040E395|.F3:A5 rep movs dword ptr es:, dword p>
0040E397|.8BCA mov ecx, edx
0040E399|.BA 02000000 mov edx, 2
0040E39E|.83E1 03 and ecx, 3
0040E3A1|.F3:A4 rep movs byte ptr es:, byte ptr>
0040E3A3|.5E pop esi
0040E3A4|.FF4E 1C dec dword ptr
0040E3A7|.E8 0CE20500 call 0046C5B8
0040E3AC|.8D4D AC lea ecx, dword ptr ;输入的假码
0040E3AF|.51 push ecx ; /假码入栈
0040E3B0|.53 push ebx ; |这个固定字符串入栈(ASCII " NH")。好像没有用上的
0040E3B1|.E8 CE000000 call 0040E484 ; \这个是算法call。简单的算法,跟进《《《《《《《《《
0040E3B6|.83C4 08 add esp, 8
0040E3B9|.3B83 E4020000 cmp eax, dword ptr ;和10FD比较
0040E3BF 0F84 9F000000 je 0040E464 ;如果相等就成功了
0040E3C5|.FF83 E8020000 inc dword ptr
0040E3CB|.83BB E8020000>cmp dword ptr , 3
0040E3D2|.75 3F jnz short 0040E413
0040E3D4|.66:C746 10 2C>mov word ptr , 2C
0040E3DA|.BA F04C4800 mov edx, 00484CF0 ;密码不对
0040E3DF|.8D45 EC lea eax, dword ptr
0040E3E2|.E8 19E10500 call 0046C500
0040E3E7|.FF46 1C inc dword ptr
0040E3EA|.8B00 mov eax, dword ptr
0040E3EC|.E8 BF500200 call 004334B0
0040E3F1|.FF4E 1C dec dword ptr
0040E3F4|.8D45 EC lea eax, dword ptr
0040E3F7|.BA 02000000 mov edx, 2
0040E3FC|.E8 B7E10500 call 0046C5B8
0040E401|.8BC3 mov eax, ebx
0040E403|.E8 58E50100 call 0042C960
0040E408|.8B16 mov edx, dword ptr
0040E40A|.64:8915 00000>mov dword ptr fs:, edx
0040E411|.EB 68 jmp short 0040E47B
0040E413|>66:C746 10 38>mov word ptr , 38
0040E419|.BA F94C4800 mov edx, 00484CF9 ;密码不对,请重新输入
0040E41E|.8D45 E8 lea eax, dword ptr
0040E421|.E8 DAE00500 call 0046C500
0040E426|.FF46 1C inc dword ptr
0040E429|.8B00 mov eax, dword ptr
0040E42B|.E8 80500200 call 004334B0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
然后跟进算法call 》》》》》》0040E3B1|.E8 CE000000 call 0040E484 《《《《《《《
0040E484/$55 push ebp
0040E485|.8BEC mov ebp, esp
0040E487|.53 push ebx
0040E488|.56 push esi
0040E489|.57 push edi
0040E48A|.BF D5070000 mov edi, 7D5 ;常量7D5(2005)
0040E48F|.33F6 xor esi, esi ;清空esi。准备做计数器
0040E491|.8B45 0C mov eax, dword ptr
0040E494|.8BC8 mov ecx, eax
0040E496|.EB 19 jmp short 0040E4B1
0040E498|>8BC6 /mov eax, esi ;下标付给eax
0040E49A|.51 |push ecx
0040E49B|.B9 05000000 |mov ecx, 5 ;常数
0040E4A0|.99 |cdq
0040E4A1|.F7F9 |idiv ecx ;除以5。
0040E4A3|.59 |pop ecx
0040E4A4|.03C6 |add eax, esi ;整数部分+下标
0040E4A6|.40 |inc eax ;然后再加1。
0040E4A7|.33D2 |xor edx, edx
0040E4A9|.8AD3 |mov dl, bl ;ascii移到dl
0040E4AB|.F7EA |imul edx ;*
0040E4AD|.03F8 |add edi, eax ;加上常量7d5(2005)。结果累加在这里
0040E4AF|.46 |inc esi
0040E4B0|.41 |inc ecx
0040E4B1|>8A19 mov bl, byte ptr ;逐个取输入的假码
0040E4B3|.84DB |test bl, bl
0040E4B5|.^ 75 E1 \jnz short 0040E498 ;这个循环的结果在edi。所以直接执行到下一行,看结果
0040E4B7|.8BC7 mov eax, edi ;结果放到eax
0040E4B9|.5F pop edi
0040E4BA|.5E pop esi
0040E4BB|.5B pop ebx
0040E4BC|.5D pop ebp
0040E4BD\.C3 retn
.版本 2
.程序集 窗口程序集1
.子程序 _按钮1_被单击
.局部变量 name, 文本型
.局部变量 len, 整数型
.局部变量 eax, 整数型
.局部变量 i, 整数型
.局部变量 sum, 整数型
.局部变量 temp, 整数型
.局部变量 esi, 整数型
name = 编辑框1.内容
len = 取文本长度 (name)
sum = 2005
esi = 0
.计次循环首 (len, i)
eax = 取代码 (name, i)
i = esi
temp = i \ 5
i = i + temp
i = i + 1
eax = eax × i
sum = sum + eax
esi = esi + 1
.计次循环尾 ()
编辑框2.内容 = 到文本 (sum)
------------------------------------------------------------------------
【破解总结】
我给的那个易语言的源代码功能是算号而已。要自己去尝试。只要结果能得到 4349 就是成功的。慢慢试吧。
我给出两个可用的密码
baahzi
ginbip
1、总的算法就是如果对输入的密码的运算最后等于10FD(4349)的话,就成功。
2、对输入的密码的运算的代码很短,看代码去,很简单的。
[ 本帖最后由 binbinbin 于 2006-11-29 10:04 编辑 ] 应该不仅仅是密码问题,还有图象、文字、声音等的检验吧? 原帖由 hrbx 于 2006-11-29 13:46 发表
应该不仅仅是密码问题,还有图象、文字、声音等的检验吧?
我只会输入数字的破解。
如果真的用上那些甚么图象校验。完全没听过也不可能会 看算法是个很头疼的事。 不懂汇编!对于这样的加密教程!只有干着急的份! 原帖由 binbinbin 于 2006-11-29 17:36 发表
我只会输入数字的破解。
如果真的用上那些甚么图象校验。完全没听过也不可能会
没有屏幕录像专家,只能猜测。
可以用屏幕像专家录一个有密码的录像,然后输入你提供的密码看能否解压播放就知道了。
输入密码应该只是第一关,后面似乎还有校验。 不懂汇编!对于这样的加密教程!只有干着急的份! 不懂汇编!对于这样的加密教程!只有干着急的份! 学习一下,谢谢
页:
[1]