首页
社区
课程
招聘
[原创]寻找MagicTweak之注册码
发表于: 2006-1-26 13:25 3636

[原创]寻找MagicTweak之注册码

qduwg 活跃值
35
2006-1-26 13:25
3636
题目:寻找MagicTweak之注册码
软件功能:为优化Windows提供一站式服务,使用此软件可以修改几百个XP/2000/Me/98设置,不必费力地查找注册表了。在其帮助下,

你就是Windows 专家了。
软件来源:电脑爱好者2003光盘

引子:刚刚分析完那个“网络收藏夹转换器”,接着安装了这个小软件,运行时出现提示框,要你输入用户名和注册码。用PEID查看,

是Pecompact1.68-1.84加壳的。输入用户名任意,注册码87654321。点击Register按钮,接着出现“感谢您的注册,请重新启动程序激

活注册码”。我一看就知道不是当场比较注册码的,而是在重新启动后从某个地方读出注册码进行比较的。把这个软件卸载掉,启动

Registry Monitor监视其安装过程,发现在注册表内没有太大动作,倒是发现在\windows目录下写入2个文件,一个是mgreg.ini,另一

个mgwin.ini,打开第二个文件发现你输入的注册码和用户名在里面呢。现在调出SOFTICE,下断点bpx setfilepointer,F5退出,运行

程序,被拦截。不要屏蔽断点,因为总共3次中断,最后一次中断后,我们用F10经过一段艰苦卓绝的跟踪,终于来到下面代码处:
0197:004470D3  LEA      EAX,[ESP+DC]      //假码地址送EAX。
0197:004470DA  MOV      ECX,EBP
0197:004470DC  PUSH     EAX
0197:004470DD  CALL     00447E00          //真假码进行比较啦。里面猫腻不少。
0197:004470E2  TEST     EAX,EAX           //判断EAX标志。
0197:004470E4  JNZ      NEAR 00447327     //如果不为0则成功。
0197:004470EA  PUSH     EAX
0197:004470EB  LEA      ECX,[ESP+0738]
0197:004470F2  MOV      [004D8464],EAX
0197:004470F7  CALL     004572B0
0197:004470FC  LEA      ECX,[ESP+0734]
0197:00447103  MOV      BYTE [ESP+1B40],0D
0197:0044710B  CALL     0048878B          //这里出现NAG窗口,提示你注册。
0197:00447110  CMP      EAX,BYTE +01
================================================================================
下面是:004470DD处的函数代码分析:
0197:004470D3  LEA      EAX,[ESP+DC]      //假码地址送EAX。
0197:004470DA  MOV      ECX,EBP
0197:004470DC  PUSH     EAX
*省去很多*
0197:00447E96  SUB      EDI,ECX
0197:00447E98  MOV      EAX,ECX
0197:00447E9A  MOV      ESI,EDI          //真注册码地址送ESI。
0197:00447E9C  MOV      EDI,EDX          //复制真注册码到EDI处。
0197:00447E9E  LEA      EDX,[ESP+08A8]
0197:00447EA5  SHR      ECX,02
0197:00447EA8  REP MOVSD                 //大量真注册码出现。
0197:00447EAA  MOV      ECX,EAX
0197:00447EAC  XOR      EAX,EAX
0197:00447EAE  AND      ECX,BYTE +03
0197:00447EB1  REP MOVSB
0197:00447EB3  MOV      EDI,004D1638
0197:00447EB8  OR       ECX,BYTE -01
0197:00447EBB  REPNE SCASB
0197:00447EBD  NOT      ECX
0197:00447EBF  SUB      EDI,ECX
0197:00447EC1  MOV      EAX,ECX
0197:00447EC3  MOV      ESI,EDI
0197:00447EC5  MOV      EDI,EDX
0197:00447EC7  LEA      EDX,[ESP+1140]
0197:00447ECE  SHR      ECX,02
0197:00447ED1  REP MOVSD               //大量真注册码出现。
0197:00447ED3  MOV      ECX,EAX
0197:00447ED5  XOR      EAX,EAX
0197:00447ED7  AND      ECX,BYTE +03
0197:00447EDA  REP MOVSB
0197:00447EDC  MOV      EDI,004D1304
0197:00447EE1  OR       ECX,BYTE -01
0197:00447EE4  REPNE SCASB
0197:00447EE6  NOT      ECX
0197:00447EE8  SUB      EDI,ECX
0197:00447EEA  MOV      EAX,ECX
0197:00447EEC  MOV      ESI,EDI
0197:00447EEE  MOV      EDI,EDX
0197:00447EF0  SHR      ECX,02
0197:00447EF3  REP MOVSD              //大量真注册码出现。
0197:00447EF5  MOV      ECX,EAX
0197:00447EF7  AND      ECX,BYTE +03
0197:00447EFA  REP MOVSB
0197:00447EFC  MOV      EDI,004D0B2C
0197:00447F01  OR       ECX,BYTE -01
0197:00447F04  XOR      EAX,EAX
0197:00447F06  LEA      EDX,[ESP+2270]
0197:00447F0D  REPNE SCASB
0197:00447F0F  NOT      ECX
0197:00447F11  SUB      EDI,ECX
0197:00447F13  MOV      EAX,ECX
0197:00447F15  MOV      ESI,EDI
0197:00447F17  MOV      EDI,EDX
0197:00447F19  LEA      EDX,[ESP+19D8]
0197:00447F20  SHR      ECX,02
0197:00447F23  REP MOVSD            //大量真注册码出现。
0197:00447F25  MOV      ECX,EAX
0197:00447F27  AND      ECX,BYTE +03
0197:00447F2A  REP MOVSB
0197:00447F2C  LEA      ECX,[ESP+0E]
0197:00447F30  PUSH     ECX
0197:00447F31  PUSH     EDX
0197:00447F32  CALL     004756D5
0197:00447F37  MOV      EDI,[ESP+2B14]
0197:00447F3E  ADD      ESP,BYTE +08
0197:00447F41  TEST     EAX,EAX
0197:00447F43  JZ       00447F8F
0197:00447F45  MOV      ESI,EDI
0197:00447F47  MOV      DL,[EAX]       //真码送DL。
0197:00447F49  MOV      BL,[ESI]       //假码送BL。
0197:00447F4B  MOV      CL,DL     
0197:00447F4D  CMP      DL,BL          //真假比较。
0197:00447F4F  JNZ      00447F6F       //如果不为0则出错。
0197:00447F51  TEST     CL,CL
0197:00447F53  JZ       00447F6B  
0197:00447F55  MOV      DL,[EAX+01]
0197:00447F58  MOV      BL,[ESI+01]
0197:00447F5B  MOV      CL,DL
0197:00447F5D  CMP      DL,BL
0197:00447F5F  JNZ      00447F6F
0197:00447F61  ADD      EAX,BYTE +02
0197:00447F64  ADD      ESI,BYTE +02
0197:00447F67  TEST     CL,CL
0197:00447F69  JNZ      00447F47        //循环比较。总共8位注册码。
0197:00447F6B  XOR      EAX,EAX
0197:00447F6D  JMP      SHORT 00447F74
0197:00447F6F  SBB      EAX,EAX
0197:00447F71  SBB      EAX,BYTE -01
0197:00447F74  TEST     EAX,EAX        //EAX=0说明正确。
0197:00447F76  JZ       NEAR 00448122  //跳转。
*省去若干*
0197:00448122  POP      EDI
0197:00448123  POP      ESI
0197:00448124  MOV      EAX,01
0197:00448129  POP      EBX
0197:0044812A  ADD      ESP,2AFC
===========================================================================
后记:
这个软件的开发者要求15天后必须注册,根据帮助里面的提示,每个许可需要付only $29.95 USD。没有想到经过跟踪,发现里面那么多

