首页
论坛
课程
招聘
[旧帖] [原创]emu8086破解记录( 0.00雪花
2010-9-2 23:12 2973

[旧帖] [原创]emu8086破解记录( 0.00雪花

2010-9-2 23:12
2973
打开emu8086提示注册
尝试输入注册名:gudujian
注册码:121212
提示     wrong registration key.

查壳:无壳VB所写
载入 查找Unicode
如下字符串  wrong registration key.
双击来到反汇编窗口:
005D447E                        > \C745 FC 29000000   mov dword ptr ss:[ebp-4],29
005D4485                        .  BA CC044500        mov edx,emu8086.004504CC                          ;  wrong registration key.

提示:Jump from 005D3F25

来到005D3F25:
005D3F10                        .  E8 1B130000        call emu8086.005D5230
005D3F15                        .  C745 FC 1C000000   mov dword ptr ss:[ebp-4],1C
005D3F1C                        .  0FBF15 7CB46100    movsx edx,word ptr ds:[61B47C]
005D3F23                        .  85D2               test edx,edx
005D3F25                        .  0F84 53050000      je emu8086.005D447E
005D3F2B                        .  C745 FC 1D000000   mov dword ptr ss:[ebp-4],1D
005D3F32                        .  68 0000FF00        push 0FF0000
005D3F37                        .  8B45 08            mov eax,dword ptr ss:[ebp+8]
005D3F3A                        .  8B08               mov ecx,dword ptr ds:[eax]
005D3F3C                        .  8B55 08            mov edx,dword ptr ss:[ebp+8]
005D3F3F                        .  52                 push edx
005D3F40                        .  FF51 64            call dword ptr ds:[ecx+64]
005D3F43                        .  DBE2               fclex
005D3F45                        .  8985 10FFFFFF      mov dword ptr ss:[ebp-F0],eax
005D3F4B                        .  83BD 10FFFFFF 00   cmp dword ptr ss:[ebp-F0],0
005D3F52                        .  7D 20              jge short emu8086.005D3F74
005D3F54                        .  6A 64              push 64
005D3F56                        .  68 58B14400        push emu8086.0044B158
005D3F5B                        .  8B45 08            mov eax,dword ptr ss:[ebp+8]
005D3F5E                        .  50                 push eax
005D3F5F                        .  8B8D 10FFFFFF      mov ecx,dword ptr ss:[ebp-F0]
005D3F65                        .  51                 push ecx
005D3F66                        .  FF15 B0104000      call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckOb>;  MSVBVM60.__vbaHresultCheckObj
005D3F6C                        .  8985 74FEFFFF      mov dword ptr ss:[ebp-18C],eax
005D3F72                        .  EB 0A              jmp short emu8086.005D3F7E
005D3F74                        >  C785 74FEFFFF 0000>mov dword ptr ss:[ebp-18C],0
005D3F7E                        >  C745 FC 1E000000   mov dword ptr ss:[ebp-4],1E
005D3F85                        .  68 24044500        push emu8086.00450424                             ;  the software is successfully registered
005D3F8A                        .  8B55 08            mov edx,dword ptr ss:[ebp+8]
005D3F8D                        .  8B02               mov eax,dword ptr ds:[edx]
005D3F8F                        .  8B4D 08            mov ecx,dword ptr ss:[ebp+8]
005D3F92                        .  51                 push ecx
005D3F93                        .  FF50 54            call dword ptr ds:[eax+54]

发现下面不远处有一个:
005D3F85          .  68 24044500        push emu8086.00450424                ;  the software is successfully registered

所以005D3F25处的   je emu8086.005D447E 就是关键跳转了。

而这个je受edx控制,edx是从61B47C 地址处传递过来的

下硬件断点  地址:61B47C       大小 word    类型 写入

重新注册一次 中断在:
005D53DB                        .  83C4 0C                 add esp,0C
005D53DE                        .  68 88B46100             push emu8086.0061B488
005D53E3                        .  68 84B46100             push emu8086.0061B484
005D53E8                        .  68 80B46100             push emu8086.0061B480
005D53ED                        .  E8 5E020000             call emu8086.005D5650
005D53F2                        .  66:85C0                 test ax,ax
005D53F5                        .  0F84 AB000000           je emu8086.005D54A6
005D53FB                        .  66:C705 7CB46100 FFFF   mov word ptr ds:[61B47C],0FFFF
005D5404                        .  8B45 08                 mov eax,dword ptr ss:[ebp+8]
005D5407                        .  66:8338 00              cmp word ptr ds:[eax],0

有这里  call emu8086.005D5650    这个函数应当返回1
进去这个函数往下拉

005D5996                        .  FF15 44134000           call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]  ;  MSVBVM60.__vbaFreeStrList
005D599C                        .  83C4 0C                 add esp,0C
005D599F                        .  8D4D A4                 lea ecx,dword ptr ss:[ebp-5C]
005D59A2                        .  51                      push ecx
005D59A3                        .  8D55 B4                 lea edx,dword ptr ss:[ebp-4C]
005D59A6                        .  52                      push edx
005D59A7                        .  8D45 C4                 lea eax,dword ptr ss:[ebp-3C]
005D59AA                        .  50                      push eax
005D59AB                        .  6A 03                   push 3
005D59AD                        .  FF15 50104000           call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]  ;  MSVBVM60.__vbaFreeVarList
005D59B3                        .  83C4 10                 add esp,10
005D59B6                        .  C3                      retn
005D59B7                        >  C3                      retn                                              ;  RET 用来作为跳转到 005D59B8
005D59B8                        >  66:8B45 DC              mov ax,word ptr ss:[ebp-24]
005D59BC                        .  8B4D E0                 mov ecx,dword ptr ss:[ebp-20]
005D59BF                        .  64:890D 00000000        mov dword ptr fs:[0],ecx
005D59C6                        .  5F                      pop edi
005D59C7                        .  5E                      pop esi
005D59C8                        .  5B                      pop ebx
005D59C9                        .  8BE5                    mov esp,ebp
005D59CB                        .  5D                      pop ebp
005D59CC                        .  C2 0C00                 retn 0C

发现在函数末尾005D59B8  处的   mov ax,word ptr ss:[ebp-24] 影响这个函数返回值。。

再在这个函数中向上找发现:
005D579C                        .  FF15 34104000           call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]      ;  MSVBVM60.__vbaFreeVar
005D57A2                        .  0FBF55 80               movsx edx,word ptr ss:[ebp-80]
005D57A6                        .  85D2                    test edx,edx
005D57A8                        .  74 12                   je short emu8086.005D57BC                         ;  这里跳转则失败!!
005D57AA                        .  C745 FC 08000000        mov dword ptr ss:[ebp-4],8
005D57B1                        .  66:C745 DC FFFF         mov word ptr ss:[ebp-24],0FFFF
005D57B7                        .  E9 C9010000             jmp emu8086.005D5985

005D57A8   处的 je short emu8086.005D57BC 很关键  这里跳转则失败!!

而je是受edx控制的dex从ebp-80处得到值。

继续回溯来到:
005D56F1                        .  E8 2A98EDFF             call emu8086.004AEF20
005D56F6                        .  66:8945 80              mov word ptr ss:[ebp-80],ax                       ;  这里返回0则失败

所以这里的call emu8086.004AEF20 就很关键了,如果这里返回0 则导致失败。!

按回车进去分析这个函数

发现在函数尾部有一个字符串比较指令:
004AEFAD                        .  FF15 50104000           call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]  ;  MSVBVM60.__vbaFreeVarList
004AEFB3                        .  8B55 E8                 mov edx,dword ptr ss:[ebp-18]
004AEFB6                        .  8B06                    mov eax,dword ptr ds:[esi]
004AEFB8                        .  83C4 0C                 add esp,0C
004AEFBB                        .  52                      push edx
004AEFBC                        .  50                      push eax
004AEFBD                        .  6A 01                   push 1                                            ;  文本方式比较!!
004AEFBF                        .  FF15 90134000           call dword ptr ds:[<&MSVBVM60.__vbaStrComp>]      ;  MSVBVM60.__vbaStrComp
004AEFC5                        .  66:F7D8                 neg ax                                        (经过分析这里返回1则失败!!)
004AEFC8                        .  1BC0                    sbb eax,eax
004AEFCA                        .  68 F5EF4A00             push emu8086.004AEFF5
004AEFCF                        .  F7D8                    neg eax
004AEFD1                        .  48                      dec eax
004AEFD2                        .  8945 EC                 mov dword ptr ss:[ebp-14],eax
004AEFD5                        .  EB 14                   jmp short emu8086.004AEFEB

经过分析发现这个函数的返回值就由这个的调用决定了。

因此在004AEFBF 处下断

重新注册一次来到这里断下来  发现:

寄存器窗口:

EAX 0015574C UNICODE "112"
ECX 00120000
EDX 001556F4 UNICODE "121"
EBX 01021EA4
ESP 0012F780
EBP 0012F7F4
ESI 0012F878
EDI 011911F0 MICROASM.MicroAsm_T
EIP 004AEFBF emu8086.004AEFBF

堆栈窗口:
而edx和eax恰好是  __vbaStrComp 的两个参数其中eax是固定的。

__vbastrcomp(x,y) 在两个参数指向的字符串不相等 时返回零

无论你输入的注册码是什么eax都是指向112 ,而edx恰好是我们输入的注册码的前三位

这样得到一个结论只要  注册码的前三位是“112”就行了无论后面跟多少位也无论注册名是什么都可以通过??!!

打开一个未注册版按照分析结果一试果然成功!!(注册机制竟然这么垃圾

文中提到的emu8086下载地址:

http://www.skycn.com/soft/20439.html

[招生]科锐逆向工程师培训46期预科班将于 2023年02月09日 正式开班

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
破曉 活跃值 2010-9-3 00:05
2
0
我还很菜。。未能看懂。
雪    币: 25
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aosme 活跃值 2010-9-3 15:26
3
0
学习了。写的真好。
雪    币: 35
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
张庭括 活跃值 2013-12-29 21:32
4
0
怎么下硬件断点???什么工具?
雪    币: 45
活跃值: 活跃值 (13)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gudujsk 活跃值 2013-12-29 21:36
5
0
就用OD调试器,没有什么复杂的逻辑
雪    币: 327
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cheryl 活跃值 2013-12-29 21:39
6
0
看懂了  写的很清楚~~~
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
我来玩的 活跃值 2013-12-30 01:07
7
0
找个帖子回复一下 转会员
雪    币: 124
活跃值: 活跃值 (14)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
wenboxu 活跃值 2 2013-12-31 19:29
8
0
赞一个,就是需要这么一点点的推进
雪    币: 11
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
探路 活跃值 2014-1-1 08:22
9
0
分析得很清楚!
游客
登录 | 注册 方可回帖
返回