OD载入,忽略所有异常,然后载入出现错误,直接点确定,停在00408061 > /EB 04 jmp short 0040806700408063 |83A4BC CE60EB04>and dword ptr [esp+edi*4+4EB60CE], F>0040806BBC 0411E800 mov esp, 0E81104004080700000add [eax], al004080720081 2C24CAC2 add [ecx+C2CA242C], al0040807841inc ecx
花指令很多,不会搞,直接下断点 HE LoadLibraryA
然后shift+f9运行三次来到7C801D77 >8BFFmov edi, edi7C801D7955pushebp7C801D7A8BECmov ebp, esp7C801D7C837D 08 00cmp dword ptr [ebp+8], 07C801D8053pushebx7C801D8156pushesi7C801D8274 14 jeshort 7C801D98
堆栈窗口显示
第一次0012FF9C 004083EC/CALL 到 LoadLibraryA 来自 UnPackMe.004083E60012FFA0 0040821F\FileName = "USER32.DLL"0012FFA4 7C930738ntdll.7C930738
第二次0012E998 73FBE21F/CALL 到 LoadLibraryA 来自 USP10.73FBE2190012E99C 73FA1850\FileName = "gdi32.dll"0012E9A0 73FA0000USP10.73FA0000
第三次:0012FF9C 003C0470/CALL 到 LoadLibraryA 来自 003C046A0012FFA0 003C00B7\FileName = "USER32.DLL"0012FFA4 7C930738ntdll.7C930738
然后取消断点,alt+f9返回
003C0470BB 25459C9A mov ebx, 9A9C4525003C04758BD0mov edx, eax003C0477E8 0B000000 call003C0487003C047C8985 23CE4100 mov [ebp+41CE23], eax003C0482E9 71020000 jmp 003C06F8
F8单步走,这个跳到了003C06F883C4 E0 add esp, -20003C06FBE8 00000000 call003C0700003C07005Dpop ebp003C070160pushad
然后来到003C07558A95 DDCE4100 mov dl, [ebp+41CEDD]003C075B301439xor [ecx+edi], dl003C075E^ E2 FB loopd short 003C075B003C0760301439xor [ecx+edi], dl; //f4
接着走003C07B98DBC0D 54CE4100 lea edi, [ebp+ecx+41CE54]003C07C0833F 00 cmp dword ptr [edi], 0003C07C3^ 0F85 56FFFFFF jnz 003C071F003C07C98A85 B4CE4100 mov al, [ebp+41CEB4] ; //f4
到这儿的时候堆栈和寄存器中可以看到MFC42.DLL003C081A03F1add esi, ecx003C081C03C1add eax, ecx003C081E50pusheax003C081F03D9add ebx, ecx ; UnPackMe.00400000003C0821FF95 2FCE4100 call[ebp+41CE2F] ; kernel32.LoadLibraryA003C08278BD0mov edx, eax ; MFC42.#1489003C082983FA FF cmp edx, -1003C082C74 49 jeshort 003C0877 ; //这个不跳
然后
003C0857FF95 27CE4100 call[ebp+41CE27]003C085D5Apop edx; MFC42.#1489
这个在寄存器,堆栈中出现函数0012FF3C 73D30000offset MFC42.#14890012FF40 73D98D67MFC42.#4486_CWinApp::OnDDECommand0012FF44 73D30000offset MFC42.#1489
003C08618907mov [edi], eax ; MFC42.#4486_CWinApp::OnDDECommand
这句就把函数给了相应的地址了~~~~003C086E85C0testeax, eax003C08708D1C08lea ebx, [eax+ecx]003C0873^ 75 CE jnz short 003C0843
这里是个循环,然后一直恢复函数给地址了,但是还有些地方没有出现,不知道这个循环出现在那个问题中
接着还有一个循环003C088A^\0F85 77FFFFFF jnz 003C0807003C0890EB 33 jmp short 003C08C5003C089225 73257325 and eax, 25732573
从跟踪的看,是不断取DLL文件,然后再在上面的循环加载函数了
然后来到这个地方,003C08C58D85 ADD64100 lea eax, [ebp+41D6AD]003C08CB870424xchg[esp], eax003C08CEFF95 E1CE4100 call[ebp+41CEE1] ; kernel32.OutputDebugStringA003C08D480BD E9CE4100 00cmp byte ptr [ebp+41CEE9], 0
在003C08C5处的时候信息窗口显示
地址=003C0892, (ASCII "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s")
eax=00402494 (UnPackMe.00402494)
不知道什么意思,看看堆栈0012FF48 003C0892ASCII "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"0012FF4C 003F0FFC0012FF50 FFFA31E50012FF54 00001000
根据这个解释看,应该是把这个字符串给eax,然后跟[ESP]交换了,也就是ESP就变成了乱码,那么就是说到OEP入口的跳转地方,如jmp、retn、push这些加OEP的时候,就会OutputDebugStringA,退出调试器字符串了吧
所以这两句一看就应该是NOP掉的
所以这个地方可以用作这个壳的特征搜索码了:87 04 24 FF 95 E1 CE 41 00 80 BD E9 CE 41 00 00
需要改成87 04 24 FF 95 ?? ?? ?? ?? 80 BD ?? ?? ?? ?? 00
因为[ebp+41CEE1]和byte ptr [ebp+41CEE9]这两个由于不同程序,所以就不一样了
,这样NOP掉后变成了
003C08C58D85 ADD64100 lea eax, [ebp+41D6AD]003C08CB90nop003C08CC90nop003C08CD90nop003C08CE90nop003C08CF90nop003C08D090nop003C08D190nop003C08D290nop003C08D390nop003C08D480BD E9CE4100 0>cmp byte ptr [ebp+41CEE9], 0003C08DB74 77 jeshort 003C0954
继续走
003C08DB /74 77 jeshort 003C0954
003C08DD |EB 34 jmp short 003C0913 ; //又是花指令,跳到不知云深处,跟下去
很变态啊 ,花指令如此之多啊003C09138D85 1DD74100 lea eax, [ebp+41D71D]003C091950pusheax003C091A6A 01 push1003C091C6A 00 push0003C091EFF95 E5CE4100 call[ebp+41CEE5] ; kernel32.CreateMutexA
003C0913这一行显示什么,信息窗口看看
地址=003C0902, (ASCII "ycmoE7cummS9cSMG")
eax=003C0892, (ASCII "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s")
不明白哦,只知道把前面的字母和数字个了EAX,也就是说EAX中不存放%S这些字符了
继续吧
003C09303D B7000000 cmp eax, 0B7
003C093575 1D jnz short 003C0954
跳了003C0954 /E9 DF000000 jmp 003C0A38003C0959 |8B85 EACE4100 mov eax, [ebp+41CEEA]003C095F |8D9D FEDC4100 lea ebx, [ebp+41DCFE]003C0965 |50pusheax
跳向何处???003C0A3880BD CDCE4100 00cmp byte ptr [ebp+41CECD], 0003C0A3F0F84 D9000000 je003C0B1E ; //不跳的哦003C0A458B8D C9CE4100 mov ecx, [ebp+41CEC9]
接着看003C0A8483F8 03 cmp eax, 3003C0A8775 02 jnz short 003C0A8B003C0A89EB 54 jmp short 003C0ADF003C0A8B83F8 0E cmp eax, 0E003C0A8E75 02 jnz short 003C0A92003C0A90EB 4D jmp short 003C0ADF003C0A9283F8 0A cmp eax, 0A003C0A9575 02 jnz short 003C0A99003C0A97EB 46 jmp short 003C0ADF003C0A9983F8 18 cmp eax, 18003C0A9C75 02 jnz short 003C0AA0003C0A9EEB 3F jmp short 003C0ADF003C0AA083F8 10 cmp eax, 10003C0AA375 02 jnz short 003C0AA7003C0AA5EB 38 jmp short 003C0ADF
这几个jnz都没有跳,不管、
003C0AC8^\EB 9D jmp short 003C0A67
003C0ACA8B30mov esi, [eax] ; //f4
有一个循环,F4过003C0B11FFB5 50CE4100 pushdword ptr [ebp+41CE50]003C0B17E8 B5FEFFFF call003C09D1003C0B1C^ EB BF jmp short 003C0ADD ; //这里有一个循环,直接下一行F4003C0B1E^ E9 36FEFFFF jmp 003C0959 ; //这里F4了,网上跳的,跳转比较大,所以不用再F4了
然后003C0B1E跳向了003C09598B85 EACE4100 mov eax, [ebp+41CEEA]003C095F8D9D FEDC4100 lea ebx, [ebp+41DCFE]003C096550pusheax003C0966E8 0E000000 call003C0979003C096B50pusheax; //这个得到一个地址003C096C53pushebx003C096DE8 8EF7FFFF call003C0100003C097283C4 08 add esp, 8003C0975- FF6424 FC jmp [esp-4]; //跳向刚刚上面的地址了003C097960 pushad003C097AEB 04jmp short 003C0980
所以可以搜索的特征码为:FF 64 24 FC 60 EB 04
然后JMP进入后来到009D0000 /EB 04 jmp short 009D0006009D0002 |8182 8241D9EE EB04838>add dword ptr [edx+EED94182], 8C8304>009D000C8C82 DB5C24FC mov [edx+FC245CDB], es009D0012EB 04 jmp short 009D0018
又是花指令了,如果我们单步走过的话,是可以到加的OEP的,也就是被抽取了代码的OEP了,所以这些花指令的地方就是被抽取代码的地方了~~~~~~,还是一步一步把这些代码找到吧
F8单步了!009D0006D9EE fldz009D000EDB5C24 FCfistp dword ptr [esp-4]009D00188B5C24 FCmov ebx, [esp-4]
这几句看看:FLDZ 浮点加载零 ;FISTP 浮点保存整数出栈 ;那么这些就可以看出,[ESP-4]的值先给了00000000,然后再给EBX,也就是ebx==00000000
此时寄存器的数据记下:EAX 00000417ECX 00000000EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 003C0EE3ESP 0012FF48EBP FFFA31E5ESI 00404038 UnPackMe.00404038EDI 00407B90 UnPackMe.00407B90EIP 009D0018
堆栈显示
0012FF44 00000000
0012FF48 003C0051 //记住,这个地方是ESP-4
0012FF4C 003F0FFC
此时ESP显示的数值是0012FF48,然后
继续单步开始分析偷取的代码:
1、009D00226A 00push0; //这里相当于给压入ESP地址了经过这一步后,也就是说把0012FF44压入到ESP中,也就是ESP显示为0012FF44了,可以看寄存器中看到,下面就是分析到底压入了PUSH ****是寄存器中的哪一个!009D002A87DC xchgesp, ebx009D003287EE xchgesi, ebp009D003A93 xchgeax, ebx009D00418930 mov [eax], esi//到这句的时候可以知道,经过交换,已经吧ESP的值给了EAX,也就是此时[EAX]就表示一个地址了,也就是说把ESI的值给了[EAX]这个地址,而此时ESI的值为EBP的值,也就说此时堆栈显示的0012FF44后面的数值就是ESI即开始给出的寄存器中EBP的值,也就可以确定偷取的第一行就是PUSH EBP009D004993 xchgeax, ebx009D005087EE xchgesi, ebp ; UnPackMe.00404038009D005887DC xchgesp, ebx009D006090 nop呵呵后面的三句就是要恢复现场了,O(∩_∩)O哈哈~也就是找到第一句了PUSH EBP
2、009D006750 pusheax //把EAX压栈,占据的地址是0012FF40009D006E53 pushebx //把EBX压栈,占据的地址是0012FF3C,遵循先进后出,地址减4009D007554 pushesp //同样了,ESP占据的是0012FF38009D007C55 pushebp 009D008357 pushedi; UnPackMe.00407B90009D008A56 pushesi; UnPackMe.00404038009D0091FF7424 0Cpushdword ptr [esp+C]到这儿,看看堆栈0012FF2C 00404038UnPackMe.004040380012FF30 00407B90UnPackMe.00407B900012FF34 FFFA31E50012FF38 0012FF3C0012FF3C 000000000012FF40 00000417也就是说PUSH DWORD PTR [ESP+C],此时[ESP]为0012FF2C,那么[ESP+C]就是0012FF38了,信息窗口显示堆栈 ss:[0012FF38]=0012FF3C然后压入堆栈后,给入[ESP+C]的地址就是 0012FF28 0012FF3C继续:009D009B830424 08add dword ptr [esp], 8 //此时的[ESP]的地址处的值+8也就是0012FF44009D00A55D pop ebp; 0012FF44 //这就可以看到了,EBP出栈,给的值就是刚刚入栈的了,就是0012FF44009D00AC83C4 18add esp, 18 //ESP+18的压栈地址就是0012FF2C+18==0012FF44,此时的最外的地址就是012FF244了009D00B590 nop这样完了,分析下这个过程,就是MOV EBP,ESP为什么呢?还记得分析这句前的压栈的地址可以知道0012FF44 FFFA31E50012FF48 003C0051就是0012FF44,也就是那时的ESP的数值为0012FF44,而经过这样折腾,POP出栈时的地址就是0012FF44了,其作用就是如此了故第二句被偷取的就是MOV EBP,ESP
3、009D00C8E8 00000000call009D00CD经这句,此时ESP显示就是EAX 00000417ECX 00000000EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 00000000ESP 0012FF40EBP 0012FF44ESI 00404038 UnPackMe.00404038EDI 00407B90 UnPackMe.00407B90EIP 009D00CD先放着,待会有用,也就是说这个call后,也是单步过后猜的,就是使[ESP]==009D00CD009D00D3812C24 A6B64100sub dword ptr [esp], 41B6A6//009D00CD-41B6A6=005B4A27009D00E0810424 97B64100add dword ptr [esp], 41B697//005B4A27+41B697=009D00BE009D00ED83C4 04add esp, 4//ESP显示就是0012FF44了009D00F68B4424 FCmov eax, [esp-4]//把[ESP-4]也就是009D00BE给EAX了009D01008B00 mov eax, [eax]//此时可以在寄存器中的EAX上数据跟随,得知[EAX]即[009D00BE]=156783AA,就是说EAX在寄存器显示就是156783AA009D0108894424 FCmov [esp-4], eax //麻烦,把156783AA给[ESP-4],即0012FF40了,堆栈看看0012FF40 156783AA0012FF44 FFFA31E5009D0112817424 FC 55836715 xor dword ptr [esp-4], 15678355//[ESP-4]==156783AA xor 15678355==000000FF009D012083EC 04sub esp, 4 //esp-4就是0012FF40了,009D012390 nop这些乱七八糟的分析出来相当于第三行偷取的代码push -1
4、009D0136E8 00000000call009D013B009D013BEB 04jmp short 009D0141同样,此时ESP就是0012FF3C了,其[ESP]==009D013B寄存器显示:EAX 156783AAECX 00000000EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 00000000ESP 0012FF40EBP 0012FF44ESI 00404038 UnPackMe.00404038EDI 00407B90 UnPackMe.00407B90EIP 009D015E继续下面的分析009D0141812C24 26B74100sub dword ptr [esp], 41B726//009D013B-41B726==005B4A15009D014E810424 17B74100add dword ptr [esp], 41B717//005B4A15+41B717==009D012C009D015B83C4 04add esp, 4 //ESP==0012FF40009D0164894424 D8mov [esp-28], eax//ESP-28==12FF18,即12FF18显示EAX的值156783AA009D016E8B4424 FCmov eax, [esp-4] //EAX的值在寄存器中显示009D012C009D01788B00 mov eax, [eax] //009D012C在数据窗口跟随的到[009D012C]=457517B5009D018035 65343545xor eax, 45353465//457517B5xor45353465==004023D0009D018B894424 FCmov [esp-4], eax; UnPackMe.004023D0//怎么样,把004023D0放入0012FF3C009D01958B4424 D8mov eax, [esp-28] //恢复现场,把刚刚EAX的值返回来009D019F83C4 FCadd esp, -4//把ESP定位到地址0012FF3C去009D01A890 nop这些句子就相当于 PUSH 004023D0
5、009D01BBE8 00000000call009D01C0009D01C0EB 04jmp short 009D01C6009D01C6812C24 26B74100sub dword ptr [esp], 41B726009D01D3810424 17B74100add dword ptr [esp], 41B717009D01E083C4 04add esp, 4009D01E9894424 D8mov [esp-28], eax009D01F38B4424 FCmov eax, [esp-4]009D01FD8B00 mov eax, [eax]009D020535 65343545xor eax, 45353465009D0210894424 FCmov [esp-4], eax ; UnPackMe.00401616009D021A8B4424 D8mov eax, [esp-28]009D022483C4 FCadd esp, -4009D022D90 nop跟上面一样了,那么这些就相当与PUSH 004016166、009D022E64:A1 00000000 mov eax, fs:[0]009D023450 pusheax009D023564:8925 00000000 mov fs:[0], esp009D023C83EC 68sub esp, 68009D023F53 pushebx009D024056 pushesi009D024157 pushedi009D02428965 E8mov [ebp-18], esp009D024533DB xor ebx, ebx009D0247895D FCmov [ebp-4], ebx这些就是没有加花指令的,直接偷取了放在这儿二进制为64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 68 53 56 57 89 65 E8 33 DB 89 5D FC
7、009D025CE8 00000000call009D0261009D0261EB 04jmp short 009D0267经过这个,看看寄存器EAX 0012FF5CECX 00000000EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 00000000ESP 0012FEBCEBP 0012FF44ESI 00404038 UnPackMe.00404038EDI 00407B90 UnPackMe.00407B90EIP 009D0267接着分析009D0267812C24 A6B64100sub dword ptr [esp], 41B6A6009D0274810424 97B64100add dword ptr [esp], 41B697009D028183C4 04add esp, 4009D028A8B4424 FCmov eax, [esp-4]009D02948B00 mov eax, [eax]009D029C894424 FCmov [esp-4], eax009D02A6817424 FC 55836715 xor dword ptr [esp-4], 15678355009D02B483EC 04sub esp, 4009D02B790 nop这句分析的结果跟上面一样,相当于偷取的代码为PUSH 00000002
8、009D02B8FF15 7C214000call[40217C] ; msvcrt.__set_app_type009D02BE59 pop ecx009D02BF830D 3C314000 FF ordword ptr [40313C], FFFFFFFF009D02C6830D 40314000 FF ordword ptr [403140], FFFFFFFF009D02CDFF15 78214000call[402178] ; msvcrt.__p__fmode009D02D38B0D 30314000mov ecx, [403130]009D02D98908 mov [eax], ecx009D02DBFF15 74214000call[402174] ; msvcrt.__p__commode009D02E18B0D 2C314000mov ecx, [40312C]009D02E78908 mov [eax], ecx009D02E9A1 70214000mov eax, [402170]009D02EE8B00 mov eax, [eax]009D02F0A3 38314000mov [403138], eax又是全部被偷取的了二进制为FF 15 7C 21 40 00 59 83 0D 3C 31 40 00 FF 83 0D 40 31 40 00 FF FF 15 78 21 40 00 8B 0D 30 31 4000 89 08 FF 15 74 21 40 00 8B 0D 2C 31 40 00 89 08 A1 70 21 40 00 8B 00 A3 38 31 40 00
9、009D0301E8 06000000call009D030C //这个F7009D0306EB 04jmp short 009D030C记下寄存器:EAX 00000000ECX 00000000EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 00000000ESP 0012FEBCEBP 0012FF44ESI 00404038 UnPackMe.00404038EDI 00407B90 UnPackMe.00407B90EIP 009D0312分析代码009D0312FF3424 pushdword ptr [esp] //压栈,同时也把[ESP]存放的值也给了此时压栈后的ESP了009D031B812C24 12B44100sub dword ptr [esp], 41B412009D0328810424 FDB34100add dword ptr [esp], 41B3FD009D0335830424 06add dword ptr [esp], 6009D033F55 pushebp009D034660 pushad//花指令开始009D034D6A 00push0009D035568 0F31C208push8C2310F009D0360FFD4 callesp009D03688BC8 mov ecx, eax009D037C0F31 rdtsc009D03842BC1 sub eax, ecx009D038C66:3D FF0F cmp ax, 0FFF009D03AC2BC0 sub eax, eax009D03B4FD std009D03BB6A 00push0009D03C961 popad//花指令结束,没有什么意义,干扰而已 009D03D08B6C24 04mov ebp, [esp+4]009D03DA8B6D 00 mov ebp, [ebp] ; UnPackMe.00401615009D03E3896C24 04mov [esp+4], ebp009D03ED5D pop ebp009D03F4814424 04 FD000000 add dword ptr [esp+4], 0FD009D0402C3retn009D040990 nop在RETN处,显示的是00401615,也就说,这个retn先到了00401615而00401615C3retn//返回到009D0403那么把花指令撇开,分析得到,先PUSH在RETN,相当于CALL 地址了所以这就相当于偷取了 call 00401615分析如果在这里我们F8单步的话,根本到不了OEP处,为什么呢??因为花指令处有一个垃圾代码rdtsc,就是这个了,如果我们根本不知道有这个垃圾代码的话,我们直接将这行花指令直接NOP掉,一到那个花指令处就NOP掉;如果你跟踪过,也可以这样来,进入这个抽取代码的地方的时候,我们查找地址:009D03D0 直接下断,然后再shift+f9运行,这样也可避开花指令了!如果知道RDTSC是垃圾代码的话,可以直接NOP掉这个就OK,后面的STD也不会出现,其余的分析也就明朗了网上对这两个的分析如下RDTSC 读时间戳计数 rdtsc指令:计算机启动以来的CPU运行周期数放到EDX:EAX里面,EDX是高位,EAX是低位利用 rdtsc 汇编指令可以得到 CPU 内部定时器的值, 每经过一个 CPU 周期, 这个定时器就加一STD 方向设置
10、009D040A391D 50304000cmp [403050], ebx//这也是偷取的了009D041068 04154000push401504009D0415C3 retn然后两句相当于JMP 00401504,这个地址是假的OEP,真正的OEP可以自己算出偷取的字节去找到OEP了
11、00401504 /75 0Cjnz short 0040151200401506 |68 12164000push004016120040150B |FF15 6C214000call[40216C] ; msvcrt.__setusermatherr00401511 |59 pop ecx由于这几句由于上面的代码代码被花指令了,所以一往上翻就会乱了也赋值出来75 0C 68 12 16 40 00 FF 15 6C 21 40 00 59
最后修复为
0040148F55 pushebp004014908BEC mov ebp, esp004014926A FFpush-10040149468 D0234000push004023D00040149968 16164000push00401616 ; jmp 到 msvcrt._except_handler30040149E64:A1 00000000 mov eax, fs:[0]004014A450 pusheax004014A564:8925 00000000 mov fs:[0], esp004014AC83EC 68sub esp, 68004014AF53 pushebx004014B056 pushesi004014B157 pushedi004014B28965 E8mov [ebp-18], esp004014B533DB xor ebx, ebx004014B7895D FCmov [ebp-4], ebx004014BA6A 02push2004014BCFF15 7C214000call[40217C] ; msvcrt.__set_app_type004014C259 pop ecx004014C3830D 3C314000 FF ordword ptr [40313C], FFFFFFFF004014CA830D 40314000 FF ordword ptr [403140], FFFFFFFF004014D1FF15 78214000call[402178] ; msvcrt.__p__fmode004014D78B0D 30314000mov ecx, [403130]004014DD8908 mov [eax], ecx004014DFFF15 74214000call[402174] ; msvcrt.__p__commode004014E58B0D 2C314000mov ecx, [40312C]004014EB8908 mov [eax], ecx004014EDA1 70214000mov eax, [402170]004014F28B00 mov eax, [eax]004014F4A3 38314000mov [403138], eax004014F9E8 17010000 call00401615004014FE391D 50304000cmp [403050], ebx二进制代码:55 8B EC 6A FF 68 D0 23 40 00 68 16 16 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 6853 56 57 89 65 E8 33 DB 89 5D FC 6A 02 FF 15 7C 21 40 00 59 83 0D 3C 31 40 00 FF 83 0D 40 31 4000 FF FF 15 78 21 40 00 8B 0D 30 31 40 00 89 08 FF 15 74 21 40 00 8B 0D 2C 31 40 00 89 08 A1 7021 40 00 8B 00 A3 38 31 40 00 E8 17 01 00 00 39 1D 50 30 40 00
用ImpREC修复的时候,OEP:148FRVA:2000大小:1C4
修复后可以正常运行
然后再用LordPE进行减肥,将PUNiSHER这个区段删除,就可以达到只有二十几K了
dumped_减肥1225184618046.rar |