吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7531|回复: 11
收起左侧

脱壳练习(难度中下)

[复制链接]
ximo 发表于 2008-8-25 19:11
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

给大家来个脱壳练习,PolyCrypt PE的壳,难度中等以下,难度不是很大
有兴趣的练习一下.
我加的是98记事本.脱好的可以在下面简单的写一下步骤.
看看是否有好办法来脱,呵呵
脱文我一段时间后再发.
说明一下:如果可以,尽量不要用ESP定律,不然就没什么意思了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

莱沙 发表于 2008-8-25 20:28
倒没人挺你,我挺你! [s:41][s:41][s:41]
蚊香 发表于 2008-8-25 20:44
小糊涂虫 发表于 2008-8-25 21:06
一时间把卡巴密码忘记了,一下载卡巴就报毒,不能下载..............
这东西估计我也不会脱,.....到这里等待高人写脱文...................
小生我怕怕 发表于 2008-8-26 00:47
首先来说下这个壳,他的int3就是一个陷阱,所以我们每次都要跳过他,这个壳我们还要记住,执行向下的跳转,打断向上的跳转,我们每次打断向上跳转时尽量选择用F4运行到所选,而每次跳过inr3时,我们都用f2下断,接着shift+f9去跳过,这个不得不说一下,这个程序一定要一步一根桩的走,不要图快速,那样会出错误的那怕是单步一下都不要直接跳过,避免报错,我试过几次都是直接报错的,一定要一步一步的来
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D00D >60pushad //OD载入程序
0040D00EE8 EDFFFFFF call unpackme.0040D000//打开内存镜象ait+m
0040D013- EB 80 jmp short unpackme.0040CF95
0040D015F5cmc
0040D0163E:F5 cmc
0040D018A0 50F53891 mov al,byte ptr ds:[9138F550]
0040D01D4Cdec esp
━━━━━━━━━━━━━━━━━━━━━━━━━━
在00401000处下F2设置访问中断,接着shift+f9
内存映射,项目 19
地址=00401000
大小=00004000 (16384.)
物主=unpackme 00400000
区段=.text
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D0A48B10mov edx,dword ptr ds:[eax] //程序停在了这里
0040D0A633C0xor eax,eax//接着开始单步F8走起
0040D0A864:8B40 30mov eax,dword ptr fs:[eax+30]
0040D0AC0FB658 02 movzx ebx,byte ptr ds:[eax+2]
0040D0B00ADBor bl,bl
0040D0B20F85 B2030000 jnz unpackme.0040D46A
0040D0B88B40 0C mov eax,dword ptr ds:[eax+C]
0040D0BB8B70 1C mov esi,dword ptr ds:[eax+1C]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D222 /74 15 je short unpackme.0040D239//这个je跳向下面的int3
0040D224 |C3retn//走到这里时,我们要特别注意啦
0040D225 |CCint3//因为一个接一个的int3指令开始多起来
0040D226 |60pushad
0040D227 |8D95 296E4000 lea edx,dword ptr ss:[ebp+406E29]
0040D22D |52push edx
0040D22E |50push eax
0040D22F |51push ecx
0040D230 |53push ebx
0040D231 |FF95 DD6B4000 call dword ptr ss:[ebp+406BDD]
0040D237 |61popad
0040D238 |C3retn
0040D239 \CCint3//上面的je跳到了这里
0040D23A8D85 0F624000 lea eax,dword ptr ss:[ebp+40620F]//我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D2402B85 4D6D4000 sub eax,dword ptr ss:[ebp+406D4D]
0040D24683E8 13 sub eax,13
0040D2498985 516D4000 mov dword ptr ss:[ebp+406D51],eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D25A /0F84 8D000000 je unpackme.0040D2ED
0040D260 |CCint3//这里又碰上了该死的int3
0040D261 |8B9D 516D4000 mov ebx,dword ptr ss:[ebp+406D51] //我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D267 |8B87 596D4000 mov eax,dword ptr ds:[edi+406D59]
0040D26D |03D8add ebx,eax
0040D26F |8B8F 5D6D4000 mov ecx,dword ptr ds:[edi+406D5D]
0040D275 |B8 40000000 mov eax,40
0040D27A |E8 A7FFFFFF call unpackme.0040D226
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D2AC66:AD lods word ptr ds:[esi]
0040D2AECCint3//这里又碰上改死的int3
0040D2AF66:AB stos word ptr es:[edi]//我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D2B183FA 12 cmp edx,12
0040D2B47C 04 jl short unpackme.0040D2BA
0040D2B6^ E2 DD loopd short unpackme.0040D295
0040D2B8EB 04 jmp short unpackme.0040D2BE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D2EAF3:AA rep stos byte ptr es:[edi]
0040D2ECCCint3//这里又碰上改死的int3
0040D2ED8B95 516D4000 mov edx,dword ptr ss:[ebp+406D51] //我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D2F38BB5 416D4000 mov esi,dword ptr ss:[ebp+406D41]
0040D2F903F2add esi,edx
0040D2FBCCint3//这里又碰上改死的int3
0040D2FC8B46 0C mov eax,dword ptr ds:[esi+C]//我们在这里f2下断,接着shift+f9,然后取消断点继续单步
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D31653push ebx
0040D317FF95 D96B4000 call dword ptr ss:[ebp+406BD9]
0040D31DCCint3//这里又碰上改死的int3
0040D31E8985 356D4000 mov dword ptr ss:[ebp+406D35],eax //我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D324C785 3D6D4000 0>mov dword ptr ss:[ebp+406D3D],0
0040D32ECCint3//这里又碰上改死的int3
0040D32F8B95 516D4000 mov edx,dword ptr ss:[ebp+406D51] //我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D3358B06mov eax,dword ptr ds:[esi]
0040D3370BC0or eax,eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D339 /75 04 jnz short unpackme.0040D33F //这个jnz跳过了那该死的int3我们就不用管啦
0040D33B |8B46 10 mov eax,dword ptr ds:[esi+10]
0040D33E |CCint3//这里又碰上改死的int3
0040D33F \03C2add eax,edx
0040D3410385 3D6D4000 add eax,dword ptr ss:[ebp+406D3D]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D36403DAadd ebx,edx
0040D36683C3 02 add ebx,2
0040D369CCint3//这里又碰上改死的int3
0040D36A81E3 FFFFFF0F and ebx,0FFFFFFF//我们在这里f2下断,接着shift+f9,然后取消断点继续单步
0040D37053push ebx
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D3ED^\E9 3CFFFFFF jmp unpackme.0040D32E//这个跳转是向上的,我们要打断他直接在避开int3的地方f2下断,shift+f9打断他
0040D3F2CCint3 //这里又碰上改死的int3
0040D3F383C6 14 add esi,14 //我们在这里f2下断,接着shift+f9,这样就打断两向上的jmp和int3
0040D3F68B95 516D4000 mov edx,dword ptr ss:[ebp+406D51]
0040D3FC^ E9 FBFEFFFF jmp unpackme.0040D2FC//这个jmp时,我们就要用F4运行到所选的方法啦,让他运行到下一行
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D40E8B85 396D4000 mov eax,dword ptr ss:[ebp+406D39]
0040D4140385 516D4000 add eax,dword ptr ss:[ebp+406D51]
0040D41A8985 2B664000 mov dword ptr ss:[ebp+40662B],eax
0040D4208B0424mov eax,dword ptr ss:[esp]
0040D42364:67:A3 0000 mov dword ptr fs:[0],eax
0040D42883C4 08 add esp,8
0040D42B5Dpop ebp
0040D42C9Dpopfd
0040D42D61popad
0040D42E68 CC104000 push unpackme.004010CC //此时这里push把我们的oep压栈啦
0040D433C3retn //这里就是飞向我们的OEP啦
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //我们的光明之颠oep
004010CD8BECmov ebp,esp
004010CF83EC 44 sub esp,44
004010D256push esi
004010D3FF15 E0634000 call dword ptr ds:[4063E0] ; kernel32.GetCommandLineA
004010D98BF0mov esi,eax
004010DB8A00mov al,byte ptr ds:[eax]
004010DD3C 22 cmp al,22
004010DF75 13 jnz short unpackme.004010F4
004010E146inc esi
004010E28A06mov al,byte ptr ds:[esi]
004010E484C0test al,al
小生我怕怕 发表于 2008-8-26 01:10
接下来在说下我在单步跟时,跟到的断点的应用吧,在我们单步跟时,我发现如下3个段点比较有用,分别为
bp GetModuleHandleA
bp LoadLibraryA
bp GetProcAddress
但是我试了下,只有第2个只需要运行一次,而且是离得最近的,好现在我们继续OD载入程序
由于断点的运用都是一模一样的,所以我也就演示其一就好
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D00D >60pushad//OD载入
0040D00EE8 EDFFFFFF call unpackme.0040D000//在命令行下bp LoadLibraryA
0040D013- EB 80 jmp short unpackme.0040CF95 //接着shift+f9运行
0040D015F5cmc //此时程序会卡住一分钟左右,当然适机器而论,我这里卡住30秒左右
0040D0163E:F5 cmc
0040D018A0 50F53891 mov al,byte ptr ds:[9138F550]
0040D01D4Cdec esp
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第一次程序断在了这里
7C801D7955push ebp
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:[ebp+8],0
7C801D8053push ebx
7C801D8156push esi
7C801D8274 14 je short kernel32.7C801D98
7C801D8468 C0E0807C push kernel32.7C80E0C0 ; ASCII "twain_32.dll"
7C801D89FF75 08 push dword ptr ss:[ebp+8]
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第二次程序断在了这里
7C801D7955push ebp //大家一定注意到啦,还是停在一样的位置
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:[ebp+8],0
7C801D8053push ebx
7C801D8156push esi
7C801D8274 14 je short kernel32.7C801D98
7C801D8468 C0E0807C push kernel32.7C80E0C0 ; ASCII "twain_32.dll"
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi //第三次程序断在了这里
7C801D7955push ebp//大家还会说还是一样的位置,其实他的变化在我们的堆栈窗口,没有在这里
7C801D7A8BECmov ebp,esp //此时我们ait+f9返回到用户代码
7C801D7C837D 08 00cmp dword ptr ss:[ebp+8],0
7C801D8053push ebx
7C801D8156push esi
7C801D8274 14 je short kernel32.7C801D98
7C801D8468 C0E0807C push kernel32.7C80E0C0 ; ASCII "twain_32.dll"
7C801D89FF75 08 push dword ptr ss:[ebp+8]
7C801D8CFF15 9C13807C call dword ptr ds:[<&ntdll._strcmpi>]; ntdll._stricmp
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D31DCCint3 //真是壮士为杰身先死,又停在了该死的int3上
0040D31E8985 356D4000 mov dword ptr ss:[ebp+406D35],eax//在这里f2下断,shift+f9运行,接着单步F8
0040D324C785 3D6D4000 0>mov dword ptr ss:[ebp+406D3D],0
0040D32ECCint3 //这里又是该死的int3
0040D32F8B95 516D4000 mov edx,dword ptr ss:[ebp+406D51]//在这里f2下断,shift+f9运行,接着单步F8
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D339 /75 04 jnz short unpackme.0040D33F//这个jnz跳过了该死的int3所以我们不用管继续走
0040D33B |8B46 10 mov eax,dword ptr ds:[esi+10]
0040D33E |CCint3 //这里又是该死的int3
0040D33F \03C2add eax,edx; unpackme.00400000
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D36683C3 02 add ebx,2
0040D369CCint3 //这里又是该死的int3
0040D36A81E3 FFFFFF0F and ebx,0FFFFFFF //在这里f2下断,shift+f9运行,接着单步F8
0040D37053push ebx
0040D371FFB5 356D4000 push dword ptr ss:[ebp+406D35]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D3ED^\E9 3CFFFFFF jmp unpackme.0040D32E//这个跳转是向上的,我们要打断他直接在避开int3的地方f2下断,shift+f9打断他
0040D3F2CCint3 //这里又碰上改死的int3
0040D3F383C6 14 add esi,14 //我们在这里f2下断,接着shift+f9,这样就打断两向上的jmp和int3
0040D3F68B95 516D4000 mov edx,dword ptr ss:[ebp+406D51]
0040D3FC^ E9 FBFEFFFF jmp unpackme.0040D2FC//这个jmp时,我们就要用F4运行到所选的方法啦,让他运行到下一行
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D40E8B85 396D4000 mov eax,dword ptr ss:[ebp+406D39]
0040D4140385 516D4000 add eax,dword ptr ss:[ebp+406D51]
0040D41A8985 2B664000 mov dword ptr ss:[ebp+40662B],eax
0040D4208B0424mov eax,dword ptr ss:[esp]
0040D42364:67:A3 0000 mov dword ptr fs:[0],eax
0040D42883C4 08 add esp,8
0040D42B5Dpop ebp
0040D42C9Dpopfd
0040D42D61popad
0040D42E68 CC104000 push unpackme.004010CC //此时这里push把我们的oep压栈啦
0040D433C3retn //这里就是飞向我们的OEP啦
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //我们的光明之颠oep
004010CD8BECmov ebp,esp
004010CF83EC 44 sub esp,44
004010D256push esi
004010D3FF15 E0634000 call dword ptr ds:[4063E0] ; kernel32.GetCommandLineA
004010D98BF0mov esi,eax
004010DB8A00mov al,byte ptr ds:[eax]
004010DD3C 22 cmp al,22
004010DF75 13 jnz short unpackme.004010F4
004010E146inc esi
004010E28A06mov al,byte ptr ds:[esi]
004010E484C0test al,al
zapline 发表于 2008-8-26 01:59
3个段点比较有用,分别为
bp GetModuleHandleA
bp LoadLibraryA
bp GetProcAddress


哈哈,又学了个方法!
小生我怕怕 发表于 2008-8-26 02:12
刚看了下zapline兄第的脱文,便又有一脱法,随便写下脱文,但是同样记住需要f4运行到所选和f2下断,接着shift+f9跳过int3指令
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D00D >60pushad//OD载入
0040D00EE8 EDFFFFFF call unpackme.0040D000//f8开始单步走
0040D013- EB 80 jmp short unpackme.0040CF95 /一直漫长的F8直接到他跑到系统领空
0040D015F5cmc
0040D0163E:F5 cmc
0040D018A0 50F53891 mov al,byte ptr ds:[9138F550]
0040D01D4Cdec esp
0040D01E15 4CF54258 adc eax,5842F54C
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D07790nop
0040D0788D85 90624000 lea eax,dword ptr ss:[ebp+406290]
0040D07E50push eax
0040D07F8DBD AD664000 lea edi,dword ptr ss:[ebp+4066AD]
0040D08557push edi
0040D08664:8B11 mov edx,dword ptr fs:[ecx]
0040D08952push edx
0040D08A64:8921 mov dword ptr fs:[ecx],esp
0040D08D8909mov dword ptr ds:[ecx],ecx//程序到这里时会跑到系统领空去
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C92EAF351push ecx //现在我们来到系统领空,ait+f9返回到程序代码
7C92EAF453push ebx
7C92EAF5E8 C78C0200 call ntdll.7C9577C1
7C92EAFA0AC0or al,al
7C92EAFC74 0C je short ntdll.7C92EB0A
7C92EAFE5Bpop ebx
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D0A48B10mov edx,dword ptr ds:[eax] //ait+f9返回到程序代码第一次
0040D0A633C0xor eax,eax
0040D0A864:8B40 30mov eax,dword ptr fs:[eax+30]
0040D0AC0FB658 02 movzx ebx,byte ptr ds:[eax+2]
0040D0B00ADBor bl,bl
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D23A8D85 0F624000 lea eax,dword ptr ss:[ebp+40620F]//ait+f9返回到程序代码第二次
0040D2402B85 4D6D4000 sub eax,dword ptr ss:[ebp+406D4D]
0040D24683E8 13 sub eax,13
0040D2498985 516D4000 mov dword ptr ss:[ebp+406D51],eax
0040D24F8BB5 556D4000 mov esi,dword ptr ss:[ebp+406D55]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D2618B9D 516D4000mov ebx,dword ptr ss:[ebp+406D51] //ait+f9返回到程序代码第三次
0040D2678B87 596D4000mov eax,dword ptr ds:[edi+406D59]
0040D26D03D8 add ebx,eax
0040D26F8B8F 5D6D4000mov ecx,dword ptr ds:[edi+406D5D]
0040D275B8 40000000mov eax,40
0040D27AE8 A7FFFFFFcall unpackme.0040D226
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D2AF66:ABstos word ptr es:[edi]//ait+f9返回到程序代码第四次
0040D2B183FA 12cmp edx,12//此时在这里f2下断,接着shift+f9
0040D2B47C 04jl short unpackme.0040D2BA//好啦,继续漫长的f8
0040D2B6^ E2 DDloopd short unpackme.0040D295
0040D2B8EB 04jmp short unpackme.0040D2BE
0040D2BA42 inc edx
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D2E332C0 xor al,al
0040D2E5B9 00000000mov ecx,0
0040D2EAF3:AArep stos byte ptr es:[edi]
0040D2ECCC int3//这里又是该死的int3
0040D2ED8B95 516D4000mov edx,dword ptr ss:[ebp+406D51]//在这里f2下断,shift+f9运行,接着单步F8
0040D2F38BB5 416D4000mov esi,dword ptr ss:[ebp+406D41]
0040D2F903F2 add esi,edx
0040D2FBCC int3 //这里又是该死的int3
0040D2FC8B46 0Cmov eax,dword ptr ds:[esi+C]//在这里f2下断,shift+f9运行,接着单步F8
0040D2FF0BC0 or eax,eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D31653 push ebx
0040D317FF95 D96B4000call dword ptr ss:[ebp+406BD9]
0040D31DCC int3 //这里又是该死的int3
0040D31E8985 356D4000mov dword ptr ss:[ebp+406D35],eax//在这里f2下断,shift+f9运行,接着单步F8
0040D324C785 3D6D4000 00>mov dword ptr ss:[ebp+406D3D],0
0040D32ECC int3 //这里又是该死的int3
0040D32F8B95 516D4000mov edx,dword ptr ss:[ebp+406D51]//在这里f2下断,shift+f9运行,接着单步F8
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D339 /75 04 jnz short unpackme.0040D33F//这个jnz跳过了该死的int3所以我们不用管继续走
0040D33B |8B46 10 mov eax,dword ptr ds:[esi+10]
0040D33E |CCint3 //这里又是该死的int3
0040D33F \03C2add eax,edx; unpackme.00400000
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D36683C3 02 add ebx,2
0040D369CCint3 //这里又是该死的int3
0040D36A81E3 FFFFFF0F and ebx,0FFFFFFF //在这里f2下断,shift+f9运行,接着单步F8
0040D37053push ebx
0040D371FFB5 356D4000 push dword ptr ss:[ebp+406D35]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D3ED^\E9 3CFFFFFF jmp unpackme.0040D32E//这个跳转是向上的,我们要打断他直接在避开int3的地方f2下断,shift+f9打断他
0040D3F2CCint3 //这里又碰上改死的int3
0040D3F383C6 14 add esi,14 //我们在这里f2下断,接着shift+f9,这样就打断两向上的jmp和int3
0040D3F68B95 516D4000 mov edx,dword ptr ss:[ebp+406D51]
0040D3FC^ E9 FBFEFFFF jmp unpackme.0040D2FC//这个jmp时,我们就要用F4运行到所选的方法啦,让他运行到下一行
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D40E8B85 396D4000 mov eax,dword ptr ss:[ebp+406D39]
0040D4140385 516D4000 add eax,dword ptr ss:[ebp+406D51]
0040D41A8985 2B664000 mov dword ptr ss:[ebp+40662B],eax
0040D4208B0424mov eax,dword ptr ss:[esp]
0040D42364:67:A3 0000 mov dword ptr fs:[0],eax
0040D42883C4 08 add esp,8
0040D42B5Dpop ebp
0040D42C9Dpopfd
0040D42D61popad
0040D42E68 CC104000 push unpackme.004010CC //此时这里push把我们的oep压栈啦
0040D433C3retn //这里就是飞向我们的OEP啦
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //我们的光明之颠oep
004010CD8BECmov ebp,esp
004010CF83EC 44 sub esp,44
004010D256push esi
004010D3FF15 E0634000 call dword ptr ds:[4063E0] ; kernel32.GetCommandLineA
004010D98BF0mov esi,eax
004010DB8A00mov al,byte ptr ds:[eax]
004010DD3C 22 cmp al,22
004010DF75 13 jnz short unpackme.004010F4
004010E146inc esi
004010E28A06mov al,byte ptr ds:[esi]
004010E484C0test al,al
welsper 发表于 2009-8-16 14:04
在各位牛人面前小小补充一下
先下LoadLibraryA 3次,再下GetProcAddress,返回,可以看到取API地址的地方
0040D370    53              push ebx
0040D371    FFB5 356D4000   push dword ptr ss:[ebp+406D35]
0040D377    FF95 C26E4000   call dword ptr ss:[ebp+406EC2]           ; 1
0040D37D    80BD 326E4000 0>cmp byte ptr ss:[ebp+406E32],1
0040D384    75 5E           jnz short unpackme.0040D3E4
0040D386    3B85 0D6C4000   cmp eax,dword ptr ss:[ebp+406C0D]
0040D38C    75 08           jnz short unpackme.0040D396
0040D38E    8D85 40674000   lea eax,dword ptr ss:[ebp+406740]
0040D394    EB 4E           jmp short unpackme.0040D3E4
0040D396    3B85 1D6C4000   cmp eax,dword ptr ss:[ebp+406C1D]
0040D39C    75 08           jnz short unpackme.0040D3A6
0040D39E    8D85 026A4000   lea eax,dword ptr ss:[ebp+406A02]
0040D3A4    EB 3E           jmp short unpackme.0040D3E4
0040D3A6    3B85 ED6B4000   cmp eax,dword ptr ss:[ebp+406BED]
0040D3AC    75 08           jnz short unpackme.0040D3B6
0040D3AE    8D85 726A4000   lea eax,dword ptr ss:[ebp+406A72]
0040D3B4    EB 2E           jmp short unpackme.0040D3E4
0040D3B6    3B85 D16B4000   cmp eax,dword ptr ss:[ebp+406BD1]
0040D3BC    75 08           jnz short unpackme.0040D3C6
0040D3BE    8D85 256B4000   lea eax,dword ptr ss:[ebp+406B25]
0040D3C4    EB 1E           jmp short unpackme.0040D3E4
0040D3C6    3B85 F16B4000   cmp eax,dword ptr ss:[ebp+406BF1]
0040D3CC    75 08           jnz short unpackme.0040D3D6
0040D3CE    8D85 566B4000   lea eax,dword ptr ss:[ebp+406B56]
0040D3D4    EB 0E           jmp short unpackme.0040D3E4
0040D3D6    3B85 F96B4000   cmp eax,dword ptr ss:[ebp+406BF9]
0040D3DC    75 06           jnz short unpackme.0040D3E4
0040D3DE    8D85 F26A4000   lea eax,dword ptr ss:[ebp+406AF2]
0040D3E4    8907            mov dword ptr ds:[edi],eax
0040D3E6    8385 3D6D4000 0>add dword ptr ss:[ebp+406D3D],4
0040D3ED  ^ E9 3CFFFFFF     jmp unpackme.0040D32E
用D看下地址,大概是这个API要加密
0040D9D5  7C80B741  kernel32.GetModuleHandleA
0040D9D9  7C802446  kernel32.Sleep
0040D9DD  7C801D7B  kernel32.LoadLibraryA
0040D9E1  7C801AD4  kernel32.VirtualProtect
0040D9E5  7C8106D7  kernel32.CreateThread
0040D9E9  7C80C0F8  kernel32.ExitThread
0040D9ED  7C81CB12  kernel32.ExitProcess
0040D9F1  7C801A28  kernel32.CreateFileA
0040D9F5  7C80B56F  kernel32.GetModuleFileNameA
0040D9F9  7C831EDD  kernel32.DeleteFileA
0040D9FD  7C809BE7  kernel32.CloseHandle
0040DA01  7C801812  kernel32.ReadFile
0040DA05  7C80BB41  kernel32.lstrcmpiA
0040DA09  7C80FDCD  kernel32.GlobalAlloc
0040DA0D  7C80FCCF  kernel32.GlobalFree
0040DA11  7C8286EE  kernel32.CopyFileA
0040DA15  7C810B17  kernel32.GetFileSize
0040DA19  7C810E27  kernel32.WriteFile
0040DA1D  7C80934A  kernel32.GetTickCount
0040DA21  7C821982  kernel32.OpenFile
0040DA25  7C810C2E  kernel32.SetFilePointer

0040D384   /75 5E           jnz short unpackme.0040D3E4
改为
0040D384   /EB 5E           jmp short unpackme.0040D3E4
就可以跳过了

重新来过,先LoadLibraryA 一次,在ctrl+g 到0040D384 修改代码并运行到此,再f2在text段下断点就到oep了
mao 发表于 2010-7-19 14:34
好好好好好好好
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-2 12:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表