首页
社区
课程
招聘
[原创]新手破文一篇 mailmagic1.55的无壳
发表于: 2008-8-16 23:35 3602

[原创]新手破文一篇 mailmagic1.55的无壳

2008-8-16 23:35
3602
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直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
支持~~~~~~~~~~~~~~~~~~~~~
2008-8-17 01:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,很详细
2008-8-18 13:01
0
游客
登录 | 注册 方可回帖
返回
//