一个程序,未知壳,脱壳之后修复了 stelon code 之后,发现是标准的VC6程序,F9运行发现会出错,那么就 F8 一步一步走,看看是哪里出错,最后发现
程序在 标准的 VC6 的开头的标准代码中的 msvcrt.__getmainargs 出直接卡死了,
0065A506 |. 50 push eax
0065A507 |. 8D45 A0 lea eax, dword ptr [ebp-60]
0065A50A |. 50 push eax
0065A50B |. FF15 08946600 call dword ptr [<&msvcrt.__getmainargs>] ; MSVCRT.__getmainargs
F7 跟进去之后,发现是在
7C80B508 E8 C8FEFFFF call GetModuleFileNameW
这个函数中调用
7C9331D7 E8 29DEFEFF call RtlEnterCriticalSection
这个函数的时候
7C921005 > 64:8B0D 1800000>mov ecx, dword ptr fs:[18]
7C92100C 8B5424 04 mov edx, dword ptr [esp+4]
7C921010 837A 14 00 cmp dword ptr [edx+14], 0
7C921014 75 4F jnz short 7C921065
7C921016 F0:FF42 04 lock inc dword ptr [edx+4]
7C92101A 75 19 jnz short 7C921035
7C92101A 这句的跳转了,正常的话是不应该跳转的,那么往上看代码,再跟正常的程序做对比,发现 在 7C92100C 8B5424 04 mov edx, dword ptr [esp+4] 这句之后 的
edx 中的地址所指向的值,正常的程序应该是 FFFFFFFF, 而我这里是00000000,那么我把这个位置强行改成 FFFFFFFF 就可以通过了,不会死锁。
想问下高手,这是什么问题造成的? 从来没遇过这种情况。
看函数的字面意思 RtlEnterCriticalSection ,难不成是进入了临界区出不来了?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)