好友
阅读权限 20
听众
最后登录 1970-1-1
本帖最后由 evilangel 于 2009-4-8 12:42 编辑
不懂得如何给软件加试炼壳,只是简单加了下,加壳方式如下
OD载入,忽略所以异常
停在
01001000 > B8 C8AF0101 mov eax, 0101AFC8 //EP入口
01001005 50 push eax
01001006 64:FF35 0000000>push dword ptr fs:[0]
0100100D 64:8925 0000000>mov fs:[0], esp
01001014 33C0 xor eax, eax
01001016 8908 mov [eax], ecx
///////////////////////////////////////////////////////////
跟以前的类似
下断点:BP VirtualFree
先运行一次 断在
7C809B04 > 8BFF mov edi, edi
7C809B06 55 push ebp
7C809B07 8BEC mov ebp, esp
7C809B09 FF75 10 push dword ptr [ebp+10]
7C809B0C FF75 0C push dword ptr [ebp+C]
7C809B0F FF75 08 push dword ptr [ebp+8]
7C809B12 6A FF push -1
7C809B14 E8 09000000 call VirtualFreeEx
7C809B19 5D pop ebp
7C809B1A C2 0C00 retn 0C
////////////////////////////////////////////////////////////
不取消断点,alt+f9返回
002D1255 5F pop edi ; 0081408E
002D1256 5E pop esi
002D1257 8BC3 mov eax, ebx
002D1259 5B pop ebx
002D125A C9 leave
002D125B C2 0C00 retn 0C
////////////////////////////////////////////////////////////
右键---查找---二进制字符串 输入 89 02
下面的地方
002D1C51 50 push eax ; NOTEPAD-.01007AA0
002D1C52 FF75 FC push dword ptr [ebp-4] ; //上面一行函数压栈
002D1C55 FF93 4D1F0010 call [ebx+10001F4D] ; //MAGIC CALL,F2下断,F9运行断在这儿
002D1C5B 5A pop edx
002D1C5C 85C0 test eax, eax
002D1C5E ^ 0F84 6FFFFFFF je 002D1BD3
002D1C64 8906 mov [esi], eax ; //函数给地址
002D1C66 8902 mov [edx], eax ; //如果加密给加密的地址
002D1C68 83C2 04 add edx, 4
002D1C6B 83C6 04 add esi, 4
002D1C6E ^ EB AC jmp short 002D1C1C
002D1C70 33C0 xor eax, eax
002D1C72 5E pop esi
002D1C73 5F pop edi
002D1C74 5B pop ebx
002D1C75 C9 leave
002D1C76 C2 1000 retn 10
//////////////////////////////////////////////////////////////////
断下后 取消断点, 002D1C55 这一行 F7 进入
002D091D 55 push ebp
002D091E 8BEC mov ebp, esp
002D0920 83C4 FC add esp, -4
002D0923 53 push ebx
002D0924 57 push edi
002D0925 56 push esi
002D0926 E8 00000000 call 002D092B
002D092B 5B pop ebx
002D092C 81EB FE103F00 sub ebx, 3F10FE
002D0932 FF75 10 push dword ptr [ebp+10]
002D0935 FF75 0C push dword ptr [ebp+C]
002D0938 FF75 08 push dword ptr [ebp+8]
002D093B FF93 2F103F00 call [ebx+3F102F] ; //对于GetProAddress这个函数在这儿里面加密
002D0941 8945 FC mov [ebp-4], eax ; //搜索二进制 75 06 勾选整个块
002D0944 8B8B 61103F00 mov ecx, [ebx+3F1061]
002D094A 3B4D 08 cmp ecx, [ebp+8]
002D094D 75 63 jnz short 002D09B2 ; //magic jump
///////////////////////////////////////////////
此时可以
右键------查找----二进制字符串 输入 75 06 记得这个要勾选整个块
002D040A FF93 29103F00 call [ebx+3F1029]
002D0410 3B83 41103F00 cmp eax, [ebx+3F1041] ; //GetProcAddress在下面加密
002D0416 75 06 jnz short 002D041E ; //这里改成 jmp
002D0418 8D83 55113F00 lea eax, [ebx+3F1155]
002D041E 5E pop esi
002D041F 5F pop edi
002D0420 5B pop ebx
002D0421 C9 leave
002D0422 C2 0C00 retn 0C
///////////////////////////////////////////////////////
改完后两处后,F9运行
停在
7C809B04 > 8BFF mov edi, edi ; NOTEPAD-.01000000
7C809B06 55 push ebp
7C809B07 8BEC mov ebp, esp
7C809B09 FF75 10 push dword ptr [ebp+10]
7C809B0C FF75 0C push dword ptr [ebp+C]
7C809B0F FF75 08 push dword ptr [ebp+8]
7C809B12 6A FF push -1
7C809B14 E8 09000000 call VirtualFreeEx
7C809B19 5D pop ebp
7C809B1A C2 0C00 retn 0C
出现基址了,最佳返回时机了
/////////////////////////////////////////////////////////
取消断点,alt+f9返回
002D15C3 8B46 0C mov eax, [esi+C] ; //取消断点,alt+f9返回到这儿,F8单步
002D15C6 03C7 add eax, edi
002D15C8 5D pop ebp
002D15C9 5E pop esi
002D15CA 5F pop edi
002D15CB 5B pop ebx
002D15CC C3 retn
/////////////////////////////////////////////////////
0101B068 8985 3F130010 mov [ebp+1000133F], eax ; NOTEPAD-.0100739D
0101B06E 8BF0 mov esi, eax ; //上面出现OEP地址了
0101B070 8B4B 14 mov ecx, [ebx+14]
0101B073 5A pop edx
0101B074 EB 0C jmp short 0101B082
0101B076 03CA add ecx, edx
0101B078 68 00800000 push 8000
0101B07D 6A 00 push 0
0101B07F 57 push edi
0101B080 FF11 call [ecx]
0101B082 8BC6 mov eax, esi
0101B084 5A pop edx
0101B085 5E pop esi
0101B086 5F pop edi
0101B087 59 pop ecx
0101B088 5B pop ebx
0101B089 5D pop ebp
0101B08A FFE0 jmp eax ; //跳向OEP
/////////////////////////////////////////////////////////
0100739D 6A 70 push 70 ; //OEP
0100739F 68 98180001 push 01001898
010073A4 E8 BF010000 call 01007568
010073A9 33DB xor ebx, ebx
010073AB 53 push ebx
010073AC 8B3D CC100001 mov edi, [10010CC] ; kernel32.GetModuleHandleA
010073B2 FFD7 call edi
010073B4 66:8138 4D5A cmp word ptr [eax], 5A4D
010073B9 75 1F jnz short 010073DA
010073BB 8B48 3C mov ecx, [eax+3C]
010073BE 03C8 add ecx, eax
010073C0 8139 50450000 cmp dword ptr [ecx], 4550
010073C6 75 12 jnz short 010073DA
LORDPE脱壳 ,用ImpREC修复,修复是注意:选项 ----- 抓取文件 ----- 修复PE to OEP 这个地方勾选上
全部有效,如果 75 06那个magic不改的话,有无效的话就填 GetProcAddress
PS:似乎可以直接用插件脱壳,不用修复!
OK成功!
再PS:push 8000找OEP的那个方法也能用,其他几种下断方法也行
文章首发吾爱破解 论坛,www.52pojie.cn 欢迎转载,非作者本人,转载请注明!
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。