-
-
[旧帖] [原创]两种方法“以自己的名字注册ASProtect加壳程序” 0.00雪花
-
发表于: 2009-9-5 12:24 981
-
---------------------------------------------------------------------------------
以壳解壳脱ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov之Crystal Button v2.50+用自己的名字注册
这个很简单。。拿来练练手吧
********************************************************************************************
OD设置忽略除了内存访问之外的所有异常!
00401000 cry> 68 01009000 push crysb.00900001 //入口!
00401005 E8 01000000 call crysb.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C EB 6E jmp short crysb.0040107C
0040100E C2 6873 retn 7368
Shift+F9走!第23次的时候第2次看到硬盘指纹。。。
016D46A5 3100 xor dword ptr ds:[eax],eax //第23次
016D46A7 EB 01 jmp short 016D46AA
016D46A9 68 648F0500 push 58F64
016D46AE 0000 add byte ptr ds:[eax],al
016D46B0 00EB add bl,ch
堆栈提示:
0012FF50 016C0000
0012FF54 016A0000
0012FF58 016D4138
0012FF5C 016E94E4 ASCII "6uob9ACQoUA="
0012FF60 016D3616 返回到 016D3616 来自 016C2524
0012FF64 016A0000
在CODE段下断,Shift+F9运行!
004085E0 8B4424 04 mov eax,dword ptr ss:[esp+4] //到这里!
004085E4 A3 98324C00 mov dword ptr ds:[4C3298],eax //[4C3298]是保存注册地址的
004085E9 C2 0400 retn 4
004085E4 A3 98324C00 mov dword ptr ds:[4C3298],eax
继续Shift+F9运行,第26次到达最后一次异常!
016D39EC 3100 xor dword ptr ds:[eax],eax //最后一次异常
016D39EE 64:8F05 0000000>pop dword ptr fs:[0]
016D39F5 58 pop eax
016D39F6 833D B07E6D01 0>cmp dword ptr ds:[16D7EB0],0
016D39FD 74 14 je short 016D3A13
016D39FF 6A 0C push 0C
016D3A01 B9 B07E6D01 mov ecx,16D7EB0
016D3A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
016D3A09 BA 04000000 mov edx,4
016D3A0E E8 2DD1FFFF call 016D0B40
016D3A13 FF75 FC push dword ptr ss:[ebp-4]
016D3A16 FF75 F8 push dword ptr ss:[ebp-8]
016D3A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
016D3A1C 8338 00 cmp dword ptr ds:[eax],0
016D3A1F 74 02 je short 016D3A23
016D3A21 FF30 push dword ptr ds:[eax]
016D3A23 FF75 F0 push dword ptr ss:[ebp-10]
016D3A26 FF75 EC push dword ptr ss:[ebp-14]
016D3A29 C3 retn //F2断下来,注意堆栈!
堆栈提示:
0012FF5C 016E7E9C
0012FF60 00400000 crysb.00400000
0012FF64 574F42C8
0012FF68 0012FFA4 =======>0012FF68
0012FF6C 016C0000
先要到达retn
0013FF68 0013FFA4
hr 0012FF68,F9运行!
016E8019 /EB 44 jmp short 016E805F //到这里,删除断点,F7一下!
016E801B |EB 01 jmp short 016E801E
016E801D |9A 51579CFC BF0>call far 00BF:FC9C5751
016E8024 |0000 add byte ptr ds:[eax],al
016E8026 |00B9 00000000 add byte ptr ds:[ecx],bh
016E802C |F3:AA rep stos byte ptr es:[edi]
016E805F 03C3 add eax,ebx //到这里,F8一下!
016E8061 BB C4000000 mov ebx,0C4 //这里就是我们以壳解壳的OEP=012E8061
016E8066 0BDB or ebx,ebx
016E8068 75 07 jnz short 016E8071
016E806A 894424 1C mov dword ptr ss:[esp+1C],eax
016E806E 61 popad
AsprDbgr 配合 ImportREC
00E769A9 BB C4000000 mov ebx,0C4
汗啊,要减去基址 00A769A9 这个还每次都不同 我估计是真正stolen code 上面的一段都可以
dump的一段里面
打开LordPE,完全DUMP这个进程!再区域脱壳Region016E0000-016EC000.dmp(016E0000-00400000=012E0000)
组装Unpack.exe
请出AsprDbgr 修复输入表!
AsprDbgr v1.0beta (:P) Made by me... Manko.
iEP=401000 (C:\Program Files\CrystalButton2\crysb.exe)
IAT Start: 492000
End: 492730
Length: 730
IATentry 492208 = 16D1CD8 resolved as GetCommandLineA
IATentry 492224 = 16D1C64 resolved as GetModuleHandleA
IATentry 492244 = 16D17A4 resolved as GetProcAddress
IATentry 492288 = 16D1CC8 resolved as LockResource
IATentry 492298 = 16D1C8C resolved as GetVersion
IATentry 492320 = 16D1CB8 resolved as GetCurrentProcess
12 invalid entries erased.
Dip-Table at adress: 16D7AB4
0 4085E0 0 0 0 0 0 0 0 0 0 0 0 0
Last SEH passed. (16D39EE) Searching for signatures. Singlestepping to OEP!
Call + OEP-jump-setup at: 16E6049 ( Code: E8000000 5D81ED )
Mutated, stolen bytes at: 16E6095 ( Code: EB02CD20 EB02CD20 )
Erase of stolen bytes at: 16E5FF8 ( Code: 9CFCBF37 606E01B9 )
Repz ... found. Skipping erase of stolen bytes. ;)
possible (temp)OEP: 4364B6 (Reached from preOEP: 16E6009)
打开IR1.6,在OEP处添0364B6,获取输入表全部有效--再把OEP改成012E8061--修复抓取文件!
呵呵~可以运行,,现在我们来Pre-Dip注册一下~~
OD载入Unpack_.exe
还记得4C3298?
DD 4C3298
004C3298 016C3861 Unpack_.016C3861
004C329C 6D6F6F7A
004C32A0 00000000
004C32A4 00007963
找块空地。。我找004DFFF4写入******
现在修改成
004C3298 004DFFF4 ASCII "******"
004C329C 6D6F6F7A
004C32A0 00000000
004C32A4 00007963
因为没有试用标志。。。就不用改了
现在复制可执行文本--覆盖保存!
运行看看。。。呵呵已经注册给******了。。
抓个图留恋吧。。。到此为止。。。
***********
Stolen Code
push ebp
mov ebp,esp
push -1
push 49A4A8
push 4363B8
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
sub esp,58
push ebx
push esi
push edi
mov dword ptr ss:[ebp-18],esp
55 8B EC 6A FF 68 A8 A4 49 00 68 B8 63 43 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58
53 56 57 89 65 E8
全F7下来
00E77B67 55 push ebp
00E77B68 8BEC mov ebp,esp
00E77B6A 6A FF push -1
00E77B6C 68 A8A44900 push 49A4A8
00E77B71 68 B8634300 push 4363B8
00E77B76 64:A1 00000000 mov eax,dword ptr fs:[0]
00E77B7F 50 push eax
00E77B80 64:8925 0000000>mov dword ptr fs:[0],esp
00E77B87 83EC 58 sub esp,58
00E77B8D 53 push ebx
00E77B91 56 push esi
00E77B95 57 push edi ; ntdll.7C930208
00E77B96 8965 E8 mov dword ptr ss:[ebp-18],esp
截屏程序是对比 C++ 入口特征的
这里用等级一加插件修复
以壳解壳脱ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov之Crystal Button v2.50+用自己的名字注册
这个很简单。。拿来练练手吧
********************************************************************************************
OD设置忽略除了内存访问之外的所有异常!
00401000 cry> 68 01009000 push crysb.00900001 //入口!
00401005 E8 01000000 call crysb.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C EB 6E jmp short crysb.0040107C
0040100E C2 6873 retn 7368
Shift+F9走!第23次的时候第2次看到硬盘指纹。。。
016D46A5 3100 xor dword ptr ds:[eax],eax //第23次
016D46A7 EB 01 jmp short 016D46AA
016D46A9 68 648F0500 push 58F64
016D46AE 0000 add byte ptr ds:[eax],al
016D46B0 00EB add bl,ch
堆栈提示:
0012FF50 016C0000
0012FF54 016A0000
0012FF58 016D4138
0012FF5C 016E94E4 ASCII "6uob9ACQoUA="
0012FF60 016D3616 返回到 016D3616 来自 016C2524
0012FF64 016A0000
在CODE段下断,Shift+F9运行!
004085E0 8B4424 04 mov eax,dword ptr ss:[esp+4] //到这里!
004085E4 A3 98324C00 mov dword ptr ds:[4C3298],eax //[4C3298]是保存注册地址的
004085E9 C2 0400 retn 4
004085E4 A3 98324C00 mov dword ptr ds:[4C3298],eax
继续Shift+F9运行,第26次到达最后一次异常!
016D39EC 3100 xor dword ptr ds:[eax],eax //最后一次异常
016D39EE 64:8F05 0000000>pop dword ptr fs:[0]
016D39F5 58 pop eax
016D39F6 833D B07E6D01 0>cmp dword ptr ds:[16D7EB0],0
016D39FD 74 14 je short 016D3A13
016D39FF 6A 0C push 0C
016D3A01 B9 B07E6D01 mov ecx,16D7EB0
016D3A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
016D3A09 BA 04000000 mov edx,4
016D3A0E E8 2DD1FFFF call 016D0B40
016D3A13 FF75 FC push dword ptr ss:[ebp-4]
016D3A16 FF75 F8 push dword ptr ss:[ebp-8]
016D3A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
016D3A1C 8338 00 cmp dword ptr ds:[eax],0
016D3A1F 74 02 je short 016D3A23
016D3A21 FF30 push dword ptr ds:[eax]
016D3A23 FF75 F0 push dword ptr ss:[ebp-10]
016D3A26 FF75 EC push dword ptr ss:[ebp-14]
016D3A29 C3 retn //F2断下来,注意堆栈!
堆栈提示:
0012FF5C 016E7E9C
0012FF60 00400000 crysb.00400000
0012FF64 574F42C8
0012FF68 0012FFA4 =======>0012FF68
0012FF6C 016C0000
先要到达retn
0013FF68 0013FFA4
hr 0012FF68,F9运行!
016E8019 /EB 44 jmp short 016E805F //到这里,删除断点,F7一下!
016E801B |EB 01 jmp short 016E801E
016E801D |9A 51579CFC BF0>call far 00BF:FC9C5751
016E8024 |0000 add byte ptr ds:[eax],al
016E8026 |00B9 00000000 add byte ptr ds:[ecx],bh
016E802C |F3:AA rep stos byte ptr es:[edi]
016E805F 03C3 add eax,ebx //到这里,F8一下!
016E8061 BB C4000000 mov ebx,0C4 //这里就是我们以壳解壳的OEP=012E8061
016E8066 0BDB or ebx,ebx
016E8068 75 07 jnz short 016E8071
016E806A 894424 1C mov dword ptr ss:[esp+1C],eax
016E806E 61 popad
AsprDbgr 配合 ImportREC
00E769A9 BB C4000000 mov ebx,0C4
汗啊,要减去基址 00A769A9 这个还每次都不同 我估计是真正stolen code 上面的一段都可以
dump的一段里面
打开LordPE,完全DUMP这个进程!再区域脱壳Region016E0000-016EC000.dmp(016E0000-00400000=012E0000)
组装Unpack.exe
请出AsprDbgr 修复输入表!
AsprDbgr v1.0beta (:P) Made by me... Manko.
iEP=401000 (C:\Program Files\CrystalButton2\crysb.exe)
IAT Start: 492000
End: 492730
Length: 730
IATentry 492208 = 16D1CD8 resolved as GetCommandLineA
IATentry 492224 = 16D1C64 resolved as GetModuleHandleA
IATentry 492244 = 16D17A4 resolved as GetProcAddress
IATentry 492288 = 16D1CC8 resolved as LockResource
IATentry 492298 = 16D1C8C resolved as GetVersion
IATentry 492320 = 16D1CB8 resolved as GetCurrentProcess
12 invalid entries erased.
Dip-Table at adress: 16D7AB4
0 4085E0 0 0 0 0 0 0 0 0 0 0 0 0
Last SEH passed. (16D39EE) Searching for signatures. Singlestepping to OEP!
Call + OEP-jump-setup at: 16E6049 ( Code: E8000000 5D81ED )
Mutated, stolen bytes at: 16E6095 ( Code: EB02CD20 EB02CD20 )
Erase of stolen bytes at: 16E5FF8 ( Code: 9CFCBF37 606E01B9 )
Repz ... found. Skipping erase of stolen bytes. ;)
possible (temp)OEP: 4364B6 (Reached from preOEP: 16E6009)
打开IR1.6,在OEP处添0364B6,获取输入表全部有效--再把OEP改成012E8061--修复抓取文件!
呵呵~可以运行,,现在我们来Pre-Dip注册一下~~
OD载入Unpack_.exe
还记得4C3298?
DD 4C3298
004C3298 016C3861 Unpack_.016C3861
004C329C 6D6F6F7A
004C32A0 00000000
004C32A4 00007963
找块空地。。我找004DFFF4写入******
现在修改成
004C3298 004DFFF4 ASCII "******"
004C329C 6D6F6F7A
004C32A0 00000000
004C32A4 00007963
因为没有试用标志。。。就不用改了
现在复制可执行文本--覆盖保存!
运行看看。。。呵呵已经注册给******了。。
抓个图留恋吧。。。到此为止。。。
***********
Stolen Code
push ebp
mov ebp,esp
push -1
push 49A4A8
push 4363B8
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
sub esp,58
push ebx
push esi
push edi
mov dword ptr ss:[ebp-18],esp
55 8B EC 6A FF 68 A8 A4 49 00 68 B8 63 43 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58
53 56 57 89 65 E8
全F7下来
00E77B67 55 push ebp
00E77B68 8BEC mov ebp,esp
00E77B6A 6A FF push -1
00E77B6C 68 A8A44900 push 49A4A8
00E77B71 68 B8634300 push 4363B8
00E77B76 64:A1 00000000 mov eax,dword ptr fs:[0]
00E77B7F 50 push eax
00E77B80 64:8925 0000000>mov dword ptr fs:[0],esp
00E77B87 83EC 58 sub esp,58
00E77B8D 53 push ebx
00E77B91 56 push esi
00E77B95 57 push edi ; ntdll.7C930208
00E77B96 8965 E8 mov dword ptr ss:[ebp-18],esp
截屏程序是对比 C++ 入口特征的
这里用等级一加插件修复
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
看原图
赞赏
雪币:
留言: