能力值:
(RANK:350 )
|
-
-
2 楼
文章精彩,看完有收获~
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
经典.
|
能力值:
( LV9,RANK:3410 )
|
-
-
4 楼
凡事都有相对性
...
算了,不说了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
很受启发
|
能力值:
( LV9,RANK:1130 )
|
-
-
6 楼
哇楼主辛苦那。打了这么多字我得慢慢欣赏才行。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
这不写着FSG的壳么.......
|
能力值:
( LV13,RANK:970 )
|
-
-
8 楼
意思是说“学数学重要的不是学它的公式和算法,而是学它的思想”,不要误会
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
还是有收获的
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
需要慢慢体会。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
有收获的,说出了原理!!!!
谢谢!!!
|
能力值:
( LV9,RANK:250 )
|
-
-
12 楼
还不错的
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
好象不太硬的,OD的跟踪到SFX入口就能找到oep,不过我的必须选中字节方式跟踪到sfx入口,然后跟踪过程中再改为停在自解压入口一会就到oep了,手动输入IAT地址和大小,重建后也正常运行 脱壳后多了一个段.mackt
作者的PE功底深厚,文章也很有参考意义,佩服佩服 期待着介绍解密程序资源
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
受教了!!!!!!~~~~~~~~~~~
|
能力值:
( LV13,RANK:530 )
|
-
-
15 楼
LoadLibrary一般来说不好模拟。设计到HMODULE的问题
而GetProcAddress是可以模拟的
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
多好的文章啊!期待着介绍解密程序资源......。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
学习了~~
|
能力值:
( LV4,RANK:50 )
|
-
-
18 楼
Good,很有新意。谢谢分享!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
楼主这个keygen是变形的fsg2.0,怀疑IAT是改造过的。
我这里有一个标准的helloworld程序,用fsg2.0加壳的:
用OD载入:
00400154 > 8725 48FF4200 xchg [42FF48], esp 0040015A 61 popad 0040015B 94 xchg eax, esp 0040015C 55 push ebp 0040015D A4 movs byte ptr es:[edi], byte ptr [esi> 0040015E B6 80 mov dh, 80 00400160 FF13 call [ebx] 00400162 ^ 73 F9 jnb short 0040015D 00400164 33C9 xor ecx, ecx 00400166 FF13 call [ebx] 00400168 73 16 jnb short 00400180 0040016A 33C0 xor eax, eax 0040016C FF13 call [ebx] 0040016E 73 1F jnb short 0040018F 00400170 B6 80 mov dh, 80 00400172 41 inc ecx 00400173 B0 10 mov al, 10 00400175 FF13 call [ebx] 00400177 12C0 adc al, al 00400179 ^ 73 FA jnb short 00400175 0040017B 75 3A jnz short 004001B7 0040017D AA stos byte ptr es:[edi] 0040017E ^ EB E0 jmp short 00400160 00400180 FF53 08 call [ebx+8] 00400183 02F6 add dh, dh 00400185 83D9 01 sbb ecx, 1 00400188 75 0E jnz short 00400198 0040018A FF53 04 call [ebx+4] 0040018D EB 24 jmp short 004001B3 0040018F AC lods byte ptr [esi] 00400190 D1E8 shr eax, 1 00400192 74 2D je short 004001C1 00400194 13C9 adc ecx, ecx 00400196 EB 18 jmp short 004001B0 00400198 91 xchg eax, ecx 00400199 48 dec eax 0040019A C1E0 08 shl eax, 8 0040019D AC lods byte ptr [esi] 0040019E FF53 04 call [ebx+4] 004001A1 3B43 F8 cmp eax, [ebx-8] 004001A4 73 0A jnb short 004001B0 004001A6 80FC 05 cmp ah, 5 004001A9 73 06 jnb short 004001B1 004001AB 83F8 7F cmp eax, 7F 004001AE 77 02 ja short 004001B2 004001B0 41 inc ecx 004001B1 41 inc ecx 004001B2 95 xchg eax, ebp 004001B3 8BC5 mov eax, ebp 004001B5 B6 00 mov dh, 0 004001B7 56 push esi 004001B8 8BF7 mov esi, edi 004001BA 2BF0 sub esi, eax 004001BC F3:A4 rep movs byte ptr es:[edi], byte ptr> 004001BE 5E pop esi 004001BF ^ EB 9F jmp short 00400160 004001C1 5E pop esi 004001C2 AD lods dword ptr [esi] 004001C3 97 xchg eax, edi 004001C4 AD lods dword ptr [esi] 004001C5 50 push eax 004001C6 FF53 10 call [ebx+10] 004001C9 95 xchg eax, ebp 004001CA 8B07 mov eax, [edi] 004001CC 40 inc eax 004001CD ^ 78 F3 js short 004001C2 004001CF 75 03 jnz short 004001D4 004001D1 FF63 0C jmp [ebx+C] 004001D4 50 push eax 004001D5 55 push ebp 004001D6 FF53 14 call [ebx+14] 004001D9 AB stos dword ptr es:[edi] 004001DA ^ EB EE jmp short 004001CA 004001DC 33C9 xor ecx, ecx 004001DE 41 inc ecx 004001DF FF13 call [ebx] 004001E1 13C9 adc ecx, ecx 004001E3 FF13 call [ebx] 004001E5 ^ 72 F8 jb short 004001DF 004001E7 C3 retn
上面是入口的代码,仔细观察跳转的几个语句,可以跳出这个循环的只有下面2个
004001D1 FF63 0C jmp [ebx+C] ;未知
004001EA /75 05 jnz short 004001F1 ;跳至 retn,有可能出去。
在这2语句上面F4实验,只有004001D1 jmp [ebx+C]是大跳转,然后F7一次到达OEP:
004017B0 55 push ebp ; kernel32.7C800000 004017B1 8B db 8B 004017B2 EC db EC 004017B3 6A db 6A ; CHAR 'j' 004017B4 FF db FF
然后dump,fix,脱壳完毕,运行程序正常。 我把这个程序发出来,你再看一下,和keygen有啥区别,你的方法我不会用。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
呵呵,对我们这些菜鸟有用极了,感谢楼主~~~
|
能力值:
( LV4,RANK:50 )
|
-
-
21 楼
“学数学重要的不是学它的公式和算法,而是学它的思想”
深奥!学习!有收获!
|
能力值:
( LV12,RANK:240 )
|
-
-
22 楼
顶 深入浅出
|
能力值:
( LV9,RANK:570 )
|
-
-
23 楼
这两个壳是完全一样的,只是否154那句中内存地址不同,只说明要弹回寄存器的值存放的地址不同。
1EA的那个jnz 4001F1是跳不出去的,它是160: call [ebx]的呼叫子程序,前面那个1DC―1E7也是call [ebx+?]的呼叫子程序,而且有几个入口。一个子程序有多个入口,好象只有汇编才能实现。
|
能力值:
(RANK:570 )
|
-
-
24 楼
压缩壳。。。
|
能力值:
( LV12,RANK:250 )
|
-
-
25 楼
强烈支持
本人认为论坛更需要的此类文章,而不是脱具体壳的脱文,相信把基础搞好,才是真正的收获,今后不论壳如何变化,象我们这样的菜鸟们也不至于跟在高手的屁股后面等他们把技术搞出来后发表个脱文,然后我们按部就班,也只有此类文章才不会导致论坛两极分化!!!
也希望高手们多出此类文章!!!
我相信以高手们的技术写此类文章应该不算难,但是我看到大家的文章都是具体针对某些壳,基础方面讲的相对少!!!!(高手们不要向我扔石头哦!!!)
|
|
|