mailmagic1.55此程序使用vc7以上版本
其实注册码很好找的 明文的 下lstrlen断点就可以断下来
但是为了学习下如何下重启认证的断点所以才写了这篇文章
高手飘过
由于不知道应该下什么断点 因此我们首先来找下模块名称,由于很多就不一一列举了,找到一个函数
名称位于 MailMagi, 条目 1004
地址=004B7F20
区段=.rdata
类型=输入 (已知)
名称=USER32.RemoveMenu
猜测removeMenu是为了注册后将注册的菜单去掉
直接点右键选择在每个参考上下断点
运行
发现断不下来 (因为代码根本就执行不到,只有注册后才能执行到呵呵)
我们来看看都有哪些断点
断点
地址 模块 激活 反汇编 注释
0043073D MailMagi 始终 MOV EDI,DWORD PTR DS:[<&USER32.RemoveMenu>]
004307AC MailMagi 始终 MOV EBX,DWORD PTR DS:[<&USER32.RemoveMenu>]
00471A1C MailMagi 始终 MOV EDI,DWORD PTR DS:[<&USER32.RemoveMenu>]
0048CF29 MailMagi 始终 MOV EDI,DWORD PTR DS:[<&USER32.RemoveMenu>]
每个看一下
第一个0043073D的代码是
0043073D |. 8B3D 207F4B00 MOV EDI,DWORD PTR DS:[<&USER32.RemoveMenu>] ; USER32.RemoveMenu
00430743 |. 6A 00 PUSH 0 ; /Flags = MF_BYCOMMAND|MF_ENABLED|MF_STRING
00430745 |. 68 5F800000 PUSH 805F ; |ItemID = 805F (32863.)//这里经过资源浏览器可以看到是注册的字符串
0043074A |. 50 PUSH EAX ; |hMenu
0043074B |. FFD7 CALL EDI ; \RemoveMenu
0043074D |. 8B4E 04 MOV ECX,DWORD PTR DS:[ESI+4]
其他的都没有 我就不粘贴代码了
去掉其他的几个断点
沿着第一个断点向上找
00430700 /$ 8B41 20 MOV EAX,DWORD PTR DS:[ECX+20]
00430703 |. 56 PUSH ESI
00430704 |. 50 PUSH EAX ; /hWnd
00430705 |. FF15 287F4B00 CALL DWORD PTR DS:[<&USER32.GetMenu>] ; \GetMenu
0043070B |. 50 PUSH EAX
0043070C |. E8 E78C0700 CALL <JMP.&MFC71.#2371_?FromHandle@CMenu@@SGPAV1@PAU>
00430711 |. 8BF0 MOV ESI,EAX
00430713 |. 85F6 TEST ESI,ESI
00430715 |. 74 51 JE SHORT MailMagi.00430768
00430717 |. 8B4E 04 MOV ECX,DWORD PTR DS:[ESI+4]
0043071A |. 51 PUSH ECX ; /hMenu
0043071B |. FF15 107F4B00 CALL DWORD PTR DS:[<&USER32.GetMenuItemCount>] ; \GetMenuItemCount
00430721 |. 8B56 04 MOV EDX,DWORD PTR DS:[ESI+4]
00430724 |. 48 DEC EAX
00430725 |. 50 PUSH EAX ; /Pos
00430726 |. 52 PUSH EDX ; |hMenu
00430727 |. FF15 187F4B00 CALL DWORD PTR DS:[<&USER32.GetSubMenu>] ; \GetSubMenu
0043072D |. 50 PUSH EAX
0043072E |. E8 C58C0700 CALL <JMP.&MFC71.#2371_?FromHandle@CMenu@@SGPAV1@PAU>
00430733 |. 8BF0 MOV ESI,EAX
00430735 |. 85F6 TEST ESI,ESI
00430737 |. 74 2F JE SHORT MailMagi.00430768
00430739 |. 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
0043073C |. 57 PUSH EDI
0043073D |. 8B3D 207F4B00 MOV EDI,DWORD PTR DS:[<&USER32.RemoveMenu>] ; USER32.RemoveMenu
00430743 |. 6A 00 PUSH 0 ; /Flags = MF_BYCOMMAND|MF_ENABLED|MF_STRING
00430745 |. 68 5F800000 PUSH 805F ; |ItemID = 805F (32863.)
0043074A |. 50 PUSH EAX ; |hMenu
0043074B |. FFD7 CALL EDI ; \RemoveMenu
找到段首在这里下断都没有用 看样子要找调用了
00430700是由00438D22调用
ctrl+g来到00438D22
00438D17 A1 70164E00 MOV EAX,DWORD PTR DS:[4E1670] //3.这里是将eax赋值 这就方便了dd
00438D1C . 85C0 TEST EAX,EAX //1.比较eax是否为0
00438D1E 74 07 JE SHORT MailMagi.00438D27
00438D20 . 8BCE MOV ECX,ESI
00438D22 . E8 D979FFFF CALL MailMagi.00430700 //2.为0就不执行这里
00438D27 > \E8 A4910100 CALL MailMagi.00451ED0
dd 4e1670
看样子4E1670是作者设置的是否注册标志
hr 4e1670
看看都有哪些地方调用
重新载入
运行
第一处
00456E65 A3 70164E00 MOV DWORD PTR DS:[4E1670],EAX
第二处就是我们刚找的
00438D15 . /74 35 JE SHORT MailMagi.00438D4C
00438D17 |A1 70164E00 MOV EAX,DWORD PTR DS:[4E1670]
00438D1C . |85C0 TEST EAX,EAX
00438D1E |74 07 JE SHORT MailMagi.00438D27
之后程序运行
点击关于 会有第三处断下来
0042FC38 . /0F85 B1010000 JNZ MailMagi.0042FDEF
0042FC3E |A1 70164E00 MOV EAX,DWORD PTR DS:[4E1670]
0042FC43 . |85C0 TEST EAX,EAX
0042FC45 . |0F84 A4010000 JE MailMagi.0042FDEF
另外在上传大文件的时候也会断我就没有截取了
观察上面发现第一处是给地址赋值 其余两处都是地址给寄存器赋值 这里可以直接做内存补丁loading程序
不做内存补丁也可以直接修改
由于我的汇编不好 所以不知道怎么能直接修改 一改就把下面覆盖了 哎没有办法
那我就在第二处之前对它修改 找一处空白004B6FE0填上下面的代码
004B6FE0 C705 70164E00>MOV DWORD PTR DS:[4E1670],1
004B6FEA A1 70164E00 MOV EAX,DWORD PTR DS:[4E1670]
004B6FEF C3 RETN
将第二处改成
00438D15 . /74 35 JE SHORT MailMagi.00438D4C
00438D17 |E8 C4E20700 CALL MailMagi.004B6FE0 //对应刚才找的空白
00438D1C . |85C0 TEST EAX,EAX
00438D1E |74 07 JE SHORT MailMagi.00438D27
保存文件即可
使用的话 首先用没有修改的版本随便注册下 提示重启软件后将软件关闭用修改后的文件代替原先的文件暴力破解即完成
如果只改上面的跳转的话其实也可以 但是需要改的地方要多一处 就是程序功能限制的地方 麻烦 不如直接将它的注册标志改下 呵呵
另外请高手帮助下 研究下算法 有些看不懂
还有就是能否直接修改后在没有Config.dat的情况下能提示注册
我是新手,学习中......
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课