某取名软件爆破 新手入
这类软件误导你的地方很多,有些时候不知道该怎么分析,其实,只要仔细看就可以看出点眉目了。一般惯例,先查壳,Microsoft Visual C++ 6.0
1
我们把软件拖入od,其实呢,这类取名字软件都是易语言写的,只不过是静态编译,查壳显示是Microsoft Visual C++ 6.0而已,尤其这个软件最明显,呵呵,看图。
2
3
3.1
这个软件打开的时候,会提示注册,提示框显示(试用版),我们刚才在翻找字符串的时候,已经看到很多个“(已注册)”的字符串了,但是没看到“(试用版)”字符串,我们可以从这里入手。
发现,未注册的提示都是在0054C3E9,而已注册都是在0055029A
4
4.1
4.2
我们慢慢往下找,在(已注册)上面,我们都进去看看,在这个(已注册)上面,我们可以看到,如图:由于不知道什么是重要的,先全部下断。
5
5.1
再看另一个(已注册),因为再往上没看就是刚才的那些了,没有什么关键或可疑的字符串提示了,所以我们这里就下2个断。
5.2
F9运行,我们看,程序会断在哪里.。如图,发现je跳转已经实现了。
6
我们看到,test测试指令,是eax,同时eax的值是0,如图
7
说明,软件在刚开始还没有注册的时候,会检测时候是注册版,如果不是软件窗体应该提示为(试用版),如果是已注册的,那窗口应该是(已注册)。
8
9
我们F8往下,先不管那些call,我们先看那些跳转会实现。
10
11
好了,在我们观察跳转是否实现的时候,我们看到,如果eax是值为0,那么00411517 . /0F84 DF000000 je 宝宝取名.004115FC ;【这里跳过注册了】
这个跳转就会实现,而这时,我们发现00411513 > \33C0 xor eax,eax,来自2个je跳转,看下面加粗红色跳转
004114E7 . /74 09 je X宝宝取名.004114F2
004114E9 . |53 push ebx
004114EA . |E8 DD830500 call 宝宝取名.004698CC
004114EF . |83C4 04 add esp,0x4
004114F2 > \E8 2519FFFF call 宝宝取名.00402E1C
004114F7 .85C0 test eax,eax
004114F9 .0F84 14000000 je 宝宝取名.00411513 ;跳到00411513
004114FF .E8 D846FFFF call 宝宝取名.00405BDC
00411504 .85C0 test eax,eax
00411506 .0F84 07000000 je 宝宝取名.00411513 ;这个和上面004114F9一样的跳转,跳到00411513
0041150C .B8 01000000 mov eax,0x1
00411511 .EB 02 jmp X宝宝取名.00411515
00411513 >33C0 xor eax,eax
00411515 >85C0 test eax,eax
00411517 .0F84 DF000000 je 宝宝取名.004115FC ;【这里跳过注册了】
在这个跳转之前,我们必须把eax值置1,这个跳转才不会实现,我们重新载入,在这2个跳转上面最近的call,我们F7。来到这里
12
我们F8继续,注意观察eax的值,需要注意的是,我们现在要做的是爆破,而不是追码,所以在看到一些奇怪的码的时候,我们注意力先不要分散,继续往下,在retn前,我们看到了
13
00403092 > \837D C4 01 cmp dword ptr ss:,0x1
00403096 .0F85 0F000000 jnz 宝宝取名.004030AB
0040309C .B8 01000000 mov eax,0x1
004030A1 .E9 0F000000 jmp 宝宝取名.004030B5
004030A6 .E9 0A000000 jmp 宝宝取名.004030B5
004030AB >B8 00000000 mov eax,0x0
004030B0 .E9 00000000 jmp 宝宝取名.004030B5
004030B5 >50 push eax
004030B6 .8B5D FC mov ebx,dword ptr ss:
004030B9 .85DB test ebx,ebx
004030BB .74 09 je X宝宝取名.004030C6
004030BD .53 push ebx
004030BE .E8 09680600 call 宝宝取名.004698CC
004030C3 .83C4 04 add esp,0x4
004030C6 >8B5D F8 mov ebx,dword ptr ss:
004030C9 .85DB test ebx,ebx
004030CB .74 09 je X宝宝取名.004030D6
004030CD .53 push ebx
004030CE .E8 F9670600 call 宝宝取名.004698CC
004030D3 .83C4 04 add esp,0x4
004030D6 >58 pop eax
004030D7 .8BE5 mov esp,ebp
004030D9 .5D pop ebp
004030DA .C3 retn
其实,我们应该可以猜到,00403096 . /0F85 0F000000 jnz 宝宝取名.004030AB
这个跳转必然会实现。因为我们输入的肯定是不正确的注册码。而这个跳转跳到004030AB > \B8 00000000 mov eax,0x0
这个时候给eax赋值为0了。好了,到现在,我们爆破的思路基本有了。要么将004030AB > \B8 00000000 mov eax,0x0 改为004030AB > \B8 00000000 mov eax,0x1,要么在前面jnz跳转前把00403092 > \837D C4 01 cmp dword ptr ss:,0x1改为00403092 > \837D C4 01 cmp dword ptr ss:,0x0
我们修改好之后,运行,还是提示试用版。说明,我们只修改这个call过程还是不行,刚才第二个加粗的跳转附近的call也需要我们看看。我们回到段首,找到调用call,F8向下,来到
004114F9 /0F84 14000000 je 宝宝取名.00411513 ;跳到00411513
的时候,我们把Z标志位改为0,以便让我们能进入下面的call。
14
好了,我们F8来到
004114FF E8 D846FFFF call 宝宝取名.00405BDC ;这里也进入
F7进入,在F8继续往下的过程中,我们发现和刚才的过程是一样的。修改方法和刚才一样,我这里用的是将004030AB > \B8 00000000 mov eax,0x0 改为004030AB > \B8 00000000 mov eax,0x1
好了,我们保存修改。运行试一试。
15
好了,教程到此结束。
膜拜一下再说! 小白路过求虐! 分析的很详细,感谢 写的非常详细,学习了。谢谢楼主。 看雪,我爱破解,都发这个帖子了,呵呵 然并卵,你还想生小孩 分析的很详细,感谢 谢谢楼主分享!! 很好很不错,