首页
社区
课程
招聘
[旧帖] [求助]UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 问题。。。 0.00雪花
发表于: 2008-1-17 11:36 6378

[旧帖] [求助]UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 问题。。。 0.00雪花

2008-1-17 11:36
6378
研究破解,,,只是爱好别无他意。。。。。。

  地址:http://www.cctvtools.net/tools/BoxPlayer.zip

我在下了一个软件壳是PE UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
OD载入

005278C0 >  60              pushad
005278C1    BE 00904E00     mov     esi, 004E9000
005278C6    8DBE 0080F1FF   lea     edi, dword ptr [esi+FFF18000]
005278CC    57              push    edi
005278CD    83CD FF         or      ebp, FFFFFFFF
005278D0    EB 10           jmp     short 005278E2
005278D2    90              nop
005278D3    90              nop
005278D4    90              nop
005278D5    90              nop
005278D6    90              nop
005278D7    90              nop
005278D8    8A06            mov     al, byte ptr [esi]
005278DA    46              inc     esi
005278DB    8807            mov     byte ptr [edi], al
005278DD    47              inc     edi
005278DE    01DB            add     ebx, ebx
005278E0    75 07           jnz     short 005278E9
005278E2    8B1E            mov     ebx, dword ptr [esi]
005278E4    83EE FC         sub     esi, -4
005278E7    11DB            adc     ebx, ebx
005278E9  ^ 72 ED           jb      short 005278D8
005278EB    B8 01000000     mov     eax, 1
005278F0    01DB            add     ebx, ebx
005278F2    75 07           jnz     short 005278FB
005278F4    8B1E            mov     ebx, dword ptr [esi]
005278F6    83EE FC         sub     esi, -4

0041931C >  55              push    ebp     到这里脱壳
0041931D    8BEC            mov     ebp, esp
0041931F    6A FF           push    -1
00419321    68 90DA4100     push    0041DA90
00419326    68 86944100     push    <jmp.&msvcrt._except_handler3>
0041932B    64:A1 00000000  mov     eax, dword ptr fs:[0]
00419331    50              push    eax
00419332    64:8925 0000000>mov     dword ptr fs:[0], esp
00419339    83EC 68         sub     esp, 68
0041933C    53              push    ebx
0041933D    56              push    esi
0041933E    57              push    edi

用PE查Microsoft Visual C++ 6.0  应该是脱了,可是我用ImportREC_fix修复的时候出现两个针无效,
如图

而且程序无法运行,,不知道如果处理,,,高手指点

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
  • 1.jpg (57.85kb,213次下载)
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 557
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
可能是自校验之类的吧
2008-1-17 14:01
0
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
这个确实自校验的程序

脱壳相信你应该没有问题,脱完壳后是这样的:

0041931C > 55 push ebp
0041931D 8BEC mov ebp, esp
0041931F 6A FF push -1
00419321 68 90DA4100 push 0041DA90
00419326 68 86944100 push <jmp.&msvcrt._except_handler3>


你可以先看一下这个帖子
http://bbs.pediy.com/showthread.php?t=28298&highlight=%E8%87%AA%E6%A0%A1+%E6%A0%A1%E9%AA%8C
我的方法是从这个上面学来的,所以不敢妄称高手

打开没有脱壳的程序,随便找一块空白但是靠近代码的地方,修改一下内存,然后运行程序,能够运行,说明不是程序自校验,而是文件自校验。

其实有两个思路:
第一个思路、在GetModuleFileNameA函数的出口处,每当返回时,都返回没有脱壳的文件的名称。这样的结果就是程序每次都去校验没有脱壳的文件,但让没有问题。但是这种方法麻烦一点,说深了就是API Hook了。hehe
第二个思路、修改跳转,让程序总是跳向校验正确的一方。直接有效!!!
我们就做这个。

同时用OD打开没有脱壳的程序和脱壳后的程序,
既然是文件校验,肯定要读取文件的,所以我们在文件Api上面下断。

