标 题:
[VB][Asprotect]-FJTC“22选5”选号专家 3.0
作 者: cyto
时 间: 2006-08-02 21:16
链 接: http://bbs.pediy.com/showthread.php?threadid=30002
详细信息:
在拜读了kanxue坛主的文章:
Asprotect SKE 2.2 的Advanced Import protection保护技术
之后有了这篇文章。
因为Volx的IAT脚本1.02版已经不能对付它了,所以手工修复,一个字:累。
福建体彩“22选5”选号专家 3.0 Build 2006.07.29
软件大小:14161KB
软件语言:简体中文
软件类别:国产软件/共享版/彩票工具
运行环境:WinNT/2000/XP/2003
加入时间:2006-7-29 16:23:55
软件详细信息
《福建体彩“22选5”选号专家》是一款集号码走势分析、号码选取、号码过滤(缩水)、开核对,历史数据自动网上更新为一体的界面美观、操作简单的专用于福建体彩“22选5”彩票的软件!其内置了各种最有效的彩票过滤方法!其独特的智能化过滤缩水功能,可过滤掉众多的垃圾组合,为您好节省大把的买彩资金,使彩票投资的效益最大化!
ASProtect 2.1x SKE -> Alexey Solodovnikov
Version: ASProtect 2.11 SKE build 03.13 Release [1]
1.Stolen OEP+IAT:
Volx脚本:Asprotect 2.xx SKE OEP finder.txt
停在伪OEP:
014C0303 6A 64 push 64
014C0305 66:9C pushfw
014C0307 57 push edi
014C0308 EB 02 jmp short 014C030C
Alt+M在code下断,停在004037DE,VB程序:
004037D2 - FF25 E8104000 jmp dword ptr ds:[4010E8] ; msvbvm60.GetMem4
004037D8 - FF25 28114000 jmp dword ptr ds:[401128] ; msvbvm60.PutMem4
004037DE - FF25 E4124000 jmp dword ptr ds:[4012E4] ; msvbvm60.ThunRTMain
004037E4 - E9 1ACB0B01 jmp 014C0303 ; oep
004037E9 2853 0A sub byte ptr ds:[ebx+A],dl
004037EC 87E7 xchg edi,esp
堆栈:
0012FFBC 014C0342 返回到 014C0342 来自 01630000
0012FFC0 004356C8 ASCII "VB5!6&vb6chs.dll" // push
0012FFC4 77E687F5 返回到 kernel32.77E687F5
被偷的代码:
push 004356C8
call 4037DE
即:
004037DE - FF25 E4124000 jmp dword ptr ds:[4012E4] ; msvbvm60.ThunRTMain
004037E4 68 C8564300 push fjTC225.004356C8 ; ASCII "VB5!6&vb6chs.dll"
004037E9 E8 F0FFFFFF call fjTC225.004037DE ; jmp to msvbvm60.ThunRTMain
IAT没有加密:
00401000 >660C9ADE msvbvm60.EVENT_SINK_GetIDsOfNames
00401004 66109881 msvbvm60.__vbaVarTstGt
00401008 6610782A msvbvm60.__vbaVarSub
0040100C 660DF9B9 msvbvm60.__vbaStrI2
...
0040138C 660D9A27 msvbvm60.__vbaFreeObj
00401390 660E60B0 msvbvm60.__vbaFreeStr
00401394 660D2DD4 msvbvm60.rtcR8ValFromBstr
00401398 00000000
此时上ImportREC,添入OEP=000037E4,自动搜索,Level1,全部有效,保存备用。
此时还不能dump,因为还有Advanced Import protection没有搞定。
搜索E8:004D5D9F E8 5CA20101 call 014F0000
n多这样的函数,Volx的IAT修复脚本用不上,只好手工上。
参考kanxue文章:Asprotect SKE 2.2 的Advanced Import protection保护技术
2.Advanced Import Protection的分类位置:
进入call 014F0000 后总共3层:
第一层:保存所有当前寄存器 (出来后还要继续运行的,不能影响后面,不过它不是明目张胆的pushad)
第二层:1. 决定是哪一种方式的导入函数调用
a. 第一种方式:将call 014F0000 变成call F00004之类,出来后再次从原地进入F00004进入导入函数
b. 第二种方式:直接带着参数进入导入函数
2. 决定这个调用是call (ff15)还是jmp (ff25)
不要以为C的都是call,delphi的都是jmp
c. 如果是call (ff15),返回地址要+1,比如inc [esp],因为call 014F0000占5个字节,call(ff15)占6个字节
d. 如果是jmp (ff25),要esp+4
3. 如果是1.b的情况,可能有更邪恶的对下一行的偷代码
第三层:恢复所有的寄存器返回
进入到第一层,一路F7,直到碰到call eax(也可能是call ecx等,第一个call):
014F0000 /3E:EB 02 jmp short 014F0005
014F0003 |CD20 509C8D44 vxdjump 448D9C50
014F0009 35 432BC683 xor eax,83C62B43
014F000E EC in al,dx
014F000F 2013 and byte ptr ds:[ebx],dl
...
014F0197 /EB 01 jmp short 014F019A
014F0199 |C7 ??? ; 未知命令
014F019A \FFD0 call eax // 就是这里
014F019C FF7424 0C push dword ptr ss:[esp+C]
014F01A0 8D4447 7C lea eax,dword ptr ds:[edi+eax*2+7C]
014F01A4 65:EB 01 jmp short 014F01A8
进入call eax到第二层:可以一路F8
0127B348 55 push ebp
0127B349 8BEC mov ebp,esp
0127B34B 83C4 D4 add esp,-2C
0127B34E 53 push ebx
0127B34F 56 push esi
0127B350 57 push edi
0127B351 33C0 xor eax,eax
0127B353 8945 D8 mov dword ptr ss:[ebp-28],eax
0127B356 8945 D4 mov dword ptr ss:[ebp-2C],eax
0127B359 8945 DC mov dword ptr ss:[ebp-24],eax
0127B35C 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
...
0127B481 8B7483 68 mov esi,dword ptr ds:[ebx+eax*4+68]
0127B485 8B45 FC mov eax,dword ptr ss:[ebp-4]
0127B488 FFD6 call esi
0127B48A 8BF0 mov esi,eax
0127B48C 3B75 F8 cmp esi,dword ptr ss:[ebp-8]
0127B48F 75 63 jnz short 0127B4F4
0127B491 807B 20 00 cmp byte ptr ds:[ebx+20],0
0127B495 74 3C je short 0127B4D3 ; 分类处
...
0127B4A1 8B5483 68 mov edx,dword ptr ds:[ebx+eax*4+68]
0127B4A5 8B45 FC mov eax,dword ptr ss:[ebp-4]
0127B4A8 FFD2 call edx ; 再次分类
0127B4AA 3C 01 cmp al,1 ; eax为1则是a情况
0127B4AC 75 25 jnz short 0127B4D3 ; eax为0则是b情况
0127B4AE 56 push esi
0127B4AF 8D45 FC lea eax,dword ptr ss:[ebp-4]
0127B4B2 50 push eax
0127B4B3 8B45 14 mov eax,dword ptr ss:[ebp+14]
0127B4B6 50 push eax
0127B4B7 8B45 18 mov eax,dword ptr ss:[ebp+18]
0127B4BA 50 push eax
0127B4BB 8B45 0C mov eax,dword ptr ss:[ebp+C]
0127B4BE 50 push eax
0127B4BF 8B45 F0 mov eax,dword ptr ss:[ebp-10]
0127B4C2 50 push eax
0127B4C3 8B4D 1C mov ecx,dword ptr ss:[ebp+1C]
0127B4C6 8B55 10 mov edx,dword ptr ss:[ebp+10]
0127B4C9 8BC3 mov eax,ebx
0127B4CB E8 C0010000 call 0127B690 ; a情况
0127B4D0 /EB 01 jmp short 0127B4D3
...
0127B4D3 8D45 FC lea eax,dword ptr ss:[ebp-4]
0127B4D6 50 push eax
0127B4D7 8B45 14 mov eax,dword ptr ss:[ebp+14]
0127B4DA 50 push eax
0127B4DB 8B45 18 mov eax,dword ptr ss:[ebp+18]
0127B4DE 50 push eax
0127B4DF 8B45 0C mov eax,dword ptr ss:[ebp+C]
0127B4E2 50 push eax
0127B4E3 8B45 F0 mov eax,dword ptr ss:[ebp-10]
0127B4E6 50 push eax
0127B4E7 8B4D 1C mov ecx,dword ptr ss:[ebp+1C]
0127B4EA 8B55 10 mov edx,dword ptr ss:[ebp+10]
0127B4ED 8BC3 mov eax,ebx
0127B4EF E8 64F1FFFF call 0127A658 ; b情况
0127B4F4 81C7 FF000000 add edi,0FF
0127B4FA 3B7D F4 cmp edi,dword ptr ss:[ebp-C]
0127B4FD ^ 0F86 64FFFFFF jbe 0127B467
0127B503 EB 01 jmp short 0127B506
a情况,进入call 0127B690:
0127B7DD 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127B7E0 8B80 E0000000 mov eax,dword ptr ds:[eax+E0]
0127B7E6 0345 E4 add eax,dword ptr ss:[ebp-1C]
0127B7E9 8945 FC mov dword ptr ss:[ebp-4],eax // [ebp-4]是解密出来的API
0127B7EC 33C0 xor eax,eax
0127B7EE 8AC3 mov al,bl
0127B7F0 0145 10 add dword ptr ss:[ebp+10],eax
0127B7F3 57 push edi
0127B7F4 6A 00 push 0
0127B7F6 8D4D E0 lea ecx,dword ptr ss:[ebp-20]
0127B7F9 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127B7FC 8B40 3C mov eax,dword ptr ds:[eax+3C]
0127B7FF 8B55 FC mov edx,dword ptr ss:[ebp-4]
0127B802 E8 6DB9FFFF call 01277174
0127B807 8945 FC mov dword ptr ss:[ebp-4],eax
0127B80A 8B45 E0 mov eax,dword ptr ss:[ebp-20]
0127B80D 8B00 mov eax,dword ptr ds:[eax]
0127B80F E8 C0E6FFFF call 01279ED4
0127B814 8BD0 mov edx,eax
0127B816 0255 DF add dl,byte ptr ss:[ebp-21] ; 这里得到dl
0127B819 8B4D FC mov ecx,dword ptr ss:[ebp-4] ; [ebp-4C]就是我们要的函数
0127B81C 8B45 F4 mov eax,dword ptr ss:[ebp-C]
到了这里 [ebp-4C]是我们需要的导入函数的地址,dl中的值决定了是call(ff15)还是jmp(ff25)
dl中的值不同的程序是随机,找几个call 014F0000进去出来看一下就知道当前的程序中哪个对应ff15,哪个对应ff25了
b情况,进入call 0127A658,一路F8:
0127A7D6 8B7C82 68 mov edi,dword ptr ds:[edx+eax*4+68]
0127A7DA 8B06 mov eax,dword ptr ds:[esi]
0127A7DC FFD7 call edi
0127A7DE 8845 CA mov byte ptr ss:[ebp-36],al
0127A7E1 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127A7E4 8A40 4A mov al,byte ptr ds:[eax+4A]
0127A7E7 3A45 EF cmp al,byte ptr ss:[ebp-11] ; al的值决定是FF15还是FF25
0127A7EA 0F85 9C000000 jnz 0127A88C ; 不跳是FF15情况
0127A7F0 EB 01 jmp short 0127A7F3
al中的值,不同程序是不同的。我的是F7。
FF15:
0127A7F3 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127A7F6 8B80 E0000000 mov eax,dword ptr ds:[eax+E0]
0127A7FC 0145 FC add dword ptr ss:[ebp-4],eax ; [ebp-4]是解密出来的API
0127A7FF EB 01 jmp short 0127A802 ; 这里下断就能得到API
FF25:
0127A8A5 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127A8A8 8B80 E0000000 mov eax,dword ptr ds:[eax+E0]
0127A8AE 0145 FC add dword ptr ss:[ebp-4],eax ; [ebp-4]是解密出来的API
0127A8B1 8D45 0C lea eax,dword ptr ss:[ebp+C] ; 这里下断就能得到API
0127A7FC或0127A8AE或0127B7E9执行完后[ebp-4] 是需要的输入函数的地址,再看看[ebp-2c],如果它是FFFFFFFF,说明这个导入函数调用是干净的,如果它有值,表示它的下一行也偷了。
因此只要在0127A7FF&0127A8B1&0127B819处下断即可获得API。
3.Advanced Import Protection的保护位置:
重新加载原程序,对004D5D9F+1(第一个E8我们不需要,要的是后面的4个字节)下内存写入断点:
004D5D9F E8 5CA20101 call 014F0000
第2次断下后停在这里:
0127BAD3 8945 00 mov dword ptr ss:[ebp],eax // ebp指向004D5DA0,eax写入后,变成call 014F0000
0127BAD6 6A 0A push 0A
0127BAD8 E8 7F9AFEFF call 0126555C
0127BADD 8BC8 mov ecx,eax
0127BADF 038B E4000000 add ecx,dword ptr ds:[ebx+E4]
0127BAE5 8BD6 mov edx,esi
0127BAE7 8BC3 mov eax,ebx
0127BAE9 E8 8EE5FFFF call 0127A07C
0127BAEE FF0C24 dec dword ptr ss:[esp]
0127BAF1 03B3 E4000000 add esi,dword ptr ds:[ebx+E4]
0127BAF7 833C24 00 cmp dword ptr ss:[esp],0
0127BAFB ^ 0F87 55FEFFFF ja 0127B956 // 如果还有需要处理就跳上去
0127BB01 53 push ebx
0127BB02 E8 5D000000 call 0127BB64
0127BB07 0183 EC000000 add dword ptr ds:[ebx+EC],eax
0127BB0D B0 01 mov al,1
0127BB0F 83C4 24 add esp,24
0127BB12 5D pop ebp
0127BB13 5F pop edi
0127BB14 5E pop esi
0127BB15 5B pop ebx
0127BB16 C3 retn
跟随:0127BAFB ^ 0F87 55FEFFFF ja 0127B956
0127B956 33C0 xor eax,eax
0127B958 8A07 mov al,byte ptr ds:[edi]
0127B95A 8D0440 lea eax,dword ptr ds:[eax+eax*2]
0127B95D 8B6C83 68 mov ebp,dword ptr ds:[ebx+eax*4+68]
0127B961 8BC6 mov eax,esi
0127B963 FFD5 call ebp
0127B965 8BE8 mov ebp,eax
0127B967 036B 24 add ebp,dword ptr ds:[ebx+24]
0127B96A 03AB E0000000 add ebp,dword ptr ds:[ebx+E0]
0127B970 EB 01 jmp short 0127B973
0127B973 33C0 xor eax,eax
0127B975 8A47 09 mov al,byte ptr ds:[edi+9]
0127B978 8D0440 lea eax,dword ptr ds:[eax+eax*2]
0127B97B 8B5483 68 mov edx,dword ptr ds:[ebx+eax*4+68]
0127B97F 8BC6 mov eax,esi
0127B981 FFD2 call edx //call edx 结果在eax
0127B983 807B 20 00 cmp byte ptr ds:[ebx+20],0 //eax 可能是1或0
0127B987 0F85 3D010000 jnz 0127BACA
0127B98D 3C 01 cmp al,1
0127B98F 0F85 35010000 jnz 0127BACA
0127B995 EB 01 jmp short 0127B998
shoooo:
如果是1,当前这个call 01200000处运行时,会重新回到调用地址,再进入导入函数
如果是0,当前这个call 01200000进入导入函数后出来,不过这种方式比较邪恶,它可能做更多的事情
4.获得所有Call 014F0000的地址表:
这里想办法获得程序里“ call 014F0000 ”语句所有的地址,上面代码中“0127B981 FFD2 call edx ”这个点比较好,除了能得到地址表,还能得知晓call 014F0000是按类型1来处理的,还是按类型2来处理的。
OD载入,忽略除内存异常外的所有异常,F9,异常停住,Ctrl+G到0127B981 FFD2 call edx 下断,取消异常忽略,Shift+F9直接断在这里:
0127B981 FFD2 call edx // 断住,patch
0127B983 807B 20 00 cmp byte ptr ds:[ebx+20],0
0127B987 0F85 3D010000 jnz 0127BACA
0127B98D 3C 01 cmp al,1
0127B98F 0F85 35010000 jnz 0127BACA
0127B995 EB 01 jmp short 0127B998
堆栈:
0012FEF8 0000073C // 有73C个加密
0012FEFC FE07987D
0012FF00 0E3169DD
0012FF04 00000000
修改为:
0127B981 - E9 7A462B00 jmp 01530000 // 申请的空间01530000
0127B986 90 nop
0127B987 0F85 3D010000 jnz 0127BACA
0127B98D 3C 01 cmp al,1
0127B98F 0F85 35010000 jnz 0127BACA
0127B995 EB 01 jmp short 0127B998
写上代码:
01530000 FFD2 call edx //壳原来的代码
01530002 60 pushad
01530003 8B1D 30005301 mov ebx,dword ptr ds:[1530030] 取缓存地址,设[1530030]=01530040,需要添入
01530009 C1E0 1F shl eax,1F
0153000C 03C5 add eax,ebp
0153000E 8903 mov dword ptr ds:[ebx],eax
01530010 83C3 04 add ebx,4
01530013 891D 30005301 mov dword ptr ds:[1530030],ebx
01530019 61 popad
0153001A 807B 20 00 cmp byte ptr ds:[ebx+20],0 //壳原来的代码
0153001E - E9 64B9D4FF jmp 0127B987 //跳转回去
写入后数据窗口数据如下:
01530000 FF D2 60 8B 1D 30 00 53 01 C1 E0 1F 03 C5 89 03 襚?0.S拎艍
01530010 83 C3 04 89 1D 30 00 53 01 61 80 7B 20 00 E9 64 兠?0.Sa{ .閐
01530020 B9 D4 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 乖.............
01530030 40 00 53 01 00 00 00 00 00 00 00 00 00 00 00 00 @.S............
01530040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
其中红色部分需要额外添入,取得的地址就会放到这个地址开始的内存中。
F4到0127BB01:
0127BAF7 833C24 00 cmp dword ptr ss:[esp],0
0127BAFB ^ 0F87 55FEFFFF ja 0127B956 // 如果还有需要处理就跳上去
0127BB01 53 push ebx // F4到这里,处理完毕
0127BB02 E8 5D000000 call 0127BB64
查看数据窗口,此时得到所有API加密的地址:总共73C个
92 32 40 00 98 32 40 00 9E 32 40 00 A4 32 40 00 AA 32 40 00 B0 32 40 00 B6 32 40 00 BC 32 40 00
C2 32 40 00 C8 32 40 00 CE 32 40 00 D4 32 40 00 DA 32 40 00 E0 32 40 00 E6 32 40 00 EC 32 40 00
F2 32 40 00 F8 32 40 00 FE 32 40 00 04 33 40 00 0A 33 40 00 1C 33 40 00 22 33 40 00 28 33 40 00
2E 33 40 00 34 33 40 00 3A 33 40 00 40 33 40 00 46 33 40 00 4C 33 40 00 6A 33 40 00 7C 33 40 00
82 33 40 00 88 33 40 00 8E 33 40 00 94 33 40 00 9A 33 40 00 A6 33 40 00 BE 33 40 00 CA 33 40 00
D6 33 40 00 DC 33 40 00 E2 33 40 00 E8 33 40 00 EE 33 40 00 F4 33 40 00 00 34 40 00 0C 34 40 00
1E 34 40 00 24 34 40 00 2A 34 40 00 30 34 40 00 36 34 40 00 3C 34 40 00 42 34 40 00 48 34 40 00
54 34 40 00 66 34 40 00 6C 34 40 00 78 34 40 00 7E 34 40 00 90 34 40 00 96 34 40 00 9C 34 40 00
A8 34 40 00 AE 34 40 00 B4 34 40 00 BA 34 40 00 C6 34 40 00 CC 34 40 00 D2 34 40 00 D8 34 40 00
DE 34 40 00 E4 34 40 00 EA 34 40 00 F6 34 40 00 FC 34 40 00 02 35 40 00 08 35 40 00 0E 35 40 00
14 35 40 00 1A 35 40 00 20 35 40 00 26 35 40 00 2C 35 40 00 32 35 40 00 38 35 40 00 3E 35 40 00
44 35 40 00 4A 35 40 00 50 35 40 00 56 35 40 00 5C 35 40 00 62 35 40 00 68 35 40 00 6E 35 40 00
74 35 40 00 80 35 40 00 92 35 40 00 98 35 40 00 9E 35 40 00 A4 35 40 80 BC 35 40 80 C2 35 40 80
C8 35 40 00 D4 35 40 80 DA 35 40 80 E0 35 40 80 EC 35 40 80 F2 35 40 00 F8 35 40 80 FE 35 40 80
04 36 40 80 0A 36 40 80 10 36 40 80 16 36 40 80 22 36 40 80 28 36 40 80 34 36 40 80 4C 36 40 80
52 36 40 80 5E 36 40 00 6A 36 40 80 70 36 40 80 76 36 40 80 7C 36 40 80 94 36 40 00 9A 36 40 00
A0 36 40 80 A6 36 40 80 AC 36 40 80 B2 36 40 00 B8 36 40 80 BE 36 40 80 C4 36 40 80 CA 36 40 80
D0 36 40 80 D6 36 40 00 DC 36 40 80 E2 36 40 80 E8 36 40 80 EE 36 40 00 F4 36 40 80 00 37 40 80
06 37 40 80 12 37 40 80 18 37 40 80 24 37 40 80 36 37 40 80 42 37 40 80 48 37 40 80 4E 37 40 80
54 37 40 80 5A 37 40 80 60 37 40 00 66 37 40 80 6C 37 40 80 72 37 40 00 8A 37 40 80 90 37 40 80
3E DA 46 80 68 DA 46 80 FD DA 46 00 1D DB 46 80 B2 DB 46 80 CE DB 46 80 E2 DB 46 80 21 DC 46 00
30 DC 46 80 48 DC 46 80 60 DC 46 80 96 DC 46 80 B1 DC 46 00 C9 DC 46 80 49 DD 46 80 A9 DD 46 80
C0 DD 46 80 13 DE 46 80 2A DE 46 80 7D DE 46 80 94 DE 46 80 E7 DE 46 00 FE DE 46 80 28 DF 46 80
3C DF 46 80 66 DF 46 80 7A DF 46 00 A4 DF 46 80 D1 DF 46 80 E4 DF 46 80 01 E0 46 80 2D E0 46 80
3D E0 46 00 54 E0 46 80 65 E0 46 80 7F E0 46 00 A7 E0 46 80 B7 E0 46 80 09 E1 46 00 31 E1 46 80
41 E1 46 80 77 E1 46 00 9F E1 46 00 AF E1 46 80 E5 E1 46 80 0D E2 46 80 1D E2 46 80 53 E2 46 00
7B E2 46 80 8B E2 46 80 C3 E2 46 80 CC E2 46 80 01 E3 46 80 0A E3 46 80 3F E3 46 80 48 E3 46 80
89 E3 46 80 A8 E3 46 80 D5 E3 46 80 E5 E3 46 80 FC E3 46 80 0F E4 46 00 2C E4 46 00 54 E4 46 80
64 E4 46 80 96 E4 46 80 B6 E4 46 80 75 E5 46 80 8D E5 46 00 9B E5 46 00 AF E5 46 80 BF E5 46 80
34 E6 46 80 4C E6 46 80 5A E6 46 80 6E E6 46 80 7E E6 46 80 F3 E6 46 80 0B E7 46 80 19 E7 46 80
2D E7 46 00 3D E7 46 80 B2 E7 46 80 CA E7 46 00 D8 E7 46 00 EC E7 46 80 FC E7 46 00 71 E8 46 00
89 E8 46 80 97 E8 46 80 AB E8 46 80 BB E8 46 80 30 E9 46 80 48 E9 46 80 56 E9 46 80 6A E9 46 00
7A E9 46 80 07 EA 46 00 1F EA 46 80 2D EA 46 80 41 EA 46 80 51 EA 46 00 C5 EA 46 00 DD EA 46 80
EB EA 46 80 FF EA 46 80 0F EB 46 80 80 EB 46 80 98 EB 46 80 A6 EB 46 80 BA EB 46 00 CA EB 46 80
FC EB 46 80 0C EC 46 80 2C EC 46 80 90 EC 46 80 9F EC 46 00 BB EC 46 80 F6 EC 46 80 35 ED 46 00
40 ED 46 80 47 ED 46 00 52 ED 46 00 5E ED 46 00 04 EE 46 80 26 EE 46 00 32 EE 46 80 4E EE 46 80
B5 EE 46 80 F4 EE 46 80 5B EF 46 80 98 EF 46 00 84 F0 46 80 B2 F0 46 80 18 F1 46 80 66 F1 46 80
CC F1 46 80 FA F1 46 80 61 F2 46 80 9E F2 46 00 D5 F2 46 80 39 F3 46 80 D9 F3 46 00 36 F4 46 80
87 F4 46 80 1E F5 46 00 40 F5 46 80 56 F5 46 00 D0 F5 46 80 34 F6 46 80 DC F6 46 80 39 F7 46 80
72 F7 46 80 82 F7 46 80 9E F7 46 80 AA F7 46 80 0F F8 46 80 46 F8 46 80 AA F8 46 80 4A F9 46 80
A7 F9 46 80 F9 F9 46 80 90 FA 46 80 B2 FA 46 80 C8 FA 46 80 21 FB 46 80 58 FB 46 80 BC FB 46 80
5C FC 46 80 B9 FC 46 80 0B FD 46 00 A2 FD 46 80 C4 FD 46 00 DA FD 46 80 F9 FD 46 80 5F FE 46 80
B3 FE 46 00 19 FF 46 80 47 FF 46 80 82 FF 46 80 C1 FF 46 80 CC FF 46 80 D3 FF 46 80 DE FF 46 80
EA FF 46 80 90 00 47 80 B2 00 47 80 BE 00 47 80 DA 00 47 80 41 01 47 80 C6 01 47 80 B1 02 47 80
DF 02 47 00 45 03 47 80 8C 03 47 80 F3 03 47 80 30 04 47 80 1C 05 47 80 4A 05 47 00 B0 05 47 80
04 06 47 80 6B 06 47 80 A2 06 47 80 09 07 47 80 44 07 47 80 AB 07 47 80 E8 07 47 80 D4 08 47 80
02 09 47 80 68 09 47 80 9B 09 47 00 B7 09 47 80 1D 0A 47 00 43 0A 47 00 4E 0A 47 80 61 0A 47 80
78 0A 47 80 8B 0A 47 80 A1 0A 47 80 AE 0A 47 00 C6 0A 47 00 EA 0A 47 80 E5 0B 47 80 00 0C 47 80
1C 0C 47 00 27 0C 47 00 2E 0C 47 80 39 0C 47 00 45 0C 47 80 D4 0C 47 80 E3 0C 47 00 F9 0C 47 80
80 0D 47 80 30 0F 47 80 B0 0F 47 80 D4 0F 47 80 67 10 47 80 03 11 47 00 28 11 47 80 82 12 47 80
8F 12 47 00 A8 12 47 80 B7 12 47 80 DD 12 47 80 F9 12 47 00 15 13 47 80 31 13 47 80 4D 13 47 80
8A 14 47 80 9C 14 47 80 B2 14 47 80 68 15 47 80 7A 15 47 00 90 15 47 00 40 16 47 80 52 16 47 80
68 16 47 80 18 17 47 80 2A 17 47 80 40 17 47 80 F0 17 47 80 FE 17 47 80 9C 18 47 80 C7 18 47 80
E9 18 47 00 CF 19 47 00 EB 19 47 80 07 1A 47 80 23 1A 47 80 3F 1A 47 80 18 1B 47 00 3E 1B 47 80
4B 1B 47 80 56 1B 47 00 62 1B 47 80 80 1B 47 80 CB 1B 47 00 F6 1B 47 80 03 1C 47 80 55 1C 47 80
14 1D 47 00 1F 1D 47 80 26 1D 47 80 93 1D 47 80 9C 1D 47 80 A5 1D 47 00 BB 1D 47 80 D7 1D 47 80
64 1E 47 80 7A 1E 47 80 A1 1E 47 80 15 1F 47 80 45 1F 47 80 6C 1F 47 80 8C 1F 47 80 9D 1F 47 80
BC 1F 47 00 D2 1F 47 80 F9 1F 47 80 38 20 47 80 E8 20 47 80 F2 20 47 00 12 21 47 80 1E 21 47 80
57 21 47 80 BE 21 47 80 FE 21 47 80 36 22 47 80 86 22 47 00 9A 22 47 80 DB 22 47 80 E9 23 47 80
0D 24 47 00 32 24 47 00 44 24 47 80 50 24 47 00 6F 24 47 80 05 25 47 80 2A 25 47 00 C1 25 47 80
55 26 47 80 6B 26 47 80 FA 26 47 80 16 27 47 80 3C 27 47 00 60 27 47 80 86 27 47 80 B8 27 47 80
DE 27 47 80 0B 28 47 80 1B 28 47 80 33 28 47 80 6B 28 47 80 31 29 47 80 3C 29 47 80 43 29 47 80
B0 29 47 80 B9 29 47 00 C2 29 47 80 D8 29 47 80 F4 29 47 80 81 2A 47 80 97 2A 47 80 BE 2A 47 80
2F 2B 47 00 5F 2B 47 80 86 2B 47 80 A6 2B 47 80 B7 2B 47 80 D6 2B 47 80 EC 2B 47 80 13 2C 47 80
52 2C 47 80 02 2D 47 80 0C 2D 47 80 2C 2D 47 00 38 2D 47 00 71 2D 47 80 D8 2D 47 80 14 2E 47 80
4C 2E 47 80 9C 2E 47 00 B0 2E 47 80 F1 2E 47 80 FF 2F 47 80 23 30 47 80 48 30 47 80 5A 30 47 80
66 30 47 00 85 30 47 80 1B 31 47 80 40 31 47 00 D7 31 47 00 6B 32 47 80 81 32 47 80 10 33 47 00
2C 33 47 80 52 33 47 00 76 33 47 80 9C 33 47 80 CE 33 47 80 F4 33 47 80 21 34 47 00 31 34 47 00
49 34 47 00 81 34 47 00 41 35 47 80 4C 35 47 80 53 35 47 80 C0 35 47 80 C9 35 47 80 D2 35 47 80
E8 35 47 80 04 36 47 80 91 36 47 80 A7 36 47 80 CE 36 47 80 3F 37 47 80 6F 37 47 80 96 37 47 80
B6 37 47 80 C7 37 47 80 E6 37 47 00 FC 37 47 80 23 38 47 80 62 38 47 80 12 39 47 80 1C 39 47 00
3C 39 47 00 48 39 47 00 81 39 47 80 E8 39 47 80 24 3A 47 80 5C 3A 47 80 AC 3A 47 80 C0 3A 47 00
01 3B 47 80 0F 3C 47 00 33 3C 47 80 58 3C 47 80 6A 3C 47 80 76 3C 47 80 95 3C 47 80 2B 3D 47 80
50 3D 47 80 E7 3D 47 80 7B 3E 47 80 91 3E 47 80 20 3F 47 80 3C 3F 47 80 62 3F 47 80 86 3F 47 80
AC 3F 47 80 DE 3F 47 80 04 40 47 80 31 40 47 80 41 40 47 80 59 40 47 80 91 40 47 80 4F 41 47 80
5A 41 47 80 61 41 47 80 C7 41 47 80 D0 41 47 00 D9 41 47 80 EF 41 47 80 0B 42 47 80 8A 42 47 80
A0 42 47 80 BC 42 47 80 46 43 47 80 5C 43 47 80 83 43 47 80 A7 43 47 80 16 44 47 80 4E 44 47 80
0C 45 47 80 38 45 47 80 8E 45 47 80 99 45 47 80 BE 45 47 80 CE 45 47 80 E6 45 47 80 FF 45 47 80
69 46 47 00 8D 46 47 80 B2 46 47 80 C4 46 47 80 D0 46 47 80 1A 47 47 80 52 47 47 80 9F 47 47 80
AA 47 47 80 B1 47 47 80 BC 47 47 80 E2 47 47 80 F2 47 47 80 3C 48 47 80 14 49 47 80 6E 49 47 80
92 49 47 80 B7 49 47 80 C9 49 47 80 D5 49 47 80 F4 49 47 80 75 4A 47 80 9A 4A 47 80 26 4B 47 80
B2 4B 47 80 C8 4B 47 80 58 4C 47 80 74 4C 47 80 9A 4C 47 80 BE 4C 47 80 E4 4C 47 80 16 4D 47 80
3C 4D 47 80 62 4D 47 80 88 4D 47 80 B5 4D 47 80 C5 4D 47 80 DD 4D 47 80 1A 4E 47 80 CF 4E 47 80
DA 4E 47 80 E1 4E 47 80 47 4F 47 80 50 4F 47 80 59 4F 47 80 6F 4F 47 80 8B 4F 47 80 0A 50 47 80
20 50 47 80 3C 50 47 80 C6 50 47 80 DC 50 47 80 03 51 47 80 27 51 47 80 96 51 47 80 CE 51 47 80
8C 52 47 80 B8 52 47 80 0E 53 47 80 19 53 47 80 3E 53 47 80 4E 53 47 80 66 53 47 80 7F 53 47 80
E9 53 47 80 0D 54 47 80 32 54 47 80 44 54 47 80 50 54 47 80 9A 54 47 80 D2 54 47 80 1F 55 47 80
2A 55 47 80 31 55 47 80 3C 55 47 80 62 55 47 80 72 55 47 80 BC 55 47 80 94 56 47 80 EE 56 47 80
12 57 47 80 37 57 47 80 74 57 47 00 F5 57 47 80 1A 58 47 80 A6 58 47 80 5D 5B 47 80 9A 5B 47 80
4F 5C 47 80 C7 5C 47 80 8A 5D 47 80 BC 5D 47 80 52 62 47 80 BE 67 47 80 62 68 47 80 88 68 47 80
DD 68 47 80 91 6C 47 80 00 6D 47 80 09 6D 47 80 1F 6D 47 80 BA 6D 47 80 8C 6E 47 80 D7 6E 47 80
3C 70 47 80 EE 70 47 80 2F 71 47 80 00 72 47 80 82 72 47 80 CF 72 47 80 44 74 47 80 9E 74 47 80
05 75 47 80 F8 76 47 80 CA 77 47 80 EE 77 47 80 FF 79 47 80 77 7A 47 80 50 7B 47 80 96 7E 47 80
A2 80 47 80 62 84 47 80 12 86 47 80 65 86 47 80 8D 86 47 80 F7 87 47 80 00 88 47 80 76 89 47 80
8C 89 47 80 D7 89 47 80 C9 8B 47 80 2F 8C 47 80 EC 8D 47 80 22 8E 47 80 6C 8E 47 80 CA 90 47 80
F8 91 47 80 6C 93 47 80 92 93 47 80 FF 94 47 80 F6 96 47 80 33 97 47 80 49 99 47 80 C4 9C 47 80
67 9D 47 80 24 A0 47 80 36 A2 47 80 8D A2 47 80 94 A2 47 80 F4 A2 47 80 FC A4 47 80 07 A5 47 80
68 A7 47 80 C3 A7 47 80 70 A8 47 80 95 A8 47 80 85 AA 47 80 A0 AB 47 80 36 AC 47 80 06 AD 47 80
38 AD 47 80 B1 AD 47 80 C7 AD 47 80 39 AE 47 80 27 AF 47 80 00 B0 47 80 CF B4 47 80 01 B5 47 80
54 B5 47 80 66 B6 47 80 94 B6 47 80 B1 B7 47 80 12 B8 47 80 41 BA 47 80 CF BB 47 80 43 BE 47 80
85 BE 47 80 A9 BE 47 80 74 BF 47 80 C4 BF 47 80 4A C0 47 80 82 C0 47 80 06 C1 47 80 B1 C1 47 80
CF C5 47 80 EE C5 47 80 C4 C7 47 80 C4 C9 47 80 4A CA 47 80 F4 CA 47 80 06 CB 47 80 B1 CB 47 80
FC CC 47 80 07 CD 47 80 41 CE 47 80 B1 CF 47 80 C3 CF 47 80 23 D1 47 80 AE D1 47 80 C4 D1 47 80
27 D3 47 80 31 D4 47 80 C7 D4 47 80 D9 D4 47 80 91 D5 47 80 AC D5 47 80 18 D7 47 80 71 D9 47 80
BB DA 47 80 2B DB 47 80 4E DB 47 80 CD DC 47 80 50 DE 47 80 C5 DE 47 80 29 DF 47 80 92 E0 47 80
BD E0 47 80 21 E2 47 80 40 E2 47 80 8A E2 47 80 B5 E2 47 80 19 E4 47 80 AD E4 47 80 54 E6 47 80
0C E7 47 80 05 E8 47 80 21 E8 47 80 1C E9 47 80 A1 EA 47 80 20 EB 47 80 8E ED 47 80 5C EF 47 80
A8 F0 47 80 96 F3 47 80 ED F3 47 80 D7 F6 47 80 F9 F6 47 80 0A F8 47 80 D5 F8 47 80 51 F9 47 80
B4 F9 47 80 CD FA 47 80 28 FC 47 80 51 FC 47 80 AE FC 47 80 D3 FC 47 80 F5 FC 47 80 24 01 48 80
50 01 48 80 76 02 48 80 27 04 48 80 92 05 48 80 AB 06 48 80 D6 06 48 80 FA 06 48 80 9E 07 48 80
58 08 48 80 8F 08 48 80 9F 08 48 80 B2 08 48 80 C2 08 48 80 95 09 48 80 84 0A 48 80 E2 0A 48 80
B7 0B 48 80 C3 0B 48 80 37 10 48 80 26 12 48 80 3C 12 48 80 63 12 48 80 AA 14 48 80 39 15 48 80
40 16 48 80 AE 16 48 80 F8 16 48 80 98 18 48 80 58 19 48 80 7E 19 48 80 AC 19 48 80 F1 19 48 80
25 1A 48 80 07 1B 48 80 10 1B 48 80 9D 1B 48 80 CE 1B 48 80 25 1C 48 80 E1 1C 48 80 75 1F 48 80
CE 1F 48 80 B7 20 48 80 D7 20 48 80 01 21 48 80 3B 21 48 80 66 21 48 80 CF 21 48 80 0A 22 48 80
2A 23 48 80 06 24 48 80 94 24 48 80 1B 25 48 80 46 26 48 80 22 2B 48 80 F2 2B 48 80 AB 2E 48 80
B6 2E 48 80 CB 2E 48 80 EB 2E 48 80 F2 2E 48 80 06 2F 48 80 4B 30 48 80 60 30 48 80 80 30 48 80
C1 30 48 80 D9 31 48 80 1A 33 48 80 4F 33 48 80 68 33 48 80 9C 33 48 80 C0 34 48 80 21 35 48 80
84 36 48 80 91 37 48 80 B1 37 48 80 E7 37 48 80 FF 3B 48 80 29 3C 48 80 A5 3D 48 80 BA 3D 48 80
E8 3E 48 80 08 3F 48 80 13 3F 48 80 6B 40 48 80 A6 40 48 80 53 41 48 80 46 42 48 80 5A 42 48 80
A9 43 48 80 D8 43 48 80 EE 44 48 80 F9 44 48 80 31 45 48 80 38 45 48 80 50 45 48 80 74 46 48 80
7F 46 48 80 ED 47 48 80 38 48 48 80 25 49 48 80 75 4B 48 80 85 4B 48 80 40 4C 48 80 55 4C 48 80
81 4D 48 80 98 4E 48 80 B8 4E 48 80 CD 4E 48 80 C4 4F 48 80 EF 4F 48 80 F9 4F 48 80 0B 50 48 80
1F 50 48 80 30 51 48 80 80 52 48 80 95 52 48 80 BB 52 48 80 DC 53 48 80 11 54 48 80 4A 54 48 80
07 55 48 80 1C 55 48 80 8E 56 48 80 98 56 48 80 A3 56 48 80 AE 56 48 80 D0 57 48 80 DB 57 48 80
FB 57 48 80 29 58 48 80 F2 58 48 80 FC 58 48 80 07 59 48 80 2E 59 48 80 53 5A 48 80 81 5A 48 80
6A 5B 48 80 74 5B 48 80 AD 5B 48 80 80 5C 48 80 8B 5C 48 80 D9 5C 48 80 AC 5D 48 80 CE 5E 48 80
1E 5F 48 80 EF 5F 48 80 5D 60 48 80 22 61 48 80 63 61 48 80 97 63 48 80 1D 64 48 80 4F 64 48 80
B7 64 48 80 02 65 48 80 2A 66 48 80 F3 66 48 80 12 68 48 80 EF 68 48 80 05 69 48 80 44 6A 48 80
62 6A 48 80 87 6E 48 80 9C 6E 48 80 42 6F 48 80 E8 6F 48 80 49 71 48 80 5E 71 48 80 6E 71 48 80
7A 71 48 80 04 72 48 80 CF 72 48 80 DB 72 48 80 FD 73 48 80 30 74 48 80 C6 74 48 80 8B 75 48 80
97 75 48 80 2F 76 48 80 B6 76 48 80 1F 79 48 80 5F 7A 48 80 F2 7F 48 80 62 83 48 80 BD 83 48 80
22 84 48 80 D3 85 48 80 F7 85 48 80 03 86 48 80 68 86 48 80 2D 87 48 80 E5 89 48 80 81 8C 48 80
97 8C 48 80 67 8E 48 80 8D 8E 48 80 C8 8E 48 80 1F 8F 48 80 14 90 48 80 D7 91 48 80 C6 93 48 80
D2 93 48 80 BB 96 48 80 50 99 48 80 41 9A 48 80 F8 9B 48 80 68 9C 48 80 34 9D 48 80 87 9E 48 80
B1 9E 48 80 EA A1 48 80 08 A2 48 80 21 A2 48 80 A8 A2 48 80 1B A4 48 80 69 A4 48 80 95 A4 48 80
BC A4 48 80 0E A5 48 80 45 A5 48 80 C0 A7 48 80 F4 A7 48 80 0D A9 48 80 A6 A9 48 80 74 AA 48 80
A6 AA 48 80 CD AA 48 80 A8 AB 48 80 B3 AB 48 80 D6 AB 48 80 F1 AC 48 80 16 AE 48 80 86 AF 48 80
23 B0 48 80 9C B1 48 80 59 B2 48 80 D4 B2 48 80 91 B3 48 80 AB B5 48 80 0E B7 48 80 54 B8 48 80
B5 BA 48 80 D4 BA 48 80 5A BB 48 80 95 BB 48 80 9A BC 48 80 4D BE 48 80 88 BE 48 80 54 C0 48 80
22 C2 48 80 4F C3 48 80 8E C4 48 80 5A C5 48 80 1C C6 48 80 47 C7 48 80 61 C7 48 80 C4 C7 48 80
D4 C8 48 80 31 C9 48 80 D5 C9 48 80 1B CA 48 80 A5 CB 48 80 01 CD 48 80 E2 CD 48 80 B1 CE 48 80
4C CF 48 80 2F D0 48 80 22 D2 48 80 3A D2 48 80 07 D3 48 80 B1 D3 48 80 D7 D3 48 80 EB D3 48 80
84 D5 48 80 C5 D8 48 80 E7 D8 48 80 C7 DA 48 80 01 DB 48 80 EC DB 48 80 1E DC 48 80 43 DC 48 80
5B DC 48 80 89 DC 48 80 23 DD 48 80 E9 DD 48 80 90 DF 48 80 F2 E2 48 80 52 E4 48 80 68 E4 48 80
15 E7 48 80 67 E7 48 80 6E E7 48 80 68 E9 48 80 D2 E9 48 80 B5 EA 48 80 25 EC 48 80 4B EC 48 80
11 ED 48 80 3A EE 48 80 52 EE 48 80 EB EE 48 80 C9 EF 48 80 A3 F0 48 80 AF F2 48 80 86 F3 48 80
EC F4 48 80 47 F5 48 80 9A F5 48 80 9D F6 48 80 D4 F6 48 80 9A F7 48 80 36 F8 48 80 B5 F8 48 80
5C FA 48 80 BE FA 48 80 D2 FA 48 80 A2 FC 48 80 1C FD 48 80 30 FF 48 80 43 FF 48 80 5B FF 48 80
BC 00 49 80 3A 01 49 80 97 01 49 80 FF 01 49 80 4C 02 49 80 06 04 49 80 F0 04 49 80 57 06 49 80
77 06 49 80 C1 07 49 80 CC 07 49 80 12 08 49 80 82 08 49 80 9A 08 49 80 46 0A 49 80 97 0A 49 80
4D 0B 49 80 C4 0C 49 80 23 0D 49 80 26 0E 49 80 B0 0F 49 80 F3 0F 49 80 5B 10 49 80 66 10 49 80
15 12 49 80 CA 12 49 80 FA 13 49 80 C2 15 49 80 A2 16 49 80 1C 19 49 80 E7 19 49 80 F2 19 49 80
FE 1A 49 80 E0 1C 49 80 F4 1C 49 80 AE 1D 49 80 CD 1D 49 80 03 1E 49 80 9B 1E 49 80 CF 1E 49 80
10 20 49 80 A2 20 49 80 22 21 49 80 86 21 49 80 36 23 49 80 00 24 49 80 D0 25 49 80 4A 27 49 80
73 27 49 80 D4 27 49 80 2D 28 49 80 39 28 49 80 F7 28 49 80 8F 29 49 80 A4 29 49 80 CD 29 49 80
64 2A 49 80 6C 2B 49 80 E0 2B 49 80 81 2C 49 80 88 2C 49 80 D2 2C 49 80 1B 2D 49 80 7F 2D 49 80
A0 2D 49 80 BC 2D 49 80 1C 2F 49 80 E2 30 49 80 73 32 49 80 57 33 49 80 AF 33 49 80 FC 34 49 80
3A 36 49 80 75 36 49 80 1F 38 49 80 0F 39 49 80 38 39 49 80 40 3A 49 80 AF 3B 49 80 F5 3B 49 80
2E 3D 49 80 10 3E 49 80 9B 41 49 80 8B 43 49 80 90 46 49 80 C3 46 49 80 54 47 49 80 89 47 49 80
95 47 49 80 AC 48 49 80 B4 49 49 80 71 4A 49 80 BA 4A 49 80 9A 4B 49 80 4F 4D 49 80 5C 4D 49 80
EB 4D 49 80 36 4E 49 80 F1 4E 49 80 38 50 49 80 B9 50 49 80 22 52 49 80 39 52 49 80 15 53 49 80
02 54 49 80 B2 54 49 80 1C 55 49 80 83 56 49 80 7C 58 49 80 20 5B 49 80 CD 5E 49 80 CD 5F 49 80
19 61 49 80 CF 67 49 80 39 68 49 80 45 68 49 80 82 69 49 80 F6 6A 49 80 40 6B 49 80 A9 6B 49 80
09 6C 49 80 18 6C 49 80 04 6D 49 80 86 6D 49 80 34 6E 49 80 62 6E 49 80 FF 6E 49 80 E0 74 49 80
57 75 49 80 0F 79 49 80 71 79 49 80 B4 7A 49 80 DF 7A 49 80 67 7B 49 80 B6 7B 49 80 31 7C 49 80
82 7C 49 80 CE 7C 49 80 2B 7D 49 80 5B 7D 49 80 6D 7D 49 80 BD 7D 49 80 6E 7E 49 80 AF 7F 49 80
91 80 49 80 10 82 49 80 68 82 49 80 1E 83 49 80 FA 87 49 80 9D 8A 49 80 C8 8A 49 80 7A 8B 49 80
96 8B 49 80 A9 8B 49 80 0D 8C 49 80 75 8C 49 80 11 8D 49 80 29 8D 49 80 7C 8D 49 80 D9 8E 49 80
59 91 49 80 6F 91 49 80 89 91 49 80 28 92 49 80 D6 92 49 80 A8 94 49 80 FC 94 49 80 B3 96 49 80
E3 98 49 80 F6 99 49 80 7A 9A 49 80 94 9A 49 80 16 9B 49 80 81 9B 49 80 D0 9B 49 80 42 9D 49 80
E2 9D 49 80 F4 9E 49 80 CA 9F 49 80 FC A5 49 80 41 A7 49 80 80 A8 49 80 33 AA 49 80 95 AA 49 80
A7 AB 49 80 F8 AB 49 80 1E AC 49 80 4F AD 49 80 AC AD 49 80 36 AE 49 80 62 AE 49 80 C0 AE 49 80
7F B0 49 80 16 B1 49 80 26 B1 49 80 1F B4 49 80 FA B4 49 80 9E B5 49 80 CE B6 49 80 E2 B7 49 80
11 B9 49 80 7F B9 49 80 16 BA 49 80 27 BB 49 80 E0 BB 49 80 20 BC 49 80 F3 BC 49 80 A0 C3 49 80
09 C5 49 80 9D C5 49 80 AF C6 49 80 B9 C6 49 80 F9 C7 49 80 56 C9 49 80 AB C9 49 80 B4 C9 49 80
EE C9 49 80 F8 C9 49 80 43 CA 49 80 38 CD 49 80 9D CF 49 80 6B D0 49 80 4F D1 49 80 A5 D1 49 80
85 D2 49 80 BF D2 49 80 0E D3 49 80 3C D3 49 80 0E D4 49 80 78 D4 49 80 CB D4 49 80 03 D5 49 80
57 D5 49 80 F6 D5 49 80 AC D6 49 80 20 D7 49 80 B9 D7 49 80 0B D8 49 80 1E D8 49 80 20 D9 49 80
46 D9 49 80 A7 D9 49 80 01 DA 49 80 2E DA 49 80 7C DB 49 80 9E DB 49 80 F0 DB 49 80 13 DD 49 80
48 DF 49 80 A1 DF 49 80 AD DF 49 80 08 E0 49 80 5C E2 49 80 BF E2 49 80 4C E3 49 80 B0 E4 49 80
44 E6 49 80 84 E6 49 80 6E E7 49 80 C5 EA 49 80 19 EB 49 80 39 EB 49 80 E1 ED 49 80 07 EE 49 80
5D F2 49 80 7D F2 49 80 93 F3 49 80 E5 F5 49 80 32 F6 49 80 2E F7 49 80 B1 F7 49 80 4E F8 49 80
FD F8 49 80 C0 F9 49 80 26 FA 49 80 FB FB 49 80 16 FC 49 80 66 FC 49 80 81 FC 49 80 87 FC 49 80
CD FC 49 80 3A FE 49 80 16 FF 49 80 B5 FF 49 80 2B 00 4A 80 18 02 4A 80 51 02 4A 80 58 03 4A 80
88 05 4A 80 DB 08 4A 80 E4 08 4A 80 46 0A 4A 80 66 0A 4A 80 9C 0B 4A 80 8F 0C 4A 80 00 0D 4A 80
72 0D 4A 80 EA 0D 4A 80 73 0F 4A 80 2A 10 4A 80 92 10 4A 80 0A 11 4A 80 AD 11 4A 80 84 12 4A 80
20 14 4A 80 F3 14 4A 80 63 15 4A 80 89 15 4A 80 F5 15 4A 80 00 17 4A 80 5B 17 4A 80 86 17 4A 80
8F 17 4A 80 AF 17 4A 80 BA 17 4A 80 25 19 4A 80 03 1A 4A 80 98 1B 4A 80 01 1C 4A 80 71 1C 4A 80
19 1E 4A 80 98 1E 4A 80 E8 1E 4A 80 93 1F 4A 80 A5 1F 4A 80 12 20 4A 80 62 20 4A 80 E5 20 4A 80
1F 21 4A 80 9C 21 4A 80 17 22 4A 80 23 23 4A 80 3B 23 4A 80 1B 24 4A 80 52 25 4A 80 82 26 4A 80
B3 26 4A 80 31 27 4A 80 59 27 4A 80 92 27 4A 80 AA 27 4A 80 B6 2B 4A 80 CA 2B 4A 80 4B 2C 4A 80
E9 2D 4A 80 BE 2E 4A 80 F5 30 4A 80 0F 32 4A 80 79 33 4A 80 9D 33 4A 80 B7 34 4A 80 C7 34 4A 80
E3 35 4A 80 27 37 4A 80 95 3A 4A 80 F5 3A 4A 80 36 3B 4A 80 C9 3B 4A 80 A0 3D 4A 80 B5 3D 4A 80
4F 3E 4A 80 F0 3E 4A 80 D6 3F 4A 80 66 40 4A 80 36 43 4A 80 5E 43 4A 80 86 43 4A 80 75 45 4A 80
AD 45 4A 80 25 47 4A 80 75 47 4A 80 DD 47 4A 80 DC 4A 4A 80 F0 4A 4A 80 19 4D 4A 80 7C 4D 4A 80
74 4F 4A 80 8C 4F 4A 80 09 50 4A 80 D4 50 4A 80 EC 50 4A 80 33 51 4A 80 12 52 4A 80 27 52 4A 80
31 52 4A 80 76 52 4A 80 E7 52 4A 80 51 54 4A 80 5E 54 4A 80 14 55 4A 80 AC 55 4A 80 07 56 4A 80
3E 56 4A 80 8F 56 4A 80 1D 5D 4A 80 73 5D 4A 80 25 5F 4A 80 E0 60 4A 80 01 61 4A 80 A8 61 4A 80
F6 61 4A 80 AC 62 4A 80 BE 62 4A 80 A4 63 4A 80 B6 65 4A 80 40 66 4A 80 C6 66 4A 80 01 68 4A 80
1E 68 4A 80 04 69 4A 80 BA 6B 4A 80 65 6C 4A 80 6E 6C 4A 80 71 6D 4A 80 08 6E 4A 80 F8 6E 4A 80
04 6F 4A 80 15 6F 4A 80 D5 6F 4A 80 68 70 4A 80 9A 70 4A 80 D2 71 4A 80 AE 72 4A 80 07 74 4A 80
23 74 4A 80 A6 74 4A 80 AA 75 4A 80 C6 76 4A 80 D9 77 4A 80 E6 77 4A 80 BE 7A 4A 80 D5 7A 4A 80
42 7B 4A 80 1F 7D 4A 80 C0 7D 4A 80 96 7E 4A 80 BB 7F 4A 80 1B 80 4A 80 46 80 4A 80 30 81 4A 80
42 81 4A 80 83 81 4A 80 88 83 4A 80 87 85 4A 80 B9 85 4A 80 47 86 4A 80 B3 88 4A 80 52 89 4A 80
35 8A 4A 80 62 8A 4A 80 E4 8A 4A 80 98 8B 4A 80 06 8E 4A 80 B6 8E 4A 80 8D 8F 4A 80 DD 8F 4A 80
0F 90 4A 80 04 91 4A 80 AC 94 4A 80 C7 94 4A 80 08 95 4A 80 C8 95 4A 80 E5 95 4A 80 2F 96 4A 80
97 97 4A 80 6D 98 4A 80 D7 99 4A 80 2A 9B 4A 80 8B 9C 4A 80 37 9E 4A 80 90 9F 4A 80 32 A0 4A 80
23 A3 4A 80 3F A3 4A 80 C2 A3 4A 80 A5 A4 4A 80 22 A5 4A 80 FF A5 4A 80 90 A7 4A 80 9D A7 4A 80
6B AA 4A 80 75 AA 4A 80 56 AD 4A 80 63 AD 4A 80 E2 AD 4A 80 32 AE 4A 80 CC AE 4A 80 0F B0 4A 80
44 B0 4A 80 2D B1 4A 80 6A B1 4A 80 87 B2 4A 80 91 B2 4A 80 20 B3 4A 80 2A B3 4A 80 55 B3 4A 80
E2 B3 4A 80 23 B4 4A 80 10 B5 4A 80 DD B6 4A 80 F4 B6 4A 80 24 B7 4A 80 3F B8 4A 80 BC B8 4A 80
4D B9 4A 80 72 B9 4A 80 7C BA 4A 80 D3 BA 4A 80 0F BB 4A 80 EA BC 4A 80 CC BD 4A 80 79 BF 4A 80
91 BF 4A 80 BA C4 4A 00 D7 C4 4A 00 BF C9 4A 00 DB CC 4A 00 76 CE 4A 00 8F D0 4A 00 31 D2 4A 00
43 D6 4A 00 B0 D9 4A 00 94 DE 4A 00 72 E7 4A 00 EB F0 4A 00 C1 F5 4A 00 46 00 4B 00 51 04 4B 00
8A 0E 4B 00 26 29 4B 00 E3 2E 4B 00 D1 3F 4B 00 00 49 4B 00 00 4F 4B 80 BA 56 4B 00 F4 56 4B 00
4C 5D 4B 00 EB 69 4B 00 64 6C 4B 00 EA 70 4B 00 66 76 4B 80 41 94 4B 00 83 97 4B 00 4A 9F 4B 80
CC A0 4B 00 5A B0 4B 00 7C B0 4B 00 60 C4 4B 00 07 CD 4B 00 6A D2 4B 00 46 DD 4B 00 7A DE 4B 00
6B DF 4B 00 9E E2 4B 00 6E E5 4B 80 A4 E5 4B 00 48 E8 4B 00 08 08 4C 00 45 0C 4C 00 8B 0D 4C 80
79 26 4C 00 02 2E 4C 00 E2 30 4C 00 C5 35 4C 00 E0 36 4C 00 4C 3E 4C 80 1A 51 4C 00 DF 56 4C 00
0E 57 4C 00 7E 5A 4C 00 4D 66 4C 00 17 6C 4C 80 05 76 4C 00 A1 76 4C 00 C7 98 4C 80 A3 AA 4C 80
DD AE 4C 80 4C AF 4C 00 B5 AF 4C 00 63 B0 4C 00 A0 B0 4C 00 12 B2 4C 00 F4 BA 4C 00 E1 D4 4C 00
56 DC 4C 00 CF E4 4C 00 8C F9 4C 00 F0 F9 4C 00 11 01 4D 00 72 0E 4D 00 CB 10 4D 00 2A 1A 4D 00
0C 34 4D 80 8E 47 4D 00 1B 49 4D 00 95 52 4D 80 9F 5D 4D 00 EA 5E 4D 80 01 61 4D 00 E8 61 4D 00
28 6C 4D 00 79 76 4D 80 AD 78 4D 00 13 7B 4D 00 5E 81 4D 00 B1 8B 4D 00 08 A2 4D 00 AA AF 4D 00
D8 B5 4D 00 9C B7 4D 80 74 BE 4D 00 F7 BF 4D 00 FE C3 4D 00 F7 C4 4D 00 36 C5 4D 00 19 CA 4D 80
CB CF 4D 00 8B D3 4D 00 E5 DE 4D 00 6A E9 4D 00 89 EE 4D 00 C5 F7 4D 00 41 FA 4D 00 4C 00 4E 80
81 01 4E 00 E7 01 4E 00 0C 03 4E 00 ED 06 4E 80 E4 07 4E 00 09 0E 4E 80 FC 14 4E 00 D1 15 4E 80
EC 1D 4E 00 FA 2F 4E 00 D7 30 4E 00 B0 31 4E 00 01 36 4E 00 C6 3D 4E 00 57 53 4E 00 34 54 4E 00
D9 62 4E 00 2A 67 4E 00 63 72 4E 00 40 73 4E 00 E8 8F 4E 00 C5 90 4E 00 12 95 4E 00 63 99 4E 00
68 B2 4E 00 45 B3 4E 00 02 BB 4E 00 AF C9 4E 00 58 D8 4E 00 A9 DC 4E 00 86 DD 4E 00 63 DE 4E 00
AE E2 4E 00 FA E2 4E 00 3E E3 4E 00 74 E3 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
其中地址的高位为00与80,分别对应0,1。
5.Advanced Import Protection的函数修复:
经过上面分析,现在可以写修复代码了,每个被加密的函数都从call 014F0000进入,在计算过程中某个点,其调用函数名会显示出来,因此我们在这个出口设断取得函数地址。
a情况:
0127B7E9 8945 FC mov dword ptr ss:[ebp-4],eax // [ebp-4]是解密出来的API
0127B819 8B4D FC mov ecx,dword ptr ss:[ebp-4] ; 这里下断,[ebp-4C]就是我们要的函数
b情况:
FF15:
0127A7FC 0145 FC add dword ptr ss:[ebp-4],eax ; [ebp-4]是解密出来的API
0127A7FF EB 01 jmp short 0127A802 ; 这里下断,[ebp-4]就是我们要的函数
FF25:
0127A8AE 0145 FC add dword ptr ss:[ebp-4],eax ; [ebp-4]是解密出来的API
0127A8B1 8D45 0C lea eax,dword ptr ss:[ebp+C] ; 这里下断,[ebp-4]就是我们要的函数
因为是VB的程序,IAT并没有加密,范围从401000到401398。
还记得第4节获得的地址表吧,现在可以用上了,写个补丁程序,扫描这个地址表,依次从表里的每个地址(这些地址都是call 014F0000形式的)进入,然后在0127A7FF或0127A8B1或0127B819这3个出口处获得函数地址,扫描IAT表,将找到的IAT地址写入程序代码中。
016C0000 A1 C0006C01 mov eax,dword ptr ds:[16C00C0] ; 指向待处理的地址列表
016C0005 8B18 mov ebx,dword ptr ds:[eax]
016C0007 81E3 FFFFFF7F and ebx,7FFFFFFF
016C000D FFE3 jmp ebx
016C000F 0000 add byte ptr ds:[eax],al
016C0011 0000 add byte ptr ds:[eax],al
016C0013 0000 add byte ptr ds:[eax],al
016C0015 0000 add byte ptr ds:[eax],al
016C0017 0000 add byte ptr ds:[eax],al
016C0019 0000 add byte ptr ds:[eax],al
016C001B 0000 add byte ptr ds:[eax],al
016C001D 0000 add byte ptr ds:[eax],al
016C001F 0000 add byte ptr ds:[eax],al ; 以下处理b情况
016C0021 BF C0006C01 mov edi,16C00C0 ; 指向需要处理的API地址表
016C0026 8B07 mov eax,dword ptr ds:[edi]
016C0028 8B18 mov ebx,dword ptr ds:[eax]
016C002A 81FB FFFFFF7F cmp ebx,7FFFFFFF
016C0030 79 49 jns short 016C007B ; 高位是1的走这条路线(跳),即处理a方式
016C0032 837D D4 FF cmp dword ptr ss:[ebp-2C],-1 ; 如为-1,导入函数调用是干净
016C0036 74 0F je short 016C0047
016C0038 8B47 04 mov eax,dword ptr ds:[edi+4] ; 存放那些下一句被抽的API的CALL
016C003B 8B1F mov ebx,dword ptr ds:[edi] ; 指向待处理的API列表
016C003D 8B1B mov ebx,dword ptr ds:[ebx]
016C003F 8918 mov dword ptr ds:[eax],ebx
016C0041 83C0 04 add eax,4
016C0044 8947 04 mov dword ptr ds:[edi+4],eax
016C0047 8B5D FC mov ebx,dword ptr ss:[ebp-4] ; ebp-4是获得的API函数地址
016C004A E8 46000000 call 016C0095 ; 在IAT里搜索,正确的IAT项从ESI中返回
016C004F B0 F7 mov al,0F7 ; 决定是ff15还是ff25,不同软件AL的值不同
016C0051 66:B9 FF15 mov cx,15FF
016C0055 3A45 EF cmp al,byte ptr ss:[ebp-11]
016C0058 74 05 je short 016C005F
016C005A 66:81C1 0010 add cx,1000
016C005F 8B07 mov eax,dword ptr ds:[edi] ; 指向待处理的API列表
016C0061 8B18 mov ebx,dword ptr ds:[eax]
016C0063 81E3 FFFFFF7F and ebx,7FFFFFFF ; 将高1位清除
016C0069 83C0 04 add eax,4 ; 指向下一个地址
016C006C 8907 mov dword ptr ds:[edi],eax
016C006E 66:890B mov word ptr ds:[ebx],cx
016C0071 83C3 02 add ebx,2
016C0074 8933 mov dword ptr ds:[ebx],esi
016C0076 ^ EB 88 jmp short 016C0000
016C0078 90 nop
016C0079 90 nop
016C007A 90 nop ; 以下处理a情况
016C007B 8B5D B4 mov ebx,dword ptr ss:[ebp-4C] ; ebp-4c是获得的API函数地址
016C007E E8 12000000 call 016C0095 ; 在IAT里搜索,正确的IAT项从ESI中返回
016C0083 B0 F7 mov al,0F7
016C0085 66:B9 FF15 mov cx,15FF
016C0089 3AC2 cmp al,dl ; dl中的值决定了是call(ff15)还是jmp(ff25)
016C008B ^ 74 D2 je short 016C005F
016C008D ^ EB CB jmp short 016C005A
016C008F 0000 add byte ptr ds:[eax],al
016C0091 0000 add byte ptr ds:[eax],al
016C0093 0000 add byte ptr ds:[eax],al ; 以下这个CALL搜索IAT中的指定项
016C0095 BE 00104000 mov esi,401000 ; IAT起始地址
016C009A 391E cmp dword ptr ds:[esi],ebx
016C009C 74 0D je short 016C00AB
016C009E 83C6 04 add esi,4
016C00A1 81FE 98134000 cmp esi,401398 ; IAT结束地址,判断是否越界
016C00A7 77 03 ja short 016C00AC
016C00A9 ^ EB EF jmp short 016C009A ; 如果在IAT里没找到就死循环
016C00AB C3 retn
016C00AC - EB FE jmp short 016C00AC ; 程序结束又一死循环
016C00AE 0000 add byte ptr ds:[eax],al
A1 C0 00 6C 01 8B 18 81 E3 FF FF FF 7F FF E3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 BF C0 00 6C 01 8B 07 8B 18 81 FB FF FF FF 7F 79 49 83 7D D4 FF 74 0F 8B 47 04 8B 1F 8B 1B 89
18 83 C0 04 89 47 04 8B 5D FC E8 46 00 00 00 B0 F7 66 B9 FF 15 3A 45 EF 74 05 66 81 C1 00 10 8B
07 8B 18 81 E3 FF FF FF 7F 83 C0 04 89 07 66 89 0B 83 C3 02 89 33 EB 88 90 90 90 8B 5D B4 E8 12
00 00 00 B0 F7 66 B9 FF 15 3A C2 74 D2 EB CB 00 00 00 00 00 00 BE 00 10 40 00 39 1E 74 0D 83 C6
04 81 FE 98 13 40 00 77 03 EB EF C3 EB FE 00 00
这样数据窗口的数据为:
016C0000 A1 C0 00 6C 01 8B 18 81 E3 FF FF FF 7F FF E3 00 ±.l?併?
016C0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016C0020 00 BF C0 00 6C 01 8B 07 8B 18 81 FB FF FF FF 7F .坷.l??侞
016C0030 79 49 83 7D D4 FF 74 0F 8B 47 04 8B 1F 8B 1B 89 yI儅?t婫??
016C0040 18 83 C0 04 89 47 04 8B 5D FC E8 46 00 00 00 B0 兝塆媇F...
016C0050 F7 66 B9 FF 15 3A 45 EF 74 05 66 81 C1 00 10 8B 鱢?:E飔f伭.
016C0060 07 8B 18 81 E3 FF FF FF 7F 83 C0 04 89 07 66 89 ?併兝?f
016C0070 0B 83 C3 02 89 33 EB 88 90 90 90 8B 5D B4 E8 12 兠?雸悙悑]磋
016C0080 00 00 00 B0 F7 66 B9 FF 15 3A C2 74 D2 EB CB 00 ...镑f?:聇译?
016C0090 00 00 00 00 00 BE 00 10 40 00 39 1E 74 0D 83 C6 .....?@.9t.兤
016C00A0 04 81 FE 98 13 40 00 77 03 EB EF C3 EB FE 00 00 侢?@.w腼秒?.
016C00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016C00C0 D0 00 6C 01 00 1E 6C 01 00 00 00 00 00 00 00 00 ?l`l........
016C00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
注意:016C00C0&016C00C4的地址需要手工填入值,一个用来指向地址表,一个用来存放下行被偷的API地址。
这里设为:016C00C0 D0 00 6C 01 00 1E 6C 01 00 00 00 00 00 00 00 00 ?l`l........
然后在016C00D0开始粘贴加密地址表的二进制:
016C00D0 92 32 40 00 98 32 40 00 9E 32 40 00 A4 32 40 00 ?@.?@.?@.?@.
016C00E0 AA 32 40 00 B0 32 40 00 B6 32 40 00 BC 32 40 00 ?@.?@.?@.?@.
016C00F0 C2 32 40 00 C8 32 40 00 CE 32 40 00 D4 32 40 00 ?@.?@.?@.?@.
...
016C1DA0 58 D8 4E 00 A9 DC 4E 00 86 DD 4E 00 63 DE 4E 00 X豊.┸N.嗇N.c轓.
016C1DB0 AE E2 4E 00 FA E2 4E 00 3E E3 4E 00 74 E3 4E 00 N.N.>鉔.t鉔.
016C1DC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016C1DD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016C1DE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016C1DF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
016C1E00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
然后下3个函数出口的断点:
he 0127A7FF // b情况,FF15
he 0127A8B1 // b情况,FF25
he 0127B819 // a情况
在第一个地址的call 014F0000处即00403292新建eip,F9运行,遇到硬件断点就运行以下脚本:
mov eip,16C0021
run
地址表里有多少项就多少行,当然少些也没关系,多运行n次。
经过n长的等待,终于提示0000000地址不可读,说明全部修复完毕。
此时Ctrl+G到stolen oep处补上代码,上LordPE选择进程dump。
上ImportREC导出之前保存的IAT表修复。
在数据窗口看到可能被偷下一行代码的API地址:
016C1E00 7A DF 46 00 FC E7 46 00 51 EA 46 00 35 ED 46 00 z逨.F.Q闒.5鞦.
016C1E10 47 ED 46 00 26 EE 46 00 D9 F3 46 00 1E F5 46 00 G鞦.&頕.袤F.鮂.
016C1E20 56 F5 46 00 0B FD 46 00 C4 FD 46 00 1D 0A 47 00 V鮂.鼺.凝F..G.
016C1E30 1C 0C 47 00 14 1D 47 00 2C 2D 47 00 49 34 47 00 .G.G.,-G.I4G.
016C1E40 3C 39 47 00 C0 3A 47 00 D7 C4 4A 00 76 CE 4A 00 <9G.?G.啄J.v蜫.
016C1E50 43 D6 4A 00 51 04 4B 00 EB 69 4B 00 CC A0 4B 00 C諮.QK.雐K.蘝K.
016C1E60 7C B0 4B 00 A1 76 4C 00 63 B0 4C 00 CB CF 4D 00 |癒.L.c癓.讼M.
016C1E70 8B D3 4D 00 89 EE 4D 00 C5 F7 4D 00 E7 01 4E 00 嬘M.夘M.坯M.?N.
016C1E80 3E E3 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 >鉔.............
6.API的下一行的Stolen code:8种情况的Stolen code
只有b情况才对下一行进行stolen code。
第2节分析AIP的分类位置,我们来到b情况处:
0127B4EF E8 64F1FFFF call 0127A658 ; b情况
跟进来到FF15或FF25的分型处:
0127A7DE 8845 CA mov byte ptr ss:[ebp-36],al
0127A7E1 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127A7E4 8A40 4A mov al,byte ptr ds:[eax+4A]
0127A7E7 3A45 EF cmp al,byte ptr ss:[ebp-11] ; al的值决定是FF15还是FF25
0127A7EA 0F85 9C000000 jnz 0127A88C ; 不跳是FF15情况
0127A7F0 EB 01 jmp short 0127A7F3
再往下就是判断是否有偷下一行代码:
0127A969 837D D4 FF cmp dword ptr ss:[ebp-2C],-1 ; 如果为-1,正常,否则有偷下一行
0127A96D 74 33 je short 0127A9A2
0127A96F 8B55 D4 mov edx,dword ptr ss:[ebp-2C]
0127A972 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127A975 E8 AAFCFFFF call 0127A624
0127A97A 8945 D8 mov dword ptr ss:[ebp-28],eax
0127A97D 8D45 D8 lea eax,dword ptr ss:[ebp-28]
0127A980 50 push eax
0127A981 8B45 14 mov eax,dword ptr ss:[ebp+14]
0127A984 50 push eax
0127A985 8B45 10 mov eax,dword ptr ss:[ebp+10]
0127A988 50 push eax
0127A989 8B45 0C mov eax,dword ptr ss:[ebp+C]
0127A98C 50 push eax
0127A98D 8B45 08 mov eax,dword ptr ss:[ebp+8]
0127A990 50 push eax
0127A991 8B4D F8 mov ecx,dword ptr ss:[ebp-8]
0127A994 8B55 F0 mov edx,dword ptr ss:[ebp-10]
0127A997 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0127A99A E8 59000000 call 0127A9F8 ; 这里跟进
0127A99F EB 01 jmp short 0127A9A2
跟进call 0127A9F8进行分类,用了8段代码,模拟8种情况:
第1种:edx+4A的情况,模拟call xxxxxxxx;
第2种:edx+4B的情况,模拟jmp xxxxxxxx:
0127AA9B 8B55 F8 mov edx,dword ptr ss:[ebp-8]
0127AA9E 3A42 4A cmp al,byte ptr ds:[edx+4A] ; 第1种 call xxxxxxxx
0127AAA1 74 0B je short 0127AAAE
0127AAA3 8B55 F8 mov edx,dword ptr ss:[ebp-8]
0127AAA6 3A42 4B cmp al,byte ptr ds:[edx+4B] ; 第2种 jmp xxxxxxxx
0127AAA9 75 3E jnz short 0127AAE9
0127AAAB EB 01 jmp short 0127AAAE
0127AAAE 8B55 F8 mov edx,dword ptr ss:[ebp-8]
0127AAB1 8B9A E0000000 mov ebx,dword ptr ds:[edx+E0]
0127AAB7 035D EC add ebx,dword ptr ss:[ebp-14]
0127AABA 8B55 F8 mov edx,dword ptr ss:[ebp-8]
0127AABD 035A 14 add ebx,dword ptr ds:[edx+14] ; ebx中的值是一个地址,如jmp xxxxx,call xxxxx
0127AAC0 8B55 F8 mov edx,dword ptr ss:[ebp-8]
0127AAC3 3A42 4A cmp al,byte ptr ds:[edx+4A]
0127AAC6 0F85 A6020000 jnz 0127AD72 &n