【文章标题】: 闲暇时对COM Explorer 2.0进行算法分析
【文章作者】: 星晨缘
【使用工具】: OD
【写作时间】: 2013-05-31
【分析难度】: 定位于跟我一样的入门朋友们,高手.前辈们就跳过吧
【文章说明】: 如转载,请保持原文,谢谢!
【作者声明】: 今天闲暇时在看雪里逛了下,看到一位朋友发了个爆破的文章,我就去下载过来看了下,发现安装后里边是有个Key的,但是并不完美,没有对字母大小写进行处理,用大写的话就算不出注册码来,对于好奇,就拿了OD分析了下...不周到或者那里写错之类还请指正,谢谢!本人只是个菜鸟,希望能得到大侠们的指点,谢过!
发了贴子之后才知道这个软件原先已经有人发过了(论坛帖子下方所提示的相似帖子看到的),
地址:http://bbs.pediy.com/showthread.php?t=72984
但我之前并没看过原先的那位大侠的作品,这也太巧了点了吧,人家的还是(时 间: 2008-09-17,21:52:33)的呢!
1.查壳,PEiD查到的是>>Microsoft Visual C++ 6.0 [Overlay],既然没壳就好办多了
2.打开软件,跳出注册窗体,试着注册个试试,
输入用户名:星晨缘,注册码:123456,弹出个MessageBox对话框,这样可以用bp MessageBoxA来下断
3.OD载入,F9运行,下MessageBox断点会断在注册码生成(或说比较)的之后,往回找注册码的算法可能会比较远,所以我在这是下:bp GetWindowTextA断点(比较好找注册码算法),
再次输入注册信息,点一下解锁,让OD给断下来了
760670ED > 6A 08 push 8 //断在这里,注意取消一下断点哦
760670EF 68 58710676 push 76067158
760670F4 E8 07150100 call 76078600
760670F9 8B7D 0C mov edi, dword ptr [ebp+C]
760670FC 33DB xor ebx, ebx
760670FE 3BFB cmp edi, ebx
004328C2 |. FF7424 08 push dword ptr [esp+8] ; /Count
004328C6 |. FF7424 08 push dword ptr [esp+8] ; |Buffer
004328CA |. FF71 1C push dword ptr [ecx+1C] ; |hWnd
004328CD |. FF15 D0044500 call dword ptr [<&USER32.GetWindowTex>; \GetWindowTextA
004328D3 |. EB 12 jmp short 004328E7 ; //执行后返回到这里,这里可以看到堆栈里有注册用户的信息
004328D5 |> FF7424 08 push dword ptr [esp+8]
004328D9 |. 8B10 mov edx, dword ptr [eax]
004328DB |. 8BC8 mov ecx, eax
004328DD |. FF7424 08 push dword ptr [esp+8]
004328E1 |. FF92 84000000 call dword ptr [edx+84]
004328E7 \> C2 0800 retn 8
00408F07 . 68 FF000000 push 0FF
00408F0C . 68 68994600 push 00469968 ; ASCII "星晨缘"
00408F11 . 8D8E A8040000 lea ecx, dword ptr [esi+4A8]
00408F17 . E8 9F990200 call 004328BB ; 获取用户名
00408F1C . 68 FF000000 push 0FF ; //执行单步返回到这里
00408F21 . 68 689A4600 push 00469A68 ; ASCII "123456"
00408F26 . 8D8E 6C040000 lea ecx, dword ptr [esi+46C]
00408F2C . E8 8A990200 call 004328BB ; 获取注册码
00408F31 . 68 68994600 push 00469968 ; ASCII "星晨缘"
00408F36 . 8D4C24 0C lea ecx, dword ptr [esp+C]
00408F3A . E8 12600200 call 0042EF51 ; //有点可疑,F7跟进去看看,结果一场空
00408F3F . 8B00 mov eax, dword ptr [eax]
00408F41 . 68 98414600 push 00464198
00408F46 . 50 push eax
00408F47 . E8 33330100 call 0041C27F
00408F4C . 83C4 08 add esp, 8
00408F4F . 8D4C24 08 lea ecx, dword ptr [esp+8]
00408F53 . 85C0 test eax, eax
00408F55 . 0F94C3 sete bl
00408F58 . E8 865F0200 call 0042EEE3
00408F5D . 84DB test bl, bl
00408F5F . 74 0F je short 00408F70 ; //这里跳了,既然跳了就让它跳吧,前边几个CALL都没什么收获
00408F61 . 6A 01 push 1
00408F63 . 8BCE mov ecx, esi
00408F65 . E8 93A70200 call 004336FD
00408F6A . 5E pop esi
00408F6B . 5B pop ebx
00408F6C . 83C4 08 add esp, 8
00408F6F . C3 retn
00408F70 > E8 1BFCFFFF call 00408B90 ; //也跟进去看看,即上边的JE跳到这个CALL的
00408F75 . 85C0 test eax, eax
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!