在两个OD下Command Line 里面都输入,bp CreateFileA,F9运行,停在
7C801A24 > 8BFF mov edi, edi
7C801A26 55 push ebp
7C801A27 8BEC mov ebp, esp
7C801A29 FF75 08 push dword ptr [ebp+8]
7C801A2C E8 73C80000 call 7C80E2A4

看堆栈
0012D9F4 73D40E73 /CALL 到 CreateFileA 来自 MFC42.73D40E6D
0012D9F8 0012DB7C |FileName = "C:\Program Files\cctvTools\BoxPlayer\BoxPlayer1.exe"
0012D9FC 80000000 |Access = GENERIC_READ
0012DA00 00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012DA04 0012DA20 |pSecurity = 0012DA20
0012DA08 00000003 |Mode = OPEN_EXISTING
0012DA0C 00000080 |Attributes = NORMAL
0012DA10 00000000 \hTemplateFile = NULL

看见了吧,正在读取文件
取消断点,Alt+F9返回用户空间,
来到
00403088 85C0 test eax, eax
0040308A 0F84 A2000000 je 00403132
00403090 8D8C24 A01F0000 lea ecx, dword ptr [esp+1FA0]
00403097 E8 744C0100 call 00417D10


下面干什么???比较两个程序运行时的不相同的跳转实现!!!
同时在两个OD中F8单步运行,直到这里

0040315F /0F8F 39030000 jg 0040349E ;;;;第一个跳转
00403165 |81FB 29E70400 cmp ebx, 4E729
0040316B |0F87 2D030000 ja 0040349E ;;;;第二个跳转
00403171 |6A 50 push 50
00403173 |E8 A8680000 call 00409A20
;;;;这个部分的语义就是 if(eax != ecx) goto error; else goto OK;
对于没有脱壳的文件,两个跳转都没有实现,而脱壳后的程序则不是。

好的,修改这两个跳转,脱壳后程序正常运行。大功告成!!!

第三个思路、修改没有脱壳的校验值,使得这个值和我们脱壳后的文件的校验值相等。
由于我对MFC42的东西一知半解,弄了半天没有实现。
哈哈
2008-1-17 16:58
0
雪    币: 189
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵,被我追到了……
不过没用断点,直接单步比较两个,累啊……
2008-1-17 17:26
0
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
呵呵,被我追到了……
不过没用断点,直接单步比较两个,累啊……


膜拜!!!
2008-1-17 17:30
0
雪    币: 189
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不过人品不错,没怎么费力,呵呵!
几个call凭感觉过了……
当然一般还是要用断点的,不过开始时不知怎么了,没断下来,所以一怒就单步了……嘿嘿
2008-1-17 17:34
0
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
不过人品不错,没怎么费力,呵呵!
几个call凭感觉过了……
当然一般还是要用断点的,不过开始时不知怎么了,没断下来,所以一怒就单步了……嘿嘿


呵呵,我以前也是这样,慢慢的才会下一些断点,不是每种情况都能够下对
这个比较愁哦
2008-1-17 17:41
0
雪    币: 189
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
哎,都怪自己想偷懒,下断点:bpx CreateFileA,一拦截就结束了,好几次,郁闷了就没有试试
bp……
2008-1-17 18:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
下断点bp GetFileSize后运行,断下后返回系统领空,再继续跟几步就到自效验的地方了

00402E32 8B8424 34010000 mov eax,dword ptr ss:[esp+134]
00402E39 8B4C24 24 mov ecx,dword ptr ss:[esp+24]
00402E3D 3BC1 cmp eax,ecx
00402E3F 0F8F 39030000 jg 132.0040317E
00402E45 81FB 00000500 cmp ebx,50000
00402E4B 0F87 2D030000 ja 132.0040317E
00402E51 6A 50 push 50

00402E3F 0F8F 39030000 jg 132.0040317E
00402E4B 0F87 2D030000 ja 132.0040317E
NOP掉即可

根据以上我已经修复了自校验,软件是可以运行了,但是加入录像软件就自动关了,不知道哪里出错了
2008-1-18 09:18
0
游客
登录 | 注册 方可回帖
返回
//