首页
社区
课程
招聘
[旧帖] [求助]请高手帮忙,PECompact 2.x脱壳后,无法运行? 0.00雪花
发表于: 2011-8-22 02:04 1300

[旧帖] [求助]请高手帮忙,PECompact 2.x脱壳后,无法运行? 0.00雪花

2011-8-22 02:04
1300
这个程序是PECompact 2.x -> Jeremy Collake加壳,单步法脱壳倒也容易,可是脱了壳,运行时毫无反应。估计有自校验,就用BP ExitProcess 断下后,00404be7处找到。在这里,向上找这个CALL的首部,,,往上发现有几处TEST,有些还在下面的CALL里,,,,我汇编才学了不到2星期,晕了,,分析不出来关键跳,,,,试了几个跳转,重载F9运行断不下来。。
烦请大师帮忙看看,怎么弄,附件里面源文件和脱壳的都有。

dumped_.rar

CrackMe.rar

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
显然是文件自校验,用这两个断点搞定它~
bp SetFilePointer
bp CreateFileA
不止一次校验~
2011-8-22 05:22
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢2楼高人的指点。

按2楼高人的指点,BP了2个文件处理函数,,,,可是向上没找到跳点,还是不会修改。。。。

BP这两个函数,我是不知道的,,,我的API部分太贫乏。。。BP ExitProcess,我是参考网上的“常用自效验分析实例”文章,那文章写的步骤详细,只是程序不同,按那个步骤也是不行。

初学脱壳,随便找了个程序,没想到还有自效验,自学之路艰难呀。

能不能详细解释下解除自效验的方法,在这个程序里,2个文件处理函数上怎样处理?或者发上来修改好的,我比较找找看看,,,。
2011-8-22 09:12
0
雪    币: 261
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
这个自校验就是检测文件的长度...

00507A50 >/$  55            push    ebp          //入口点
00507A51  |.  8BEC          mov     ebp, esp
00507A53  |.  83C4 EC       add     esp, -14
00507A56  |.  33C0          xor     eax, eax
00507A58  |.  8945 EC       mov     dword ptr ss:[ebp-14], eax
00507A5B  |.  B8 08755000   mov     eax, CrackMe_.00507508
00507A60  |.  E8 2FF9EFFF   call    CrackMe_.00407394
00507A65  |.  33C0          xor     eax, eax
00507A67  |.  55            push    ebp
00507A68  |.  68 6C7B5000   push    CrackMe_.00507B6C
00507A6D  |.  64:FF30       push    dword ptr fs:[eax]
00507A70  |.  64:8920       mov     dword ptr fs:[eax], esp
00507A73  |.  A1 6C054B00   mov     eax, dword ptr ds:[4B056C]
00507A78  |.  E8 4393FAFF   call    CrackMe_.004B0DC0   //在这个CALL里..
00507A7D  |.  84C0          test    al, al
00507A7F      75 09         jnz     short CrackMe_.00507A8A   这个跳转不能跳..
00507A81  |.  E8 3EFAFFFF   call    CrackMe_.005074C4
00507A86  |.  84C0          test    al, al
00507A88  |.  74 11         je      short CrackMe_.00507A9B

--------------------------------------------------------------------------
CALL进004B0DC0

004B0DDE  |.  E8 35C1FBFF   call    CrackMe_.0046CF18
004B0DE3  |.  8B45 FC       mov     eax, dword ptr ss:[ebp-4]
004B0DE6  |.  E8 D9F7FFFF   call    CrackMe_.004B05C4                ;  计算文件大小
004B0DEB      3D 00C80700   cmp     eax, 7C800                           //这里就是比较文件大小了..7C800是加壳时文件的大小..是509952,改这里好像没成功..我就nop了前面那个跳转..

004B0DF0  |.  0F95C3        setne   bl          //这里的判断要为FALSE
004B0DF3  |.  33C0          xor     eax, eax
004B0DF5  |.  5A            pop     edx                              ;  kernel32.7C817077

改过之后程序可以跑起来..但是窗口一下就闪没了..我运行了原来加壳的文件也是一下就没了..不知道是不是还有其他的检验点...
刚开始的话检查自校验可以把加壳文件和脱壳文件一起单步调试..在跳得地方相互对比下..虽然有点麻烦..但是还有点用..呵呵..
2011-8-22 09:34
0
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
3处自校验~改前两处程序就能运行;

