7C99B800 EB 0D jmp short 7C99B80F
7C99B802 FF3424 push dword ptr [esp]
7C99B805 64:8F05 F00F000>pop dword ptr fs:[FF0]
7C99B80C C2 0400 retn 4
7C99B80F 51 push ecx
7C99B810 53 push ebx
7C99B811 52 push edx
7C99B812 57 push edi
7C99B813 81EC 00100000 sub esp, 1000
//
很大的局部空间啊
7C99B819 E8 00000000 call 7C99B81E
//
重定位
7C99B81E 58 pop eax
//
很节约REG,因为eax不用保存啊...
7C99B81F 8BF8 mov edi, eax
7C99B821 B8 3A210015 mov eax, 1500213A
//
应该是编译器生成的,编程的时候一个事个变量什么的
7C99B826 2D C0200015 sub eax, 150020C0
7C99B82B 03F8 add edi, eax
//eax
=7A
//
以前在壳的源码里好像见过,壳用这样的方式来获取自己存在内存中的一些信息.
(汇编里关键的一个技巧),不知道哪位大牛给解释下吧
7C99B82D 57 push edi
//
这样就得到了 7C99B898 ASCII
"C:\Program Files\Micropoint\mp110031.dll"
7C99B82E B8 A1B6807C mov eax, kernel32.GetModuleHandleA
7C99B833 FFD0 call eax
7C99B835 8BD8 mov ebx, eax
7C99B837 83F8 00
cmp
eax, 0
7C99B83A 75 0F jnz short 7C99B84B
7C99B83C 57 push edi
7C99B83D B8 771D807C mov eax, kernel32.LoadLibraryA
//
加载mp110031.dll .加载之后的行为在mp110031.idb中分析DllMain中
7C99B842 FFD0 call eax
7C99B844 8BD8 mov ebx, eax
7C99B846 83F8 00
cmp
eax, 0
7C99B849 74 35 je short 7C99B880
7C99B84B 81C3 D0130000 add ebx, 13D0
//mp110031
.dll加载地址加上13D0 即mp110031_03函数的地址
7C99B851 B9 00100000 mov ecx, 1000
7C99B856 8B440C 28 mov eax, dword ptr [esp+ecx+28]
//
还记得开始分配的局部空间大小是1000h
这个是取以前的参数了(有兴趣的可以往上推,看是哪个参数)
7C99B85A 2BC4 sub eax, esp
7C99B85C 83E8 18 sub eax, 18
7C99B85F 50 push eax
//eax
=0000105C
7C99B860 B9 00100000 mov ecx, 1000
7C99B865 8B440C 14 mov eax, dword ptr [esp+ecx+14]
//
堆栈 ss:[0012F8C0]=7C8842E4 (kernel32.7C8842E4) eax=0000105C
7C99B869 83E8 13 sub eax, 13
7C99B86C FF30 push dword ptr [eax]
//ds
:[7C8842D1]=31010001
7C99B86E B9 00100000 mov ecx, 1000
7C99B873 8D440C 30 lea eax, dword ptr [esp+ecx+30]
7C99B877 0340 EC add eax, dword ptr [eax-14]
//
堆栈 ds:[0012F8C4]=00000010 eax=0012F8D8
7C99B87A 50 push eax
//eax
=0012F8E8
7C99B87B FFD3 call ebx
//
call mp110031_03 继续IDA
7C99B87D 83C4 0C add esp, 0C
7C99B880 64:8B0D 1800000>mov ecx, dword ptr fs:[18]
//fs
:[18]指向TEB
7C99B887 8B49 34 mov ecx, dword ptr [ecx+34]
//TEB
.LastErrorValue
7C99B88A B9 00100000 mov ecx, 1000
//
释放局部空间
7C99B88F 03E1 add esp, ecx
7C99B891 5F pop edi
7C99B892 5A pop edx
7C99B893 5B pop ebx
7C99B894 59 pop ecx
7C99B895 C2 0400 retn 4