首页
社区
课程
招聘
[求助]happytown大大的KeyGenMe:Crack入门系列中的第6个的不解
发表于: 2008-7-19 21:20 8877

[求助]happytown大大的KeyGenMe:Crack入门系列中的第6个的不解

2008-7-19 21:20
8877
帖子:http://bbs.pediy.com/showthread.php?t=33853
其中的1到5都已经搞定,分析完算法并写出了注册机,今天尝试第6个,遇到问题了,麻烦各位XD了

004026B0   .  8BF8          mov     edi, eax                         ;  EDI=EAX
004026B2   .  8D4D B8       lea     ecx, dword ptr [ebp-48]
004026B5   .  FF15 C0104000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
004026BB   .  8D4D 94       lea     ecx, dword ptr [ebp-6C]
004026BE   .  51            push    ecx
004026BF   .  8D55 A4       lea     edx, dword ptr [ebp-5C]
004026C2   .  52            push    edx
004026C3   .  6A 02         push    2
004026C5   .  FFD3          call    ebx
004026C7   .  83C4 0C       add     esp, 0C
004026CA   .  B8 01000000   mov     eax, 1                           ;  EAX=1
004026CF   .  66:03C6       add     ax, si                           ;  AX=AX+SI
004026D2      0F80 3A010000 jo      00402812
004026D8   .  8BF0          mov     esi, eax                         ;  ESI=EAX
004026DA   .^ E9 6DFFFFFF   jmp     0040264C
004026DF   >  89BD 6CFFFFFF mov     dword ptr [ebp-94], edi
004026E5   .  C785 64FFFFFF>mov     dword ptr [ebp-9C], 8003
004026EF   .  8D85 64FFFFFF lea     eax, dword ptr [ebp-9C]
004026F5   .  50            push    eax                              ; /var18
004026F6   .  8D4D C8       lea     ecx, dword ptr [ebp-38]          ; |
004026F9   .  51            push    ecx                              ; |var28
004026FA   .  FF15 9C104000 call    dword ptr [<&MSVBVM60.__vbaVarTs>; \__vbaVarTstNe
00402700   .  66:85C0       test    ax, ax
00402703   .  0F85 92000000 jnz     0040279B


其中这里
004026E5   .  C785 64FFFFFF>mov     dword ptr [ebp-9C], 8003
004026EF   .  8D85 64FFFFFF lea     eax, dword ptr [ebp-9C]
004026F5   .  50            push    eax                              ; /var18
004026F6   .  8D4D C8       lea     ecx, dword ptr [ebp-38]          ; |
004026F9   .  51            push    ecx                              ; |var28
004026FA   .  FF15 9C104000 call    dword ptr [<&MSVBVM60.__vbaVarTs>; \__vbaVarTstNe
00402700   .  66:85C0       test    ax, ax

对于MSVBVM60.__vbaVarTstNe,看了这个帖子http://bbs.pediy.com/showthread.php?p=172135,wzwgp在6楼写到
__vbaVarTstNe       ;关系运算 <>

lea eax,var1
push eax                ;变量1
lea eax,var2
push eax                ;变量2
call __vbaVarTstNe  ;if var1 <> var2 then ax = &Hffff
                    ;else ax = 0
                    ;end if

而对KeyGenMe06来说,var1和var2都是恒定的,那这里的对比有意义吗?

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (25)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
听起来好像不错 也玩玩
2008-7-19 21:30
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
var1和var2并非是恒定的,一个是真注册码,一个是你输入的伪注册码。
004026EF   .  8D85 64FFFFFF lea     eax, dword ptr [ebp-9C]
004026F5   .  50            push    eax                              ; /var18
004026F6   .  8D4D C8       lea     ecx, dword ptr [ebp-38]          ; |
004026F9   .  51            push    ecx                              ; |var28
004026FA   .  FF15 9C104000 call    dword ptr [<&MSVBVM60.__vbaVarTs>; \__vbaVarTstNe
此处为关键比较
2008-7-20 10:58
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=zapline;483813]var1和var2并非是恒定的,一个是真注册码,一个是你输入的伪注册码。
004026EF   .  8D85 64FFFFFF lea     eax, dword ptr [ebp-9C]
004026F5   .  50            push    eax            ...[/QUOTE]
这个我是知道,也知道这里就是真假码对比的地方,可是
dword ptr [ebp-9C]和dword ptr [ebp-38]两处的值不是唯一的吗?望指教
2008-7-20 12:18
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
dword ptr [ebp-9C]处的值是根据用户名计算出的注册码
dword ptr [ebp-38] 处的值是你输入的注册码
2008-7-20 12:27
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=逍定;483848]这个我是知道,也知道这里就是真假码对比的地方,可是
dword ptr [ebp-9C]和dword ptr [ebp-38]两处的值不是唯一的吗?望指教[/QUOTE]

当然不是,给你的错觉可能与VB变量的特点有关系,例如:

004026DF   >  89BD 6CFFFFFF mov     dword ptr [ebp-94], edi
004026E5   .  C785 64FFFFFF>mov     dword ptr [ebp-9C], 8003
004026EF   .  8D85 64FFFFFF lea     eax, dword ptr [ebp-9C]

dword ptr [ebp-9C], 8003
vb变量存放在内存中时只少要用12个字节(即3个DWORD,有时会更长,如float),前一个DWORD说明变量的类型,像dword ptr [ebp-9C], 8003,说明这个变量是长整型,后面第8个字符后(即第3个DWORD)中才是具体的数值。
2008-7-20 12:28
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=zapline;483855]dword ptr [ebp-9C]处的值是根据用户名计算出的注册码
dword ptr [ebp-38] 处的值是你输入的注册码[/QUOTE]

