用Arm3.75加壳的ASProtect V1.31 build 06.14主程序 (2)
【破解作者】 wangli_com
【使用工具】 WinXP、Ollydbg、PEiD、LordPE、ImportREC 1.6F
【官方主页】 http://www.888cp.com/bbs/
【破解平台】 WinXP
【软件名称】 asprotect(v1.31 build 6.14) armadillo cc 版
【下载地址】 http://bbs.pediy.com/showthread.php?s=&threadid=2453
【软件大小】 1.14 MB
【加壳方式】 armadillo cc 版+iat乱序+抽取代码
【破解下载】附件:un-Aspr1.rar 附件:un-Aspr2.rar
【破解声明】 我是一菜青虫,偶得一点心得,愿与大家分享 ! ! !前面这几行模仿小虾,这种格式看起来
比较舒服! ! !
在(1)中如果先修复cc,再把Region033A0000-033C0000.dmp附加到程序中,就不会出现很大的文件了。其实
修复cc时可以把要改的代码写成二进制文件,用复制加粘贴的方法还是很快的,以下是我用到的文件。
406000~406100 int3地址表
406100~406200 跳转类型表
406200~406300 跳转量表
406300~406400 跳转命令长度表
得到cc地址的代码如下:005154cf:
90 90 90 90 90 90 90 90 90 90 90 90 90 8B 0D F0 8F 4D 00 3E 8D 34 8D 00 10 40 00 BF 00 10 40 00
8B 85 54 EC FF FF F2 AF 74 16 90 90 90 90 89 06 FF 05 F0 8F 4D 00 BF 0E 00 00 00 BE 10 00 00 00
90 90 90 90
1.005154cf: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 A1 00 40 40 00 3E 8B 04 85 00
10 40 00 85
C0 0F 84 96 03 00 00 8D 95 54 EC FF FF 90 89 02 FF 05 00 40 40 00 90 90 90 90 90 90 90 90 90 90
90 90 90 90
2.005155ef:90 90 8B 95 68 EE FF FF 8B 04 95 88 06 54 00 8B 8D 94 EB FF FF 8B 14 88 3B 95 98 EB FF
FF 0F 85
CE FE FF FF 90
3.00515614: 90 90 A1 04 40 40 00 8D 95 54 EC FF FF 8B 12 3E 89 14 85 00 60 40 00 90 90 B8 0C 40
40 00 33 C9
89 08 89 48 04 89 48 0C 41 89 48 08 89 48 10 C7 40 14 04 00 00 00 C7 40 18 40 00 00 00 C7 40 1C
80 00 00 00 C7 40 20 00 08 00 00 8D 85 9C EB FF FF 8B 0D 0C 40 40 00 3E 8B 14 8D 10 40 40 00 83
F9 01 7F 08 89 90 AC 00 00 00 EB 06 89 90 C0 00 00 00 90 90 90 90 90 90 90 90
4.00515798: 90 90 8B 0D 0C 40 40 00 3E 89 04 8D 10 40 40 00 41 89 0D 0C 40 40 00 83 F9 07 0F 8E
A7 FE FF FF
90 90 60 9C E8 D6 00 00 00 9D 61 90 90 90
5.005157F2: 90 90 A1 04 40 40 00 3E 89 0C 85 00 62 40 00 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90
6.00515871: 90 90 8B 0D 04 40 40 00 88 81 00 63 40 00 90 90 FF 05 04 40 40 00 E9 55 FC FF FF 90
90
7.00515897: 8B 3D 04 40 40 00 81 C7 00 61 40 00 BA 0C 40 40 00 8B 42 04 8B 5A 08 33 D8 74 0F 90
90 C6 07 E3
E9 20 01 00 00 90 90 90 90 90 8B 42 0C 8B 5A 14 33 D8 74 1D 85 C0 74 0C 90 90 C6 07 7B E9 03 01
00 00 90 90 C6 07 7A E9 F9 00 00 00 90 90 90 90 90 8B 5A 18 33 D8 74 61 90 90 8B 5A 10 33 D8 74
1A 85 C0 74 0C 90 90 C6 07 77 E9 D6 00 00 00 90 90 C6 07 76 E9 CC 00 00 00 90 90 8B 5A 1C 33 D8
74 1A 85 C0 74 0C 90 90 C6 07 7F E9 B5 00 00 00 90 90 C6 07 7E E9 AB 00 00 00 90 90 85 C0 74 0C
90 90 C6 07 75 E9 9B 00 00 00 90 90 C6 07 74 E9 91 00 00 00 90 90 90 90 90 8B 5A 1C 33 D8 74 34
90 90 8B 5A 20 33 D8 74 14 85 C0 74 09 90 90 C6 07 7D EB 71 90 90 C6 07 7C EB 6A 90 90 85 C0 74
09 90 90 C6 07 79 EB 5D 90 90 C6 07 78 EB 56 90 90 90 90 90 8B 5A 20 33 D8 74 17 85 C0 74 09 90
90 C6 07 71 EB 3F 90 90 C6 07 70 EB 38 90 90 90 90 90 8B 5A 10 33 D8 74 17 85 C0 74 09 90 90 C6
07 73 EB 21 90 90 C6 07 72 EB 1A 90 90 90 90 90 85 C0 74 0C 90 90 C6 07 EB EB 0A 90 90 90 90 90
C6 07 90 90 90 C3
8.修复cc 004fa000: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 33 C9 3E 8B 04 8D 00
90 52 00 83 F8 00 74
69 0F B6 91 00 91 52 00 3E 8B 1C 8D 00 92 52 00 0F B6 B9 00 93 52 00 48 41 81 38 CC 55 8B EC 74
D3 80 78 FF CC 74 CD 80 78 01 CC 74 C7 90 83 FF 01 75 09 88 10 FE CB 88 58 01 90 90 83 FF 05 75
11 C6 00 0F 80 C2 10 88 50 01 83 EB 05 89 58 02 90 90 83 FF 04 75 10 80 FA EB 75 0B C6 00 E9 83
EB 04 89 58 01 90 90 EB 8B 90 90 90
(4)找到正确排序的iat
1.使程序把自己当成子进程运行
用OD再一次载入未脱壳的程序Aspr.exe,bp DebugActiveProcess,F9断下。看堆栈窗口:
0012BC8C 00513F28 /CALL 到 DebugActiveProcess 来自 Aspr.00513F22
0012BC90 000005C0 \ProcessId = 5C0<=====子进程句柄
0012BC94 0012FF04
打开另一个OD附加5C0这个子进程。然后ALT+F9返回程序:
0052A000 A>- EB FE jmp short Aspr.<ModuleEntryPoint>><====中断在此处,还原
代码
0052A002 0000 add byte ptr ds:[eax],al
0052A004 0000 add byte ptr ds:[eax],al
0052A006 5D pop ebp
还原0052A000处代码代码,EB FE改为60 E8,接下来就要按照FLY等大虾们的方法了.
使程序把自己当成子进程运行 ,取消以前断点,下断:BP OpenMutexA
77E6074A k> 55 push ebp //断在这,看看堆栈
77E6074B 8BEC mov ebp,esp
77E6074D 51 push ecx
77E6074E 51 push ecx
77E6074F 837D 10 00 cmp dword ptr ss:[ebp+10],0
77E60753 56 push esi
77E60754 0F84 EA500200 je kernel32.77E85844
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
BP OpenMutexA 时的堆栈:
0012D778 0050FBBD /CALL 到 OpenMutexA 来自 Aspr.0050FBB7
0012D77C 001F0001 |Access = 1F0001
0012D780 00000000 |Inheritable = FALSE
0012D784 0012DDB8 \MutexName = "7E8::DAD92F6E24" --->注意0012DDB8
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Ctrl+G:401000 键入以下代码
00401000 60 pushad
00401001 9C pushfd
00401002 68 B4FB1200 push 12DDB8 ★ 堆栈里看到的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 B4B2A577 call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 E9 33F7A577 jmp kernel32.OpenMutexA
在401000处新建起源,F9运行,再次中断在OpenMutexA处
2.Magic Jump,避开IAT加密
取消以前断点,下断:BP GetModuleHandleA+5,在这里中断十几次,中间会出现无法处理异常的对话框,用
SHIFT+F9跳过就行了;Alt+F9返回程序。判断返回程序的时机:
☆ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
注意看BP GetModuleHandleA 时的堆栈变化:
00128CE4 00D404D2 返回到 00D404D2 来自 kernel32.GetModuleHandleA
00128CE8 00D52D40 ASCII "kernel32.dll"
00128CEC 00D53F30 ASCII "VirtualAlloc"
00128CE4 00D404EF 返回到 00D404EF 来自 kernel32.GetModuleHandleA
00128CE8 00D52D40 ASCII "kernel32.dll"
00128CEC 00D53F24 ASCII "VirtualFree"
//再F9下去就会出现无法处理异常的对话框 ,SHIFT+F9跳过
00128A5C 00D29900 返回到 00D29900 来自 kernel32.GetModuleHandleA
00128A60 00128B98 ASCII "kernel32.dll"
00128A64 00000000
到这里时就用alt+F9返回主程序:
00D29900 8B0D 0881D500 mov ecx,dword ptr ds:[D58108]
00D29906 89040E mov dword ptr ds:[esi+ecx],eax
00D29909 A1 0881D500 mov eax,dword ptr ds:[D58108]
00D2990E 393C06 cmp dword ptr ds:[esi+eax],edi
00D29911 75 16 jnz short 00D29929
00D29913 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00D29919 50 push eax
00D2991A FF15 D4D0D400 call dword ptr ds:[D4D0D4] ;
kernel32.LoadLibraryA
00D29920 8B0D 0881D500 mov ecx,dword ptr ds:[D58108]
00D29926 89040E mov dword ptr ds:[esi+ecx],eax
00D29929 A1 0881D500 mov eax,dword ptr ds:[D58108]
00D2992E 393C06 cmp dword ptr ds:[esi+eax],edi
00D29931 0F84 AD000000 je 00D299E4--->//这里就是我们常说的Magic Jump,把它改为
JMP 00D299E4,代码改为90e9AD000000
00D29937 33C9 xor ecx,ecx
00D29939 8B03 mov eax,dword ptr ds:[ebx]
再f9运行,观察堆栈变化:
☆ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
当出现以下代码时:
00128A5C 00D29900 返回到 00D29900 来自 kernel32.GetModuleHandleA
00128A60 00128B98 ASCII "advapi32.dll"
00128CE8 00D45306 返回到 00D45306 来自 kernel32.GetModuleHandleA
00128CEC 00000000
到这里时就用alt+F9返回主程序:
00D45306 3985 B4D4FFFF cmp dword ptr ss:[ebp-2B4C],eax ;
Aspr.00400000
00D4530C 75 0F jnz short 00D4531D
00D4530E C785 B0D4FFFF 301BD500 mov dword ptr ss:[ebp-2B50],0D51B30
00D45318 E9 C4000000 jmp 00D453E1
向下一直到这:
00D45803 8B85 18D8FFFF mov eax,dword ptr ss:[ebp-27E8]
00D45809 3B85 68D8FFFF cmp eax,dword ptr ss:[ebp-2798]
00D4580F 73 1D jnb short 00D4582E
00D45811 8B85 18D8FFFF mov eax,dword ptr ss:[ebp-27E8]->在这设断得到iat的位置
003d7940
00D45817 8B8D 7CD2FFFF mov ecx,dword ptr ss:[ebp-2D84]
00D4581D 8908 mov dword ptr ds:[eax],ecx
00D4581F 8B85 18D8FFFF mov eax,dword ptr ss:[ebp-27E8]
00D45825 83C0 04 add eax,4
00D45828 8985 18D8FFFF mov dword ptr ss:[ebp-27E8],eax
00D4582E ^ E9 E8FCFFFF jmp 00D4551B
在00D45811处设断得到iat的位置,我的是3e7940是iat的首地址,看到很多00d2????之类的就是iat的位置,计
算一下得之VA=3e7940,SIZA=990,通过对3e7940下硬件写入断点,第一次中断时得到完整得 iat,第二次就能
找到壳是怎样把iat给搅和乱了得代码,为了讲解方便,我直接在加密iat得地方设断。取消原来得断点。
00D459A2 /EB 0D jmp short 00D459B1--------》在这地方设断,f9运行------》
dump出来的代码1
00D459A4 |8B85 64D1FFFF mov eax,dword ptr ss:[ebp-2E9C]
00D459AA |40 inc eax
00D459AB |8985 64D1FFFF mov dword ptr ss:[ebp-2E9C],eax
00D459B1 \8B85 64D1FFFF mov eax,dword ptr ss:[ebp-2E9C]
00D459B7 3B85 6CD1FFFF cmp eax,dword ptr ss:[ebp-2E94]--》1注意加密的数目020B
00D459BD 0F83 9A000000 jnb 00D45A5D
00D459C3 68 0D5EDF01 push 1DF5E0D
00D459C8 FFB5 68D1FFFF push dword ptr ss:[ebp-2E98]----》2注意[ebp-2E98]的值
00D459CE 8D8D 68D1FFFF lea ecx,dword ptr ss:[ebp-2E98]
00D459D4 E8 98B6FDFF call 00D21071----》f7进入
00D459D9 40 inc eax
00D459DA 33D2 xor edx,edx
00D459DC B9 00E1F505 mov ecx,5F5E100
00D459E1 F7F1 div ecx
00D459E3 8995 68D1FFFF mov dword ptr ss:[ebp-2E98],edx
00D459E9 8B85 68D1FFFF mov eax,dword ptr ss:[ebp-2E98]
00D459EF 33D2 xor edx,edx
00D459F1 B9 10270000 mov ecx,2710
00D459F6 F7F1 div ecx
00D459F8 0FAF85 48D8FFFF imul eax,dword ptr ss:[ebp-27B8]----》3注意数目 264
00D459FF 33D2 xor edx,edx
00D45A01 B9 10270000 mov ecx,2710
00D45A06 F7F1 div ecx
00D45A08 8985 5CD1FFFF mov dword ptr ss:[ebp-2EA4],eax
00D45A0E 8B85 ECD6FFFF mov eax,dword ptr ss:[ebp-2914]
00D45A14 8B00 mov eax,dword ptr ds:[eax]
00D45A16 8985 60D1FFFF mov dword ptr ss:[ebp-2EA0],eax
00D45A1C 8B85 5CD1FFFF mov eax,dword ptr ss:[ebp-2EA4]
00D45A22 8D0485 04000000 lea eax,dword ptr ds:[eax*4+4]
00D45A29 50 push eax
00D45A2A 8B85 ECD6FFFF mov eax,dword ptr ss:[ebp-2914]
00D45A30 83C0 04 add eax,4
00D45A33 50 push eax
00D45A34 FFB5 ECD6FFFF push dword ptr ss:[ebp-2914]
00D45A3A FF15 ECD2D400 call dword ptr ds:[D4D2EC] ;
msvcrt.memmove
00D45A40 83C4 0C add esp,0C
00D45A43 8B85 5CD1FFFF mov eax,dword ptr ss:[ebp-2EA4]
00D45A49 8B8D ECD6FFFF mov ecx,dword ptr ss:[ebp-2914]-->4注意iat首地址
00D45A4F 8B95 60D1FFFF mov edx,dword ptr ss:[ebp-2EA0]--》首地址的函数
00D45A55 891481 mov dword ptr ds:[ecx+eax*4],edx
00D45A58 ^ E9 47FFFFFF jmp 00D459A4
在00D459A2设断,f9运行,断下,当所有IAT处理完毕后,就可以用ImportREC.exe得到所有正确IAT了。
RVA=3e7940-400000=FFFE7940,SIZA=990,然后即可点get imports. ,CUT掉无效函数,在按save tree把输入
表存成txt文件。再f8单步走,注意我以上提到的四个值,在已壳脱壳时有用。把00D459A4到00D45A58,之间的
代码用二进制复制的方法复制下来备用。
00D459D4 E8 98B6FDFF call 00D21071---------》f7进入
00D21071 55 push ebp------》dump出来的代码2
00D21072 8BEC mov ebp,esp
00D21074 51 push ecx
00D21075 8B45 08 mov eax,dword ptr ss:[ebp+8]
00D21078 53 push ebx
00D21079 B9 10270000 mov ecx,2710
00D2107E 56 push esi
00D2107F 99 cdq
00D21080 8BF1 mov esi,ecx
00D21082 57 push edi
00D21083 F7FE idiv esi
00D21085 8B45 0C mov eax,dword ptr ss:[ebp+C]
00D21088 8BF9 mov edi,ecx
00D2108A 8BD9 mov ebx,ecx
00D2108C 8955 FC mov dword ptr ss:[ebp-4],edx
00D2108F 99 cdq
00D21090 F7FE idiv esi
00D21092 8B45 08 mov eax,dword ptr ss:[ebp+8]
00D21095 8BF2 mov esi,edx
00D21097 99 cdq
00D21098 F7FF idiv edi
00D2109A 8BF8 mov edi,eax
00D2109C 8B45 0C mov eax,dword ptr ss:[ebp+C]
00D2109F 99 cdq
00D210A0 0FAFFE imul edi,esi
00D210A3 F7FB idiv ebx
00D210A5 0FAF75 FC imul esi,dword ptr ss:[ebp-4]
00D210A9 33D2 xor edx,edx
00D210AB 0FAF45 FC imul eax,dword ptr ss:[ebp-4]
00D210AF 03C7 add eax,edi
00D210B1 5F pop edi
00D210B2 F7F1 div ecx
00D210B4 B9 00E1F505 mov ecx,5F5E100
00D210B9 8BC2 mov eax,edx
00D210BB 33D2 xor edx,edx
00D210BD 69C0 10270000 imul eax,eax,2710
00D210C3 03C6 add eax,esi
00D210C5 5E pop esi
00D210C6 F7F1 div ecx
00D210C8 5B pop ebx
00D210C9 8BC2 mov eax,edx
00D210CB C9 leave
00D210CC C2 0800 retn 8
把00D21071到00D210CC,之间的代码也用二进制复制的方法复制下来备用。
(5)修复iat
把dump出来的文件oep改为004d874c,用od加载,如下:
004D874C z> 55 push ebp
004D874D 8BEC mov ebp,esp
004D874F 83C4 F4 add esp,-0C
004D8752 53 push ebx
004D8753 B8 4C814D00 mov eax,zy2.004D814C
004D8758 E8 3BE1F2FF call zy2.00406898------》f7进入
00406898 50 push eax
00406899 6A 00 push 0
0040689B E8 F8FEFFFF call zy2.00406798------》f7进入
004068A0 - E9 B0C5F902 jmp zy2.033A2E55
00406798 FF25 60793E00 jmp dword ptr ds:[3E7960]----》这些地址就是iat,但都在
400000以内,我把它修改一下。
0040679E 8BC0 mov eax,eax
004067A0 FF25 947B3E00 jmp dword ptr ds:[3E7B94]
004067A6 8BC0 mov eax,eax
004067A8 FF25 E07A3E00 jmp dword ptr ds:[3E7AE0]
004067AE 8BC0 mov eax,eax
004067B0 FF25 747E3E00 jmp dword ptr ds:[3E7E74]
用winhex打开修复了cc的文件,在401000---4d9000范围内,用查找和替换功能,用FF25FFFF4E00替换
FF25FFFF3E00,中间的ffff是通配符,设通配符为ff。用winhex打开保存下来的iat原始文本文件,用查找和替
换功能,用000E替换FFFD,ok,下一步运行ImportREC 1.6,提取修改过的iat原始文本文件,FixDump。
这中间可能遇到iat的首地址每次运行都不同的问题,多做两遍,或是用复制加粘贴的方法,用ImportREC 1.6
在我们想要得地址处提取iat原始文件。
以壳脱壳,修复iat 用od加载dump文件,如下:
修改前:
004D874C z> 55 push ebp
004D874D 8BEC mov ebp,esp
004D874F 83C4 F4 add esp,-0C
004D8752 53 push ebx
004D8753 B8 4C814D00 mov eax,zy2.004D814C
004D8758 E8 3BE1F2FF call zy2.00406898
修改后:
004D874C u> 55 push ebp
004D874D 8BEC mov ebp,esp
004D874F 83C4 F4 add esp,-0C
004D8752 53 push ebx
004D8753 - E9 A8290100 jmp un-Aspr.004EB100
004D8758 E8 3BE1F2FF call un-Aspr.00406898
修改004EB100处的代码:
004EB100 90 nop
004EB101 90 nop
004EB102 90 nop
004EB103 . C785 6CD1FFFF 0B020000 mov dword ptr ss:[ebp-2E94],20B
004EB10D . C785 ECD6FFFF 40794E00 mov dword ptr ss:[ebp-2914],<&kernel32.CloseHandle>
004EB117 . C785 48D8FFFF 64020000 mov dword ptr ss:[ebp-27B8],264
004EB121 . C785 68D1FFFF 731E4400 mov dword ptr ss:[ebp-2E98],un-Aspr.00441E73
004EB12B . EB 21 jmp short un-Aspr.004EB14E
004EB12D 90 nop
004EB12E 90 nop
004EB12F 90 nop
004EB130 90 nop
004EB131 90 nop
004EB132 90 nop
004EB133 90 nop
004EB134 90 nop
004EB135 90 nop
004EB136 90 nop
004EB137 90 nop
004EB138 90 nop
004EB139 90 nop
004EB13A 90 nop
004EB13B 90 nop
004EB13C 90 nop
004EB13D 90 nop
004EB13E 90 nop
004EB13F 90 nop
004EB140 90 nop
004EB141 > 8B85 64D1FFFF mov eax,dword ptr ss:[ebp-2E9C]------》前面dump出来的代码1开始
004EB147 . 40 inc eax
004EB148 . 8985 64D1FFFF mov dword ptr ss:[ebp-2E9C],eax
004EB14E > 8B85 64D1FFFF mov eax,dword ptr ss:[ebp-2E9C]
004EB154 . 3B85 6CD1FFFF cmp eax,dword ptr ss:[ebp-2E94]
004EB15A . 0F83 9A000000 jnb un-Aspr.004EB1FA
004EB160 . 68 0D5EDF01 push un-Aspr.01DF5E0D
004EB165 . FFB5 68D1FFFF push dword ptr ss:[ebp-2E98]
004EB16B . 8D8D 68D1FFFF lea ecx,dword ptr ss:[ebp-2E98]
004EB171 . E8 AD000000 call un-Aspr.004EB223
004EB176 . 40 inc eax
004EB177 . 33D2 xor edx,edx
004EB179 . B9 00E1F505 mov ecx,5F5E100
004EB17E . F7F1 div ecx
004EB180 . 8995 68D1FFFF mov dword ptr ss:[ebp-2E98],edx
004EB186 . 8B85 68D1FFFF mov eax,dword ptr ss:[ebp-2E98]
004EB18C . 33D2 xor edx,edx
004EB18E . B9 10270000 mov ecx,2710
004EB193 . F7F1 div ecx
004EB195 . 0FAF85 48D8FFFF imul eax,dword ptr ss:[ebp-27B8]
004EB19C . 33D2 xor edx,edx
004EB19E . B9 10270000 mov ecx,2710
004EB1A3 . F7F1 div ecx
004EB1A5 . 8985 5CD1FFFF mov dword ptr ss:[ebp-2EA4],eax
004EB1AB . 8B85 ECD6FFFF mov eax,dword ptr ss:[ebp-2914]
004EB1B1 . 8B00 mov eax,dword ptr ds:[eax]
004EB1B3 . 8985 60D1FFFF mov dword ptr ss:[ebp-2EA0],eax
004EB1B9 . 8B85 5CD1FFFF mov eax,dword ptr ss:[ebp-2EA4]
004EB1BF . 8D0485 04000000 lea eax,dword ptr ds:[eax*4+4]
004EB1C6 . 50 push eax ; /n
004EB1C7 . 8B85 ECD6FFFF mov eax,dword ptr ss:[ebp-2914] ; |
004EB1CD . 83C0 04 add eax,4 ; |
004EB1D0 . 50 push eax ; |src
004EB1D1 . FFB5 ECD6FFFF push dword ptr ss:[ebp-2914] ; |dest
004EB1D7 . FF15 38794E00 call dword ptr ds:[<&msvcrt.memmove>] ; \memmove
004EB1DD . 83C4 0C add esp,0C
004EB1E0 . 8B85 5CD1FFFF mov eax,dword ptr ss:[ebp-2EA4]
004EB1E6 . 8B8D ECD6FFFF mov ecx,dword ptr ss:[ebp-2914]
004EB1EC . 8B95 60D1FFFF mov edx,dword ptr ss:[ebp-2EA0]
004EB1F2 . 891481 mov dword ptr ds:[ecx+eax*4],edx
004EB1F5 .^ E9 47FFFFFF jmp un-Aspr.004EB141---》前面dump出来的代码1结束
004EB1FA > 90 nop
004EB1FB . 90 nop
004EB1FC . 90 nop
004EB1FD . 90 nop
004EB1FE . 90 nop
004EB1FF . 90 nop
004EB200 . 90 nop
004EB201 . 90 nop
004EB202 . 90 nop
004EB203 . 90 nop
004EB204 . 90 nop
004EB205 . B8 4C814D00 mov eax,un-Aspr.004D814C
004EB20A .- E9 49D5FEFF jmp un-Aspr.004D8758
004EB20F 90 nop
004EB210 90 nop
004EB211 90 nop
004EB212 90 nop
004EB213 90 nop
004EB214 90 nop
004EB215 90 nop
004EB216 90 nop
004EB217 90 nop
004EB218 90 nop
004EB219 90 nop
004EB21A 90 nop
004EB21B 90 nop
004EB21C 90 nop
004EB21D 90 nop
004EB21E 90 nop
004EB21F 90 nop
004EB220 90 nop
004EB221 90 nop
004EB222 90 nop
004EB223 /$ 55 push ebp------》前面dump出来的代码2开始
004EB224 |. 8BEC mov ebp,esp
004EB226 |. 51 push ecx
004EB227 |. 8B45 08 mov eax,dword ptr ss:[ebp+8]
004EB22A |. 53 push ebx
004EB22B |. B9 10270000 mov ecx,2710
004EB230 |. 56 push esi
004EB231 |. 99 cdq
004EB232 |. 8BF1 mov esi,ecx
004EB234 |. 57 push edi
004EB235 |. F7FE idiv esi
004EB237 |. 8B45 0C mov eax,dword ptr ss:[ebp+C]
004EB23A |. 8BF9 mov edi,ecx
004EB23C |. 8BD9 mov ebx,ecx
004EB23E |. 8955 FC mov dword ptr ss:[ebp-4],edx
004EB241 |. 99 cdq
004EB242 |. F7FE idiv esi
004EB244 |. 8B45 08 mov eax,dword ptr ss:[ebp+8]
004EB247 |. 8BF2 mov esi,edx
004EB249 |. 99 cdq
004EB24A |. F7FF idiv edi
004EB24C |. 8BF8 mov edi,eax
004EB24E |. 8B45 0C mov eax,dword ptr ss:[ebp+C]
004EB251 |. 99 cdq
004EB252 |. 0FAFFE imul edi,esi
004EB255 |. F7FB idiv ebx
004EB257 |. 0FAF75 FC imul esi,dword ptr ss:[ebp-4]
004EB25B |. 33D2 xor edx,edx
004EB25D |. 0FAF45 FC imul eax,dword ptr ss:[ebp-4]
004EB261 |. 03C7 add eax,edi
004EB263 |. 5F pop edi
004EB264 |. F7F1 div ecx
004EB266 |. B9 00E1F505 mov ecx,5F5E100
004EB26B |. 8BC2 mov eax,edx
004EB26D |. 33D2 xor edx,edx
004EB26F |. 69C0 10270000 imul eax,eax,2710
004EB275 |. 03C6 add eax,esi
004EB277 |. 5E pop esi
004EB278 |. F7F1 div ecx
004EB27A |. 5B pop ebx
004EB27B |. 8BC2 mov eax,edx
004EB27D |. C9 leave
004EB27E \. C2 0800 retn 8----》前面dump出来的代码2结束
修改完毕,重新做了一遍,给文件减了一下肥,修改了一些地方,在w98和winxp下作了测试,运行正常,但如果在winxp下装了瑞星就会运行出错,不知为什么,还望各位朋友指教,谢谢您耐着性子看完,有些东西写的不是很清楚,还忘见谅,有些东西需要自己细细体会和琢磨。自己太菜,有不对的地方还望指教。
2004.10.3下午5.20
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)