【标题】EmEditor 12.0.10 爆破简单分析
【作者】卡卡依
【语言】VC9
【保护】无壳
【难度】简单
【工具】ollydbg
【简介】一个不用多说的强大的文件编辑工具,载入大size文件速度完胜UltraEdit。
【正文】
本来12.0.10以下的版本用CRD发布的那个注册机十分完美的,不知道为什么下了12.0.10版后注册会提示激活时有错误,没办法,虽然技术很烂也只能硬着头皮上,貌似没什么人破解但是自己又想用,加上泡看雪这么久没发什么帖子,所以就贡献一下皮毛,请大大指点,如果能分析出算法的话,在下实在有点无力,被算法函数的jmp跳的想吐了。
首先OD载入emeditor的12.0.10版,F9直接让程序起来,之后程序会弹出一个需要注册的窗口,点击输入激活码,弹出用户名和KEY的注册框,好了,回到OD右键->search for->name in all modules,找到下面红色字位置双击去到函数入口:
77D23D3A USER32 .text Export ( DefDlgProcW
77D242ED USER32 .text Export ( SetForegroundWindow
[COLOR="Red"]77D24305 USER32 .text Export ( GetDlgItemTextW[/COLOR]
77D2436E USER32 .text Export ( GetDlgItem
77D245BB USER32 .text Export ( DrawStateW
此时我们并不知道程序是从哪里调用了到该函数的,没关系,我们看emeditor应该已经弹出提示框说未注册,可以选择输入激活码,我们填写好名字,激活码随便输入什么然后确定,od断点响应,鼠标点一下红色位置后F4->F8
77D24305 > 8BFF mov edi, edi
77D24307 55 push ebp
77D24308 8BEC mov ebp, esp
77D2430A FF75 0C push dword ptr [ebp+C]
77D2430D FF75 08 push dword ptr [ebp+8]
77D24310 E8 59000000 call GetDlgItem
77D24315 85C0 test eax, eax
77D24317 0F84 14590200 je 77D49C31
77D2431D FF75 14 push dword ptr [ebp+14]
77D24320 FF75 10 push dword ptr [ebp+10]
77D24323 50 push eax
77D24324 E8 A4620000 call GetWindowTextW ; Get imput key
77D24329 5D pop ebp
[COLOR="red"]77D2432A C2 1000 retn 10[/COLOR]
这样我们就来到了调用这个函数的位置了,看下逻辑是比较简单的,看了注释其实很多方法就可以实现crack了,我的方法是修改红色位置为mov eax, 1,此时无论你输入的是什么激活码都可以成功通过。
6DBE3886 8B35 9023BF6D mov esi, dword ptr [6DBF2390] ; USER32.GetDlgItemTextW
6DBE388C 6A 1E push 1E
6DBE388E 8D4424 10 lea eax, dword ptr [esp+10]
6DBE3892 50 push eax
6DBE3893 68 43060000 push 643
6DBE3898 57 push edi
6DBE3899 FFD6 call esi
6DBE389B 6A 28 push 28
6DBE389D 8D4424 4C lea eax, dword ptr [esp+4C]
6DBE38A1 50 push eax
6DBE38A2 68 F3030000 push 3F3
6DBE38A7 57 push edi
6DBE38A8 FFD6 call esi ; 这里调用上面GetDlgItemTextW函数
6DBE38AA 66:395C24 0C cmp word ptr [esp+C], bx ; Compare first character(对比第一个字母,必须是B开头)
6DBE38AF 0F84 63010000 je 6DBE3A18
6DBE38B5 6A 0C push 0C
6DBE38B7 8D4424 10 lea eax, dword ptr [esp+10]
6DBE38BB 50 push eax
[COLOR="red"]6DBE38BC E8 3C190000 call 6DBE51FD[/COLOR] ; verify key is it valid(key验证函数,里面就是一个硕大的迷宫)
6DBE38C1 83F8 01 cmp eax, 1 ; 1 is registered success(1表示注册成功,不成功就会跳到下面,不同的返回有不同的提示)
6DBE38C4 75 50 jnz short 6DBE3916
6DBE38C6 8D9424 98000000 lea edx, dword ptr [esp+98]
6DBE38CD B9 FC93BF6D mov ecx, 6DBF93FC ; UNICODE "eeadmin.exe"
6DBE38D2 E8 BC0EFFFF call 6DBD4793
最后希望有能力的大大如果闲的话,能够跟到6DBE51FD函数里面去分析出算法,我完全被jmp晕了~~~
,目前所知道的是return是3,应该是修改了某个小部分的算法导致老的算号器计算的激活码都是错误的,函数6DBE51FD的跳转十分频繁,有跟过两天,这里给出一些已经跟到的内容希望对有兴趣的朋友一些参考,进入函数后会在edi+4C处先初始化一个跳转表,然后每次都是通过命令:
jmp dword ptr [edi+eax*4]
进行不同算法逻辑的跳转,算法开始看到esp偏移大概0x250位置处生成一个表,内存如下所示:
00CCE260 42 00 53 00 34 00 56 00 39 00 4E 00 41 00 43 00 B.S.4.V.9.N.A.C.
00CCE270 44 00 4B 00 57 00 45 00 50 00 58 00 32 00 54 00 D.K.W.E.P.X.2.T.
00CCE280 33 00 59 00 38 00 46 00 51 00 4A 00 4C 00 55 00 3.Y.8.F.Q.J.L.U.
00CCE290 35 00 48 00 5A 00 36 00 52 00 4D 00 37 00 47 00 5.H.Z.6.R.M.7.G.
00CCE2A0 53 00 34 00 56 00 39 00 41 00 43 00 4B 00 57 00 S.4.V.9.A.C.K.W.
00CCE2B0 45 00 50 00 58 00 32 00 54 00 33 00 59 00 42 00 E.P.X.2.T.3.Y.B.
00CCE2C0 38 00 46 00 51 00 4A 00 4C 00 55 00 35 00 48 00 8.F.Q.J.L.U.5.H.
00CCE2D0 5A 00 36 00 52 00 4D 00 37 00 4E 00 44 00 47 00 Z.6.R.M.7.N.D.G.
00CCE2E0 53 00 34 00 56 00 4E 00 42 00 41 00 4B 00 57 00 S.4.V.N.B.A.K.W.
00CCE2F0 45 00 50 00 32 00 44 00 35 00 54 00 33 00 59 00 E.P.2.D.5.T.3.Y.
00CCE300 38 00 46 00 51 00 4A 00 4C 00 55 00 43 00 48 00 8.F.Q.J.L.U.C.H.
00CCE310 5A 00 36 00 52 00 4D 00 37 00 47 00 39 00 58 00 Z.6.R.M.7.G.9.X.
00CCE320 34 00 42 00 57 00 45 00 50 00 53 00 32 00 44 00 4.B.W.E.P.S.2.D.
00CCE330 35 00 54 00 33 00 59 00 38 00 4E 00 46 00 51 00 5.T.3.Y.8.N.F.Q.
00CCE340 4A 00 4C 00 55 00 43 00 56 00 48 00 5A 00 36 00 J.L.U.C.V.H.Z.6.
00CCE350 52 00 4D 00 41 00 4B 00 37 00 47 00 39 00 58 00 R.M.A.K.7.G.9.X.
00CCE360 56 00 4E 00 32 00 54 00 59 00 38 00 46 00 42 00 V.N.2.T.Y.8.F.B.
00CCE370 53 00 51 00 50 00 58 00 4A 00 43 00 4C 00 41 00 S.Q.P.X.J.C.L.A.
00CCE380 55 00 35 00 48 00 5A 00 33 00 36 00 44 00 52 00 U.5.H.Z.3.6.D.R.
00CCE390 4D 00 37 00 34 00 47 00 45 00 39 00 57 00 4B 00 M.7.4.G.E.9.W.K.
00CCE3A0 56 00 4E 00 43 00 44 00 57 00 32 00 54 00 33 00 V.N.C.D.W.2.T.3.
00CCE3B0 59 00 38 00 46 00 42 00 53 00 51 00 45 00 50 00 Y.8.F.B.S.Q.E.P.
00CCE3C0 58 00 4A 00 4C 00 41 00 55 00 35 00 48 00 5A 00 X.J.L.A.U.5.H.Z.
00CCE3D0 36 00 52 00 4D 00 37 00 34 00 47 00 39 00 4B 00 6.R.M.7.4.G.9.K.
但是始终我都没分析出把key传入进来后是怎么用的,以为jmp实在是多到让人想仍鼠标~可能是我才疏学浅,如果哪位大大解密了key希望能给出分析,在下先谢了!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课