xiawan 发表于 2015-7-21 19:50

某取名软件爆破 新手入

这类软件误导你的地方很多,有些时候不知道该怎么分析,其实,只要仔细看就可以看出点眉目了。

一般惯例,先查壳,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

好了,教程到此结束。


赖哥 发表于 2015-7-21 20:08

膜拜一下再说!

JUNG 发表于 2015-7-21 22:40

小白路过求虐!

等待奇迹 发表于 2015-7-21 22:44

分析的很详细,感谢

niuniu919 发表于 2015-7-22 06:25

写的非常详细,学习了。谢谢楼主。

segasonyn64 发表于 2015-7-22 10:42

看雪,我爱破解,都发这个帖子了,呵呵

ailoading 发表于 2015-7-22 11:26

然并卵,你还想生小孩

uasp 发表于 2015-7-22 13:09

分析的很详细,感谢

48973312 发表于 2015-7-22 14:54

谢谢楼主分享!!

T_MAC仔 发表于 2015-7-22 15:02

很好很不错,
页: [1] 2 3
查看完整版本: 某取名软件爆破 新手入