第一处就是楼上说的;
第二处就是入口点向下找,找到retn,倒数第三个call里面;
改里面的跳转;
内个GameDll.dll不知道干吗用,我这里没有这个GameDll.dll依旧可以正常运行;

00507B6B  \.  C3            retn///////////////////////////
00507B6C   .^ E9 C3C9EFFF   jmp     00404534
00507B71   .^ EB F0         jmp     short 00507B63
2011-8-22 16:44
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
非常感谢楼上的两位高手。

按照提示,第一处跳转改掉,第二处跳转也按照说明改了,运行程序跳出图片后,一闪就没了。

第二处改动如下:
==========================================================
第二处就是入口点向下找,找到retn,倒数第三个call里面
00507B3F  |.  8B15 C8EE4F00 MOV EDX,DWORD PTR DS:[4FEEC8]            ;  dumped_.004FEF14
00507B45  |.  E8 8E4CF6FF   CALL dumped_.0046C7D8           // 这个CALL进入
00507B4A  |.  A1 50115100   MOV EAX,DWORD PTR DS:[511150]
00507B4F  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00507B51  |.  E8 024DF6FF   CALL dumped_.0046C858
00507B56  |>  33C0          XOR EAX,EAX
00507B58  |.  5A            POP EDX
00507B59  |.  59            POP ECX
00507B5A  |.  59            POP ECX
00507B5B  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
00507B5E  |.  68 737B5000   PUSH dumped_.00507B73
00507B63  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
00507B66  |.  E8 35D1EFFF   CALL dumped_.00404CA0
00507B6B  \.  C3            RETN                              //从这里向上找CALL
00507B6C   .^ E9 C3C9EFFF   JMP dumped_.00404534
00507B71   .^ EB F0         JMP SHORT dumped_.00507B63
=====================CALL进0046C7D8=======================================
0046C7D8   $  55            PUSH EBP
0046C7D9   .  8BEC          MOV EBP,ESP
0046C7DB   .  51            PUSH ECX
0046C7DC   .  53            PUSH EBX
0046C7DD   .  56            PUSH ESI
0046C7DE   .  57            PUSH EDI
0046C7DF   .  894D FC       MOV DWORD PTR SS:[EBP-4],ECX
0046C7E2   .  8BDA          MOV EBX,EDX
0046C7E4   .  8BF0          MOV ESI,EAX
0046C7E6   .  8BC3          MOV EAX,EBX
0046C7E8   .  FF50 F4       CALL DWORD PTR DS:[EAX-C]
0046C7EB   .  8BD8          MOV EBX,EAX
0046C7ED   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0046C7F0   .  8918          MOV DWORD PTR DS:[EAX],EBX
0046C7F2   .  33C0          XOR EAX,EAX
0046C7F4   .  55            PUSH EBP
0046C7F5   .  68 16C84600   PUSH dumped__.0046C816
0046C7FA   .  64:FF30       PUSH DWORD PTR FS:[EAX]
0046C7FD   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
0046C800   .  8BCE          MOV ECX,ESI
0046C802   .  83CA FF       OR EDX,FFFFFFFF
0046C805   .  8BC3          MOV EAX,EBX
0046C807   .  8B38          MOV EDI,DWORD PTR DS:[EAX]
0046C809   .  FF57 2C       CALL DWORD PTR DS:[EDI+2C]
0046C80C   .  33C0          XOR EAX,EAX
0046C80E   .  5A            POP EDX
0046C80F   .  59            POP ECX
0046C810   .  59            POP ECX
0046C811   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
0046C814   .  EB 16         JMP SHORT dumped__.0046C82C
0046C816   .^ E9 657AF9FF   JMP dumped__.00404280
0046C81B   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0046C81E   .  33D2          XOR EDX,EDX
0046C820   .  8910          MOV DWORD PTR DS:[EAX],EDX
0046C822   .  E8 317EF9FF   CALL dumped__.00404658
0046C827   .  E8 807EF9FF   CALL dumped__.004046AC
0046C82C   >  837E 44 00    CMP DWORD PTR DS:[ESI+44],0
0046C830   .  75 1D         JNZ SHORT dumped__.0046C84F       //这里的比较跳转nop掉
0046C832   .  8BC3          MOV EAX,EBX
0046C834   .  8B15 6C224600 MOV EDX,DWORD PTR DS:[46226C]            ;  dumped__.004622B8
0046C83A   .  E8 2577F9FF   CALL dumped__.00403F64
0046C83F   .  84C0          TEST AL,AL
0046C841   .  74 0C         JE SHORT dumped__.0046C84F
0046C843   .  8BFB          MOV EDI,EBX
0046C845   .  8BC7          MOV EAX,EDI
0046C847   .  E8 D45EFEFF   CALL dumped__.00452720
0046C84C   .  897E 44       MOV DWORD PTR DS:[ESI+44],EDI
0046C84F   >  5F            POP EDI
0046C850   .  5E            POP ESI
0046C851   .  5B            POP EBX
0046C852   .  59            POP ECX
0046C853   .  5D            POP EBP
0046C854   .  C3            RETN
=========================================================
这样改,对否???用源程序和脱壳的双开OD比较,也没发现什么。。。。晕了
还望给予指点。
2011-8-23 20:27
0
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
第一处对了;
第二处不对;
还差那么一点儿;
我看好你;
可以比较第一处改;
2011-8-23 20:53
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还差那么一点儿;??????

