第十四章 讲解如何去除和锁定网络验证暗装
讲解如何去除和锁定网络验证暗装
暗桩,通常被运用在网络验证过后的功能里或者启动时的验证里,长期使用,也没有一个固定的特性,所以需要我们大家有相应的判断能力,这里我们将以VB的某程序做为一个暗装的讲解,主要讲解的就是VB的暗装以及部分暗装的去除方法
其实在第十三课我们所解的那个程序,他呼出时,所出现的那个错误也就是暗装所导致的
还有我们所接触的那个街头篮球外挂也是暗装所导致的
当我们破解了程序发现没有功能,那么就是暗装导致的
当我们破解程序突然间关机,那么就是暗装导致的
当我们破解程序突然被格盘,那么就是暗装导致的
当我们破解时,出现暗装那么是系统错误或者内存错误,都有可能,但是也并不是绝对
部分程序他是由各自系统不兼容所导致,所以在选择破解程序时遇见暗装可以给多几个人测试
是否正常
第一层代码像C++、
100CD243 >/$ 55 push ebp
100CD244 |. 8BEC mov ebp,esp
100CD246 |. 6A FF push -0x1
100CD248 |. 68 406F0F10 push wed.100F6F40
100CD24D |. 68 80CF0C10 push wed.100CCF80 ; SE 处理程序安装
100CD252 |. 64:A1 0000000>mov eax,dword ptr fs:[0]
100CD258 |. 50 push eax
100CD259 |. 64:8925 00000>mov dword ptr fs:[0],esp
100CD260 |. 83EC 58 sub esp,0x58
100CD263 |. 53 push ebx
100CD264 |. 56 push esi
100CD265 |. 57 push edi ; ntdll.7C930738
100CD266 |. 8965 E8 mov [local.6],esp
100CD269 |. FF15 88110F10 call dword ptr ds:[<&KERNEL32.GetVersion>; kernel32.GetVersion
100CD26F |. 33D2 xor edx,edx ; ntdll.KiFastSystemCallRet
100CD271 |. 8AD4 mov dl,ah
100CD273 |. 8915 30860F10 mov dword ptr ds:[0x100F8630],edx ; ntdll.KiFastSystemCallRet
第二层DIE给的提示是DELPHI
运行附加后发现是VB
C:\WINDOWS\system32\msvbvm60.dll
C:\WINDOWS\system32\VB6CHS.DLL
第二层极为相似DELPHI入口
1000423C > 55 push ebp
1000423D 8BEC mov ebp,esp
1000423F 83C4 F0 add esp,-0x10
10004242 53 push ebx
10004243 56 push esi
10004244 B8 E4410010 mov eax,UnPacked.100041E4 ; \n
10004249 E8 3AE1FFFF call UnPacked.10002388
1000424E 33C0 xor eax,eax
10004250 55 push ebp
10004251 68 11440010 push UnPacked.10004411
10004256 64:FF30 push dword ptr fs:[eax]
10004259 64:8920 mov dword ptr fs:[eax],esp
1000425C EB 08 jmp short UnPacked.10004266
第三次脱壳载入程序后,明显发现是VB编译
00403C9E .- FF25 88134000 jmp dword ptr ds:[<&MSVBVM60.__vbaI4ErrV>; msvbvm60.__vbaI4ErrVar
00403CA4 .- FF25 88114000 jmp dword ptr ds:[<&MSVBVM60.#561>] ; msvbvm60.rtcIsNumeric
00403CAA .- FF25 BC104000 jmp dword ptr ds:[<&MSVBVM60.__vbaVarXor>; msvbvm60.__vbaVarXor
00403CB0 .- FF25 F0114000 jmp dword ptr ds:[<&MSVBVM60.EVENT_SINK_>; msvbvm60.EVENT_SINK_QueryInterface
00403CB6 .- FF25 64114000 jmp dword ptr ds:[<&MSVBVM60.EVENT_SINK_>; msvbvm60.EVENT_SINK_AddRef
00403CBC .- FF25 CC114000 jmp dword ptr ds:[<&MSVBVM60.EVENT_SINK_>; msvbvm60.EVENT_SINK_Release
00403CC2 .- FF25 00114000 jmp dword ptr ds:[<&MSVBVM60.#304>] ; msvbvm60.GetMemVar
00403CC8 .- FF25 E4114000 jmp dword ptr ds:[<&MSVBVM60.#310>] ; msvbvm60.PutMemVar
00403CCE .- FF25 04124000 jmp dword ptr ds:[<&MSVBVM60.#312>] ; msvbvm60.SetMemVar
00403CD4 $- FF25 E4124000 jmp dword ptr ds:[<&MSVBVM60.#100>] ; msvbvm60.ThunRTMain
00403CDA 00 db 00
00403CDB 00 db 00
00403CDC > $ 68 B8464000 push Cracked.004046B8
00403CE1 . E8 EEFFFFFF call
00403CE6 . 0000 add byte ptr ds:[eax],al
00403CE8 . 0000 add byte ptr ds:[eax],al
00403CEA . 0000 add byte ptr ds:[eax],al
00403CEC . 3000 xor byte ptr ds:[eax],al
00403CEE . 0000 add byte ptr ds:[eax],al
00403CF0 . 3800 cmp byte ptr ds:[eax],al
00403CF2 . 0000 add byte ptr ds:[eax],al
00403CF4 . 0000 add byte ptr ds:[eax],al
00403CF6 . 0000 add byte ptr ds:[eax],al
00403CF8 C7 db C7
00403CF9 1C db 1C
00403CFA 1B db 1B
00403CFB 2F db 2F ; CHAR ‘/’
00403CFC A0 db A0
0012F218 001B4BD4 UNICODE “?r=8750514&sn2=C1B891369B&id=11111111&v=2032&a=l”
ds:[0040128C]=73519CAF (msvbvm60.__vbaNew2)
在VB中这个API是不可以NOP的,否则将引起下标越界
00596A65 . 8B95 3CFEFFFF mov edx,dword ptr ss:[ebp-0x1C4]
00596A6B . 8951 0C mov dword ptr ds:[ecx+0xC],edx ; ntdll.KiFastSystemCallRet
00596A6E . FF97 B0020000 call dword ptr ds:[edi+0x2B0] ; msvbvm60.73544348
跟踪到这里时发现调用出外挂界面
当VB出现循环调用一个地址时,可以采用NOP把他解决
当VB出现循环报错时,可以采用NOP把他解决
不要被工具所迷惑,所有程序的入口点,和程序的代码特征需要自己背熟和长期的磨练培养