└文章标题┐:Obsidium 1.0.0.69标准方式加壳 ->脱壳修复
└破文作者┐:大菜一号
└破解对象┐:hello world
└下载地址┐:附件
└对象大小┐:不知
└加壳方式┐:Obsidium 1.0.0
└保护方式┐:Obsidium 1.0.0
└编写语言┐:vc
└使用工具┐:od,REC
└破解平台┐:xp
└破解声明┐:`
----------------------------------------------------------------------------------
└破解过程┐:
闲来无事,脱个壳!
突然发现,脱壳也挺好玩的,呵~去看雪主页上看了看,选择了Obsidium这个壳,因为介绍上写着“强度中等” - -
还是一个自己写的hello world,本来不打算拿它来加壳的,不过这款壳的兼容好像有点问题,拿一些其他工具进行加壳,都无法运行!
好了,加壳之后,正常运行,不过比hello world多了一个对话框,因为这款壳我没有注册!- -
用od载入,还是老方法,用最后一次异常找oep!忽略掉除了“非法访问内存异常”之外的所有异常,f9运行!
.....
程序13次异常之后运行,ctrl+f2重新载入,到达第12次异常时,堆栈说:
0012FE54 009053D9 SE处理程序 <-脱壳者,请去9053d9这个地址上下断
00401046 FF db FF
00401047 15 db 15
00401048 14 db 14
00401049 50 db 50 ; CHAR 'P'
0040104A 40 db 40 ; CHAR '@'
0040104B 00 db 00
0040104C 33 db 33 ; CHAR '3'
0040104D D2 db D2
00401007 . 68 30 60 40 0>ascii "h0`@",0
0040100C . 6A 00 push 0
0040100E . FF15 9C504000 call dword ptr [40509C]
00401014 . 33C0 xor eax, eax
00401016 . EB FF jmp short 00401017
00401018 . 15 B0A04000 adc eax, 0040A0B0
0040101D . C2 1000 retn 10
00401020 E1 db E1 <-这里开始的Stolen Code
00401021 8B db 8B
00401022 69 db 69 ; CHAR 'i'
00401023 C7 db C7
00401024 FD db FD
00401025 56 db 56 ; CHAR 'V'
00401026 03 db 03
00401027 89 db 89
00401028 CF db CF
00401029 DB db DB
0040102A 83 db 83
0040102B E2 db E2
0040102C AD db AD
0040102D 60 db 60 ; CHAR '`'
0040102E D6 db D6
0040102F 32 db 32 ; CHAR '2'
00401030 17 db 17
00401031 0B db 0B
00401032 B8 db B8
00401033 69 db 69 ; CHAR 'i'
00401034 D8 db D8
00401035 09 db 09
00401036 97 db 97
00401037 EC db EC
00401038 4C db 4C ; CHAR 'L'
00401039 9F db 9F
0040103A DE db DE
0040103B A0 db A0
0040103C A0 db A0
0040103D 6D db 6D ; CHAR 'm'
0040103E 3E db 3E ; CHAR '>'
0040103F 8C db 8C
00401040 . 394B 8A cmp dword ptr [ebx-76], ecx
00401043 . B5 9B mov ch, 9B
00401045 . 8BFF mov edi, edi
00401047 . 15 14504000 adc eax, 00405014
0040104C . 33D2 xor edx, edx
0040104E . 8AD4 mov dl, ah
00401050 . 8915 F4844000 mov dword ptr [4084F4], edx
00401056 . 8BC8 mov ecx, eax
00401058 . 81E1 FF000000 and ecx, 0FF
0040105E . 890D F0844000 mov dword ptr [4084F0], ecx
00401064 . C1E1 08 shl ecx, 8
00401067 . 03CA add ecx, edx
00401069 . 890D EC844000 mov dword ptr [4084EC], ecx
0040106F . C1E8 10 shr eax, 10
00401072 . A3 E8844000 mov dword ptr [4084E8], eax
00401077 . 33F6 xor esi, esi
00401079 . 56 push esi
0040107A . E8 160B0000 call 00401B95
0040107F . 59 pop ecx
00401080 . 85C0 test eax, eax
00401082 . 75 08 jnz short 0040108C
00401084 . 6A 1C push 1C
00401086 . E8 B0000000 call 0040113B
0040108B . 59 pop ecx
0040108C > 8975 FC mov dword ptr [ebp-4], esi
0040108F . E8 E1070000 call 00401875
00401094 . FF15 10504000 call dword ptr [405010]
<-这边,vc程序的GetVersion一般都在这里,机器码为FF 15,从这里以上的到oep处的字节全被抽掉了!
004013FB >/$ 55 push ebp
004013FC |. 8BEC mov ebp, esp
004013FE |. 6A FF push -1
00401400 |. 68 B8404000 push 004040B8
00401405 |. 68 301F4000 push 00401F30 ; SE 处理程序安装
0040140A |. 64:A1 0000000>mov eax, dword ptr fs:[0]
00401410 |. 50 push eax
00401411 |. 64:8925 00000>mov dword ptr fs:[0], esp
00401418 |. 83EC 58 sub esp, 58
0040141B |. 53 push ebx
0040141C |. 56 push esi
0040141D |. 57 push edi
0040141E |. 8965 E8 mov dword ptr [ebp-18], esp
00401421 |. FF15 2C404000 call dword ptr [<&KERNEL32.GetVersion>;<-这句以上的,
00401020 55 push ebp
00401021 8BEC mov ebp, esp
00401023 6A FF push -1
00401025 68 B8404000 push 004040B8
0040102A 68 301F4000 push 00401F30
0040102F 64:A1 0000000>mov eax, dword ptr fs:[0]
00401035 50 push eax
00401036 64:8925 00000>mov dword ptr fs:[0], esp
0040103D 83EC 58 sub esp, 58
00401040 53 push ebx
00401041 56 push esi
00401042 57 push edi
00401043 8965 E8 mov dword ptr [ebp-18], esp
00401046 ? FF15 14504000 call dword ptr [405014] <-这句以上的都是修复后的oep
00401046 ? FF15 14504000 call dword ptr [405014]<-GetVersion函数调用,证明程序调用系统里的一个函数,可以确定一个iat的地址
00904700 893E mov dword ptr [esi], edi <-断在这里
00904702 EB 01 jmp short 00904705
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!