我跟踪过好几次了  应该没错的
2008-7-20 12:31
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个我知道了,可是我菜鸟一个,找不到真码存在哪里...
能贴出真码的位置吗?

[QUOTE=红尘岁月;483856]当然不是,给你的错觉可能与VB变量的特点有关系,例如:

004026DF   >  89BD 6CFFFFFF mov     dword ptr [ebp-94], edi
004026E5   .  C785 64FFFFFF>mov     dword ptr [ebp-9C], 8003
004026EF   .  8D85 64FFFFFF lea     eax, dword ptr [ebp-9C]

dword ptr [ebp-9C], 8003
vb变量存放在内存中时只少要用12个字节(即3个DWORD,有时会更长,如float),前一个DWORD说明变量的类型,像dword ptr [ebp-9C], 8003,说明这个变量是长整型,后面第8个字符后(即第3个DWORD)中才是具体的数值。[/QUOTE]
这个,大大可以举个具体的例子吗?我还是不太懂...
PS:为什么dword ptr [ebp-9C], 8003就说明这个变量是长整型?
2008-7-20 12:48
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
00401225  |.  68 80000000   push    80                               ; /Count = 80 (128.)
0040122A  |.  68 04314000   push    CrackMe_.00403104                ; |Buffer = CrackMe_.00403104
0040122F  |.  68 EC030000   push    3EC                              ; |ControlID = 3EC (1004.)
00401234  |.  FF75 08       push    [arg.1]                          ; |hWnd = 00270744 ('Coded by [HappyTown]',class='#32770')
00401237  |.  E8 FC000000   call    <jmp.&user32.GetDlgItemTextA>    ; \GetDlgItemTextA
0040123C  |.  8945 F4       mov     [local.3], eax
0040123F  |.  837D F4 04    cmp     [local.3], 4
00401243  |.  73 04         jnb     short CrackMe_.00401249
00401245  |.  C9            leave
00401246  |.  C2 1000       retn    10
00401249  |>  68 04314000   push    CrackMe_.00403104                ;  ASCII "2131243"
0040124E  |.  E8 E3FDFFFF   call    CrackMe_.00401036
00401253  |.  6A 01         push    1
00401255  |.  50            push    eax
00401256  |.  E8 26FEFFFF   call    CrackMe_.00401081
0040125B  |.  0B45 F0       or      eax, [local.4]
0040125E  |.  25 FFFFFF0F   and     eax, 0FFFFFFF
00401263  |.  8945 EC       mov     [local.5], eax
00401266  |.  33C9          xor     ecx, ecx                         ;  user32.77D3218C
00401268  |.  33D2          xor     edx, edx
0040126A  |.  8D35 00304000 lea     esi, dword ptr ds:[403000]
00401270  |.  8B45 EC       mov     eax, [local.5]
00401273  |>  8945 EC       /mov     [local.5], eax
00401276  |.  6A 10         |push    10
00401278  |.  50            |push    eax
00401279  |.  E8 82FDFFFF   |call    CrackMe_.00401000
0040127E  |.  8BC8          |mov     ecx, eax
00401280  |.  8D3D 73204000 |lea     edi, dword ptr ds:[402073]
00401286  |.  8A0439        |mov     al, byte ptr ds:[ecx+edi]
00401289  |.  8806          |mov     byte ptr ds:[esi], al
0040128B  |.  8B45 EC       |mov     eax, [local.5]
0040128E  |.  6A 04         |push    4
00401290  |.  50            |push    eax
00401291  |.  E8 86FDFFFF   |call    CrackMe_.0040101C
00401296  |.  8945 EC       |mov     [local.5], eax
00401299  |.  0BC0          |or      eax, eax
0040129B  |.  74 04         |je      short CrackMe_.004012A1
0040129D  |.  46            |inc     esi                             ;  CrackMe_.00401139
0040129E  |.  47            |inc     edi
0040129F  |.^ EB D2         \jmp     short CrackMe_.00401273
004012A1  |>  68 00010000   push    100                              ; /Count = 100 (256.)
004012A6  |.  8D85 ECFEFFFF lea     eax, [local.69]                  ; |
004012AC  |.  50            push    eax                              ; |Buffer = 00000007
004012AD  |.  68 ED030000   push    3ED                              ; |ControlID = 3ED (1005.)
004012B2  |.  FF75 08       push    [arg.1]                          ; |hWnd = 00270744 ('Coded by [HappyTown]',class='#32770')
004012B5  |.  E8 7E000000   call    <jmp.&user32.GetDlgItemTextA>    ; \GetDlgItemTextA
004012BA  |.  0BC0          or      eax, eax
004012BC  |.  75 04         jnz     short CrackMe_.004012C2
004012BE  |.  C9            leave
004012BF  |.  C2 1000       retn    10
004012C2  |>  68 00304000   push    CrackMe_.00403000                ; /String2 = ""
004012C7  |.  8D85 ECFEFFFF lea     eax, [local.69]                  ; |
004012CD  |.  50            push    eax                              ; |String1 = 00000007 ???
004012CE  |.  E8 53000000   call    <jmp.&kernel32.lstrcmpA>         ; \lstrcmpA
004012D3  |.  0BC0          or      eax, eax
004012D5  |.  75 18         jnz     short CrackMe_.004012EF
2008-7-20 12:55
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
00401270  |.  8B45 EC       mov     eax, [local.5]
00401273  |>  8945 EC       /mov     [local.5], eax
00401276  |.  6A 10         |push    10
00401278  |.  50            |push    eax
00401279  |.  E8 82FDFFFF   |call    CrackMe_.00401000
0040127E  |.  8BC8          |mov     ecx, eax
00401280  |.  8D3D 73204000 |lea     edi, dword ptr ds:[402073]
00401286  |.  8A0439        |mov     al, byte ptr ds:[ecx+edi]
00401289  |.  8806          |mov     byte ptr ds:[esi], al
0040128B  |.  8B45 EC       |mov     eax, [local.5]
0040128E  |.  6A 04         |push    4
00401290  |.  50            |push    eax
00401291  |.  E8 86FDFFFF   |call    CrackMe_.0040101C
00401296  |.  8945 EC       |mov     [local.5], eax
00401299  |.  0BC0          |or      eax, eax
0040129B  |.  74 04         |je      short CrackMe_.004012A1
0040129D  |.  46            |inc     esi                             ;  CrackMe_.00403003
0040129E  |.  47            |inc     edi                             ;  CrackMe_.00402073
0040129F  |.^ EB D2         \jmp     short CrackMe_.00401273

