首页
社区
课程
招聘
[旧帖] [原创][邀请码已发]一款小软件爆破过程 0.00雪花
发表于: 2010-4-25 23:11 5076

[旧帖] [原创][邀请码已发]一款小软件爆破过程 0.00雪花

2010-4-25 23:11
5076
【文章标题】: 一款小软件爆破过程
【文章作者】: chys
【软件名称】: MyLanView
【下载地址】: http://www.mylanviewer.com/MyLanViewer.zip
【保护方式】: ASPack 2.12 -> Alexey Solodovnikov
【编写语言】: Borland C++
【使用工具】: OllyDBG v1.10,LordPE,Import REC,DeDe.
【操作平台】: Windows XP
【软件介绍】:一个能搜索局域网资源的小软件,很好用。
【作者声明】: 第一次写这种文章,失误之处敬请诸位大侠赐教!
(文章格式参考自论坛各位大侠的作品,谢谢)

一,脱壳
1,查壳。

   PEid扫描,发现是ASPack 2.12 -> Alexey Solodovnikov于是决定手动脱之。
2,寻找OEP(此处用内存镜像法)。
  OD载入,按ALT+M打开内存镜像,在程序的资源段(.rsrc)下断点。然后按F9运行,断下后按ALT+M打开内存镜像,在代码段(.text)下断点,


按F9运行,程序就直接停在OEP了。
004017A0 > $ /EB 10         jmp     short 004017B2

3,DUMP。
  这个不用多说,打开LordPE,找到程序进程,右击-》Dump full保存即可。
 
4,修复IAT。
  打开Import REC。选择程序进程,然后在OEP里写上刚才找到的地址(写偏移量)17A0,然后按IAT AutoSearch,
之后再按Get Import,就找到输入表了。但是有很多无效的,用等级1修复一下,发现一个都修不了,于是直接cut掉。
然后再按Fix Dump,选中第3步dump的文件,IAT修复完毕。

然后双击运行,oh XX,出错了,连着3个错,然后程序也没运行,
这说明至少有3个很重要的函数没找到,修复失败。。。。。

没办法继续修复,打开Import REC,选中程序进程,写OEP为17A0,按IAT AutoSearch,弹出提示(刚才没说直接按确定了),

这回得好好看看,原来上面写着If it is not correct,try RVA:002F5000 Szie:00004000好。那我就按提示填写。然后Get Import,
把无效的直接cut掉,Fix Dump。运行程序,成功了,哈哈哈。。。

二,爆破。
1,看到软件能试用14天,就首先想到能不能修改系统时间方式一直试用呢。结果发现我太天真了。。。。。。

调了系统时间之后,。。。试用期已过了。倒也不是不能用,只是你得等999秒,疯了。那么把时间改回来吧想别的招吧。
2,那就假注册,找找提示吧。结果,。。我还是太天真了,输入假码按OK,没有反应啊。
在OD里查找字符串也没有找到什么有用的信息。oh....
3,用PEid查一下脱完壳的文件,发现在BC++写的,那就用DeDe把。
用DeDe打开文件,DeDe会提示“DConsole 发现此应用程序加过壳”,(不知道为什么会这么提示,难道是我没脱好?请大家指点。)
先不管它,点OK,等分析完成之后就到过程中打事件地址,点过程之后,在左面的列表中我们会找到UnitEnterCode这个单元,顾名思义这个就是输入注册码的窗体单元。
单击,在右面就会列出事件,有Button1Click,和Button2Click两个事件,安顺序排Button1应该就是注册窗口中的OK按钮,右击复制相对虚址,

然后在OD中按Ctrl+G粘上复制的地址按确定就来到00464C7C这一行,按F2下断。运行程序,按Enter Code按钮打开注册窗口,输入用户名和假注册码,
按确定,果然停在00464C7C这里。好,那么现在开始单步归跟踪,看看能不能找到正真的注册码或爆破点。
F7,F7,F7.... ....
结果,没有发现有明码比较,并且算法很复杂,好像是RSA算法。。。 。。
但是也有发现如果把
00464CE9   . /0F84 12020000               je      00464F01
00464E15   . /0F86 E6000000               jbe     00464F01

这两个跳转nop掉,会弹出“thank you for registration!!!“,哈哈。。。,但是一重启我又发现我太天真了。。。。。
好像有重启验证!,那,好吧。。。。我们想别的办法吧。。。

4,我们在第1步发现试用期过后还是能试用软件,只不过是每次要等999秒,才能点OK按钮,然后进入主界面。
那么,我们跳过这999秒不就能正常的一直免费试用了吗? 那么开始吧。。

我们用DoDo找开软件文件,然后在过程中查找,我们会找到UnitStart单元,并且在事件中会发现FormCreate,FormShow,Button1Click等事件和地址,分别复制在OD中下断。
按F9用行,软件就会断在004669F0这行,这行就创建启动窗口FormCreate函数头。
004669F0   .  55                          push    ebp                               ;  创建启动窗口
004669F1   .  8BEC                        mov     ebp, esp
004669F3   .  83C4 94                     add     esp, -6C
004669F6   .  53                          push    ebx
004669F7   .  56                          push    esi
004669F8   .  57                          push    edi
004669F9   .  8BF0                        mov     esi, eax
004669FB   .  B8 64F75B00                 mov     eax, 005BF764

单步往下跟,我们会发现“evaluation period is over.”,等信息,继续向下跟,看看是在什么地方设置了999。
00466C38   .  E8 EB260E00   call    00549328
00466C3D   .  84DB          test    bl, bl
00466C3F      74 6C         je      short 00466CAD
00466C41   .  8B86 70030000 mov     eax, dword ptr [esi+370]
00466C47   .  33D2          xor     edx, edx
00466C49   .  8B08          mov     ecx, dword ptr [eax]
00466C4B   .  FF51 68       call    dword ptr [ecx+68]
00466C4E   .  66:C745 D4 60>mov     word ptr [ebp-2C], 60
00466C54   .  BA 84F55B00   mov     edx, 005BF584                    ;  ok(999)
00466C59   .  8D45 E8       lea     eax, dword ptr [ebp-18]
00466C5C   .  E8 8F601300   call    0059CCF0
00466C61   .  FF45 E0       inc     dword ptr [ebp-20]

很明显00466C54这一行是把按钮设置为ok(999),而上面的
00466C3F      74 6C         je      short 00466CAD
这行代码决定是否跳过设置,在试用期没完之前会跳过,试用期用完之后就不会跳,所以把je改成jmp就可以了。
00466C3F     /EB 6C         jmp     short 00466CAD
单击右健--》复制到可执行文件--》所有修改。保存文件,打开发现按钮不会被设置成ok(999),可以直接点击进入。

5,这样就可以用了。但是如果去掉那个启运窗口用起来会爽一些。
于是经过反复跟踪发现了下面这些代码,我已经加了注释。
00423D86   .  A1 04FD5B00   mov     eax, dword ptr [5BFD04]
00423D8B      E8 C8250400   call    00466358                         ;  调用 创建启动窗口
00423D90   .  8945 C8       mov     dword ptr [ebp-38], eax
00423D93   .  66:C745 E0 18>mov     word ptr [ebp-20], 18
00423D99   .  8B45 C8       mov     eax, dword ptr [ebp-38]
00423D9C   .  8B10          mov     edx, dword ptr [eax]
00423D9E      FF92 FC000000 call    dword ptr [edx+FC]               ;  调用 显示启动窗口
00423DA4   .  8B4D C8       mov     ecx, dword ptr [ebp-38]
00423DA7   .  80B9 B6030000>cmp     byte ptr [ecx+3B6], 0
00423DAE   .  75 28         jnz     short 00423DD8
我们把“显示启动窗口”的代码NOP了,会弹出“unregistered version”的对话框,点OK程序就退出了。

通过字符串查找,我们找到了下面的代码,很显然,这是就是弹出“unregistered version”对话框的地方。
00425CF6     /0F84 D2000000 je      00425DCE
00425CFC     |A1 D4B45F00   mov     eax, dword ptr [5FB4D4]
00425D01     |8B08          mov     ecx, dword ptr [eax]
00425D03   . |B2 01         mov     dl, 1
00425D05   . |A1 2C285C00   mov     eax, dword ptr [5C282C]
00425D0A   . |E8 CD300400   call    00468DDC
00425D0F   . |8945 A4       mov     dword ptr [ebp-5C], eax
00425D12   . |8D45 E8       lea     eax, dword ptr [ebp-18]
00425D15   . |66:C745 CC 60>mov     word ptr [ebp-34], 60
00425D1B   . |8B4D B8       mov     ecx, dword ptr [ebp-48]
00425D1E   . |BA E07C5A00   mov     edx, 005A7CE0                    ;  unregistered version
于是我们把je改成jmp,让它跳过去。
00425CF6     /E9 D3000000   jmp     00425DCE
F9继续运行,有异常,忽略之后程序正常运行,弹出主窗口。于是我们把修改保存成文件。但是我们运行刚保存的文件却打不开,郁闷啊!!
再试别的办法吧。。
这次我们不要把
00423D9E      FF92 FC000000 call    dword ptr [edx+FC]               ;  调用 显示启动窗口
这行nop掉,把它改成调用点击“启动界面的OK按钮”事件函数。
改成 call 00466E70(00466E70是用DeDe找到的OK按钮事件)

还是会弹出“unregistered version”窗口,
我们再来一次,把je改成jmp跳过这个窗口。程序正常运行。 保存修改过的代码到文件。
运行,可以正常运行,没弹出启运窗口,也没有其他窗口,哈哈哈,终于成功了。。

第一次写这种文章,不知道有没有把问题说清楚。

按惯例声明一下:本文章只是为了技术交流,请任何人不要用于商业目的,本人和看雪论坛不承担任何责任。

但是看在我这么辛苦写这么多的份上,就请给我一个邀请码吧,谢谢!

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (67)
雪    币: 76
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
写得很详细,谢谢分享。
2010-4-25 23:53
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也试了一下,爆破。。。。等下看能不能看出算法来
2010-4-26 00:42
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享。谢谢分享。谢谢分享。
2010-4-26 02:54
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好,你要是看出算法来,告诉哥们一声。
2010-4-26 09:38
0
雪    币: 47
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了!!!!
2010-4-26 09:53
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
004193B8   MOV EDX,MyLanVie.005A7B16       ASCII "<PublicKey><eNumber>010001</eNumber><nNumber>7DE17ACFD4DB5C408FA12DE89891100122A60F9D9BD074D6EEF4A48838234822BACD6AE2FE9FE6B929CAD90AD633FBCBCA87798C2B76ECFFD1DA31100CCEFDBD</nNumber></PublicKey>"

004EAB6B   MOV EDX,MyLanVie.005EB3D6       ASCII "65537"
004EADA0   MOV EDX,MyLanVie.005EB3DC       ASCII "KTCryto"
004EAE08   MOV EDX,MyLanVie.005EB3E4       ASCII "Making random strings ..."
004EAE36   MOV EDX,MyLanVie.005EB3FE       ASCII "1456623456789"
004EAE46   MOV EDX,MyLanVie.005EB40C       ASCII "01234123456789"
004EAE89   MOV EDX,MyLanVie.005EB41B       ASCII "Complete random strings, generating keys ..."
004EAF52   MOV EDX,MyLanVie.005EB448       ASCII "Encrypting, please wait ..."
004EAFB7   MOV EDX,MyLanVie.005EB464       ASCII "Public key not valid"
004EB04B   MOV EDX,MyLanVie.005EB479       ASCII "Decrypting, please wait ..."
004EB0BA   MOV EDX,MyLanVie.005EB495       ASCII "Private key not valid"
004EB14A   MOV EDX,MyLanVie.005EB4AB       ASCII "Encrypting with private key, please wait ..."
004EB1AF   MOV EDX,MyLanVie.005EB4D8       ASCII "Private key not valid"
004EB243   MOV EDX,MyLanVie.005EB4EE       ASCII "Decrypting with public key, please wait ..."
004EB2B2   MOV EDX,MyLanVie.005EB51A       ASCII "Public key not valid"

004EBE82   ASCII "TkRSA"

上吧,哥们!
2010-4-26 15:59
0
雪    币: 268
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
GUX
8
写的很好, 学习了!!
2010-4-26 16:56
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢!
这些在我跟的过程中也看到了,只是不知道怎么“上”,呵呵。

因为我看到RSA就觉的是很NB的算法,看来我得学学密码学才行。
2010-4-26 19:28
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
怎么不内顶啊,自己顶一下,
2010-4-27 17:40
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
图文并茂,很详细~~学习中!!
2010-4-27 20:08
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
貌似很复杂哦。
2010-4-27 20:39
0
雪    币: 499
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持原创
2010-4-27 20:46
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢支持,我会继续努力的。
2010-4-27 22:28
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我的Kx怎么涨的哪么慢啊???

(偷顶一下自己的贴子)
2010-4-29 21:51
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
很不错,支持了。。。。。。。。。
2010-4-29 22:12
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习了、 努力转正中..
2010-4-29 22:17
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习了
2010-4-29 22:42
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
写得很详细,学习了
2010-4-29 22:46
0
雪    币: 129
活跃值: (333)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xed
20
过来学习下

~~~~~~~`
2010-4-29 22:46
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
很详细,图文并茂,谢谢楼主分享
2010-4-30 09:44
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
呵呵,不错,和我前几天破的一款软件差不多
2010-4-30 15:57
0
雪    币: 85
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主好强啊!
2010-4-30 18:39
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不知是不是自己很笨,试了半天,都不能脱壳!
2010-4-30 20:03
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
你照我写的试试,一定行的。
2010-4-30 21:57
0
游客
登录 | 注册 方可回帖
返回
//