孟贤老师,这个考题对我来说挺难的。

我去加加油,,,,嘿嘿
2011-8-23 20:57
0
雪    币: 261
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
在我这边原来的加壳程序也运行不起来...也是一闪就没了..
2011-8-24 00:29
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
试了很多次,都不行,,,,这样试下去肯定不行,,,,

00507B45  |.  E8 8E4CF6FF   CALL V9-T__BA.0046C7D8    //进入这个CALL
========================================================
0046C805   .  8BC3          MOV EAX,EBX
0046C807   .  8B38          MOV EDI,DWORD PTR DS:[EAX]
0046C809   .  FF57 2C       CALL DWORD PTR DS:[EDI+2C]  //下面的比较跳转数据在这个CALL里面????里面的比较跳转很多,试了很久都不行,,晕了

0046C80C   .  33C0          XOR EAX,EAX
0046C80E   .  5A            POP EDX
0046C80F   .  59            POP ECX
0046C810   .  59            POP ECX
0046C811   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
0046C814   .  EB 16         JMP SHORT V9-T__BA.0046C82C
0046C816   .^ E9 657AF9FF   JMP V9-T__BA.00404280
0046C81B   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0046C81E   .  33D2          XOR EDX,EDX
0046C820   .  8910          MOV DWORD PTR DS:[EAX],EDX
0046C822   .  E8 317EF9FF   CALL V9-T__BA.00404658
0046C827   .  E8 807EF9FF   CALL V9-T__BA.004046AC
0046C82C   >  837E 44 00    CMP DWORD PTR DS:[ESI+44],0
0046C830   .  75 1D         JNZ SHORT V9-T__BA.0046C84F

我想,去除自效验,还是从源头找起,,,自效验有,(1)软件大小比较(2)CRC或MD5比较(3)调用文件处理函数,进程函数,,,等等

这个程序第一处自效验,就是程序大小比较。第二处又是比较什么呢?猜不出来,还请高手指点迷津,,,也请孟贤老师给个提示,,,,我这里是瞎子摸象,越试越乱
2011-8-24 00:30
0
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这个程序的自校验是3处文件比较大小;
第二处是这里;
004FFB20  |.  84C0          test    al, al
004FFB22      75 09         jnz     short 004FFB2D                   ;  这里也要改
004FFB24  |.  E8 0FFFFFFF   call    004FFA38
那个校验就是在这几行上面得call里;
第三处我没有改也自己运行了;
还有那个GameDll.dll
你自己用记事本建立一个空的,改个后缀名,这程序就能运行了;
祝你好运啊;
2011-8-24 02:32
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢孟贤老师的提醒,,,终于搞明白了。

关键在7C800上,,,,如法炮制,找到了第三处,只是OD运行不了罢了。估计第三处,在程序运行到某处,还会效验。这个留着以后看看再说。

现在看来,也就几分钟的事情,由于思路不对,搞了很多天,也熬了好几个晚上,,,,连做梦都是跳转,,,,哈哈哈,,,,这次学到了很多,,谢谢

下面试试爆破,,,这也是第一次实习。
2011-8-24 08:18
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不止一次校验
2011-8-25 07:51
0
游客
登录 | 注册 方可回帖
返回
//