首页
社区
课程
招聘
[求助]程序退出的原因
发表于: 2014-7-9 20:30 4337

[求助]程序退出的原因

2014-7-9 20:30
4337
PEID0.95 查得如下: Nullsoft PiMP Install System *

一个17k的scr程序。双击即退出,拿IDA看到有如下代码
int __stdcall start(int a1, int a2, int a3, int a4)
{
   SetLastError(1u);
   v4 = GetModuleHandleA("kernel32.dll");
   SetLastError(2u);
   dword_40400C = (int)GetProcAddress(v4, "LoadLibraryA");
   v14 = __readfsdword(48);
   if ( *(_DWORD *)(v14 + 100) >= 2u )
 {
   dword_404008 = (int (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))GetProcAddress(v4, "VirtualAlloc");
    dword_404004 = (int (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))GetProcAddress(v4, "VirtualProtect");
  ..................
 }
}



已知现在程序在xp sp2下(OD里看到), *(_DWORD *)(v14 + 100)=1
所以if ( *(_DWORD *)(v14 + 100) >= 2u ) 不成立,程序就退出了。
但是我想问下,为什么会退出呢?(win7下不知等于多少,但也退了)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 449
活跃值: (233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
把屏保程序上传上来我帮你分析
2014-7-9 21:18
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
直接这样看,看不出问题么?
2014-7-10 09:51
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我最近在看雪发的帖子很少有人回呢!

是我问问题的方法不对?口气不对?态度不对?
还是我长得太丑?

我自己来回答吧!
v14 = __readfsdword(48);
得到了PEB的地址

0:000> dt _PEB @$peb
ntdll!_PEB
   +0x000 InheritedAddressSpace : 0 ''
   +0x001 ReadImageFileExecOptions : 0 ''
   +0x002 BeingDebugged    : 0x1 ''
   +0x003 BitField         : 0x8 ''
   +0x003 ImageUsesLargePages : 0y0
   +0x003 IsProtectedProcess : 0y0
   +0x003 IsLegacyProcess  : 0y0
   +0x003 IsImageDynamicallyRelocated : 0y1
   +0x003 SkipPatchingUser32Forwarders : 0y0
   +0x003 SpareBits        : 0y000
   +0x004 Mutant           : 0xffffffff
   +0x008 ImageBaseAddress : 0x008f0000
   +0x00c Ldr              : 0x77847880 _PEB_LDR_DATA
   +0x010 ProcessParameters : 0x00311b48 _RTL_USER_PROCESS_PARAMETERS
   +0x014 SubSystemData    : (null)
   +0x018 ProcessHeap      : 0x00310000
   +0x01c FastPebLock      : 0x77847380 _RTL_CRITICAL_SECTION
   +0x020 AtlThunkSListPtr : (null)
   +0x024 IFEOKey          : (null)
   +0x028 CrossProcessFlags : 0
   +0x028 ProcessInJob     : 0y0
   +0x028 ProcessInitializing : 0y0
   +0x028 ProcessUsingVEH  : 0y0
   +0x028 ProcessUsingVCH  : 0y0
   +0x028 ProcessUsingFTH  : 0y0
   +0x028 ReservedBits0    : 0y000000000000000000000000000 (0)
   +0x02c KernelCallbackTable : 0x7603d568
   +0x02c UserSharedInfoPtr : 0x7603d568
   +0x030 SystemReserved   : [1] 0
   +0x034 AtlThunkSListPtr32 : 0
   +0x038 ApiSetMap        : 0x779b0000
   +0x03c TlsExpansionCounter : 0
   +0x040 TlsBitmap        : 0x77847260
   +0x044 TlsBitmapBits    : [2] 0xffffffff
   +0x04c ReadOnlySharedMemoryBase : 0x7f6f0000
   +0x050 HotpatchInformation : (null)
   +0x054 ReadOnlyStaticServerData : 0x7f6f0590  -> (null)
   +0x058 AnsiCodePageData : 0x7ffa0000
   +0x05c OemCodePageData  : 0x7ffa0000
   +0x060 UnicodeCaseTableData : 0x7ffd0024
   +0x064 NumberOfProcessors : 4
   +0x068 NtGlobalFlag     : 0x70
   +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0xffffe86d`079b8000
   +0x078 HeapSegmentReserve : 0x100000
   +0x07c HeapSegmentCommit : 0x2000
   +0x080 HeapDeCommitTotalFreeThreshold : 0x10000
   +0x084 HeapDeCommitFreeBlockThreshold : 0x1000
   +0x088 NumberOfHeaps    : 8
   +0x08c MaximumNumberOfHeaps : 0x10
   +0x090 ProcessHeaps     : 0x77847500  -> 0x00310000
   +0x094 GdiSharedHandleTable : 0x00410000
   +0x098 ProcessStarterHelper : (null)
   +0x09c GdiDCAttributeList : 0x14
   +0x0a0 LoaderLock       : 0x77847340 _RTL_CRITICAL_SECTION
   +0x0a4 OSMajorVersion   : 6
   +0x0a8 OSMinorVersion   : 1
   +0x0ac OSBuildNumber    : 0x1db1
   +0x0ae OSCSDVersion     : 0x100
   +0x0b0 OSPlatformId     : 2
   +0x0b4 ImageSubsystem   : 2
   +0x0b8 ImageSubsystemMajorVersion : 6
   +0x0bc ImageSubsystemMinorVersion : 1
   +0x0c0 ActiveProcessAffinityMask : 0xf
   +0x0c4 GdiHandleBuffer  : [34] 0
   +0x14c PostProcessInitRoutine : (null)
   +0x150 TlsExpansionBitmap : 0x77847268
   +0x154 TlsExpansionBitmapBits : [32] 1
   +0x1d4 SessionId        : 1
   +0x1d8 AppCompatFlags   : _ULARGE_INTEGER 0x0
   +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0
   +0x1e8 pShimData        : (null)
   +0x1ec AppCompatInfo    : (null)
   +0x1f0 CSDVersion       : _UNICODE_STRING "Service Pack 1"
   +0x1f8 ActivationContextData : 0x00040000 _ACTIVATION_CONTEXT_DATA
   +0x1fc ProcessAssemblyStorageMap : 0x00314ee8 _ASSEMBLY_STORAGE_MAP
   +0x200 SystemDefaultActivationContextData : 0x00030000 _ACTIVATION_CONTEXT_DATA
   +0x204 SystemAssemblyStorageMap : 0x00313fe8 _ASSEMBLY_STORAGE_MAP
   +0x208 MinimumStackCommit : 0
   +0x20c FlsCallback      : 0x00315a48 _FLS_CALLBACK_INFO
   +0x210 FlsListHead      : _LIST_ENTRY [ 0x315828 - 0x353ee8 ]
   +0x218 FlsBitmap        : 0x77847270
   +0x21c FlsBitmapBits    : [4] 0x3f
   +0x22c FlsHighIndex     : 5
   +0x230 WerRegistrationData : 0x00220000
   +0x234 WerShipAssertPtr : (null)
   +0x238 pContextData     : 0x00050000
   +0x23c pImageHeaderHash : (null)
   +0x240 TracingFlags     : 0
   +0x240 HeapTracingEnabled : 0y0
   +0x240 CritSecTracingEnabled : 0y0
   +0x240 SpareTracingBits : 0y000000000000000000000000000000 (0)

由上面PEB结构可知
*(_DWORD *)(v14 + 100) 为NumberOfProcessors
由于我的虚拟机只分配有一个Processors。所以程序退出
更改测试:
VM->Setting->Hardware->Number of processors 改为2
VM->Setting->Hardware->Number of cores per processor 1
程序正常运行

接着测试:
VM->Setting->Hardware->Number of processors 改为1
VM->Setting->Hardware->Number of cores per processor 为2
程序正常运行

所以我觉得它写的PEB NumberOfProcessors,但也可以指核心数
2014-7-10 14:53
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
这么丑陋的F5,你还是让我看汇编代码吧,我还是比较习惯那个
2014-7-10 15:12
0
游客
登录 | 注册 方可回帖
返回
//