能力值:
( LV2,RANK:10 )
|
-
-
2 楼
显然是文件自校验,用这两个断点搞定它~
bp SetFilePointer
bp CreateFileA
不止一次校验~
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢2楼高人的指点。
按2楼高人的指点,BP了2个文件处理函数,,,,可是向上没找到跳点,还是不会修改。。。。
BP这两个函数,我是不知道的,,,我的API部分太贫乏。。。BP ExitProcess,我是参考网上的“常用自效验分析实例”文章,那文章写的步骤详细,只是程序不同,按那个步骤也是不行。
初学脱壳,随便找了个程序,没想到还有自效验,自学之路艰难呀。
能不能详细解释下解除自效验的方法,在这个程序里,2个文件处理函数上怎样处理?或者发上来修改好的,我比较找找看看,,,。
|
能力值:
( 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
改过之后程序可以跑起来..但是窗口一下就闪没了..我运行了原来加壳的文件也是一下就没了..不知道是不是还有其他的检验点...
刚开始的话检查自校验可以把加壳文件和脱壳文件一起单步调试..在跳得地方相互对比下..虽然有点麻烦..但是还有点用..呵呵..
|
能力值:
( 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
|
能力值:
( 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比较,也没发现什么。。。。晕了
还望给予指点。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
第一处对了;
第二处不对;
还差那么一点儿;
我看好你;
可以比较第一处改;
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
还差那么一点儿;??????
孟贤老师,这个考题对我来说挺难的。
我去加加油,,,,嘿嘿
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
在我这边原来的加壳程序也运行不起来...也是一闪就没了..
|
能力值:
( 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)调用文件处理函数,进程函数,,,等等
这个程序第一处自效验,就是程序大小比较。第二处又是比较什么呢?猜不出来,还请高手指点迷津,,,也请孟贤老师给个提示,,,,我这里是瞎子摸象,越试越乱
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
这个程序的自校验是3处文件比较大小;
第二处是这里;
004FFB20 |. 84C0 test al, al
004FFB22 75 09 jnz short 004FFB2D ; 这里也要改
004FFB24 |. E8 0FFFFFFF call 004FFA38
那个校验就是在这几行上面得call里;
第三处我没有改也自己运行了;
还有那个GameDll.dll
你自己用记事本建立一个空的,改个后缀名,这程序就能运行了;
祝你好运啊;
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
谢谢孟贤老师的提醒,,,终于搞明白了。
关键在7C800上,,,,如法炮制,找到了第三处,只是OD运行不了罢了。估计第三处,在程序运行到某处,还会效验。这个留着以后看看再说。
现在看来,也就几分钟的事情,由于思路不对,搞了很多天,也熬了好几个晚上,,,,连做梦都是跳转,,,,哈哈哈,,,,这次学到了很多,,谢谢
下面试试爆破,,,这也是第一次实习。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
不止一次校验
|