|
50精币
精易程序内存中运行,问题,EXE大小问题
同样的的源码,通用的编译,不同的大小,为什么大的无法运行啊,已经提示运行成功了,但是不显示窗口,小的就没问题,这是有大小限制吗?大的,小的都没壳,大的只是加了图片资源,一样的代码。
上一天帖子说是壳指针BUG,求更改源码
|
程序_内存中运行EXE | 逻辑型 | | |
欲执行的程序 | 字节集 | | | | 命令行 | 文本型 | | | | 外壳程序路径 | 文本型 | | | | 等待程序运行完毕 | 逻辑型 | | | | 窗口显示方式 | 整数型 | | | | 运行信息 | 精易_进程结构 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | idh | IMAGE_DOS_HEADER | | | inh | IMAGE_NT_HEADERS | | | ish | IMAGE_SECTION_HEADER | | | si | STARTUPINFO | | | context | CONTEXT86 | | | ImageBase | 整数型 | | | i | 整数型 | | | addr | 整数型 | | | lOffset | 整数型 | | | 连续赋值 (0, 运行信息.进程标识符, 运行信息.进程句柄, 运行信息.线程标识符, 运行信息.线程句柄 )如果真 (欲执行的程序 = { })返回 (假)RtlMoveMemory_IMAGE_DOS_HEADER (idh, 欲执行的程序 [1], Len_idh (idh))如果真 (idh.e_magic ≠ 23117 )返回 (假)RtlMoveMemory_IMAGE_NT_HEADERS (inh, 欲执行的程序 [idh.e_lfanew + 1], Len_inh (inh))如果真 (inh.Signature ≠ 17744 )返回 (假)si.cb = 68 如果真 (是否为空 (窗口显示方式 ) = 假 且 窗口显示方式 ≠ 2 且 窗口显示方式 > 0 且 窗口显示方式 ≤ 6 )si.dwFlags = 1 si.wShowWindow = 多项选择 (窗口显示方式, 0, 5, 2, 3, 8, 7 )如果真 (CreateProcessA (0, 选择 (是否为空 (外壳程序路径 ), 取cmd路径 (), 外壳程序路径 ) + 选择 (是否为空 (命令行 ) 或 命令行 = “”, “”, “ ” + 命令行 ), 0, 0, 假, 4, 0, 0, si, 运行信息 ) = 假)返回 (假)context.ContextFlags = 65538如果真 (GetThreadContext (运行信息.线程句柄, context ) = 0 )ClearProcess (运行信息 )返回 (假)ReadProcessMemory (运行信息.进程句柄, context.Ebx + 8, addr, 4, 0)如果真 (addr = 0 )ClearProcess (运行信息 )返回 (假)如果真 (ZwUnmapViewOfSection (运行信息.进程句柄, addr ) = 0 )ClearProcess (运行信息 )返回 (假)ImageBase = VirtualAllocEx (运行信息.进程句柄, inh.OptionalHeader.ImageBase, inh.OptionalHeader.SizeOfImage, 12288, 4)如果真 (ImageBase = 0 )ImageBase = VirtualAllocEx (运行信息.进程句柄, 0, inh.OptionalHeader.SizeOfImage, 12288, 4 )如果真 (ImageBase = 0 )ClearProcess (运行信息 )返回 (假)WriteProcessMemory (运行信息.进程句柄, ImageBase, 欲执行的程序 [1], inh.OptionalHeader.SizeOfHeaders, 0)lOffset = idh.e_lfanew + Len_inh (inh )计次循环首 (inh.FileHeader.NumberOfSections, i )RtlMoveMemory_IMAGE_SECTION_HEADER (ish, 欲执行的程序 [lOffset (i - 1 ) × 40 + 1 ], Len_ish (ish )) 如果真 (ish.PointerToRawData + 1 > 字节集_取长度 (欲执行的程序 )) ClearProcess (运行信息 )返回 (假)WriteProcessMemory (运行信息.进程句柄, ImageBase + ish.VirtualAddress, 欲执行的程序 [ish.PointerToRawData + 1], ish.SizeOfRawData, 0)VirtualProtectEx (运行信息.进程句柄, ImageBase + ish.VirtualAddress, ish.VirtualSize, Protect (ish.characteristics ), addr )计次循环尾 ()WriteProcessMemory_整数35 (运行信息.进程句柄, context.Ebx + 8, ImageBase, 4, 0 )context.Eax = ImageBase + inh.OptionalHeader.AddressOfEntryPoint SetThreadContext (运行信息.线程句柄, context )ResumeThread (运行信息.线程句柄 )如果真 (等待程序运行完毕 )WaitForSingleObject (运行信息.进程句柄, -1 )如果真 (是否为空 (运行信息 )) CloseHandle (运行信息.线程句柄 )CloseHandle (运行信息.进程句柄 )返回 (真)
|
|