【文章标题】: 玲珑3D几何作图工具 V2.06的注册流程全面分析
【文章作者】: zouzhiyong
【作者邮箱】: zzydog@foxmail.com
【软件名称】: 玲珑3D几何作图工具 V2.06
【软件大小】: 763KB
【下载地址】: http://www.linglong3d.net/download/Linglong3dV2.06.rar
【加壳方式】: 没有加壳
【保护方式】: 序列号,实际上是KeyFile
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: od+peid+windows记事本+破解辅助计算器
【操作平台】: 虚拟机windows XP
【软件介绍】: 简单灵活的立体几何作图软件
【作者声明】: 这是自己首次详细的算法分析,文章可能有很多不当之处。还请大家来指正。 之前一直在找CrackMe来练习,感觉上有点脱离现实软件的注册算法,因此特意找一个共享软件来练习一下,总体感觉上难度不是不大,只是注册方式有点怪。至于怎么个怪法,下面开始分析。之前发过的算法分析可能是过于草率了吧,未能得到邀请码。
这次是从最简单的爆破开始逐步深入到算法分析,然后到写注册机,最后到探究注册算法的本质。分析尽量详细,比较通俗易懂。希望这次能得到大家的回复和支持,得到一个邀请码。 【分析过程】:
开始就用PEID查了一下,没有加壳的,是用Microsoft Visual C++ 6.0编写的程序,用OD载入进去,一看到那些乱七八糟的函数名就知道是MFC写的程序。小弟菜鸟一个,第一次分析MFC程序,MFC的程序真的是非常的头疼,要在一大堆封装代码上找出关键算法,幸好,软件的注册提示信息还是比较全的。爆破追踪: 跟踪 入手点1-------输入错误信息跟踪:
废话说多了,切入正题。首先要说一下软件比较怪的注册流程。
软件运行后,窗口标题会显示软件没有注册,如果是超过了使用次数会显示已经超过了使用次数,并且弹出窗口要你输入解密锁密文。如图所示:
实际上这个输入框根本就没有任何意义,这仅仅是显示一个输入框而已,并没有任何功能(除了相应WM_CLOSE这个消息外),不管你输入的注册码正确与否,都不会作出反应,只能关掉。可能你会说只有正确的注册码才会有反应,但是下面就证明你是错的。
究竟是怎样看的出来的呢。我是通过这样发现的:开始想从这里入手跟踪注册流程的,下断bp GetDlgItemTextW,没有断下,消息断点没有断下,既然是MFC的话就更不用下GetWindowTextW了。此时想到如果获取了密文后一定会存放于某个buffer缓冲区的,因此,可以通过搜索内存来定位数据,然后对数据下断即可。
在随便输入字符串,点击确定后,我用winhex 搜索软件的全部内存,只找到一处,就是MFC资源框所在的buffer。正常情况下,如果有获取到内容到缓冲区的话,就肯定不止一处的,除非是根本没有获取内容。为了验证,我又做了两次对比,在点击确定的前和后搜索内存,结果是一样的,同样的地址。
其后又做一个次验证,就是在该地址下内存访问断点(硬件访问都试过了),然后按确定,没有被断下。
根本没有对密文框数据访问,到这里就证明了这个对话框根本就是废的,只是显示你没有注册而已。就是说,注册不能通过输入的形式来实现。这就是我在前面所说的怪异支出。跟踪入手点2-------经典的查找字符串方式:
如果一开始就看字符串的话就不用走这么多弯路了,但是一开始就找字符串的话也不会发现作者的注册手段了~~,那个“虚伪”的对话框。
好,查找字符串,发现了一个关键的东西,就是窗口标题。这个很明显是切入点了。
随便跟入一个,就来到了所在的函数,下面代码:
00402380 . 6A FF PUSH -1
00402382 . 68 96DC4000 PUSH Geometry.0040DC96 ; SE 处理程序安装
00402387 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0040238D . 50 PUSH EAX
0040238E . 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00402395 . 81EC C0000000 SUB ESP,0C0
0040239B . 53 PUSH EBX
0040239C . 55 PUSH EBP
0040239D . 56 PUSH ESI
0040239E . 57 PUSH EDI
0040239F . 8BF1 MOV ESI,ECX
004023A1 . 6A 00 PUSH 0
004023A3 . E8 8CAF0000 CALL <JMP.&MFC42.#1134_?AfxEnableControlContainer@@YAXPAVCO>
004023A8 . 83C4 04 ADD ESP,4
004023AB . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
004023AF . E8 1C880000 CALL Geometry.0040ABD0
004023B4 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004023B8 . C78424 D80000>MOV DWORD PTR SS:[ESP+D8],0
004023C3 . E8 38ECFFFF CALL Geometry.00401000
004023C8 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004023CC . C68424 D80000>MOV BYTE PTR SS:[ESP+D8],1
004023D4 . E8 67ECFFFF CALL Geometry.00401040
004023D9 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004023DD . E8 EEEEFFFF CALL Geometry.004012D0
004023E2 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004023E6 . E8 75EDFFFF CALL Geometry.00401160
004023EB . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004023EF . E8 0CEEFFFF CALL Geometry.00401200
004023F4 . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
004023F8 . 8BF8 MOV EDI,EAX
004023FA . E8 61880000 CALL Geometry.0040AC60 ; //这里就是关键CALL了,需要跟入
004023FF . 8BCE MOV ECX,ESI
00402401 . 8BE8 MOV EBP,EAX ; //ebp=上面的CALL返回值,返回值必须为2
00402403 . E8 26AF0000 CALL <JMP.&MFC42.#2621_?Enable3dControls@CWinApp@@IAEHXZ>
00402408 . 68 5C624100 PUSH Geometry.0041625C ; Local AppWizard-Generated Applications
0040240D . 8BCE MOV ECX,ESI
0040240F . E8 14AF0000 CALL <JMP.&MFC42.#6117_?SetRegistryKey@CWinApp@@IAEXPBD@Z>
00402414 . BB 04000000 MOV EBX,4
00402419 . 8BCE MOV ECX,ESI
0040241B . 53 PUSH EBX
0040241C . E8 01AF0000 CALL <JMP.&MFC42.#4159_?LoadStdProfileSettings@CWinApp@@IAE>
00402421 . 6A 6C PUSH 6C
00402423 . E8 F4AE0000 CALL <JMP.&MFC42.#823_??2@YAPAXI@Z>
00402428 . 83C4 04 ADD ESP,4
0040242B . 894424 18 MOV DWORD PTR SS:[ESP+18],EAX
0040242F . 85C0 TEST EAX,EAX
00402431 . C68424 D80000>MOV BYTE PTR SS:[ESP+D8],2
00402439 . 74 1D JE SHORT Geometry.00402458
0040243B . 68 48054100 PUSH Geometry.00410548 ; CGeometryView
00402440 . 68 08174100 PUSH Geometry.00411708 ; CMainFrame
00402445 . 68 50044100 PUSH Geometry.00410450 ; CGeometryDoc
0040244A . 68 80000000 PUSH 80
0040244F . 8BC8 MOV ECX,EAX
00402451 . E8 C0AE0000 CALL <JMP.&MFC42.#520_??0CSingleDocTemplate@@QAE@IPAUCRunti>
00402456 . EB 02 JMP SHORT Geometry.0040245A
00402458 > 33C0 XOR EAX,EAX
0040245A > 50 PUSH EAX
0040245B . 8BCE MOV ECX,ESI
0040245D . C68424 DC0000>MOV BYTE PTR SS:[ESP+DC],1
00402465 . E8 A6AE0000 CALL <JMP.&MFC42.#986_?AddDocTemplate@CWinApp@@QAEXPAVCDocT>
0040246A . 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040246E . E8 97AE0000 CALL <JMP.&MFC42.#296_??0CCommandLineInfo@@QAE@XZ>
00402473 . 8D4424 34 LEA EAX,DWORD PTR SS:[ESP+34]
00402477 . 8BCE MOV ECX,ESI
00402479 . 50 PUSH EAX
0040247A . C68424 DC0000>MOV BYTE PTR SS:[ESP+DC],3
00402482 . E8 7DAE0000 CALL <JMP.&MFC42.#5214_?ParseCommandLine@CWinApp@@QAEXAAVCC>
00402487 . 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040248B . 51 PUSH ECX
0040248C . 8BCE MOV ECX,ESI
0040248E . E8 6BAE0000 CALL <JMP.&MFC42.#5301_?ProcessShellCommand@CWinApp@@QAEHAA>
00402493 . 85C0 TEST EAX,EAX
00402495 . 75 3D JNZ SHORT Geometry.004024D4
00402497 . 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040249B . C68424 D80000>MOV BYTE PTR SS:[ESP+D8],1
004024A3 . E8 50AE0000 CALL <JMP.&MFC42.#617_??1CCommandLineInfo@@UAE@XZ>
004024A8 . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004024AC . C68424 D80000>MOV BYTE PTR SS:[ESP+D8],0
004024B4 . E8 77EBFFFF CALL Geometry.00401030
004024B9 . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
004024BD . C78424 D80000>MOV DWORD PTR SS:[ESP+D8],-1
004024C8 . E8 43870000 CALL Geometry.0040AC10
004024CD . 33C0 XOR EAX,EAX
004024CF . E9 AA020000 JMP Geometry.0040277E
004024D4 > 8B4E 20 MOV ECX,DWORD PTR DS:[ESI+20]
004024D7 . 6A 03 PUSH 3
004024D9 . E8 14AE0000 CALL <JMP.&MFC42.#6215_?ShowWindow@CWnd@@QAEHH@Z>
004024DE . 8B46 20 MOV EAX,DWORD PTR DS:[ESI+20]
004024E1 . 8B50 20 MOV EDX,DWORD PTR DS:[EAX+20]
004024E4 . 52 PUSH EDX ; /hWnd
004024E5 . FF15 C8F54000 CALL DWORD PTR DS:[<&USER32.UpdateWindow>] ; \UpdateWindow
004024EB . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
004024EF . E8 2C8C0000 CALL Geometry.0040B120
004024F4 . 3BC7 CMP EAX,EDI
004024F6 . 7D 0B JGE SHORT Geometry.00402503
004024F8 . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
004024FC . E8 1F8C0000 CALL Geometry.0040B120
00402501 . EB 02 JMP SHORT Geometry.00402505
00402503 > 8BC7 MOV EAX,EDI
00402505 > 83FD 02 CMP EBP,2 ; //EBP是关键值,一定要为2
00402508 . 75 26 JNZ SHORT Geometry.00402530 ; //这个是关键跳,爆破点
0040250A . 8B4E 20 MOV ECX,DWORD PTR DS:[ESI+20]
0040250D . 68 40624100 PUSH Geometry.00416240 ; 玲珑3D几何作图软件2.06版 //这个是注册成功显示的标题
00402512 . E8 D5AD0000 CALL <JMP.&MFC42.#6199_?SetWindowTextA@CWnd@@QAEXPBD@Z>
00402517 . E8 CAAD0000 CALL <JMP.&MFC42.#1175_?AfxGetThread@@YGPAVCWinThread@@XZ>
0040251C . 85C0 TEST EAX,EAX
0040251E . 0F84 EA010000 JE Geometry.0040270E
00402524 . 8B10 MOV EDX,DWORD PTR DS:[EAX]
00402526 . 8BC8 MOV ECX,EAX
00402528 . FF52 7C CALL DWORD PTR DS:[EDX+7C]
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: