📄 crack32.txt
字号:
幻影v1.5b3脱壳分析笔记之二
[作者]: ljttt
[日期]: 2000-09-15
以上是一段被我处理掉的代码,从这里开始分析
00013381: 5E pop esi
00013382: E800000000 call 00013387 <---JMP
00013387: 5D pop ebp <---获得 EBP = 413387
00013388: 8BD5 mov edx,ebp
***********说明以后的一段代码常以EBP做为基地址**************
0001338A: 81EDD4A64000 sub ebp,0040A6D4 <---EBP=413387-40A6D4 = 8CB3
00013390: FA cli
00013391: 58 pop eax
00013392: 80E401 and ah,01
00013395: 32C0 xor al,al
00013397: BE09A74000 mov esi,0040A709
0001339C: 03F5 add esi,ebp
0001339E: B946160000 mov ecx,00001646
000133A3: 03F1 add esi,ecx
000133A5: 4E dec esi
000133A6: 90 nop
000133A7: 90 nop
000133A8: 90 nop
000133A9: 90 nop
000133AA: 90 nop
000133AB: 90 nop
000133AC: 90 nop
000133AD: 90 nop
000133AE: 90 nop
000133AF: 90 nop
000133B0: FA cli
000133B1: 6681BD09A740009090 cmp word ptr [ebp+0040A709],9090
000133BA: 75FE jnz 000133BA
000133BC: 90 nop
000133BD: 90 nop
000133BE: 90 nop
000133BF: 2B95CBB24000 sub edx,dword ptr [ebp+0040B2CB]
000133C5: 81EA87530000 sub edx,00005387
000133CB: 8995D3B24000 mov dword ptr [ebp+0040B2D3],edx
********此处调用加载各个函数库****************** ID:CALL000146AD
000133D1: E8D7120000 call 000146AD <---加载函数库
000133D6: 83F800 cmp eax,00000000
000133D9: 7520 jnz 000133FB <---成功跳走
****************显示Dial.dll加载失败,并退出程序
000133DB: B8C0B94000 mov eax,0040B9C0
000133E0: 03C5 add eax,ebp
000133E2: BBC2B94000 mov ebx,0040B9C2
000133E7: 03DD add ebx,ebp
000133E9: 6A30 push 00000030
000133EB: 50 push eax
000133EC: 53 push ebx
000133ED: 6A00 push 00000000
000133EF: FF9500BC4000 call dword ptr [ebp+0040BC00] <---MessageBoxA
000133F5: FF956CBF4000 call dword ptr [ebp+0040BF6C] <---ExitProcess
000133FB: 8B8DF2B94000 mov ecx,dword ptr [ebp+0040B9F2] <---跳到此处
********申请内存**********
00013401: 83C120 add ecx,00000020
00013404: 51 push ecx
00013405: 6A40 push 00000040
00013407: 6800201000 push 00102000
0001340C: 51 push ecx
0001340D: 6A00 push 00000000
0001340F: FF95CBBB4000 call dword ptr [ebp+0040BBCB] <---VirtualAlloc
00013415: 59 pop ecx
*************申请内存**********
00013416: 6A40 push 00000040
00013418: 6800101000 push 00101000
0001341D: 51 push ecx
0001341E: 50 push eax
0001341F: FF95CBBB4000 call dword ptr [ebp+0040BBCB] <---VirtualAlloc
00013425: 8BD0 mov edx,eax
00013427: 8BF8 mov edi,eax
************搬家***************
00013429: BE4D534000 mov esi,0040534D
0001342E: 03F5 add esi,ebp
00013430: 8B8DF2B94000 mov ecx,dword ptr [ebp+0040B9F2]
00013436: F3A4 repe movsb es:[edi],ds:[esi] <----复制到新位置
00013438: B893A74000 mov eax,0040A793
0001343D: 2D4D534000 sub eax,0040534D
00013442: 03C2 add eax,edx
00013444: 50 push eax
00013445: C3 ret <----到新地址执行下面的语句
*******把原来地方的代码清零*************
00013446: BF4D534000 mov edi,0040534D
0001344B: 03FD add edi,ebp
0001344D: 8B8DF2B94000 mov ecx,dword ptr [ebp+0040B9F2]
00013453: 32C0 xor al,al
00013455: F3AA repe stosb es:[edi],al <----把原来的位置的内容清零
*******取新的EBP值,以后许多地方以EBP为基地址*********
00013457: E800000000 call 0001345C <---JMP语句
0001345C: 5D pop ebp <---EBP = 41345C
0001345D: 81EDA9A74000 sub ebp,0040A7A9 <---EBP = 41345C-40A7A9 = 8CB3
************以下是一段检测跟踪的代码************
00013463: BEDDA74000 mov esi,0040A7DD
00013468: 03F5 add esi,ebp
0001346A: 6A00 push 00000000
0001346C: 6A00 push 00000000
0001346E: 6A00 push 00000000
00013470: 6A00 push 00000000
00013472: 6A00 push 00000000
00013474: 6A00 push 00000000
00013476: 56 push esi
00013477: FF95A3BB4000 call dword ptr [ebp+0040BBA3] <----CreateFileA
0001347D: 83F8FF cmp eax,FFFFFFFF
00013480: 7568 jnz 000134EA <----判断是否发现跟踪
00013482: 46 inc esi
00013483: 803E00 cmp byte ptr [esi],00
00013486: 75FA jnz 00013482
00013488: 46 inc esi
00013489: 803E00 cmp byte ptr [esi],00
0001348C: 75DC jnz 0001346A
0001348E: EB5A jmp 000134EA <----跳走
*******************这里不是代码区*******************
00013490: 5C pop esp
00013491: 5C pop esp
00013492: 2E5C pop esp
00013494: 54 push esp
00013495: 52 push edx
00013496: 57 push edi
00013497: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
0001349B: 5C pop esp
0001349C: 54 push esp
0001349D: 52 push edx
0001349E: 57 push edi
0001349F: 3230 xor dh,byte ptr [eax]
000134A1: 3030 xor byte ptr [eax],dh
000134A3: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
000134A7: 5C pop esp
000134A8: 54 push esp
000134A9: 52 push edx
000134AA: 57 push edi
000134AB: 44 inc esp
000134AC: 45 inc ebp
000134AD: 42 inc edx
000134AE: 55 push ebp
000134AF: 47 inc edi
000134B0: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
000134B4: 5C pop esp
000134B5: 52 push edx
000134B6: 45 inc ebp
000134B7: 47 inc edi
000134B8: 56 push esi
000134B9: 58 pop eax
000134BA: 44 inc esp
000134BB: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
000134BF: 5C pop esp
000134C0: 4E dec esi
000134C1: 54 push esp
000134C2: 49 dec ecx
000134C3: 43 inc ebx
000134C4: 45 inc ebp
000134C5: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
000134C9: 5C pop esp
000134CA: 53 push ebx
000134CB: 49 dec ecx
000134CC: 43 inc ebx
000134CD: 45 inc ebp
000134CE: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
000134D2: 5C pop esp
000134D3: 56 push esi
000134D4: 4B dec ebx
000134D5: 45 inc ebp
000134D6: 59 pop ecx
000134D7: 50 push eax
000134D8: 52 push edx
000134D9: 4F dec edi
000134DA: 44 inc esp
000134DB: 005C5C2E add byte ptr [esp+ebx*2+2E],bl
000134DF: 5C pop esp
000134E0: 46 inc esi
000134E1: 49 dec ecx
000134E2: 4C dec esp
000134E3: 45 inc ebp
000134E4: 56 push esi
000134E5: 58 pop eax
000134E6: 44 inc esp
000134E7: 0000 add byte ptr [eax],al
**************************非代码区*****************
**************判断检测的结果*************
000134E9: 0083F8FF7406 add byte ptr [ebx+0674FFF8],al <---跳转,不跳就死定了
***********退出程序
000134EF: FF956CBF4000 call dword ptr [ebp+0040BF6C] <---ExitProcess
***********这是一段反跟踪的代码******************
000134F5: 60 pushad <---跳到此处
000134F6: BE53BD4000 mov esi,0040BD53
000134FB: 03F5 add esi,ebp
000134FD: 0F010E sidt dword ptr [esi] <---获取IDTR内容
00013500: 8B7602 mov esi,dword ptr [esi+02] <---获取IDT表的基地址
00013503: 668B4608 mov ax,word ptr [esi+08] <---取int 1的低位偏移
00013507: 66052302 add ax,0223 <---计算新值
0001350B: 66894608 mov word ptr [esi+08],ax <---保存int 1新偏移值
0001350F: 668B460E mov ax,word ptr [esi+0E] <---取int 1的高位偏移
00013513: 668B5E06 mov bx,word ptr [esi+06] <---取int 0的高位偏移
00013517: 663BC3 cmp ax,bx <---是否相等
0001351A: 740E jz 0001352A <---相等则跳转
0001351C: 668B4608 mov ax,word ptr [esi+08] <---取int 1的低位偏移
00013520: 668B5E18 mov bx,word ptr [esi+18] <---取int 3的低位偏移
00013524: FA cli
00013525: 663BC3 cmp ax,bx <---判断是否相等
00013528: 7400 jz 0001352A <---相等则跳转
0001352A: 668B4608 mov ax,word ptr [esi+08] <---取int 1的低位偏移
0001352E: 668B5E0E mov bx,word ptr [esi+0E] <---取int 1的高位偏移
00013532: 66898567BE4000 mov word ptr [ebp+0040BE67],ax <---保存
00013539: 66899D69BE4000 mov word ptr [ebp+0040BE69],bx <---保存
00013540: 668B4618 mov ax,word ptr [esi+18] <---取int 3的低位偏移
00013544: 668B5E1E mov bx,word ptr [esi+1E] <---取int 3的高位偏移
00013548: 6689856BBE4000 mov word ptr [ebp+0040BE6B],ax <---保存
0001354F: 66899D6DBE4000 mov word ptr [ebp+0040BE6D],bx <---保存
**************保存EBP的值
00013556: 89AD65BD4000 mov dword ptr [ebp+0040BD65],ebp
**************保存ReadProcessMemory的首地址
0001355C: 8B85C7BB4000 mov eax,dword ptr [ebp+0040BBC7] <---取ReadProcessMemory的首地址
00013562: 89856FBE4000 mov dword ptr [ebp+0040BE6F],eax <---保存
**************这里是一段反跟踪代码******************
00013568: E8A9140000 call 00014A16 <---这里又是一段SIDT代码
**************开始分析注册情况**********************
0001356D: BB63BD4000 mov ebx,0040BD63
00013572: 03DD add ebx,ebp
00013574: 53 push ebx
00013575: 6A64 push 00000064
00013577: 6A63 push 00000063
00013579: 6A00 push 00000000
0001357B: FF9508BC4000 call dword ptr [ebp+0040BC08] <---SetTimer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -