• 标 题:破解网络鼹鼠(NetMoles Downloader 2.4)  
  • 作 者:softworm
  • 时 间:2003/08/05 10:55pm
  • 链 接:http://bbs.pediy.com

  刚刚注册进来,连发了几个贴子。原来做破解,都只有笔记,没有认真写文章。近来在单位的BBS上主持了一个类似版面,才动手写了几篇。用完了就没有了。;-)

  这个比较简单,权当灌水。


  这是个流媒体下载软件。近来StreamBox屡屡失手,到Google上找了一下流媒体工具,倒回来这个东东。装上试了试,果然比StreamBox强,顺利地下载回来2首前者搞不定的mp3。

  选择“系统/注册”菜单项,弹出注册对话框。在用户名中输“softworm”,注册码乱输一个“78787878”,报告“注册码不正确,注册失败”。
  
  帮助文件中没提未注册版有什么功能限制,但下面的状态栏上有:只能下载20个文件。

1. 用language2000看了看执行程序NetMoles.exe,报告是用VC写的,用Aspack压缩。尽管看雪很推崇手动脱壳,我还是首选用现成的脱壳软件。用Caspr,顺利地脱掉了。

2. 用IDA Pro反编译NetMoles.exe,IDA会报“不明的编译器类型”。脱壳的程序常常这样,不用理它。使用与VC相关的符号文件,结果只用上了十来个。这就不对了,看看NetMoles.exe的节(section)信息,包含执行代码的名为“CODE”,这显然是Borland的编译器做的(VC的为“text”)。看来language2000要么出了什么错,要么是把壳代码使用的编程语言报出来了。
  把BCB和Delphi的符号文件用上去,这回识别出数千个名字。

3. 用SoftIce加载NetMoles.exe,在入口点不能停下。用PEEditor修改CODE节的属性:从0xC0000040改为0xE0000020。好了,现在可以停下了。

4. 下一步应该是SoftIce与IDA Pro结合,研究代码了。这种注册码保护,一般有两个方向,或者看乱输那个序列号被如何使用,或者从错误信息入手,看看是在哪里判定注册码错误的。

  可是且慢,不妨先偷个懒。根据以往的经验,使用BCB或Delphi的编程者,往往会误用Borland的库函数进行明码比较。这种情况遇到过多次,这一位也许也会犯同样的错误,先试试吧。那个比较函数叫LStrCmp。

  在IDA Pro中搜索“LStrCmp”,在4043C0处:

  4043C0 _fastcall System::_linkproc_ LstrCmp(void) proc near

  在此地址设上断点。这个函数大概是在一个单独的线程中运行的,会不断地断下,所以必须设为条件断点:

  :bpx 4043C0 if(eax!=0)&(edx!=0) do "d eax"

  其中eax和edx是两个指针,分别指向用于比较的字符串,这里只有在二者均不为零的情况下才触发断点,并用“d eax”显示其中一个缓冲区的内容。

  先禁止断点,回到原程序,在输入用户名和注册码后,激活断点。OK,SoftIce弹出后,缓冲区中的内容为一长串字符,一看就是注册码。再看看edx指向的那个缓冲区,正是先输入的“78787878”。就是它了。

  清除断点,输入以下数据:

  用户名称: softworm
  注册码:xxxxxxxxxxxxxxxxx(隐去)

  不到一支烟的工夫就搞定了。