Вообщем я не особо горел желанием обсуждать сабж в паблике, но автор попросил сделать адский реверс
Так как у меня времени очень мало, чтобы сделать полный реверс сразу и потом еще все это дело оформить и запостить на форуме
Подумав, решил сделать "свой" формат обзора - назовем его «онлайн-обзор». То есть, как будет появляться свободное время, буду тут отписываться ну и в процессе, вполне возможно, что кто-то захочет высказаться, хотя я уже привык, что в моих "мини-обзорах" обсуждений маловато будет
Но и в процессе возможно автор вообще откажется от реверса - ну скажем, посчитает меня некомпетентным в данной области
Ладно, вытрем сопли и скорее начнем...
Итак накрыт сабж UPX`ом, анпачим и видим вот такой код:
Сразу скажу, что push ebx ; dwData не есть гуд юзать
Дело в том, что некоторые (а может и большинство) крипторов могут после своей инициализации (выделение памяти, мапинг и т.д.) значение этого регистра (обычно они только ентрипоинт в пебе восстанавливают) НЕ восстановить, вследствие чего в регистре ebx может оказаться, ну допустим, значение 0x1000 и стало быть будет падение
И опять-же некоторые личности, не разобравшиеся кто виноват и в чем причина, будут винить криптовальщиков %))) искать врагов и предателей
Как минимум клиентов надо предупреждать о таком "трЭше", либо заставить всех кодеров поддерживающих крипторы, учитывать подобную особенность и восстанавливать значение всех регистров при переходе на ОЕП - ИМХО
Далее переходим к следующей части кода:
Из кода видно, что идет инициализация импорта для ntdll.dll, а lea esi, t_hash (4013F0) указывает на таблицу хэшей
Сразу же после первого сравнения функция GetProcAddressByHash возвращает ноль и вследствие чего происходит прыжок на LEXIT, а там:
call dword ptr [ebp-14h] не был инициализирован и соответственно там в стеке мусор из-за чего и падаем
Сразу возникает мысль, что не может быть такого, чтобы сразу вот так печально все закончилось, может там в самом UPX`е была какая-та проверка, и мы ее просто не заметили
Проверим наши предположения и запустим сабж без отладчика
Мда, видим сабж пал смертью храбрых при этом сообщив, что готов слать баг-репорт ахтунгам из Microsoft
Теперь нам надо понять причину из-за чего падаем
Итак, продолжим нам надо проанализировать код, который находится ниже и понять, что за функции вызываются, смотрим:
Судя по параметрам, помещаемым в стек перед call dword ptr [ebp-10h], очень похоже на вызов функции для выделения памяти
Мы знаем, что хендл модуля у нас ntdll.dll 7C900000, стало быть, это будет ZwAllocateVirtualMemory
Адрес 7C90D4DE и хэш 940959B9 смотрим в таблицу и видим там 82DAFACFh совсем другой хеш
Вследствие чего функция CalcHash считает другой хэш и не найдя соответствия при сравнении в GetProcAddressByHash возвращается 0 и сразу падаем...
Значит у нас вся таблица хэшей "неправильная" придецца ее восстанавливать вручную методом анализа параметров и т.д...
Но об этом уже в следующий раз (обещать не буду, так как все зависит от обстоятельств и желания автора)
Вспомнив, что автор просил адский реверс, я решил быть немного дотошным и.. и...
Судя по коду, написан сабж на MASM32, и если посмотреть на функции GetProcAddressByHash и CalcHash можно предположить что это не копипаст и автор сам их че-то там..
Возникает потребность проверить его на наличие знаний PE-формата (импорт/экспорт)
Возьмем и сделаем рип функций GetProcAddressByHash и CalcHash и создадим асм-файл
Теперь создадим в студии (Microsoft Visual Studio) проект и прямо в него добавляем наш код выше (асм-файл)
Если кто не знал - да-да студия позволяет в C++ проекте компилить ASM код
Это как раз и может являться решающим факторм для начинающих, которые не могут определиться, на чем кодить на FASM или MASM32
А я даже считаю, что вот эта элита подсевших на FASM и похоронила ASM как базовый стержень кодинга и всех основ (ИМХО), но да ладно не будем о холиваре и продолжим
В студии на папке проекта жмем правую кнопку мыши и выбираем в появившемся контекстном меню пункт Custom Build Rules...
И в появившемся окне Visual C++ Custom Build Rule Files нужно создать новое правило и выбрать файл masm.rules
Короче обзор не об этом, так что читаем MSDN, там полностью описано как настроить MASM32
Далее создадим cpp-файл и добавим в него такой код:
Эта строчка определяет прототип нашей функции из асм-файла для того чтобы мы могли ее заюзать в cpp-коде
В результате выполнения данного кода будет возвращен указатель 71AB286E на строку MSWSOCK.AcceptEx, вследствие чего, если попытаться вызвать эту функцию, произойдет падение..
И тут же смотрим, что возвращает GetProcAddress и видим, что 71A378A4 - явно есть различия и стоит подумать над тем, почему такой "косячок" выскакивает...
Для тех, кто НЕ умеет вступать и компилировать, прилагаю для ознакомления трейс-лог:
ЗЫ: Вообщем потом когда время появится, попробую его "оживить" 
Так как у меня времени очень мало, чтобы сделать полный реверс сразу и потом еще все это дело оформить и запостить на форуме
Подумав, решил сделать "свой" формат обзора - назовем его «онлайн-обзор». То есть, как будет появляться свободное время, буду тут отписываться ну и в процессе, вполне возможно, что кто-то захочет высказаться, хотя я уже привык, что в моих "мини-обзорах" обсуждений маловато будет
Но и в процессе возможно автор вообще откажется от реверса - ну скажем, посчитает меня некомпетентным в данной области
Ладно, вытрем сопли и скорее начнем...
Итак накрыт сабж UPX`ом, анпачим и видим вот такой код:
Код:
004016D2 03C E8 A7 3A 00 00 call CreateWindowExA
004016D7 00C 89 45 FC mov [ebp+hWnd], eax
004016DA 00C 33 C9 xor ecx, ecx
004016DC 00C 53 push ebx ; dwData
004016DD 010 68 2C 14 40 00 push offset ResultCallBack ; lpResultCallBack
004016E2 014 51 push ecx ; lParam
004016E3 018 51 push ecx ; wParam
004016E4 01C 6A 10 push 10h ; Msg
004016E6 020 FF 75 FC push [ebp+hWnd] ; hWnd
004016E9 024 E8 96 3A 00 00 call SendMessageCallbackA
Дело в том, что некоторые (а может и большинство) крипторов могут после своей инициализации (выделение памяти, мапинг и т.д.) значение этого регистра (обычно они только ентрипоинт в пебе восстанавливают) НЕ восстановить, вследствие чего в регистре ebx может оказаться, ну допустим, значение 0x1000 и стало быть будет падение
И опять-же некоторые личности, не разобравшиеся кто виноват и в чем причина, будут винить криптовальщиков %))) искать врагов и предателей
Как минимум клиентов надо предупреждать о таком "трЭше", либо заставить всех кодеров поддерживающих крипторы, учитывать подобную особенность и восстанавливать значение всех регистров при переходе на ОЕП - ИМХО
Далее переходим к следующей части кода:
Код:
00401459 0DC 8D 35 F0 13 40 00 lea esi, t_hash
0040145F 0DC 8D 7D F8 lea edi, [ebp-8]
00401462 loc_401462:
00401462 0DC FC cld
00401463 0DC AD lodsd
00401464 0DC 85 C0 test eax, eax
00401466 0DC 74 15 jz short loc_40147D
00401468 0DC 50 push eax
00401469 0E0 FF 73 18 push dword ptr [ebx+18h]; ntdll.dll 7C900000
0040146C 0E4 E8 DF FB FF FF call GetProcAddressByHash
00401471 0DC 85 C0 test eax, eax
00401473 0DC 0F 84 31 02 00 00 jz LEXIT
00401479 0DC FD std
0040147A 0DC AB stosd
0040147B 0DC EB E5 jmp short loc_401462
Код:
004013F0 01 A9 A0 04 t_hash dd 4A0A901h
004013F4 88 F2 19 62 dd 6219F288h
004013F8 CF FA DA 82 dd 82DAFACFh
004013FC E0 44 43 10 dd 104344E0h
00401400 83 A5 DB 38 dd 38DBA583h
00401404 E2 A5 C7 BC dd 0BCC7A5E2h
00401408 44 17 E1 12 dd 12E11744h
0040140C 9F 13 32 93 dd 9332139Fh
00401410 3B C5 99 59 dd 5999C53Bh
00401414 17 36 77 00 dd 773617h
00401418 CE 9C 12 19 dd 19129CCEh
0040141C A2 44 0F C8 dd 0C80F44A2h
00401420 74 F7 14 23 dd 2314F774h
00401424 76 0C C1 F3 dd 0F3C10C76h
00401428 00 00 00 00 dd 0
Код:
004016AA LEXIT:
004016AA 0DC 6A 00 push 0
004016AC 0E0 6A FF push 0FFFFFFFFh
004016AE 0E4 FF 55 EC call dword ptr [ebp-14h]
004016B1 0DC 5F pop edi
004016B2 0D8 5E pop esi
004016B3 0D4 5B pop ebx
004016B4 0D0 C9 leave
004016B5 000 C2 10 00 retn 10h
004016B5 ResultCallBack endp
Сразу возникает мысль, что не может быть такого, чтобы сразу вот так печально все закончилось, может там в самом UPX`е была какая-та проверка, и мы ее просто не заметили
Проверим наши предположения и запустим сабж без отладчика
Мда, видим сабж пал смертью храбрых при этом сообщив, что готов слать баг-репорт ахтунгам из Microsoft
Теперь нам надо понять причину из-за чего падаем
Итак, продолжим нам надо проанализировать код, который находится ниже и понять, что за функции вызываются, смотрим:
Код:
00401492 0DC 33 C9 xor ecx, ecx
00401494 0DC 89 4D B0 mov [ebp+var_50], ecx
00401497 0DC C7 45 AC 00 10 00 00 mov [ebp+var_54], 1000h
0040149E 0DC 6A 04 push 4
004014A0 0E0 68 00 10 00 00 push 1000h
004014A5 0E4 8D 45 AC lea eax, [ebp+var_54]
004014A8 0E4 50 push eax
004014A9 0E8 51 push ecx
004014AA 0EC 8D 45 B0 lea eax, [ebp+var_50]
004014AD 0EC 50 push eax
004014AE 0F0 6A FF push 0FFFFFFFFh
004014B0 0F4 FF 55 F0 call dword ptr [ebp-10h]; 7C90D4DE ntdll.ZwAllocateVirtualMemory 940959B9
004014B3 0DC 85 C0 test eax, eax
004014B5 0DC 74 0B jz short loc_4014C2
004014B7 0DC 3D 00 00 00 80 cmp eax, 80000000h
004014BC 0DC 0F 83 E8 01 00 00 jnb LEXIT
Мы знаем, что хендл модуля у нас ntdll.dll 7C900000, стало быть, это будет ZwAllocateVirtualMemory
Адрес 7C90D4DE и хэш 940959B9 смотрим в таблицу и видим там 82DAFACFh совсем другой хеш
Вследствие чего функция CalcHash считает другой хэш и не найдя соответствия при сравнении в GetProcAddressByHash возвращается 0 и сразу падаем...
Значит у нас вся таблица хэшей "неправильная" придецца ее восстанавливать вручную методом анализа параметров и т.д...
Но об этом уже в следующий раз (обещать не буду, так как все зависит от обстоятельств и желания автора)
Вспомнив, что автор просил адский реверс, я решил быть немного дотошным и.. и...
Судя по коду, написан сабж на MASM32, и если посмотреть на функции GetProcAddressByHash и CalcHash можно предположить что это не копипаст и автор сам их че-то там..
Возникает потребность проверить его на наличие знаний PE-формата (импорт/экспорт)
Возьмем и сделаем рип функций GetProcAddressByHash и CalcHash и создадим асм-файл
Код:
.686
.model flat, stdcall
option casemap:none
include c:\masm32\include\windows.inc
.code
start:
;=======================================
option prologue:none
CalcHash proc szName:DWORD
push ebp
mov ebp, esp
push edx
push esi
xor edx, edx
mov esi, dword ptr [ebp+8]
loc_40103A:
lodsb
test al, al
jz short loc_401048
or al, 21h
xor dl, al
rol edx, 0Bh
jmp short loc_40103A
loc_401048:
mov eax, edx
pop esi
pop edx
leave
retn 4
CalcHash endp
GetProcAddressByHash proc hModule:DWORD, dwHash:DWORD
push ebp
mov ebp, esp
add esp, 0FFFFFFFCh
push ebx
push esi
mov ebx, [ebp+8]
mov eax, dword ptr [ebx+3Ch]
lea eax, [ebx+eax+18h]
lea eax, [eax+60h]
mov eax, [eax]
test eax, eax
jz short loc_4010B7
add eax, ebx
mov [ebp-4], eax
mov esi, [eax+20h]
add esi, ebx
mov ecx, [eax+18h]
test ecx, ecx
jnz short loc_401080
xor eax, eax
jmp short loc_4010B7
loc_401080:
lodsd
add eax, ebx
push eax
call CalcHash
cmp eax, [ebp+0Ch]
jz short loc_401094
loop loc_401080
xor eax, eax
jmp short loc_4010B7
loc_401094:
sub esi, 4
mov eax, [ebp-4]
sub esi, [eax+20h]
sub esi, ebx
shr esi, 1
add esi, ebx
add esi, [eax+24h]
movzx esi, word ptr [esi]
shl esi, 2
add esi, ebx
add esi, [eax+1Ch]
mov esi, [esi]
add esi, ebx
mov eax, esi
loc_4010B7:
pop esi
pop ebx
leave
retn 8
GetProcAddressByHash endp
;=======================================
end start
Если кто не знал - да-да студия позволяет в C++ проекте компилить ASM код
Это как раз и может являться решающим факторм для начинающих, которые не могут определиться, на чем кодить на FASM или MASM32
А я даже считаю, что вот эта элита подсевших на FASM и похоронила ASM как базовый стержень кодинга и всех основ (ИМХО), но да ладно не будем о холиваре и продолжим
В студии на папке проекта жмем правую кнопку мыши и выбираем в появившемся контекстном меню пункт Custom Build Rules...
И в появившемся окне Visual C++ Custom Build Rule Files нужно создать новое правило и выбрать файл masm.rules
Короче обзор не об этом, так что читаем MSDN, там полностью описано как настроить MASM32
Далее создадим cpp-файл и добавим в него такой код:
Код:
#include <windows.h>
#pragma comment(linker, "/entry:main")
extern "C" DWORD GetProcAddressByHash(IN HMODULE hModule, IN DWORD dwHash);
void __cdecl main()
{
//71AB249A AcceptEx 4AC8B966
HMODULE hWsock32 = LoadLibrary("wsock32.dll");
GetProcAddressByHash(hWsock32, 0x4AC8B966);
GetProcAddress(hWsock32, "AcceptEx");
return;
}// end « main »
Код:
extern "C" DWORD GetProcAddressByHash(IN HMODULE hModule, IN DWORD dwHash);
В результате выполнения данного кода будет возвращен указатель 71AB286E на строку MSWSOCK.AcceptEx, вследствие чего, если попытаться вызвать эту функцию, произойдет падение..
И тут же смотрим, что возвращает GetProcAddress и видим, что 71A378A4 - явно есть различия и стоит подумать над тем, почему такой "косячок" выскакивает...
Для тех, кто НЕ умеет вступать и компилировать, прилагаю для ознакомления трейс-лог:
Код:
EAX=00000000 ECX=0013FFB0 EDX=7C90EB94 IMPORT "ntdll.KiFastSystemCallRet" EBX=7FFDF000 EBP=0013FFF0 ESI=FFFFFFFF EDI=7C910738
C:\Templates\MyProject\release\MyProject.exe
004010E3 56 PUSH ESI
004010E4 68 18204000 PUSH 00402018 ASCII "wsock32.dll"
004010E9 FF15 04204000 CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] DS:[00402004]=7C801D77 (kernel32.LoadLibraryA)
EBX=00000000 EBP=0013F9B4 ESI=00000000 EDI=00000000
C:\WINDOWS\system32\ntdll.dll
7C90EB94 C3 RETN
EAX=71AB0000 IMPORT "wsock32.#1139" ECX=7C801BF6 EDX=001A0608 EBX=7FFDF000 EBP=0013FFF0 ESI=FFFFFFFF EDI=7C910738
C:\Templates\MyProject\release\MyProject.exe
004010EF 8BF0 MOV ESI,EAX
ESI=71AB0000 IMPORT "wsock32.#1139"
004010F1 68 66B9C84A PUSH 4AC8B966
004010F6 56 PUSH ESI
004010F7 E8 7AFFFFFF CALL 00401076
00401076 55 PUSH EBP
00401077 8BEC MOV EBP,ESP
EBP=0013FFB0
00401079 83C4 FC ADD ESP,-4
0040107C 53 PUSH EBX
0040107D 56 PUSH ESI
0040107E 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
EBX=71AB0000 IMPORT "wsock32.#1139"
00401081 8B43 3C MOV EAX,DWORD PTR DS:[EBX+3C]
EAX=000000E0
00401084 8D4418 18 LEA EAX,DWORD PTR DS:[EAX+EBX+18]
EAX=71AB00F8
00401088 8D40 60 LEA EAX,DWORD PTR DS:[EAX+60]
EAX=71AB0158
0040108B 8B00 MOV EAX,DWORD PTR DS:[EAX]
EAX=000010CC
0040108D 85C0 TEST EAX,EAX
0040108F 74 4C JE SHORT 004010DD
00401091 03C3 ADD EAX,EBX
EAX=71AB10CC
00401093 8945 FC MOV DWORD PTR SS:[EBP-4],EAX Stack SS:[0013FFAC]=FFFFFFFF
00401096 8B70 20 MOV ESI,DWORD PTR DS:[EAX+20]
ESI=000022CC
00401099 03F3 ADD ESI,EBX
ESI=71AB22CC
0040109B 8B48 18 MOV ECX,DWORD PTR DS:[EAX+18]
ECX=0000004B
0040109E 85C9 TEST ECX,ECX
004010A0 75 04 JNZ SHORT 004010A6
004010A6 AD LODS DWORD PTR DS:[ESI] DS:[ESI]=[71AB22CC]=0000249A
EAX=0000249A ESI=71AB22D0
004010A7 03C3 ADD EAX,EBX
EAX=71AB249A ASCII "AcceptEx"
004010A9 50 PUSH EAX
004010AA E8 A7FFFFFF CALL 00401056
00401056 55 PUSH EBP
00401057 8BEC MOV EBP,ESP
EBP=0013FF98
00401059 52 PUSH EDX
0040105A 56 PUSH ESI
0040105B 33D2 XOR EDX,EDX
EDX=00000000
0040105D 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
ESI=71AB249A ASCII "AcceptEx"
00401060 AC LODS BYTE PTR DS:[ESI] DS:[ESI]=[71AB249A]=41 ('A')
EAX=71AB2441 ESI=71AB249B ASCII "cceptEx"
00401061 84C0 TEST AL,AL
00401063 74 09 JE SHORT 0040106E
00401065 0C 21 OR AL,21
EAX=71AB2461
00401067 32D0 XOR DL,AL
EDX=00000061
00401069 C1C2 0B ROL EDX,0B
EDX=00030800
0040106C EB F2 JMP SHORT 00401060
00401060 AC LODS BYTE PTR DS:[ESI] DS:[ESI]=[71AB249B]=63 ('c')
EAX=71AB2463 ESI=71AB249C ASCII "ceptEx"
00401061 84C0 TEST AL,AL
00401063 74 09 JE SHORT 0040106E
00401065 0C 21 OR AL,21
EAX=71AB2400 EDX=4AC8B966 ESI=71AB24A3 ASCII "EnumProtocolsA"
0040106E 8BC2 MOV EAX,EDX
EAX=4AC8B966
00401070 5E POP ESI
ESI=71AB22D0
00401071 5A POP EDX
EDX=001A0608
00401072 C9 LEAVE
EBP=0013FFB0
00401073 C2 0400 RETN 4
004010AF 3B45 0C CMP EAX,DWORD PTR SS:[EBP+C]
004010B2 74 06 JE SHORT 004010BA
004010BA 83EE 04 SUB ESI,4
ESI=71AB22CC
004010BD 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
EAX=71AB10CC
004010C0 2B70 20 SUB ESI,DWORD PTR DS:[EAX+20]
ESI=71AB0000 IMPORT "wsock32.#1139"
004010C3 2BF3 SUB ESI,EBX
ESI=00000000
004010C5 D1EE SHR ESI,1
004010C7 03F3 ADD ESI,EBX
ESI=71AB0000 IMPORT "wsock32.#1139"
004010C9 0370 24 ADD ESI,DWORD PTR DS:[EAX+24]
ESI=71AB23F8
004010CC 0FB736 MOVZX ESI,WORD PTR DS:[ESI]
ESI=00000474
004010CF C1E6 02 SHL ESI,2
ESI=000011D0
004010D2 03F3 ADD ESI,EBX
ESI=71AB11D0
004010D4 0370 1C ADD ESI,DWORD PTR DS:[EAX+1C]
ESI=71AB22C4 ASCII "n("
004010D7 8B36 MOV ESI,DWORD PTR DS:[ESI]
ESI=0000286E
004010D9 03F3 ADD ESI,EBX
ESI=71AB286E ASCII "MSWSOCK.AcceptEx"
004010DB 8BC6 MOV EAX,ESI
EAX=71AB286E ASCII "MSWSOCK.AcceptEx"
004010DD 5E POP ESI
ESI=71AB0000 IMPORT "wsock32.#1139"
004010DE 5B POP EBX
EBX=7FFDF000
004010DF C9 LEAVE
EBP=0013FFF0
004010E0 C2 0800 RETN 8
===================================================================================
004010FC 68 0C204000 PUSH 0040200C ASCII "AcceptEx"
00401101 56 PUSH ESI
00401102 FF15 00204000 CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] DS:[00402000]=7C80AC28 (kernel32.GetProcAddress)
C:\WINDOWS\system32\kernel32.dll
7C80AC28 8BFF MOV EDI,EDI
7C80AC2A 55 PUSH EBP
7C80AC2B 8BEC MOV EBP,ESP
EBP=0013FFB0
7C80AC2D 51 PUSH ECX
7C80AC2E 51 PUSH ECX
7C80AC2F 53 PUSH EBX
7C80AC30 57 PUSH EDI
7C80AC31 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
EDI=0040200C ASCII "AcceptEx"
7C80AC34 BB FFFF0000 MOV EBX,0FFFF
EBX=0000FFFF
7C80AC39 3BFB CMP EDI,EBX
7C80AC3B 0F86 571C0000 JBE 7C80C898
7C80AC41 57 PUSH EDI
7C80AC42 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
EAX=0013FFA8
7C80AC45 50 PUSH EAX
7C80AC46 FF15 8812807C CALL DWORD PTR DS:[<&ntdll.RtlInitString>] DS:[7C801288]=7C90125C (ntdll.RtlInitString)
EAX=00000000 ECX=00000008 EDX=0013FFA8
7C80AC4C 8D45 0C LEA EAX,DWORD PTR SS:[EBP+C]
EAX=0013FFBC
7C80AC4F 50 PUSH EAX
7C80AC50 6A 00 PUSH 0
7C80AC52 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
EAX=0013FFA8
7C80AC55 50 PUSH EAX
7C80AC56 6A 00 PUSH 0
7C80AC58 FF75 08 PUSH DWORD PTR SS:[EBP+8] Stack SS:[0013FFB8]=71AB0000 (wsock32.#1139)
7C80AC5B E8 C2ECFFFF CALL 7C809922
EAX=71AB0000 IMPORT "wsock32.#1139"
7C80AC60 50 PUSH EAX
7C80AC61 E8 B7FFFFFF CALL <JMP.&ntdll.LdrGetProcedureAddress>
EBX=00000000 EBP=0013FB8C ESI=00000000 EDI=00000000
C:\WINDOWS\system32\ntdll.dll
7C90EB94 C3 RETN
EAX=00000000 ECX=7C919AEB EDX=7C97C0D8 EBX=0000FFFF EBP=0013FFB0 ESI=71AB0000 IMPORT "wsock32.#1139" EDI=0040200C ASCII "AcceptEx"
C:\WINDOWS\system32\kernel32.dll
7C80AC66 85C0 TEST EAX,EAX
7C80AC68 0F8C DE830000 JL 7C81304C
7C80AC6E 6A 00 PUSH 0
7C80AC70 FF75 08 PUSH DWORD PTR SS:[EBP+8] Stack SS:[0013FFB8]=71AB0000 (wsock32.#1139)
7C80AC73 E8 AAECFFFF CALL 7C809922
EAX=71AB0000 IMPORT "wsock32.#1139"
7C80AC78 3945 0C CMP DWORD PTR SS:[EBP+C],EAX Stack SS:[0013FFBC]=71A378A4
7C80AC7B 0F84 12600300 JE 7C840C93
7C80AC81 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
EAX=71A378A4
7C80AC84 5F POP EDI
EDI=7C910738
7C80AC85 5B POP EBX
EBX=7FFDF000
7C80AC86 C9 LEAVE
EBP=0013FFF0
7C80AC87 C2 0800 RETN 8
C:\Templates\MyProject\release\MyProject.exe
00401108 33C0 XOR EAX,EAX
EAX=00000000
0040110A 5E POP ESI
ESI=FFFFFFFF
0040110B C3 RETN