,数以千记的现成的注册码在等待我们使用,真是太慷慨了!!这个软件是用Pecompact 加壳了,我暂时没有脱壳软件,手动脱壳好麻

烦,入口点不好找。干脆硬性跟踪得了。没有想到跟踪过程比较麻烦,后来我偶然查看了一个比较特殊的地址,然后向上翻页,在内存

窗口可以看到大量注册码样的东西,我就下内存断点bpm xxxxxxxx r ,结果真的能够进入核心比较部分,但怎么进去的,我想知道,所

以我试验了多种方法下断点,比如函数Createwindow,Createfile,Readfile,EnableWindow, 消息WM_destroy等,都不好用,根本无

法到达核心部位。最后,我只好试用SetFilePointer函数了,经过3次中断,最后终于来到核心地方,成功找出上面的代码,然后通过

TRW的U命令DUMP出来了。我这里只是说明跟踪方法,想进入这个软件比较核心的确费了周折,尽管都是用明码比较,这个软件费了我不

少时间,但是含金量不大。不过,希望对菜鸟有所启示!!我的失败就是您的经验嘛!!

最后,感谢看雪给予的支持!感谢各位大侠的关照!!!

结论:

用户名随便填,注册码随便给出几个吧:
8JXLZ4K5
X88KX5ZE
CZJEY5AJ
.......
省略1000多个注册码!!!

Qduwg

2006年1月25日晚结稿

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 206
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主两个晚上干掉了多少软件啊?佩服佩服!
2006-1-27 14:10
0
雪    币: 475
活跃值: (1130)
能力值: ( LV9,RANK:1410 )
在线值:
发帖
回帖
粉丝
3
FetalError,感谢您的支持,祝你春节快乐!!

我都是晚上开夜车啊,我白天工作忙啊。唉。
2006-1-27 22:04
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
4
楼主已经20篇精华了。
2006-1-28 15:16
0
游客
登录 | 注册 方可回帖
返回
//