在这里计算
2008-7-20 12:57
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我又看了篇你发的,地方可能错了
2008-7-20 12:59
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=zapline;483868]00401270  |.  8B45 EC       mov     eax, [local.5]
00401273  |>  8945 EC       /mov     [local.5], eax
00401276  |.  6A 10         |push    10
00401278  |.  50            |push    eax
00401279  |.  E8 82FDFFFF   |call    CrackMe_.00401000
0040127E  |.  8BC8          |mov     ecx, eax
00401280  |.  8D3D 73204000 |lea     edi, dword ptr ds:[402073]
00401286  |.  8A0439        |mov     al, byte ptr ds:[ecx+edi]
00401289  |.  8806          |mov     byte ptr ds:[esi], al
0040128B  |.  8B45 EC       |mov     eax, [local.5]
0040128E  |.  6A 04         |push    4
00401290  |.  50            |push    eax
00401291  |.  E8 86FDFFFF   |call    CrackMe_.0040101C
00401296  |.  8945 EC       |mov     [local.5], eax
00401299  |.  0BC0          |or      eax, eax
0040129B  |.  74 04         |je      short CrackMe_.004012A1
0040129D  |.  46            |inc     esi                             ;  CrackMe_.00403003
0040129E  |.  47            |inc     edi                             ;  CrackMe_.00402073
0040129F  |.^ EB D2         \jmp     short CrackMe_.00401273[/QUOTE]
怪了,我找不到这段代码的说
2008-7-20 13:06
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
查找字符串 GOOD往上就是了
2008-7-20 13:07
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
004026F5   .  50            push    eax                              ; /var18
004026F6   .  8D4D C8       lea     ecx, dword ptr [ebp-38]          ; |
004026F9   .  51            push    ecx                              ; |var28
004026FA   .  FF15 9C104000 call    dword ptr [<&MSVBVM60.__vbaVarTs>; \__vbaVarTstNe
00402700   .  66:85C0       test    ax, ax
00402703   .  0F85 92000000 jnz     0040279B
00402709   .  B9 04000280   mov     ecx, 80020004
0040270E   .  898D 7CFFFFFF mov     dword ptr [ebp-84], ecx
00402714   .  B8 0A000000   mov     eax, 0A
00402719   .  8985 74FFFFFF mov     dword ptr [ebp-8C], eax
0040271F   .  894D 8C       mov     dword ptr [ebp-74], ecx
00402722   .  8945 84       mov     dword ptr [ebp-7C], eax
00402725   .  C785 5CFFFFFF>mov     dword ptr [ebp-A4], 00401C9C     ;  congratulations
0040272F   .  BF 08000000   mov     edi, 8
00402734   .  89BD 54FFFFFF mov     dword ptr [ebp-AC], edi
0040273A   .  8D95 54FFFFFF lea     edx, dword ptr [ebp-AC]
00402740   .  8D4D 94       lea     ecx, dword ptr [ebp-6C]
00402743   .  8B35 A4104000 mov     esi, dword ptr [<&MSVBVM60.__vba>;  MSVBVM60.__vbaVarDup
00402749   .  FFD6          call    esi                              ;  <&MSVBVM60.__vbaVarDup>
0040274B   .  C785 6CFFFFFF>mov     dword ptr [ebp-94], 00401C7C     ;  good job,man!

指的是这个?不对啊
2008-7-20 13:09
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
你的那个是第六个吗?我看了 我没搞错呀
2008-7-20 13:12
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
是第六个啊,我把自己手上的上传下

http://bbs.pediy.com/showthread.php?t=33853&page=3
上传的附件:
2008-7-20 13:15
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我做的是使用汇编写的
上传的附件:
2008-7-20 13:21
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
呀呀呀 好像我错了
没想到后面还有
真不好意思
2008-7-20 13:22
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
晕啊,我们下的竟然不是同一个...

上传的附件:
2008-7-20 13:24
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我麻烦你的才对
2008-7-20 13:24
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
试试真的KM6
2008-7-20 13:30
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
22
[QUOTE=逍定;483863]这个我知道了,可是我菜鸟一个,找不到真码存在哪里...
能贴出真码的位置吗?

这个,大大可以举个具体的例子吗?我还是不太懂...
PS:为什么dword ptr [ebp-9C], 8003就说明这个变量是长整型?[/QUOTE]

这个程序本身不就是一个很好的例子吗,仔细观察一下数据的存储格式体会一下

8003就说明这个变量是长整型?
这是vb程序变量存储的特点,其它格式如下:
符号常量            值         内部表示                  字节数
V_EMPTY             0          Empty
V_NULL              1          Null
V_INTEGER           2          Interger                  2
V_LONG              3          Long                      4
V_SINGLE            4          Single                    4
V_DOUBLE            5          Double                    8
V_CURRENCY          6          Currency                  8
V_DATE              7          Date                      8
V_STRING            8          String
V_OLE               9          OLE Automation Object
V_ERROR             10         Error
V_BOOLEAN           11         Boolean                   2
V_VARIANT           12         Variant(仅用于变体数组)   16(22)       
V_OBJECT            13         Object(非OLE自动化对象)   4
V_BYTE              17         Byte                      1
V_ARRAY             8192       Array
2008-7-20 14:17
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
谢谢红尘岁月指点迷津
2008-7-20 14:23
0
雪    币: 250
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
如何计算出注册码这点已经搞定了,正在写注册机....
但是算法的分析还不是非常的清晰,有哪位兄弟写出破文来就好了
2008-7-20 16:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
支持一下
不清晰都能写注册机  兄弟强
2008-7-21 23:43
0
游客
登录 | 注册 方可回帖
返回
//