binbinbin 发表于 2006-11-29 09:56:14

一个屏幕录像专家生成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:57

应该不仅仅是密码问题,还有图象、文字、声音等的检验吧?

binbinbin 发表于 2006-11-29 17:36:30

原帖由 hrbx 于 2006-11-29 13:46 发表
应该不仅仅是密码问题,还有图象、文字、声音等的检验吧?


我只会输入数字的破解。

如果真的用上那些甚么图象校验。完全没听过也不可能会

xingbing 发表于 2006-11-29 19:53:10

看算法是个很头疼的事。

hangyubin 发表于 2006-11-29 20:24:51

不懂汇编!对于这样的加密教程!只有干着急的份!

hrbx 发表于 2006-11-29 22:28:32

原帖由 binbinbin 于 2006-11-29 17:36 发表



我只会输入数字的破解。

如果真的用上那些甚么图象校验。完全没听过也不可能会

没有屏幕录像专家,只能猜测。

可以用屏幕像专家录一个有密码的录像,然后输入你提供的密码看能否解压播放就知道了。

输入密码应该只是第一关,后面似乎还有校验。

gxkm 发表于 2007-8-30 01:16:49

不懂汇编!对于这样的加密教程!只有干着急的份!

zxwbj 发表于 2007-9-9 19:05:14

不懂汇编!对于这样的加密教程!只有干着急的份!

心系彩云 发表于 2007-9-11 00:18:35

学习一下,谢谢
页: [1]
查看完整版本: 一个屏幕录像专家生成exe文件的密码的算法分析